c语言程序设计知识点总结 01
《c语言程序设计》课程学了些什么?
(1)、程序设计语言的基本知识 字母表,标识符,关键字/保留字,数据相概念关的概念(数据类型、数据结构、数据模型),对数据处理相关的概念(算法、架构)
常量、变量、数据类型、运算符、表达式、优先级、结合性、类型转换、语句、控制流、函数、数组、指针、结构体、共用体、文件、数据结构、算法。
(2)利用c语言进行程序设计
c程序开发过程、常见算法设计、库函数的使用、程序设计风格养成、模块化程序设计、软件工程工具与思想。
c程序基本结构:
1、由一个或多个函数构成
2、这些函数分布在一个或多个文件中。
3、每个文件称为一个可编译单元。
4、每个c程序都有且仅有一个main函数
5、main函数是程序的入口,它直接或间接地调用其他函数来完成功能。
6、函数的基本结构:
返回类型 函数名(形式参数列表)
{
数据定义;
数据加工处理;
return 返回值;
}
7、c程序结构中的其它成分:注释,头文件,编译预处理。
函数的分类:
1、库函数:由系统提供,经过精心编写和反复测试及使用,可靠而安全,推荐多使用。
2、用户自定义函数:用户自己编写的函数。
3、main函数:每一个c程序都有且仅有一个。
常量(Constant):
在程序执行过程中不发生变化的量。常量可分为字面常量、符号常量和常变量三种形式。
字面常量:直接写出其值的常量。如:32,3.1415,‘a’ 等。
符号常量:给字面常量命名。如:#define PI 3.1415
常变量:用const关键字修饰的变量,只允许赋值一次。const int x = 0x10;
变量(Variable):
在程序执行过程中会发生变化的量。变量是内存中若干个连续的存储单元的抽象。无论常量还是变量都有相应的数据类型。
数据类型(Data Type) :
1. 在内存中占几个连续的存储单元。(取值的范围)
2. 以什么样的存储格式存储。
3. 允许执行什么样的操作。(允许的操作)
C语言中提供了sizeof运算符来测试某种类型所占的字节数。
注意:sizeof可作用于常量、变量或数据类型。
C程序设计语言中提供的数据类型:基本数据类型、构造数据类型
基本数据类型:整型,浮点型,字符型,空类型,枚举型等。
构造数据类型:指针,数组,结构体,共用体,文件等。
整型:
-
采用补码表示,能精确表示与运算。
-
取值范围与溢出问题。
-
整型常量的书写:前缀:0,0x,0X,后缀:l或L。
-
整型变量:short,int,long。
-
分为带符号整数signed和无符号整数unsigned。
-
数据类型与平台相关。
浮点型:
-
采用IEEE754标准存储表示,不能精确表示与运算。
-
取值范围与溢出问题。
-
浮点型常量的书写:十进制与十六进制形式,指数形式。
-
浮点型变量:float,double。
-
浮点型常量:默认为double。
字符型:
-
英文采用8位ASCII编码,汉字采用16位内码。
牢记:‘0’——30H,‘A’——41H,‘a’——61H -
字符间的比较本质是ASCII码间的比较。
-
字符常量的书写与转义字符。
(1) ‘A’ , ‘a’,‘?’
(2) ‘\ddd’ (最多三位八进制数书写的ASCII码)
(3) ‘\xhh’ (最多两位十六进制数书写的ASCII码)
(4) ‘\n’ (转义字符)
转义字符形式 意 义
\n 换行
\t 水平制表
\v 垂直制表
\b 退格
\r 回车
\f 走纸换页
\a 报警(如铃声)
\\ 反斜杠
\? 问号
\“ 双撇号
\’ 单撇号
\ddd 1~3位八进制常数
\xhh 1~2位十六进制常数
运算符(Operator):
代表计算机完成某种基本操作的符号。如:+(加),-(减),*(乘),/(除)等。
表达式(Expression):
将常量、变量和函数调用通过各种运算符和圆括号组织在一起,具有唯一确定值
(某种类型)的式子。单独的常量、变量和函数调用都是表达式。
如:a + b,a > b,3 * (x – y )/ 2,sin(x) / 2等。
优先级(Precedence):
当一个表达式中有多个运算符时,先算谁,后算谁。如 3 + 2 / 4 – 5 * 6。
结合性(Associativity):
当一个表达式中有多个优先级相同的运算符时,是由左向右算还是由右向左算。
如 3 + 2 – 5,a = b = c = 3。
运算符的优先级与结合性:
Operator Associativity
() [] -> . left to right
! ~ ++ -- + - * & (type) sizeof right to left
* / % left to right
+ - left to right
<< >> left to right
< <= > >= left to right
== != left to right
& left to right
^ left to right
| left to right
&& left to right
|| left to right
?: right to left
= += -= *= /= %= &= ^= |= <<= >>= right to left
, left to right
常见的运算符:
算术运算符: +,-,*,/,%,++,--
关系运算符: >,>=,<,<=,==,!=
赋值运算符: =,op=
逻辑运算符: &&,||,!,&,|
位运算符: &,|,~,<<,>>,^
其它运算符:(类型) , ?: () [ ] . -> sizeof * &
算术运算符:
+ :加法或正号
- :减法或负号
* :乘法
/ :除法 (两数都是整数时做整除,否则做实数除法)
% : 求余数(两数必须是整数,结果符号与第一个数相同,数值为两数绝对值做求余)
++ :自加1(只能对变量操作,分为前++和后++)
-- :自减1 (只能对变量操作,分为前--和后--)
(前++:先加1,再用变量的值;后++:先用变量的值,再加1)
关系运算符:
> :大于
>= :大于等于或不小于
< :小于
<= :小于等于或不大于
== :等于(=是赋值运算符,不是等于符)
!= :不等于
注意:1. 有两个符号构成的运算符中间不能加空格,如!=不能写成! =。
2. 关系运算的结果为:1(逻辑真) 0(逻辑假)
赋值运算符:
= :简单赋值
op= :复合赋值(op和=之间不能加空格)
注意:1. op可以为+,-,*,/,%,<<,>>,&,|,^之一。
2. 赋值号左端必须为代表内存单元的变量。
3. 赋值号右端为表达式。
4. i *= 3 + 2含义是 i = i * (3 + 2)而不是i = i * 3 + 2。
5. a = b = c = 3;从右向左算。
逻辑运算符:
&& :逻辑短路与 || :逻辑短路或
! :逻辑非 & :逻辑与
| :逻辑或
注意:1. exp1 && exp2,如果exp1已经确定为假,则不再计算exp2。exp1 || exp2,如果exp1已经确定为真,则不再计算exp2。
2. exp1 & exp2,无论exp1为真为假,均要计算exp2。exp1 | exp2,无论exp1为真为假,均要计算exp2。
3. C语言中任何非0值表示逻辑真,0值表示逻辑假。
位运算符:
& :按位与 (常用于将某些位清0)
| :按位或(常用于将某些位置1)
^ :按位异或(常用于将某些位取反)
~ :按位取反
<< :左移右补0
>> :右移补符号位
注意:先将参与运算的两操作数转换为二进制再逐位运算。
其它运算符:
(类型) :强制类型转换
, :逗号运算符,从左向右算,表达式的值为最右边的那个表达式的值
?: :条件运算符(三目运算符)
() :函数调用
[ ] :数组下标引用
. :结构体成员引用
-> * & :指针引用相关
sizeof :测试数据或类型在内存中所占的字节数
注意:exp1 ? exp2 :exp3,整个是一个表达式,其值为:如果exp1的值为真,则为exp2
的值,否则为exp3的值。
流程控制三种基本结构:顺序、选择、循环。
顺序结构:
空语句:
仅由单独的分号构成: ;
空语句含义为什么也不做。
复合语句:
用{和}将若干条语句括起来,逻辑上当成一条语句,
称为复合语句。{ 语句1;…,语句n}
表达式语句:
单独的表达式加上分号: 表达式;
函数调用语句:
单独的函数调用加上分号: 函数名(实在参数);
赋值语句:
1. 变量名 = 表达式;2. 变量名 op= 表达式;
将右边表达式的值赋予左边的变量。
return语句:
返回函数的值。 return 返回值;
选择结构:
//双分支if语句:
格式1: if (条件表达式)
语句1;
语句逻辑:当条件表达式为真(非0)时,做语句1,否则不做。
格式2: if (条件表达式)
语句1;
else
语句2;
语句逻辑:当条件表达式为真(非0)时,做语句1,否则做语句2。
//多分支switch语句:
格式: switch (整型表达式){
case 常量表达式1:
语句序列1
break;
case 常量表达式2:
语句序列2
break;
…
case 常量表达式n:
语句序列n
break;
default:
语句序列n+1
}
语句逻辑:计算整型表达式的值,与常量表达式1到n匹配,若与某个匹配,则执行对应的语句序列,若没有匹配的,则执行语句序列n+1。在执行过程中遇到break则退出switch语句,否则不再匹配,顺序往下执行,直到退出为止。
//if语句的嵌套:
含义: if语句中的语句又含有if语句。
格式: if (条件表达式1)
语句1;
else if (条件表达式2)
语句2;
else
语句3;
语句逻辑:从后向前,else只和相邻的还未配对的if配对。
循环结构:
//循环结构:
while循环语句:
格式1: while (条件表达式)
循环体语句序列;
语句逻辑:当条件表达式为真(非0)时,做一次循环体语句序列,然后再次检测条件表达式的值,直到条件表达式的值为假时退出该循环。
//do while循环语句:
格式 : do {
循环体语句序列;
} while (条件表达式);
语句逻辑:先做一次循环体语句序列,然后检测条件表达式的值是否为真,如果为真,继续做循环体,直到条件表达式的值为假时退出该循环。
//for循环语句:
格式 : for (exp1; exp2; exp3)
循环体语句序列;
语句逻辑:先做一次exp1,然后检测exp2的值是否为真,如果为真,做一次循环体,然后做一次exp3,然后再次检测exp2的值,直到exp2的值为假时退出。
等价于: exp1;
while (exp2) {
循环体语句序列;
exp3;
}
注意:1. 三个表达式均可省略,但分号不能省略。
2. for (; ; )含义等价于while (1),为永真循环。
3. exp1称为初始条件;exp2称为结束条件;exp3称为步进条件。
break语句:含义:退出当前的这一层循环语句或switch语句。
continue语句:含义:跳过当前的这一层循环体中后面的语句,直接进入下一次循环。
函数(function):
一段代码构成的模块。它对输入的数据(称为参数)进行处理,产生想要的输出(称为返回值)。对函数的调用通过函数名进行。
使用函数的优点:便于模块化设计;便于软件重用。
//函数的结构与定义(definition):
返回值类型 函数名(形式参数)
{
数据定义语句;
数据处理语句;
return 返回值;
}
//函数声明(declartion):
如果在定义之前使用函数或者使用别的编译单元中的函数,则必须先声明(告诉编译器函数的返回值类型,函数名和参数信息,以便进行编译检查)。
如果函数在使用之前已经定义,则无需声明。
//函数的调用(call):
语法格式: 函数名(实在参数)
注意:实在参数与形式参数必须在个数和类型等方面对应一致。
//参数传递:
将实在参数传递给形式参数的过程称为参数传递。
形式参数:在定义函数时的参数,简称形参。
实在参数:在调用函数时的参数,简称实参。
参数传递方法:
1. 传值:将实参的值传给形参,然后两者无任何瓜葛。
2. 传地址:将实参的地址传给形参,对形参的任何修改就是对实参的修改。两者合二为一。
注意:C语言在传递参数时是从右向左计算参数的值。