《程序设计基础C语言知识点总结》打印版计算机考研复习冲刺期末考试准备计算机考级计算机二级.docx
- 文档编号:14628658
- 上传时间:2023-06-25
- 格式:DOCX
- 页数:51
- 大小:771.95KB
《程序设计基础C语言知识点总结》打印版计算机考研复习冲刺期末考试准备计算机考级计算机二级.docx
《《程序设计基础C语言知识点总结》打印版计算机考研复习冲刺期末考试准备计算机考级计算机二级.docx》由会员分享,可在线阅读,更多相关《《程序设计基础C语言知识点总结》打印版计算机考研复习冲刺期末考试准备计算机考级计算机二级.docx(51页珍藏版)》请在冰点文库上搜索。
《程序设计基础C语言知识点总结》打印版计算机考研复习冲刺期末考试准备计算机考级计算机二级
程序设计基础C语言知识点总结
1概述
(1)一个C语言源程序可以由一个或多个函数组成,但有且只有1个main()函数,可以放在程序中的任何位置。
一个C程序不论有几个函数,都是从main()函数开始执行。
(2)标识符
变量名定义,函数名定义都要满足标识符规则。
注意C语言对于标识符是大小写敏感的。
规则:
由字母、数字、下划线组成的,非数字开头的,且不是C语言内部关键字。
例如:
area、a234、_1234为合法标识符456P、a-b、a+b为非法标识符。
If是可以做为用户标识符。
因为If中的第一个字母大写了,所以不是关键字。
(3)C语言的32个关键字:
(4)C语言的源程序的扩展名为.c,运行C程序需要经过四个步骤,编辑、编译、构建(或者叫链接)、运行。
程序经编译生成的是目标文件,经过链接生成的是可执行文件。
(.c-->.obj-->.exe)只有.exe文件才可以运行。
(5)程序结构有三种:
顺序结构、选择结构(分支结构)、循环结构。
(6)算法:
可以没有输入,但是一定要有输出。
(7)不管是分支结构if还是循环结构while,for,如果不加大括号的话,都是紧挨着的一条语句生效。
(8)
C源程序是由一个主函数和若干个其它函数组成的;
可以一行多句。
可以一句多行。
以在程序的任何位置加注释。
///**/
(9)语句的种类
语句是程序的基本成分,程序的执行就是通过一条语句的执行而得以实现的,根据表现形式及功能的不同,C语言的基本语句可以分为五大类。
流程控制语句(顺序、分支、循环)、表达式语句、函数调用语句、空语句、复合语句。
;
2数据类型
2.1基本数据类型
C语言中,整型、字符型、实型、枚举类型属于基本数据类型。
2.2类型转换
(1)运算规则种的类型转换
char 和short参与运算先转换成int。
所有实数运算都是以双精度进行。
如果运算数类型一致,则结果类型为运算数的类型。
如果运算数类型不一致,则系统自动转换,使运算符两边类型一致后再进行运算,低精度像高精度转化。
赋值运算中,赋值号右侧量的类型将转换成左侧的类型.
例1:
1.0/2.0结果为0.5。
例2:
1/2结果为0。
例3:
15/3.0结果为5.0
例4:
如何实现保留三位小数,第四位四舍五入的程序。
y=(int)(x*100+0.5)/100.0这个保留两位,对第三位四舍五入
y=(int)(x*1000+0.5)/1000.0这个保留三位,对第四位四舍五入
y=(int)(x*10000+0.5)/10000.0这个保留四位,对第五位四舍五入
(2)强制类型转换
格式:
(类型名)(表达式)
例1 (int)3.234结果为3
例2 (float)(10%3)结果为1.000000,六个0是因为%f输出默认输出6位。
例3一定是(int)a不是int(a),注意是在类型上加括号。
例4(int)(a+b)和(int)a+b的区别。
前是把a+b转型,后是把a转型再加b。
2.3常量
指程序运行中,值不能被改变的量。
(1)用符号名来表示一个常量。
格式:
#define 符号名 常量值
例:
已知圆的半径为5.0,计算圆的面积(圆周率取3.14)。
#include
#define PI 3.14
voidmain() {
double r, s;
r=5.0;
s=PI*r*r;
printf("s=%f\n",s);
}
2.4整数表示
十进制 例如 12、-3、32767等。
八进制 用数字0开头,由0-7这8个数字组成。
例如010、016为合法八进制数
127、018为非法八进制数
十六进制用0x或0X开头,用0-9表示前10 个数字,字母A-F(可小写)表示后6个数字。
例如 0xAF、0x10、0x34为合法十六进制数
100、ABC、0xAFH为非法十六进制数。
注意:
C语言中只有十进制数可以为负数。
注意:
C语言中整型常量的3种表示,8进制以0引导,16进制以0x或0X引导,十进制没有引导。
注意:
在C语言的标准输出中,有16进制,10进制和8进制的输出格式,但是没有二进制的输出格式。
2.5实数表示
表示方式有两种:
小数形式和指数形式。
小数形式 例如:
0.123、.123、123. 都是合法形式,点前和点后的零可以省略。
指数形式 例如:
2.3026可用以下任何一种指数表示
0.23026E1、2.3026e0、23.026E-1
但下面的指数形式为非法
E3、.5e3.6、2.3e -2(e和-2间有空格) e前e后必有数,e后必为整数。
注意:
实型(float或double型)常量在程序中只能用十进制数,不能用其他进制表示。
2.6字符表示
一个字符占一个字节存储空间,用单引号限定,如:
'A',而"A"是字符串占两个字节(含有一个结束符号);
例如:
'A'、'c'、'5'都是合法的字符常量。
"A"、'abc'都是非法的字符常量。
字符串常量用英文双引号引起来. 如:
"hello",字符串中的字符个数称为字符串的长度。
空字符串长度为0。
字符串存储中每个字符占一个字节,字符串结尾自动加一个结束标志符'\0',所以字符串存储的时候,占用的空间长度要比串的实际长度多1。
如:
char ch[]={"Hello"}; 实际串的长度为5,但数组空间长度为6。
记住几个常用的ASCII码值:
'0'的ASCII数值表示为48,'a'的ASCII数值是97,'A'的ASCII数值是65。
字符跟整数一样,可以进行算数运算,因为本质就是存储的ASCII码值。
比如:
'0'-0=48,大写字母和小写字母转换的方法:
'A'+32='a'相互之间一般是相差32。
#include
intmain(){
intx=97;
chary='a';
printf("%c\n",x);//输出a
printf("%d\n",x);//输出97
printf("%c\n",y);//输出a
printf("%d\n",y);//输出97
if(x==y){
printf("x=y\n");//输出x=y
}
return0;
}
常见的转义字符
\n 回车换行 \\ 反斜杠 \'单引号 \"双引号
\ddd三位八进制 \xhh二位十六进制
比如:
'\101'表示字符'A' '\x41'表示字符'A'
字符的输入输出:
getchar函数和putchar函数,别用来输入字符和输出字符。
使用scanf和printf时,格式符均为%c。
2.7变量
指在程序运行过程中其值可以改变的量。
变量的命名必须符合标识符的命名规则。
例如:
a、b、ab为合法变量,void、if为非法变量。
注意:
ab是一个整体,含义不同于a乘以b。
有符号整型变量用英文singned表示,存储时最高一位是符号位,无符号整型变量用英文unsigned表示。
字符型变量的数据类型标识符是符号char,每个字符型变量只能存储一个字符。
例1 定义两个字符变量ch1和ch2。
char ch1,ch2;
例2 定义两个字符变量a和b,初值分别为'1'和'2'。
char a='1', b='2';
静态变量和自动变量的区别
静态变量是指用static关键字修饰的变量,一般定义在全局范围(既main函数外部)
对于C语言的全局和静态变量,内存空间是在编译期分配。
再深入一些:
已初始化的的全局变量和局部静态变量存放在.data段,未初始化的全局变量和局部静态变量一般存放在.bss段里,前者在生产可执行文件时就分配好内存了,后者在加载时才分配。
区别:
1)静态局部变量在静态存储区内分配存储单元。
在程序整个运行期间都不释放。
而自动变量(即动态局部变量)属于动态存储类别,存储在动态存储区空间(而不是静态存储区空间),函数调用结束后即释放。
2)为静态局部变量赋初值是在编译时进行值的,即只赋初值一次,在程序运行时它已有初值。
以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的值。
而为自动变量赋初值,不是在编译时进行的,而是在函数调用时进行,每调用一次函数重新给一次初值,相当于执行一次赋值语句。
3)如果在定义局部变量时不赋初值的话,对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符型变量)。
而对自动变量来说,如果不赋初值,则它的值是一个不确定的值。
这是由于每次函数调用结束后存储单元已释放,下次调用时又重新另分配存储单元,而所分配的单元中的值是不确定的。
4)虽然静态局部变量在函数调用结束后仍然存在,但其他函数是不能引用它的,也就是说,在其他函数中它是“不可见”的。
int 型数据占4个字节,float型数据占4个字节, double型数据占8个字节,char型数据占1个字节.
3表达式
3.1算术表达式
+,-,*,/,%
“/”两边都是整型的话,结果就是一个整型。
3/2的结果就是1.
“/”如果有一边是小数,那么结果就是小数。
3/2.0的结果就是0.5
“%”求余,%号两边要求是整数。
7%2.0为非法表达式。
3.2关系表达式
>,<,>=,<=,==,!
=
>,>=,<,<=的优先级相同且高于==,!
=的优先级.
关系运算符的优先级低于算术运算符高于赋值运算符.
关系运算符是左结合性。
表达式的数值只能为1(表示真),或0(表示假)。
例1 6>=6 'a'>'A' '5'>'4'结果均为真,值为1
例2 6!
=6 'D'=='d' '9'>'F'结果均为假,值为0
例3:
在c语言中,有如下定义:
intx=1,y=0,z=2;
那么x 代入为1<0<2,从数学的角度出发肯定是错的,但是在C语言中就是正确的! 因为要1<0为假得到0,表达式就变成了0<2那么运算结果就是1。 #include intmain(){ intx=1,y=0,z=2; if(x printf("真");//输出真 } return0; } 3.3逻辑表达式 表达式的数值只能为1(表示为真),或0(表示假)。 逻辑运算符! 高于&&,和||,高于算术运算符,&&和||是左结合的,! 是右结合的. 注意&&及||运算的短路现象: &&短路原则: (表达式1)&&(表达式2),若(表达式1)的值为0,则表达式2将不被计算,整个&&的结果为0。 || 的短路运算: (表达式1)|| (表达式2),若(表达式1)的值为1,则表达式2将不被计算,整个||的结果为1。 数学关系式0 (0 ,该表达式会先翻译0 例1 若变量a值为10,变量b值为16,计算表达式: a>b || a>sqrt(b) && b>=16 最后结果为真,表达式的值为1 3.4赋值表达式 格式: 变量名=表达式 例如: a=10 a=a+1 a=b=7+1为合法表达式 a+b=8 a=7+1=b为非法表达式 整个表达式的值等于最左边变量的值。 也就是说,赋值语句的左边是个变量。 例: a=b=c=8*8 整个表达式最后的值为64。 intx=y=10;错误,定义时不可以连续赋值 intx,y; x=y=10;正确,定义之后连续赋值可以。 intx=7.7;此时x等于7。 例题: #include intmain(){ intk=10; if(k=1){ printf("aaa"); } return0; } 注意区分: k=1,这是个赋值语句,涉及到k的值,表达式的值两个概念。 #include intmain(){ intk=10; inta,b; if(a=b=0){ printf("aaa"); } return0; } 3.5复合表达式 复合运算符: +=、-=、*=、/=、%= 例如: n=n+1表达式可写成n+=1 n=n%3表达式可写成n%=3 n*=m+3表达式可写成n=n*(m+3) 注意: m+3要先运算,最好的做法是理解成n*=(m+3),比如下面这个例子: inta=2;a*=2+3;此时a的值为10,等价于a=a*(2+3); 例1: 假设变量a初值为9,计算下列表达式。 a+=a-=a+a 解答: 1) 计算a+a,结果为18,a值未变。 2) 计算a-=18,即a=a-18,结果为-9,a值变为-9。 3) 计算a+=-9,即a=a+(-9),结果为-18,a值变为-18。 整个表达式最后结果为-18,a最后值为-18。 注意: a=a+1为赋值表达式,而a=a+1; 为赋值语句,多了分号。 3.6自增和自减 注意: 自增和自减只适用于整型变量。 例如: a++和++a等价于a=a+1 b--和--b等价于b=b-1 a++和++a的区别: 假设a的初值为5 表达式a++值为5,最后a值为6。 表达式++a值为6,最后a值为6。 口诀: ++在前先加再用,++在后先用再加。 3.7逗号表达式 格式: 表达式1,表达式2,…,表达式n 注意逗号表达式的优先级最低。 从左至右依次计算每个表达式,最后一个表达式的值即为整个逗号表达式的值。 例如: 表达式i=3,++i,i+5最后结果为9,i最后值为4。 (2,3,4)表达式的数值就是4。 举例: z=(2,3,4)整个是赋值表达式,括号改变了优先级,这个时候z的值为4。 z=2,3,4整个是逗号表达式,因为逗号表达式优先级最低,低于赋值语句,这个时候z的值为2。 3.8三目运算符(条件表达式) 对于条件表达式b? x: y,先计算条件b,然后进行判断。 如果b的值为true,计算x的值,运算结果为x的值;否则,计算y的值,运算结果为y的值。 一个条件表达式绝不会既计算x,又计算y。 C语言中是用非0表示逻辑真的,用0表示逻辑假的。 练习题: inta=1,b=2,c=3,d=4,e=5,k; k=a>b? c: d>e? d: e;求k的数值时多少? k=5 4分支结构 4.1if语句 (1)单分支结构: if(表达式) 语句 若表达式为真,则执行语句;否则if语句结束。 (2)双分支结构: if(表达式) {语句组1} else {语句组2} 表达式的值非0才执行语句组1,否则执行语句组2. 例1 从键盘上输入两个整数,输出较大的数。 #include intmain() { int x,y; printf(“请输入两个整数: \n”); scanf("%d%d",&x,&y); if (x>y) printf("%d",x); else printf("%d",y); } (3)多分支if、嵌套if if(表达式1) {语句组1} else if(表达式2) {语句组2} else if(表达式3) {语句组3} else {语句组n} 例2: 据输入的学生成绩,大于或等于90分为A,60 分以下等级为E,其余每10分一个等级。 #include intmain(){ { int g; printf("请输入一个整数: \n"); scanf("%d",&g); if (g>=90) printf("A\n"); else if(g>=80) printf("B\n"); else if(g>=70) printf("C\n"); else if(g>=60) printf("D\n"); else printf("E\n"); return0; } 练习题: inta=1,b=0;则执行完下列代码后,b的值为多少? if(! a)b++; elseif(a==0) if(a) b+=2; else b+=3; b为0。 4.2switch语句 掌握有break和无break的区别。 switch表达式通常为整型或字符型值。 switch(表达式) { case常量1: 语句组1 case常量2: 语句组2 ......... default: 语句组 //也可省略该语句 } 可以使用中break 来中止后面语句的执行。 switch表达式通常为整型或字符型值,case中的常量类型与之对应,case后面的表达式可以是常量或常量表达式,不能为变量表达式。 例题: 用switch语句重写学生等级程序。 #include intmain() { int g; printf("请输入一个整数: \n"); scanf("%d",&g); switch(g/10) { case 10: printf("A\n"); break; case 9: printf("A\n"); break; case 8: printf("B\n"); break; case 7: printf("C\n"); break; case 6: printf("D\n"); break; default: printf("E\n"); } return0; } 程序中break表示跳过后面的分支。 注意: switch只可与break组合使用,不能与continue组合使用。 5循环结构 5.1while循环 格式: while(表达式) 循环体 若表达式为真,则执行循环体。 再判断表达式,若仍为真则重复执行循环体直到表达式为假时循环结束。 当条件成立时循环。 例1: 编程计算S=1+2+……100。 #include intmain() { int k=1,s=0; while(k<=100) { s=s+k; k=k+1; } printf("%d",s); return0; } 例2: 输入123,输出321逆序输出数据。 inti=123; while(i! =0){ printf("%d",i%10); i=i/10; } 例3: intk=1intk=1; while(--k);while(k--); printf(“%d”,k);printf(“%d”,k); 结果为0结果为0 5.2do-while循环 格式: do 循环体 while(表达式); 先执行循环体,然后判断表达式。 若为真则重复执行,循环体直到表达式为假时循环结束。 直到条件不成立时退出。 例题: 用do-while循环计算10! #include intmain() { int k=1; long s=1; do { s=s*k; k++; } while (k<=10); printf("%ld",s); } while循环和do-while循环的区别 while循环是先判断表达式,因此循环体有可能一次也不执行。 do-while循环是先执行一次循环体,再判断表达式,所以不论表达式为真为假,循环体至少要执行一次。 5.3for循环 格式: for(表达式1;表达式2;表达式3) for(;;){ } 循环体 先执行表达式1,然后判断表达式2,若为真则执行循环体。 然后执行表达式3,再判断表达式2,若仍为真则重复执行循环体直到表达式2为假时结束。 例1: 用for循环计算S=1+2+…100。 #include intmain() { int k,sum=0; for(k=1;k<=100;k++) sum=sum+k; printf("%d",sum); } 例2: 若一个三位数个位、十位、百位的立方和等于它本身则称这个数为水仙花数。 例如153是一个水仙花数。 编程输出所有的水仙花数. #include intmain() { int a,b,c,i; for(i=100;i<=999;i++) { a=i/100; b=i%100/10; c=i%10; if(a*a*a+b*b*b+c*c*c==i) printf("%d\n",i); } } 5.4break 在switch语句、循环语句中可使用break跳过。 用在循环体内表示强行退出循环。 例1 计算S=1+2+3+…n,直到累加和大于5000为止。 #include intmain() { int i,s=0; for(i=1; ;i++) { s=s+i; if(s>5000) break; } printf("%d",s); } 注意: 当有多重循环时,break只能退出最内层循环。 在switch中,为跳过后面的分支。 5.5continue 用在循环体中用来跳过本次循环余下的语句,立即开始下一轮循环,整个循环并未结束。 例1 写出下列程序运行结果。 int i, k=0, s=0; for(i=1;i<=5; i++){ s=s+i; if(s>5) { printf("i=%d,s=%d,k=%d\n",i,s,k); continue; } k=k+s; printf(“i=%d,s=%d,k=%d\n”,i,s,k); } 运行结果:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计基础C语言知识点总结 程序设计 基础 语言 知识点 总结 打印 计算机 考研 复习 冲刺 期末考试 准备 考级 二级