C语言程序与设计知识点2011年12月07日第5章数据类型与输入输出1.标识符:(1)只能由字母、数字和下划线构成;(2)第一个字符必须是字母或者下划线;(3)长度只有31个字符有效;(4)不能包含空格;(5)不能使用关键字。2.变量三个要素为:类型、名字和值;同一语句中不能混合定义不同类型的变量。3.常量:直接常量和符号常量4.十进制常量:[+|-]Digits[l|L]5.八进制常量:OctalDigits[L|l]6.十六进制常量:(0x|0X)HexDigits[L|l]7.补码:负整型数在内存中的存放形式;将该数的绝对值的二进制形式,按位取反再加1。8.浮点数:-2.34,3.1416f,29.00,.23,0.23L,1.23E10,0.23E-4,45.e+23,-23.68E129.输出操作:调用库函数printf时用“%f”格式输出10.错误:floatf1,f2,f3;printf(f1=%d,f2=%d,f3=%d\n,f1,f2,f3);11.浮点数,默认输出小数点后6位数字12.输入操作:调用库函数scanf时用“%f”和“%lf”分别对foat型和double型数据进行输入。13.输出操作:调用库函数printf时用“%f”对foat型和double型数据进行输出;%lf为longdouble类型输出;%e或E—按科学计数法的形式输出。14.应避免将一个很大的数和一个很小的数直接相加减,否则就会丢失小的数15.字符常量:用单引号括起,只能是单个字符,还包括转义字符,一种特殊的字符常量,以反斜线\开头,后跟一个或几个字符。16.字符型数据和整型数据之间可以通用,表示方式和操作与整数相同,但要注意范围。17.整数的格式化输出:%[对齐方式][输出最小宽度]整数类型18.整数类型的输出:%d、%o、%x/%X或%ld19.实数的格式化输出:%[输出最小宽度][.精度]实数类型;一般默认数据右对齐,若输出宽度前加负号,则设置为左对齐。20.scanf格式输入函数,注意三种输入函数的输入方式区别:scanf(%d%c%f,&i,&c,&f);scanf(“%d,%c,%f”,&i,&c,&f);scanf(”i=%db=%cc=%f”,&i,&c,&f);21.scanf中要求给出变量地址,若在格式控制字符串后直接给出变量名,则会在运行时出错。22.float类型的数据可以用%f进行输入或输入操作。对于double型的实数,必须用%lf的格式输入数据。23.编译器在遇到分隔符或非法数据时即认为输入操作结束。24.格式字符可以用空格分隔,但最好不用回车作为分隔符,除非后面还有数据要输入。25.注意在循环函数中使用scanf()中,用%c输入字符型数据时的特殊性。第6章运算符与表达式1.表达式是由运算符和运算数组成的式子2.表达式根据某些约定、求值次序、结合、优先级规则来进行计算.3.求值次序:表达式中各操作数的求值次序视编译器不同不同。4.“/”操作符对与不同的数据类型进行不同的操作5.%只能对整型数进行操作,不允许对浮点数操作6.字符类型的数据象整型数据一样,可以进行相关运算。7.变量赋值与初始化的计算机操作不同。8.左值:常量和算术表达式不能为左值.9.右值:左值表达式可以作为右值表达式。10.牢记运算符的“优先级”和“结合性”11.隐式转换:(1)“就高不就低”的原则;(2)当赋值运算的左值表达值与右值表达式类型不同时,将右值转换成左值的类型;(3)数据可能丢失精度。12.显式类型转换:–强制转换运算符(类型名)(表达式),(类型名)变量13.自增i++:先使用变量,然后对变量增值;自左向右将运算符结合,如a+++b等同(a++)+b。14.自增++i:先对变量增值,再使用变量;从右至左结合,如+++b等同+(++b)。15.i++和++i在单独使用等效。16.自增操作不能为常量或算术表达式17.inti=1,b;b=(i++)+(i++)+(i++),问b=?;printf(“%d”,(i++)+(i++)+(i++));输出是什么?18.(++i)+(++i)+(++i)编译器不同,结果不同。19.注意关系表达式a=xb产生的误解;正确的是a=x&&xb20.在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。(1)a&&b&&c只有a为真(非0)时,才需要判别b的值,只有a和b都为真的情况下才需要判别c的值。只要a为假,就不必判别b和c(此时整个表达式已确定为假)。如果a为真,b为假,不判别c。(2)a||b||c只要a为真(非0),就不必判断b和c;只有a为假,才判别b;a和b都为假才判别c。21.逻辑运算符的优先级:!高于&&高于||22.逗号运算符:将各表达式从左到右的顺序依次求值,最右端的表达式的结果作为整个表达式的值。inta=1,b=2,c=3;intsum=(a+b,b+c,c+a);//sum=4;sum=a+b,b+c,c+a;//sum=3,表达式值为4第7章选择结构1.判断的表达式通常为关系或逻辑表达式,也可以是具有逻辑值的其他类型表达式。2.赋值表达式也可以作为判断表达式;不能混淆赋“=”和“==”。3.判断的表达式:其值等于0为假,非0为真。4.if语句难点:设计判断条件。在实现选择结构时,经常由于判断条件构造不合理造成逻辑错误.5.if与else的配对关系:else总是与它上面最近的、且未配对的if配对。6.switch语句:判断表达式括号应具有整型值,一般为整型、字符型或枚举类型的变量或者表达式。7.case后面的标号为常量表达式,其值必须是整型、字符型或枚举常量。8.switch语句中每个分支须保证唯一性,即case后的标号值必须互异。9.switch语句如果希望在执行完相应分支的语句后跳出swich结构,必须使用在各个分支中使用break语句。10.注意在循环语句中使用switch语句时,分支的语句后跳出switch结构,各个分支中使用break和continue有区别。第8章循环结构1.设计循环结构要点:需要重复哪些的步骤,即循环体中的操作;需要合理设计循环条件,使循环不无限次执行;修改循环条件,使循环条件的值趋近0。2.设计循环结构要点:(1)循环条件?(2)循环结束条件?(3)如何修改循环条件?3.循环结构两种基本类型:当型循环;直到型循环。4.do{循环体}while(表达式);不要忘记”;”5.for(循环变量赋值;循环条件;修改循环变量){循环体语句;}6.for(表达式1;表达式2;表达式3){循环体语句;}(1)求解表达式1;(2)求解表达式2;(3)若其值为逻辑真,则执行循环体中的语句;若其值为假则结束循环,转到第(6)步;(4)求解表达式3;(5)重复执行步骤(2)、(3)、(4)中的操作;(6)循环结束,执行for语句后的语句。7.for语句分号不能省8.用while和do-while循环时,循环变量初始化在while和do-while语句之前,for语句可以在表达式1中实现循环变量的初始化。9.while和do-while循环,循环体中应包括使循环趋于结束的语句。for语句可以在表达式3中实现。10.for语句和while语句一般用来实现当型循环,循环体可能一次也不执行;do-while语句构成的直到型循环,循环体至少执行一次。11.各种循环语句都可以互相嵌套,内层和外层循环控制变量不应同名;循环嵌套不能交叉,即在一个循环体内必须完整的包含着另一个循环。12.循环中的跳转:(1)break语句;(2)contiune语句;(3)goto语句。第9章数组1.数组:一定数目的同类元素,顺序排列2.一维数组定义:类型标识符[常量表达式];3.数组三要素:类型、数组名、元素个数4.数组名是第一个元素的地址,为不能更改的常量。5.方括号中常量表达式表示数组元素的个数,数组大小为整型常量表达式,不能为变量。6.数组必须在给定长度后,才能使用(即赋值)。7.数组总字节数=sizeof(类型)*数组长度8.下标方式访问数组a[i];9.指针方式访问一维数组*(a+i);10.方括号中的位置号通常称为下标/索引,为整数或整型表达式,表示该元素与首地址的偏移值。11.引用数组下标越界时,运行时并不报错;数组越界访问可能造成严重错误。12.不能一次引用整个数组,只能单个使用每个数组元素,使用循环语句遍历数组各个元素。13.数组元素和同类型变量操作14.不能直接把整个数组赋值到另一个数组15.不能用一个语句给整个数组赋值16.一维数组初始化,4种可以:inta[5]={1,3,5,7,9};intb1[5]={0};intb2[5]={1,2,3};intc[]={1,2,3,4,5,6};17.一维数组初始化,3种不可以:intd[5]={1,2,3,4,5,6,7};inta[5]={1,3,,7,9};intb[5]={};18.记住冒泡排序法19.二维数组:用双下标表示某个元素的数组称为两维数组20.二维数组定义形式:类型说明符数组名[常量表达式1][常量表达式2];21.二维数组的存储结构:线性存储22.按行分段赋初值:inti[2][3]={{1,2,3},{4,5,6}};23.按行连续赋初值:intj[2][3]={1,2,3,4,5,6};24.二维数组初始化,2种可以:intk[][3]={{1,2,3},{4,5,6},{7,8,9}};intn[][4]={{1},{1},{1}};//仅对第0列元素赋初值25.二维数组初始化,1种可以:intm[3][]={1,2,3,4,5,6};//错,不能省略第二维长度第10章函数1.C程序可以由多个文件组成,文件负责组织存放若干个函数。2.源程序文件为C程序的编译单位,每个文件单独编译,便于调试。3.main函数是程序执行的入口4.main函数可以调用其他函数,其他函数调用结束后,还要返回main函数;main函数执行完毕,整个程序就结束了。5.main函数可以出现在任何位置,但每个程序有且仅有一个main()函数。6.C程序的所有函数都是平行定义的,在一个函数内部不允许定义另外的函数。7.函数可以互相调用,但是不能调用main函数。8.形式参数表:类型1形参变量1,…,类型n形参变量n9.函数名:函数的入口地址10.实际参数表:与形式参数在个数、类型、位置对应11.实际参数表:参数可取常量、变量或表达式。12.形式参数表:不能为常量,常量表达式。13.函数调用中求值顺序的问题:对实参表中各量是自左至右还是自右至左使用未作规定。14.函数遵循先定义后使用的原则。若被调用函数在主调函数之前定义,需在被调函数调用之前进行声明。15.函数声明的作用:编译器根据函数原型检查函数调用的正确性;函数的名字;函数返回的数据类型;函数要接受的参数个数、类型和参数的顺序。16.函数声明的一般形式:类型说明符被调函数名(类型形参,类型形参…);或类型说明符被调函数名(类型,类型…);17.实参可以是常量、变量或表达式,在调用时将实参的值赋给形参。18.实参与形参的类型应相同或赋值兼容。19.形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。形参只有在函数内部有效。函数调用结束返回主调函数后则不能再使用该形参变量。20.实参向形参的数据传递是单向“值传递”;只能把实参的值传送给形参,不能把形参的值反向地传送给实参。在函数调用过程中形参的值发生改变,实参的值不会变化。21.函数的值只能通过return语句返回主调函数;不能返回数组。22.凡不加类型说明的函数,自动按整型处理。(新C++环境下不可以)23.注意函数传值(实参至形参,return)类型不一致的时候,遵循类型自动转换原则。24.数组元素作为函数参数-按值传递25.数组名作为函数参数-按地址传递26.通常为了能够让函数处理不同长度的数组,函数