程序设计语言
计算机要通过程序或指令控制才能完成各种任务
- 人域机器交换信息的余元
阶段:
- 机器语言(低级语言)
- 二进制指令代码,直观性差,容易出错,计算机直接执行
- 汇编语言(低级语言)
- 用简单的符号代替部分指令,推广移植困难,需要经过汇编程序转化后执行
- 高级语言(Java、Python、GoLang...)
- 更符合人的思维,易读易记,便于推广,有解释和编译两种执行方式
高级程序设计语言划分
从客观系统描述划分:
-
面向过程语言:
-
命令式语言:
FORTRAN、ALGOL、COBOL、C和Pascal等
-
结构化语言(也属于命令式):
C、Pascal等
-
函数式语言:
Lisp等
-
逻辑式编程语言:
Prolog等
-
-
面向对象语言:
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+)
- 程序使用后缀表达式,通过栈来进行存储
-
将中缀表达式(a-b)*(c+5)转为后缀表达式
-
abcd未知项按照顺序照抄,顺序不能变
-
看运算顺序的符号,再依次照抄
-
例如第一步肯定先算a-b那么转换后就是:ab-
-
第二步是算c+5,转换后是:c5+
-
第三步是*法,将上两步的结果按顺序照抄
ab-c5+
最后跟上 *
-
-
结果:
ab-c5+*
-
-
后中缀表达式ab-c5+*转为中缀表达式
程序通过栈存储来解析后缀表达式,当出现多个未知数存储栈中时,若放入一个符号会进行一次相应符号的计算。最后得出的结果再存入栈中

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


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

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

文字描述:无论未知项,看到符号将前两位数据先保留计算,然后一步步拼接
ab-
- 看作a-b
c5+
- 看作c+5
- 看作(a-b)*(c+5)
无执行,结果就是:(a-b)*(c+5)
考点例题:
算术表达式采用后缀式表示时不需要使用括号,使用()就可以方便地进行求值。a-b*(c+d)的后缀式为 ()。
A、队列
B、数组
C、栈
D、广义表
A、abcd-*+
C、ab-c*d+
B、abcd*±
D、abcd+*-
第一空:C;
第二空:
- 先看第一步:c+d转换后-》cd+
- 第二步:cd+*
- 第三步: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
🕵️🤯软考:程序员专栏前瞻
- 【软考:程序员(01)】如何考得程序员证书?本片知识点:操作系统基本概念、操作系统的分类、进程管理、三态模型、信号量机制、同步与互斥模型
- 【软考:程序员(02)】如何考得程序员证书?本片知识点:5种存储管理概念;页面置换算法、分页存储地址转换问题;4种磁盘调度算法、设备分类;
- 【软考:程序员(03)】如何考得程序员证书?本片知识点:文件目录、目录结构、文件路径、文件命名规则、系统安全、用户权限、作业调度、用户界面
💕👉博客专栏
- 21世纪新兴技术:区块链!从基础到智能合约全面了解区块链是什么!
- SpringCloud微服务-从Spring出发学习从0学习微服务!
- Golang专栏-包含基础、Gin、Goam等知识
- 云原生专栏-包含k8s、docker等知识
- 从0开始学习云计算-华为HCIP证书
- JUC专栏-带你快速领悟JUC的知识!
- JVM专栏-深入Java虚拟机,理解JVM的原理
- 基于Java研究 数据结构与算法-包含贪心算法、加权图、最短路径算法等知识
- Docker专栏-上手热门容器技术Docker
- SpringBoot专栏-学习SpringBoot快速开发后端
- 项目管理工具的学习-设计技术:Maven、Git、Gradle等相关管理工具
- JavaSE-全面了解Java基础
- JS专栏-使用JS作的一部分实例~
- 使用CSS所作的一部分案例