版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C语言重要知识点复习资料1、 C语言基础(一)C语言特点(1)语言简洁、紧凑、使用方便、灵活。(2)运算符及数据结构丰富(3) 具有结构化的控制语句,程序设计自由度大,代码质量高单精度型 float(4) 具有位处理和地址操作能力整型 int(5) 用C语言写的程序可移植性好实型(浮点型)(二)双精度型 double枚举型 enum基本类型字符型 char数组类型数据类型构造类型结构体型 struct指针类型共用体型 union空类型(无值类型) void(三)结构C程序是由函数构成的,至少要有main()函数函数由函数的首部和函数体组成函数首部由函数名、类型、属性、参数名、参数类型组成函数体
2、由声明部分和执行部分组成C程序总是从main函数开始运行每个语句和数据声明的最后必须有一个分号(四)常量1. 整型常量:(1)十进制整数(2)八进制整数(以0开头)(3)十六进制整数(以0x开头)(4)长整型常数(在数字后加字符L或l)2.实型常量(1)十进制数(小数形式)(2)指数形式(e前e后必有数,e后必为整数).字符串常量:用“”的字符序列 eg:“A”为两个字符,即“A”和“0”(4)字符常量:用的字符序列(5)符号常量:不是常量的数据类型 # define 符号常量 常量 (符号常量通常用大写字母)(5) 变量标识符:字母,数字和下划线三种字符组成,且第一个字符必须是字母或者下划线
3、。1. 整型变量:(1) 基本型:int(2) 短整型:short int 或short(3) 长整型:long short 或long(4) 无符号型:存储单元中全部二进制用做存放数本身,不包括符号位(5) C语言提供四个标识符long、short、unsigned、signed来表示基本类型。Signed int 有符号基本整型 (可简写为 int)Unsigned int 无符号基本整型Signed short int有符号短整型Unsigned short int 无符号短整型Signed long int有符号长整型Unsigned long int 无符号长整型2. 实型变量(1)
4、 单精度(float型):占4个字节(32位),只提供7位有效数字(2) 双精度(double型):占8个字节,只提供1516位有效数字3. 字符变量:用来存放字符常量 char c1,c2; c1='a'c2='b'注意:%c表示将输出字符 %d表示将输出十进制数.注解:a的ASCII码为97,A的ASCII码为654. 变量初始化:变量名=表达式(6) 运算符和表达式1. 运算符类型算术运算符 + * / %(求余数)比较运算符 > < =(等于) >= <= !=(不等于)逻辑运算符 ! && |位运算符 <&
5、lt; >> | &赋值运算符 条件运算符 ?:逗号运算符 ,指针运算符 * & 求字节数运算符 sizeof注意:参加+ - * / 运算两个数中有一个数为实数或双精度数,则结果是double型(双精度) P365运算符优先级来执行2. 自增、自减运算符:(1) 只用于变量 (+5)×(2) +i,-i :在使用i之前,先使i的值加或减1(3) I+,i- : 在使用i之后,再使i的值加或减1 注意:-I+ 相当于-(i+)3. 关系运算符(比较运算符)> (大于) < (小于)= (等于) >= (大于等于) <= (小于等于)
6、 != (不等于)4.逻辑运算符运算符 作用使用方式 &&a、b都为真,则a&&b为真,否则为假。 a&&b |a、b都为假,则a|b为假,否则为真。 a|b !a为真,则!a为假;a为假时,!a为真。 !a5.赋值运算符 =(1) 表达式v=e的作用是求出表达式e的值,并把结果复制给v。e可以是常量、变量、或表达式。(2) 如果v和e的类型不同,赋值运算执行时会把e的值转化为v的类型。(3) 如果等于号两侧的类型不一致,但都是数值型或是字符型时,在赋值时要进行类型转换。见书P60-61规则18(4) 左值v必须是变量或是其他能够存储数据的对象。
7、关系:!(非)高算术运算符关系运算符&& 和 |赋值运算符低6. 逗号运算符和逗号表达式 注意:任何运算符优于逗号运算符(7) 不同类型数据间的转换与运算强制类型转换运算符:(1)(double)a将a转换成double类型(2)(int)(x+y)将x+y的值转换成整型(3)(float)(5%3)将5%3的值转换成float型(4)(int)x+y 将X转换成整数类型后再与y相加7.条件运算符:表达式?表达式:表达式(1)功能:判断表达式1的值,如果成立就执行表达式2,否则就执行表达式3。 (2)条件运算符是C语言中唯一的三目运算符.二、程序控制结构1.字符数据的输入输出(
8、1)putchar 函数:字符输出函数 功能是在显示器上输出单个字符。 一般形式为:putchar( c ) C可以是字符变量或整型变量(2) getchar函数 功能是从键盘上输入一个字符。 形式为:getchar() 只能接收一个字符。得到的字符可以赋给字符变量、整型变量或作为表达式中的一部分。(3) printf函数: printf(格式控制,输出表列) 格式字符P76-81 printf("a=%d,b=%d",a,b) 输出a=.b=. (4)scanf函数:scanf(格式控制,地址表列) &a 中的 “&”是“地址运算符”, &a是指变
9、量a在内存中的地址。 scanf("%d",&a,) 注意:用“%d%d”格式输入数据时,不能用逗号作两个数据间的分隔符. %f,%d,%c:表示要输入一个实数,整数,字符,注意输入的数据中间必须用逗号格开。2. C语言的选择语句(1) if语句 格式1 if(表达式) 语句 格式2 if (表达式) 语句1 else 语句2 格式3 : 级联式if语句If(表达式1) 语句1else if(表达式2 ) 语句2 else if(表达式3) 语句3 .else if(表达式m) 语句melse 语句n If语句的嵌套 If ( ) if( ) 语句1 else 语句
10、2 else if( )语句3 else 语句4(2) switch语句 switch() case 常量表达式1 :语句1 case 常量表达式2 :语句2 . case 常量表达式n :语句n Default: 语句n+1(3) Break语句 执行break语句会导致程序跳出switch结构, 并执行之后的程序代码. 在switch结构中,如果没有break语句,程序 控制将会从一种情况继续到下一种情况.3. 循环语句(1) while语句 格式:while (控制表达式) 循环体语句当表达式为非0值时,执行while语句中的内嵌语句(2) dowhile语句格式: do 循环体语句 w
11、hile (控制表达式)特点:先执行循环体,然后计算控制表达式的值。表达式的值为真,则再次执行执行循环体,再计算表达式的值。当控制表达式的值为假时,结束循环。(3)for语句语法格式:for(表达式1;判断表达式2;表达式3) 循环体语句注意:表达式1只执行1次for(循环变量赋初值;循环条件;循环变量增值)注意:for语句中的表达式1可以省略,其后的分号不能省(4) 结束循环的控制语句break语句可以用来从循环体内跳出循环体,即提前结束循环。continue语句作用是结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定.continue语句只结束本次循环,而不是
12、终止整个循环的执行。break语句则是结束整个循环过程,不再判断执行循环的条件是否成立。3、 构造型数据(1)一维数组:定义:类型说明符 数组名常量表达式;常量表达式中可以包括常量和符号常量,但不能包含变量。引用:数组名下标 只能引用单个数组一维数组的初始化A. 只给一部分元素赋值,其余元素为0B. 对数组不赋初值,系统会对所有数组元素自动赋以0值C. 对全部数组赋初值是,可以不指定数组长度冒泡排序法 选择排序法(2) 二维数组定义:类型说明符 数组名常量表达式常量表达式;引用:数组名 下标下标在使用数组元素时,应该注意下标值应在已定义的数组大小的范围内。(3) 字符数组:用来存放字符数据的数
13、组定义:char c i ; 字符数组中一个元素存放一个字符。字符数组的初始化A.初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符(0)。eg:char c2=a则c0=a c1=0B.如果提供的初值个数与预定的数组长度相同,在定义时可以省略数组长度,系统会自动根据初值个数确定数组长度。eg:char c =o,k ;等价于char c2=o,k ;C.字符数组可以用字符串文本初始化。char c=“hello”; char c=“hello”;c0c1c2c3c4c5helll0c0c1c2c3c4helloD. 字符数组的输出a.逐个字符输出,使用格式符
14、“%c” printf(“%c”,ci);b.将整个字符串输入。输出时用“%s” char c=“I am a boy”; printf(“%s”,c);E.字符数组的输入a.用scanf函数输入一个字符串。 char c20; scanf(”%s”,c);注意:scanf函数中的输入项c是已定义的字符数组名,数组名前面不要加&。(4)字符串处理函数puts函数:作用是将一个字符串输出到屏幕。 puts (字符数组名)gets函数:作用是从终端输入一字符串到字符数组,并得到一个函数值. gets(字符数组名)strcat函数:把字符串2接到字符串1后。并将结果保存在字符数组1。 str
15、cat(字符数组1,字符数组2)strcpy函数:字符串复制函数。是将字符串2复制到字符数组1中去。A.strcpy(字符数组1,字符串2)B.字符数组1必须定义得足够大。C.字符数组1必须写成数组名形式,字符串2可以是字符数组名,也可以是一个字符串常量。eg: strcpy(str1,”China”);D.复制时连同字符串后面的0一起复制到字符数组1E.不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。如:str1=China; 不合法 str1=str2; 不合法strcmp函数 : strcmp(字符串1,字符串2) A.作用是比较字符串1和字符串2。比较的结果由函数值带回B.
16、如果字符串1=字符串2,函数值为0C.如果字符串1>字符串2,函数值为一正整数D.如果字符串1<字符串2,函数值为一负整数注意:对两个字符串比较,不能用 str1>str2strlen函数:测试字符串长度的函数。函数的值为字符串中的实际长度(不包括0)。 strlen (字符数组)strlwr函数和strupr函数A.strlwr函数的作用是将字符串中大写字母换成小写字母。一般形式为: strlwr (字符串) B.strupr函数的作用是将字符串中小写字母换成大写字母。一般形式为: strupr (字符串)提示:ANSI C标准要求在使用字符串函数时要包含头文件”strin
17、g.h” 常用字符串函数可以参考P373(5)typedef的用途(识记)P315318四、函数(一)函数类型1.无返回值函数:标识没有返回值的这类函数,需要在函数定义的开头标识void2.无形式参数函数:类型标识符函数名() 声明部分 语句 3.空函数: 类型标识符函数名() 有参函数: 类型标识符函数名(形式参数列表) 声明部分 语句 说明: 如果没有指明返回类型,系统默认为int形式参数需要声明数据类型,形式参数之间用逗号分隔。函数体包括声明部分。声明部分定义的变量属于函数专有,其他函数不能进行赋值和修改。s函数定义是独立的。所以不能在一个函数的函数体内定义另外一个函数。函数之间可以相互
18、调用,只有main函数不能被调用,因为main函数是程序运行入口点,即程序都从它开始运行。(二)函数调用1.形式:函数名(实际参数表列) 实际参数可以是常量、变量或表达式. 实际参数之间用逗号分隔。2.调用前声明语句形式:返回类型 函数名(形式参数);3.函数的嵌套调用:在调用一个函数的过程中,又调用另一个函数。4.函数的递归调用:在调用一个函数的过程中又出现调用该函数本身5.三种函数调用方式:函数语句:把函数调用作为单独一个语句。 例如:printf(“this is a message”);函数表达式:函数出现在一个表达式中 例如: y=2*sin(x)+3*cos(y);函数参数:函数调
19、用作为一个函数的实参 例如:y=sin(tan(x)6.数组作为函数参数:数组名可以作实参和形参,此时传递的是整个数组。当形式参数是一维数组时,可以不说明数组的长度。 eg:int sum_array(int a,int n)实际参数把数组名传递给函数的时候,不要在数组名后放括号 eg:total=sum_array(a,6);7.多维数组作函数参数:多维数组名也可以作为实参和形参。在被调用函数中对形参数组定义时可以指定每一维的大小,也可以省略第一维的大小说明。max_value(int array44)等价于max_value(int array4)(三)局部变量和全局变量1.局部变量(静态
20、)的存储方式:static 声明 :static int a register 变量auto 变量注意:若函数内的局部变量与全局变量同名。则外部变量会自动屏蔽。局部变量具有优先权。(4) 变量的存储类别1.动态存储类2.静态存储类(五)内部函数和外部函数1.内部函数:static 类型标识符 函数名(形参名) static int fun(a,b) 2.外部函数:extern int fun(int a ,int b )五、指针1.指针变量的本质是用来放地址,而一般的变量是放数值的。2.int *p中 *p和p的差别*p可以当做变量来用;*的作用是取后面地址p里面的数值 p是当作地址来使用。3
21、. *p+是 地址会变化。 (*p)+ 是数值会要变化。 4. 三名主义: 数组名:表示第一个元素的地址。数组名不可以自加,他是地址常量名。 函数名:表示该函数的入口地址。 字符串常量名:表示第一个字符的地址。6、 结构体和共用体1. 结构体(1) 一般定义:struct 结构体名 成员列表(2) 定义结构体:struct 结构体类型名 数据类型 成员名1; 数据类型 成员名2; . 数据类型 成员名n;结构体变量名表直接定义结构体类型: struct 数据类型 成员名1; 数据类型 成员名2; . 数据类型 成员名n; 结构体变量名表2. 共用体(1)引用:不是pringf("%d
22、",a)而是pringf("%d",a.i)六、概念1.程序结构是三种: 顺序结构 , 循环结构(三个循环结构), 选择结构(if 和 switch)2.读程序都要从main()入口, 然后从最上面顺序往下读(碰到循环做循环,碰到选择做选择)。3.计算机的数据在电脑中保存是以 二进制的形式. 数据存放的位置就是 他的地址. 4.bit是位 是指为0 或者1。 byte 是指字节, 一个字节 = 八个位.5.编译预处理不是C语言的一部分,不再运行时间。C语言编译的程序称为源程序,它以ASCII数值存放在文本文件中。6.每个C语言程序中main函数是有且只有一个。7.
23、在函数中不可以再定义函数。8.算法的是一定要有输出的,其他可以没有输入。9.break可用于循环结构和switch语句。10.逗号运算符的级别最低。11.字符数据的合法形式: '1' 是字符占一个字节,"1"是字符串占两个字节(含有一个结束符号)。 '0' 的ASCII数值表示为48,'a' 的ASCII数值是97,'A'的ASCII数值是65。12.强制类型转换: 一定是 (int)a 不是 int(a),注意类型上一定有括号的。 注意(int)(a+b) 和(int)a+b 的区别。 前是把a+b转型,后是
24、把a转型再加b。13. 取整丢小数的情况:int14.print函数的格式考查:%d对应整型;%c对应字符;%f对应单精度;%ld对应 long int;%lf 对应double。15. char a = getchar() 是没有参数的,从键盘得到你输入的一个字符给变量a。 putchar(y)把字符y输出到屏幕中。16.两值互换:t=x;x=y;y=t。17.要用 (0<x)&&(x<10)表示比0大比10小。18条件表达式: 表达式1 ?表达式2 :表达式3注意:当非0时候是表达式2的数值,当为0是就是表达式2的数值。口诀:真前假后。19.一定要注意 有bre
25、ak 和没有break的差别,没有break时候,只要有一个case匹配了,剩下的都要执行,有break则是直接跳出了swiche语句。20.switch只可以和break一起用,不可以和continue用。21.break:是打破的意思,(破了整个循环)所以看见break就退出真个一层循环。continue: 是继续的意思,(继续循环运算),但是要结束本次循环,就是循环体内剩下的语句不再执行,跳到循环开始,然后判断循环条件,进行新一轮的循环。22. !=号的级别高于=号23.实参和形参之间 传数值,和传地址的差别。 传数值的话,形参的变化不会改变实参的变化。 传地址的话,形参的变化就会有可能
26、改变实参的变化24.函数声明一定要有:函数名,函数返回类型,函数参数类型。不一定要有:形参的名称。25.对于a10,(1)a表示数组名,是第一个元素的地址,也就是元素a10的地址。(2)a是地址常量,所以只要出现a+,或者是a=a+2赋值的都是错误的。26. a2 变成 *(a+2) a23变成 *(a+2)3再可以变成 *(*(a+2)+3)27两种重要的数组长度:.char a=a,b,c;数组长度为,字符串长度不定。sizeof(a)为。char a5= a,b,c数组长度为,字符串长度。sizeof(a)为。28.scanf和putchar的数据 如果输入的是good good stu
27、dy! 那么scanf(“%s”,a); 只会接收good.考点:不可以接收空格。getchar(a); 会接收good good study!考点:可以接收空格。29. 结构化程序设计:自顶向下;逐步细化;模块化设计;结构化编码。30. 自增、自减运算符的结合方向是:自右至左7、 常见的程序改错1.递增(减)运算符的表达式 eg: i=3,a=(+i)+(+i)+(+i);要考虑运算符的优先级,很显然“+”的优先级高于“+”。2. 输入语句中缺取址符& eg:scanf(“%d”,x);scanf(“%d”,&x;char a10;scanf(“%s”,&a); ch
28、ar a10;scanf(“%s”,a);a在这里既表示数组名字,又表示数组首地址,它本身已经代表了地址,所以就不用再加取址符了。在使用输入语句的时候要仔细观察,什么时候该加取地址符号,什么时候不该加,一定要搞清楚。3.逻辑运算符&&和位运算符&相混淆eg:if(x&y) if(x&&y)误用按位“与”运算符&替代了“与”运算符&&位运算符是C语言独特的一种运算符,其中“&”表示对两个操作数按二进制位进行“与”运算,规则是0&0=0,0&1=0,1&0=0,1&1=1。如6&
29、5=4,其中6变为00000110,5变为00000101,按位“与”运算的结果为100即4。4.误把赋值=当恒等= eg: if(a=0) if(a=0)5.条件语句和循环条件语句后误加分号 eg:if(x>y);x=y; if(x>y) x=y;这样相当于满足条件执行空语句。下面的x=y语句将被无条件执行。一般情况下if()条件后不需要加分号。eg:for(i=1;i<10;i+);for(i=1;i<10;i+) 上述for语句相当于满足条件执行空语句,真正的循环语句则没有被执行。一般情况下for()循环条件后不需要加分号。6.循环语句中改变了循环变量的值 eg:
30、求水仙花数main() int i,a,b,c;for(i=100;i<1000;i+) a=i%10;i=i/10;b=i%10;i=i/10;c=i%10;/*i的值被改变*/if(a*a*a+b*b*b+c*c*c=i)printf(“%d”,i);在循环语句里,循环变量i每次进入循环后都被改变了,导致了i永远都满足循环条件,所以就死循环了。为了避免此类错误,在编程时应尽量避免在循环语句中改变循环变量。7.作为输出结果的变量没有赋初值 eg:求数组中的最大值能最大值的下标main() int a10=8,2,3,4,5,6,3,7,max=a10,m,i;for (i=0; i&l
31、t;10;i+) if(ai>max)max=ai; m=i;printf(“%d%d”,max,m);原因就在下标变量m没有赋初值,系统随机赋了初值.8.初值赋了,但是赋的位置不对 eg:求100以内的完数s=0;for(i=1;i<=100;i+) for(j=1;j<=i/2;j+) if(i%j=0) s+=j; if(s=i) printf(“%d”,i);s=0语句放错了位置,应该放在外层循环里面,也就是每判断一个数都应该从0开始累加。eg:求1!+2!+100!main() int i,j,s=0,t=1;for(i=1;i<=100;i+) for(j=1;j<=i;j+) t=t*j;s+=t; printf(“%d”,s);t=1应该放在第三行,t=1这个赋值语句,它的位置应该在外层循环的里面,而不是在外面。9.数组和整型或者实型变量不能重名eg:main() int a10,a;数组名为a,其他变量的名字就不能再用a。10.数组输出时的错误eg:现在想输出数组a中的所有
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 职业发展与晋升机会创造策略
- 快速办理二手房买卖合同范文
- 企业内部团建活动组织规定
- 农业科技研发定向捐赠协议
- 员工激励与离职率降低
- 劳务准则上墙
- 农业企业客户资产管理计划
- 交通运输设备租赁资金管理
- 大型活动舞台背景墙绘协议
- 创意产业园区
- 潜油泵及潜油泵加油机讲义
- 医患沟通内容要求记录模板(入院、入院三日、术前、术后、出院)
- 航海学天文定位第四篇第6章天文定位
- 第8章 腹部检查(讲稿)
- 浅谈深度教学中小学数学U型学习模式
- 物理电学暗箱专题30道
- 湿法脱硫工艺计算书
- 江西上饶铅山汽车驾驶科目三考试线路
- 南京农业大学学生在校学习期间现实表现证明
- (医学PPT课件)NT检查规范
- 导电炭黑的用途及使用方法
评论
0/150
提交评论