还剩10页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
语言重要学问点复习资料
一、C语言基础(-)c语言特点
(1)语言简洁,紧凑,运用便利,灵敏
(2)运算符及数据结构丰富
(3)具有结构化的限制语句,程序设计自由度大,代码质量高
(4)具有位处理和地址操作实力
(5)用C语言写的程序可移植性好-(单精度型整型血Ifloat实型(浮点型X基本类枚举型enum双精度型字符型char double数组类型类型.构造类型,结构体型structI共用体型union指针类型空类型(无值类型)void
(三)结构
①C程序是由函数构成的,至少要有main函数
②函数由函数的首部和函数体组成
③函数首部由函数名,类型,属性,参数名,参数类型组成
④函数体由声明部分和执行部分组成
⑤C程序总是从main函数起先运行
⑥每个语句和数据声明的最终必需有一个分号
(四)常量L整型常量⑴十进制整数⑵八进制整数(以0开头)⑶十六进制整数(以Ox开头)
(4)长整型常数(在数字后加字符L或1)
2.实型常量⑴十进制数(小数形式)⑵指数形式(e前e后必有数,e后必为整数).⑶字符串常量用“”的字符序列eg为两个字符,即“A”和“\0”⑷字符常量用的字符序列⑸符号常量不是常量的数据类型#define符号常量常量(符号常量通常用大写字母)
(五)变量标识符字母,数字和下划线三种字符组成,且第一个字符必需是字母或者下划线
1.整型变量
(1)基本型int
(2)短整型short int或short
(3)长整型long short或long4,误把赋值=当恒等==eg:ifa=O fifa=05,条件语句和循环条件语句后误加分号egifxy;x=y;^ifxy x=y;这样相当于满意条件执行空语句下面的x刊语句将被无条件执行一般状况下if条件后不须要加分号egfori=l;i10;i++;{}-fori=l;i10;i++{}►上述for语句相当于满意条件执行空语句,真正的循环语句则没有被执行一般状况下for循环条件后不须要加分号
6.循环语句中变更了循环变量的值eg求水仙花数main{int i,a,b,c;fori=100;i1000;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=iprintf%d”,i;在循环语句里,循环变量i每次进入循环后都被变更了,导致了i恒久都满意循环条件,所以就死循环了为了避开此类错误,在编程时应尽量避开在循环语句中变更循环变量
7.作为输出结果的变量没有赋初值eg求数组中的最大值能最大值的下标main{int a
[10]={8,2,3,4,5,6,3,7},max=a
[10],m,i;for i=0;i10;i++ifa[i]max{max=a[i];m=i;}printfa%d%dv,max,m;}缘由就在下标变量m没有赋初值,系统随机赋了初值.8,初值赋了,但是赋的位置不对eg求100以内的完数s=0;for i=l;i=100;i++{forj=l;j=i/2;j++ifi%j==0s+=j;if s==i printf%d”,i;}s=0语句放错了位置,应当放在外层循环里面,也就是每推断一个数都应当从0起先累加eg求1!+2!+……+100!main{int i,j,s=0,t=l;fori=l;i=100;i++{forj=l;j〈=i;j++t=t*j;s+=t;}printf,s;t=1应当放在第三行,t=l这个赋值语句,它的位置应当在外层循环的里面,而不是在外面
9.数组和整型或者实型变量不能重名egmain{int a
[10],a;•••数组名为a,其他变量的名字就不能再用a
10.数组输出时的错误eg现在想输出数组a中的全部数值int a
[10]={l,2,3,4,5,6},i;fori=0;i10;i++printf a%dv,a
[10];程序只输出其中的一个元素要理解数组下标和循环变量的关系1L字符串不加结束标记egchar a
[3]=abc”,b
[3]=def”;strcat a,b;printf%s,a;字符串都有结束标记,\0,,所以在定义数组的时候应当是字符串的实际长度姐
112.字符串复制,比较等出现的错误egchar a
[4]=abc,b
[4]=def;a=b;正确的写法则应当是利用函数strcpy旦b来实现此功能egchar a
[4]=abc,b
[4]=def;if a〉b{}-if strcmpa,b0{}比较字符串a和字符串b的大小关键是要记住字符数组名字代表的是字符数组的地址,是常量,不能干脆进行复制等操作
13.函数调用时参数传递出错egvoid sa,int b{int t;t=a;a=b;b=t;}fvoid s*a,int*b{int t;t=*a;*a=*b;*b=t;}程序是一个交换两个变量值的函数,但事实上这个函数完不成这个功能,因为本函数传递的是数值,函数调用时传递数值只是对实际参数值的一个拷贝,并不能变更实际参数的值,要完成此功能必需传入地址
14.遗忘加头文件eg求1-1/3+1/5-1/7…,求此序列的和,直到最终一项的确定值小于此-6为止.main{double s=0,x=l;long k=l;int flag=l;while fabsxle-6{s+=x;k+=2;flag=-flag;x=flag/k;}在程序的前面加上一个头文件#打4114“math,h,假如不加这个头文件的话,系统将不相识fabs这个函数
15.函数定义中未声明形参类型调用函数,系统默认把其处理为整型参数,若没有声明函数的类型,返回值也为整型调用时全部参数以整型传递,会出现参数不匹配的状况明确定义函数参数的类型和个数
16.switchs-switch*sswitch后的表达式必需是一个字符型数据,而不是变量
17.case a:A-case,a:case Acase中必需单个给出相应的字符常量
18.funfloat x,y,z-fun floatx,float y,float z
19.留意分号及逗号的运用
20.for后的循环语句是两句以上,应用大括号
(4)无符号型存储单元中全部二进制用做存放数本身,不包括符号位
(5)C语言供应四个标识符long,short,unsigned,signed来表示基本类型
①Signed int有符号基本整型(可简写为int)
②Unsigned int无符号基本整型
③Signed shortint有符号短整型©Unsigned shortint无符号短整型
⑤Signed long int有符号长整型©Unsigned longint无符号长整型
2.实型变量
(1)单精度(float型)占4个字节(32位),只供应7位有效数字
(2)双精度(double型)占8个字节,只供应1516位有效数字〜
3.字符变量用来存放字符常量char cl,c2;cl=;c2=,b,留意%c表示将输出字符%d表示将输出将进制数.注解的ASCH码为97,A的ASCH码为
654.变量初始化变量名二表达式
(六)运算符和表达式
1.运算符类型算术运算符+—*/%(求余数)比较运算符二二(等于)〉=〈二!二(不等于)逻辑运算符!||位运算符《〉|八〜赋值运算符=条件运算符逗号运算符,指针运算符*求字节数运算符sizeof留意参与+-*/运算两个数中有一个数为实数或双精度数,则结果是double型(双精度)P365运算符优先级来执行
2.自增,自减运算符
(1)只用于变量(++5)X
(2)++i,—i在运用i之前,先使i的值加或减1
(3)I++,i—在运用i之后,再使i的值加或减1留意T++相当于-留++)
3.关系运算符(比较运算符)(大于)(小于)二二(等于)二(大于等于)(不等于)=(小于等于)!=
4.逻辑运算符a,b都为真,则ab为ab真,否则为假a,b都为假,则a||ba||b为假,否则为真a为真,则!a为假;a!a为假时:!a为真运算符作用
5.赋值运算符二1表达式v二e的作用是求出表达式e的值,并把结果复制给v°e可以是常量,变量,或表达式2假如v和e的类型不同,赋值运算执行时会把e的值转化为v的类型3假如等于号两侧的类型不一样,但都是数值型或是字符型时,在赋值时要进行类型转换见书P60-61规则1—84左值v必需是变量或是其他能够存储数据的对象关系!俳高算术运算符|关系运算符]和||9赋值运算符低
6.逗号运算符和逗号表达式留意任何运算符优于逗号运算符七不同类型数据间的转换及运算强制类型转换运算符1double a将a转换成double类型2int x+y将x+y的值转换成整型3float5%3将5%3的值转换成float型4intx+y将X转换成整数类型后再及y相加7,条件运算符表达式1表达式2:表达式31功能:推断表达式1的值,假如成立就执行表达式2,否则就执行表达式32条件运算符是C语言中唯一的三目运算符.二,程序限制结构L字符数据的输入输出1putchar函数字符输出函数
①功能是在显示器上输出单个字符
②一般形式为putcharc
③C可以是字符变量或整型变量2getchar函数
①功能是从键盘上输入一个字符
②形式为getchar
③只能接收一个字符得到的字符可以赋给字符变量,整型变量或作为表达式中的一部分3printf函数printf格式限制,输出表列
①格式字符P76-81
②printf〃a=%d,b=%d〃,a,b输出a=b=...4scanf函数:scanf格式限制,地址表列
①a中的是“地址运算符”,a是指变量a在内存中的地址
②scanf〃猊1〃,冉留意:用“%d%d”格式输入数据时,不能用逗号作两个数据间的分隔符.表示要输入一个实数,整数,字符,留意输入的数据中间必需用逗号格开
2.C语言的选择语句1if语句
①格式1if表达式语句
②格式2if表达式语句1else语句2
③格式3:级联式if语句If表达式1语句1else if表达式2语句2else if表达式3语句3else if表达式m语句melse语句n
④If语句的嵌套If if语句1else语句2elseif语句3else语句42switch语句switch case常量表达式1语句1case常量表达式2:语句2case常量表达式n语句n Default语句n+13Break语句
①执行break语句会导致程序跳出switch结构,并执行之后的程序代码.
②在switch结构中,假如没有break语句,程序限制将会从一种状况接着到下一种状况.
3.循环语句1while语句
①格式while限制表达式循环体语句当表达式为非0值时,执行while语句中的内嵌语句⑵do…while语句
①格式do循环体语句while限制表达式
②特点:先执行循环体,然后计算限制表达式的值表达式的值为真,则再次执行执行循环体,再计算表达式的值当限制表达式的值为假时,结束循环3for语句
①语法格式:for表达式1;推断表达式2;表达式3循环体语句留意表达式1只执行1次
②for循环变量赋初值;循环条件;循环变量增值留意for语句中的表达式1可以省略,其后的分号不能省4结束循环的限制语句
①break语句可以用来从循环体内跳出循环体,即提前结束循环
②continue语句作用是结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定.
③continue语句只结束本次循环,而不是终止整个循环的执行break语句则是结束整个循环过程,不再推断执行循环的条件是否成立
三、构造型数据1一维数组
①定义类型说明符数组名[常量表达式];
②常量表达式中可以包括常量和符号常量,但不能包含变量
③引用数组名[下标]只能引用单个数组
④一维数组的初始化A.只给一部分元素赋值,其余元素为0B.对数组不赋初值,系统会对全部数组元素自动赋以0值C.对全部数组赋初值是,可以不指定数组长度
⑤冒泡排序法选择排序法2二维数组
①定义类型说明符数组名[常量表达式][常量表达式];
②引用数组名[下标][下标]
③在运用数组元素时,应当留意下标值应在已定义的数组大小的范围内3字符数组用来存放字符数据的数组
①定义char c[i];字符数组中一个元素存放一个字符
②字符数组的初始化A.初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符\0’oegchar c
[2]={a}则c
[0]=a c[l]=\0B.假如供应的初值个数及预定的数组长度相同,在定义时可以省略数组长度,系统会自动依据初值个数确定数组长度?8±@13[]二{0,*};等价于±a1:
[2]={0,*};C.字符数组可以用字符串文本初始化char c[]={hello”};11char c[]=hello”;►c
[0]c[l]c
[2]c
[3]c
[4]-c
[0]c[l]c
[2]c
[3]c
[4]►c
[5]hello he111\0D.字符数组的输出a.逐个字符输出,运用格式符“%c”printf(“枇””⑴);b.将整个字符串输入输出时用char c[]={aI amaboyv);printf(%s”,c);E.字符数组的输入a.用scanf函数输入一个字符串char c
[20];scanf(%s,c);留意:scanf函数中的输入项c是已定义的字符数组名,数组名前面不要加4字符串处理函数
①puts函数作用是将一个字符串输出到屏幕puts字符数组名
②gets函数作用是从终端输入一字符串到字符数组,并得到一个函数值.gets字符数组名)
③strcat函数把字符串2接到字符串1后并将结果保存在字符数组1strcat(字符数组1,字符数组2)
④strcpy函数字符串复制函数是将字符串2复制到字符数组1中去A.strcpy(字符数组1,字符串2)B.字符数组1必需定义得足够大C.字符数组1必需写成数组名形式,字符串2可以是字符数组名,也可以是一个字符串常量egstrcpy(str1,v China”);.复制时连同字符串后面的\(r一起复制到字符数组iDE.不能用赋值语句将一个字符串常量或字符数组干脆给一个字符数组如strl=China;不合法strl=str2;不合法
⑤strcmp函数strcmp(字符串1,字符串2)A.作用是比较字符串1和字符串2o比较的结果由函数值带回B.假如字符串1二字符串2,函数值为0C.假如字符串1字符串2,函数值为一正整数D.假如字符串1〈字符串2,函数值为一负整数留意对两个字符串比较,不能用strlstr2
⑥strlen函数测试字符串长度的函数函数的值为字符串中的实际长度(不包括\0,)strlen(字符数组)
⑦strlwr函数和strupr函数A.strlwr函数的作用是将字符串中大写字母换成小写字母一般形式为strlwr(字符串)B.strupr函数的作用是将字符串中小写字母换成大写字母一般形式为strupr(字符串)提示ANSI C标准要求在运用字符串函数时要包含头文件string,h常用字符串函数可以参考P373
(5)typedef的用途(识记)P315—318四,函数
(一)函数类型
1.无返回值函数标识没有返回值的这类函数,须要在函数定义的开头标识void
2.无形式参数函数类型标识符函数名()(声明部分语句}
3.空函数类型标识符函数名(){)有参函数类型标识符函数名(形式参数列表){声明部分语句}说明
①假如没有指明返回类型,系统默认为int
②形式参数须要声明数据类型,形式参数之间用逗号分隔
③函数体包括声明部分声明部分定义的变量属于函数专有,其他函数不能进行赋值和修改@s函数定义是独立的所以不能在一个函数的函数体内定义另外一个函数
⑤函数之间可以相互调用,只有main函数不能被调用,因为main函数是程序运行入口点,即程序都从它起先运行二函数调用
1.形式函数名实际参数表列实际参数可以是常量,变量或表达式.实际参数之间用逗号分隔
2.调用前声明语句形式返回类型函数名形式参数;
3.函数的嵌套调用在调用一个函数的过程中,又调用另一个函数
4.函数的递归调用在调用一个函数的过程中又出现调用该函数本身
5.三种函数调用方式
①函数语句把函数调用作为单独一个语句例如:printf thisis amessage”;
②函数表达式函数出现在一个表达式中例如y=2*sinx+3*cosy;
③函数参数:函数调用作为一个函数的实参例如:y=sin tanx6,数组作为函数参数数组名可以作实参和形参,此时传递的是整个数组当形式参数是一维数组时,可以不说明数组的长度eg:int sumarray inta[],int n实际参数把数组名传递给函数的时候,不要在数组名后放括号eg:total=sum arraya,6;
7.多维数组作函数参数:多维数组名也可以作为实参和形参在被调用函数中对形参数组定义时可以指定每一维的大小,也可以省略第一维的大小说明max_value intarray
[4]
[4]等价于max_value intarray口
[4]三局部变量和全局变量
1.局部变量静态的存储方式©static声明static inta
②register变量
③auto变量留意若函数内的局部变量及全局变量同名则外部变量会自动屏蔽局部变量具有优先权四变量的存储类别
2.动态存储类
3.静态存储类五内部函数和外部函数
1.内部函数static类型标识符函数名形参名static intfun a,b
2.外部函数extern intfun inta,int b五,指针L指针变量的本质是用来放地址,而一般的变量是放数值的
2.int*p中*p和p的差别*P可以当做变量来用;卜的作用是取后面地址p里面的薮面P是当作地址来运用
3.*p++是地址会变更*p++是数值会要变更
4.三名主义数组名表示第一个元素的地址|数组名不行以自加,他是地址常量名函数名表示该函数的入口地址字符串常量名表示第一个字符的地址
六、结构体和共用体
1.结构体
(1)一般定义struct结构体名{成员列表}
(2)定义结构体
①struct结构体类型名{数据类型成员名1;数据类型成员名2;数据类型成员名n;}结构体变量名表
②干脆定义结构体类型struct{数据类型成员名1;数据类型成员名2;数据类型成员名n;)结构体变量名表
2.共用体
(1)引用不是pringf(%d〃,a)而是pringf(〃%d〃,a.i)六,概念
1.程序结构是三种依次结构,循环结构(三个循环结构),选择结构(if和switch)
2.读程序都要从main入口,然后从最上面依次往下读(遇到循环做循环,遇到选择做选择)
3.计算机的数据在电脑中保存是以二进制的形式.数据存放的位置就是他的地址.
4.bit是位是指为0或者1byte是指字节,一个字节=八个位.
5.编译预处理不是C语言的一部分,不再运行时间C语言编译的程序称为源程序,它以ASCH数值存放在文本文件中
6.每个C语言程序中main函数是有且只有一个
7.在函数中不行以再定义函数8,算法的是确定要有输出的,其他可以没有输入
9.break可用于循环结构和switch语句
10.逗号运算符的级别最低
11.字符数据的合法形式T是字符占一个字节,〃1〃是字符串占两个字节(含有一个结束符号),0,的ASCH数值表示为48,a的ASCH数值是97,A的ASCII数值是
6512.强制类型转换确定是(int)a不是int(a),留意类型上确定有括号的留意(int)(a+b)和(int)a+b的区分前是把a+b转型,后是把a转型再加b
13.取整丢小数的状况:int
14.print函数的格式考查%d对应整型;枇对应字符;%f对应单精度;%Id对应longint;%lf对应doubleo
15.char a=getcharO是没有参数的,从键盘得到你输入的一个字符给变量a putchar(y)把字符y输出到屏幕中
16.两值互换t=x;x=y;y=to
17.要用0〈xx〈10表示比0大比10小18条件表达式表达式1表达式2表达式3留意当非0时候是表达式2的数值,当为0是就是表达式2的数值口诀真前假后
19.确定要留意有break和没有break的差别,没有break时候,只要有一个case匹配了,剩下的都要执行,有break则是干脆跳出了swiche语句
20.switch只可以和break一起用,不行以和continue用
21.break是打破的意思,破了整个循环所以望见break就退出真个一层循环continue是接着的意思,接着循环运算,但是要结束本次循环,就是循环体内剩下的语句不再执行,跳到循环起先,然后推断循环条件,进行新一轮的循环
22.!二号的级别高于二号
23.实参和形参之间性数值和|传地址|的差别传数值的话,形参的变更不会变更实参的变更传地址的话,形参的变更就会有可能变更实参的变更
24.函数声明确定要有函数名,函数返回类型,函数参数类型不愿定要有形参的名称
25.对于a
[10],1a表示数组名,是第一个元素的地址,也就是元素a
[10]的地址2a是地址常量,所以只要出现a++,或者是a=a+2赋值的都是错误的
26.a
[2]变成*a+2a
[2]
[3]变成*a+2
[3]再可以变成**a+2+327两种重要的数组长度.char a□二{a,,,b,,,c,};数组长度为3,字符串长度不定sizeofa为3char a
[5]={a,b,c}数组长度为5,字符串长度3sizeofa为
528.scanf和putchar的数据假如输入的是good goodstudy!则scanf%s”,a;只会接收good.考点不行以接收空格getchara;会接收good goodstudy!考点可以接收空格29,结构化程序设计自顶向下;逐步细化;模块化设计;结构化编码
30.自增,自减运算符的结合方向是自右至左
七、常见的程序改错L递增减运算符的表达式eg:i=3,a=++i+++i+++i;要考虑运算符的优先级,很明显“++”的优先级高于“+”31输入语句中缺取址符eg:scanf%d”,x;f scanf,x;char a
[10];scanf%s,a;-char a
[10];scanfa%s,a;►a在这里既表示数组名字,又表示数组首地址,它本身已经代表了地址,所以就不用再加取址符了在运用输入语句的时候要细致视察,什么时候该加取地址符号,什么时候不该加,确定要搞清晰32逻辑运算符和位运算符相混淆egifxy fifxy误用按位“及”运算符替代了“及”运算符位运算符是C语言独特的一种运算符,其中表示对两个操作数按二进制位进行“及”运算,规则是00二0,01=0,10=0,ll=lo如65=4,其中6变为00000110,5变为00000101,按位“及”运算的结果为100即4o。