【软考:程序员(04)】如何考得程序员证书?本片知识点:常见的程序设计语言;语言的构成;前中后缀表达式类型余转换规则;程序语言中的传值与传址;

程序设计语言

计算机要通过程序或指令控制才能完成各种任务

  • 人域机器交换信息的余元

阶段:

  1. 机器语言(低级语言)
    • 二进制指令代码,直观性差,容易出错,计算机直接执行
  2. 汇编语言(低级语言)
    • 用简单的符号代替部分指令,推广移植困难,需要经过汇编程序转化后执行
  3. 高级语言(Java、Python、GoLang...)
    • 更符合人的思维,易读易记,便于推广,有解释和编译两种执行方式

高级程序设计语言划分

从客观系统描述划分:

  1. 面向过程语言:

    • 命令式语言:

      FORTRAN、ALGOL、COBOL、C和Pascal等

    • 结构化语言(也属于命令式):

      C、Pascal等

    • 函数式语言:

      Lisp等

    • 逻辑式编程语言:

      Prolog等

  2. 面向对象语言:

    PHP、Delphi、Java、C++、Smalltalk、Python、C#等

从程序执行角度划分

编程类程序设计语言:

  • C、C++、Delphi、Java等

解释类程序设计语言:

  • Python、PHP、Ruby、javaScript等

脚本语言:(解释执行)

  • JavaScript为客户端脚本语言
  • Python、PHP、Ruby为服务器端脚本语言

常见的高级程序语言

Fortran语言:

  • 第一个高级程序设计语言,用于并行计算、科学计算和高性能计算

Lisp语言:

  • 函数式程序语言,符号处理,人工智能

PROLOG:

  • 逻辑式语言,建造专家系统、自然语言理解、智能知识库等

SQL:

  • 结构化查询语言,特殊目的的编程语言,用于查询、更新和管理关系数据库

通用的程序设计语言

通用的程序设计语言:C、C#、C++、JAVA、PHP、Python和JavaScript等。

编程语言 特点
C语言 通用、结构化程序设计语言,简洁、丰富可移植,能访问操作系统和底层硬件
C#语言 面向对象,运行于.NETframework的高级语言
C++语言 C语言基础上增加了类机制,面向对象,高效
Java语言 面向对象,跨平台,通用的程序设计语言
PHP 服务器端执行、嵌入HTML文档的脚本语言,制作动态网页
Python 面向对象,解释型程序设计语言,通用的脚本语言
JavaScript语言 脚本语言,为网页添加动态功能

标记语言

非编程语言,不包含任何逻辑和算法

非编程语言 说明
HTML 超文本标记语言
XML 可扩展标记语言
XHTML 扩展的超文本标记语言

程序设计语言的构成

成分 说明
数据成分 常量、变量、全局量、局部量以及数据类型
运算成分 程序语言允许使用的运算符号及运算规则
控制成分 顺序结构、选择结构、循环结构

表达式

表达式的类型及转换规则

前缀表达式(+ab)

中缀表达式(a+b)

*后缀表达式(ab+)

  • 程序使用后缀表达式,通过栈来进行存储
  1. 将中缀表达式(a-b)*(c+5)转为后缀表达式

    1. abcd未知项按照顺序照抄,顺序不能变

    2. 看运算顺序的符号,再依次照抄

      1. 例如第一步肯定先算a-b那么转换后就是:ab-

      2. 第二步是算c+5,转换后是:c5+

      3. 第三步是*法,将上两步的结果按顺序照抄

        ab-c5+

        最后跟上 *

    3. 结果:

      ab-c5+*

  2. 后中缀表达式ab-c5+*转为中缀表达式

    程序通过栈存储来解析后缀表达式,当出现多个未知数存储栈中时,若放入一个符号会进行一次相应符号的计算。最后得出的结果再存入栈中

放入-时,执行表达式:a-b = 得出x再存储栈内

然后再放入c和5两个未知项,最后放入符号+进行第二次运算

最后的最后,放入符号*完成最后的运算

文字描述:无论未知项,看到符号将前两位数据先保留计算,然后一步步拼接

  1. ab-

    • 看作a-b
  2. c5+

    • 看作c+5
    • 看作(a-b)*(c+5)
  3. 无执行,结果就是:(a-b)*(c+5)

考点例题:

算术表达式采用后缀式表示时不需要使用括号,使用()就可以方便地进行求值。a-b*(c+d)的后缀式为 ()。

A、队列

B、数组

C、栈

D、广义表

A、abcd-*+

C、ab-c*d+

B、abcd*±

D、abcd+*-

第一空:C;

第二空:

  1. 先看第一步:c+d转换后-》cd+
  2. 第二步:cd+*
  3. 第三步:abcd+*-

牢记,未知项顺序不能变,再看符号运行顺序

传值和传址调用

数据类型

数据值是否改变:

  • 常量:只有右值,值不能改变
  • 变量:有左值和右值,值可以改变

作用域:

  • 全局变量:存储空间一般不变
  • 局部变量:存储空间动态变化

数据类型:

  • 基本类型:int/char/float/double/bool
  • 特殊类型:void
  • 用户定义类型:enum
  • 构造类型:数组/结构/联合
  • 指针类型:type*
  • 抽象数据类型:类类型

传值的传址的调用

go 复制代码
func main(){
    a := 5
    b := 3
    // (a,b)------实参
    c = FunctionExample(a,b)
}
/**
func 为定义类型关键字
:int 为返回值类型
FunctionExample 为方法名-过程名
(x int,y float32 y) 形式参数列表

{
...		过程体------代码块
}
*/
func FunctionExample (x int,y float32 y):int {
    return 0;
}
传递方式 主要特点
传值调用 形参取的是实参的值,形参的改变不会导致调用点所传的实参的值发生改变
引用(传址)调用 形参取的是实参的地址,即相当于实参存储单元的地址引用,因此其值的改变同时就改变了实参的值 参数的左值为地址,右值为具体的值

测试一:传值

go 复制代码
func main() {
	// 主函数
	var x int32 = 3
	var y int32 = 4
	swap(x, y)
	fmt.Println("x =", x, "y =", y)// x = 3 y = 4
}
func swap(x, y int32) {
	var t int32
	t = x
	x = y
	y = t
	fmt.Println("x =", x, "y =", y)// x = 4 y = 3
}

方法内部改变不会更改实参的值,因为并没有更改最底层的变量地址

测试二:传址

go 复制代码
func main() {
	// 主函数
	var x int32 = 3
	var y int32 = 4
	swap(&x, &y)
	fmt.Println("x =", x, "y =", y)// x = 4 y = 3
}
func swap(x, y *int32) {
	var c int32
	var t = &c
	*t = *x
	*x = *y
	*y = *t
	fmt.Println("x =", *x, "y =", *y)// x = 4 y = 3
}

原本方法内部不会更改实参值,但是!

  • 这里传参时,传入的是指针指向的地址,所以方法内部直接操作的就是实参的底层变量地址,这会更改实参的内容

例题:

程序语言提供的传值调用机制是将( )。

A、实参的值传递给被调用函数的形参

B、实参的地址传递给被调用函数的形参

C、形参的值传递给被调用函数的实参

D、形参的地址传递给被调用函数的实参

答案:A

B选项:

  • 实参的地址传入可以说是:值传递亦可以说是引用调用
  • 与题目的传值调用不符合,所以×

C和D选项:

  • 形参是指被调用函数的变量,前后说反了。所以×

题2

函数fun1()、fun2()的定义如下所示,已知调用fun1时传递给形参x的值是-5)若以引用调用(call by reference)的方式调用fun2,则函数fun1的返回值为();若以值调用(call by value)的方式调用fun2,则函数fun1的返回值为()

A、-18

B、-11

C、-8

D、0

go 复制代码
package main

import "fmt"

func main() {
	fmt.Println(fun1(-5))
}

func fun1(x int) int {
	a := x - 1
	x = fun2(a)
	return a - x
}

func fun2(x int) int {
	x = x + 10
	return 3 * x
}

第一空:C

  • 使用引用传递,会改变根本地址,所以经过计算就得-8

第二空:A

  • 使用值调用,不会改变根本地址,所以经过计算就得-18

🕵️🤯软考:程序员专栏前瞻

💕👉博客专栏

相关推荐
氦客3 天前
UI编程的发展史 : 结合命令式UI和声明式UI
android·compose·声明式ui·ui编程·命令式ui·ui编程发展史·标记语言
YSD_DESIGN3 天前
重庆四代宅设计:美学实践与案例分享
设计语言
aitoolhub13 天前
AI在线设计中的Prompt技巧:如何让输出更精准
人工智能·计算机视觉·prompt·aigc·语义分割·设计语言
aitoolhub19 天前
AI视频生成:核心技术框架与工作逻辑
人工智能·计算机视觉·aigc·音视频·设计语言
2501_9427095821 天前
专业的太原门头设计制作哪家好
设计语言
aitoolhub24 天前
生成式AI设计:效率提升与创意平衡之道
人工智能·深度学习·自然语言处理·aigc·设计语言
WizLC24 天前
【后端】面向对象编程是什么(附加几个通用小实例项目)
java·服务器·后端·python·设计语言
aitoolhub25 天前
H5设计实战技巧:从视觉到交互,打造高转化用户体验
自然语言处理·交互·ux·设计语言
ysdysyn1 个月前
CAM:制造的“自动翻译官”——将设计语言转化为机器指令的魔术师
系统架构·制造·设计语言·cam