您好,欢迎访问三七文档
当前位置:首页 > 财经/贸易 > 资产评估/会计 > 南京大学金陵学院C语言程序设计考试复习精讲
南京大学金陵学院《C语言程序设计》期末考试复习一、关于C语言源程序的结构与组成1、一个完整的C源程序可以由一个或若干个源程序文件组成:file1.cfile2.cfile3.c……filen.c2、一个C源程序文件由一个或若干个:函数定义(一个C源程序中至少有一个函数定义)外部对象声明外部对象引用性声明预处理命令二、关于变量的声明或定义1、变量名的命名规则字母、数字、下划线组成,首字符必须是字母或下划线。字母区分大小写。TurboC允许32个字符不能用C定义的关键字不要使用库函数名及预处理命令标识符2、变量的初始化对不同类型变量指定的初始化值,有不同的规定和要求:static型变量和外部变量的初始化值必须为常量或常量表达式#definePI3.14/*PI是定义的符号常量名*/staticinta=2;staticfloatb=2.35+4.2/PI;(正确)staticintc=2+5,d=c+3;(错误)因d=c+3;中含有变量名c局部变量的初始化值可以是:常量、符号常量、变量名、函数调用及由它们组成的表达式。但如果含有变量名,则必须是在这之前已经指定了初始化值的变量名。特别,不允许以如下形式对同初值化变量:intx=y=z=100;intx,y=x=0;但如下形式是允许的:三、关于表达式的求值与数据类型转换float总是先转换成double,char总是先转换成int10+‘b’+1.5f–1e-8/10例如:该表达式结果类型为double类型。总是把两个操作数转换成同类型后再计算,计算的结果类型即为该类型。例如:inta=0,b=0;for(a=1;a100;a++)b=b+1/a;该程序段执行后,b的值为1。因其中的1/a,除第一次为1外,其余都为0。四、关于八进制、十六进制常量及与八进制、十六进制形式的转义字符的的区别八进制常量:必须以0开头(以区别于十进制数常量)只能用0~7数字表示数十六进制常量:必须以0x开头只能用0~9,A~F或a~f数字表示数五、关于‘X’与“X”的区别‘x’可作为整数参与数值运算;而“x”不能。例如:charch;ch=‘x’(正确)而ch=“x”(错误)注意:char型变量并不是一定要存储字符型数据,也可以存储整型数据,甚至可以存储浮点数。例如:ch=125;ch=85.9;(小数部分将自动舍去)一对单引号中只能有一个字符,如:‘x’,而像‘xxx’或‘abc’都是错误的。注意:转义字符‘\xab’并不是四个字符,只表示十六进制数ab所代表的字符。‘x’的值是整型值;而“x”的值是地址(存储空间的起始地址),它是指针类型。‘x’有对应的字符变量,例如:charch=‘x’;而“x”没有对应的简单字符串变量,但可以赋给一个char*型的指针变量。例如:char*ch=“x”;前者用一个字节存储,后者要用两个字节存储。八进制形式的转义字符:‘\hhh’必须一对单引号中必须一个反斜杠\开始其中的hhh只能是1~3位八进制数字(可以是1位、2位、最多3位,只其值不超过255)例如:‘\2’表示编码值为2的字符‘\12’表示编码值为10的字符‘\123’表示编码值为83的字符‘\001’表示编码值为1的字符而‘\ab’、‘\0ab’都是错误的,a、b非八进制数字十六进制形式的转义字符:‘\xhhh’必须一对单引号中必以\x(反斜杠加一个x开始)其中的hhh只能是1~3位十六进制数字(可以是1位、2位、最多3位,只其值不超过255)例如:‘\x2’表示编码值为2的字符‘\xab’表示编码值为171的字符‘\x0D’表示编码值为13的字符而‘\0xab’是错误的,x的前面不能写0五、关于函数定义函数名是一种外部全局性对象,所以不能与该程序中的其他函数名及外部对象同名。但可以与任何函数(包括该函数)中的局部变量同名,不会产生冲突。intsamename(intn){intsamename=2;returnn%samename;}doublesamename;intsamename(intn){ints=2;returnn%s;}(正确)(错误)形式参数的“存储类型”仅能是auto和register。不能是static与extern!例如:intfun(registerintx,inty)(正确)intfun(externintx,inty)(错误)定义函数时不能给形式参数指定初始化值。例如:intfun(intx=100,inty=50)(错误)每一个形式参数都必须单独声明。intf(intx,y)(语法错)intf(intx,inty)(正确写法)形式参数名不能与函数体开始部分的的变量明同名。例如:intf(intx){floatx;……}void型函数体中不能有带返回值的return语句。例如:voidf(intx){……returnx+1;}六、关于函数调用在调用一个函数前必须对被调用函数进行引用性声明。voidfun(intx,int*p,inta[]){……}例如若有函数定义:引用性声明:voidfun(intx,int*p,inta[]);voidfun(int,int*,int[])voidfun(intx,int*p,inta[10]);在调用函数的实参必须与被调用函数的形参一一对应(个数、顺序、类型)。注意:对于指针或数组形式的形参,对应的实参必须是地址量(指针型量)inta=1,c[2]={0};例如,若有函数定义:fun(inta,int&a,intc[2])错误调用fun(a,*a,c[2])fun(1,2)fun(a,a,c)a=fun(a,&a,c);fun(a,&a,c)fun(1,&c[0],c)fun(c[1]c+1,&a)fun(a,c,c+1)正确调用voidfun(intx,int*y,int*p){*p=xy?x:y;}且若main函数中有声明:七、关于求余运算(%)%的两个操作数都必须是整数,非整数时不会自动转换。如:pow(x,2)%9(错误)因pow(x,2)一定是浮点数,正确的计算应为:(int)pow(x,2)%9或若有:intx;(x=pow(x,2))%9余数总与被除数有相同的符号。如:-30%-7(值为-2,而非2)求余运算(%)很有用,若要求某个n位整数x的个位数,只要计算:x%10。但要计算n位整数x的最高位,如果n是确定的,如3位,只要计算:x/100若n是不确定的,则需要按如下方法计算:x/(int)pow(10,n-1)当-32768=x=32767时x/(long)pow(10,n-1)当x-32768且x32767时八、关于=与==的区别=是赋值运算,第一操作数必须是左值对象,如变量名、数组元素名等。X=0X*x=0(正确,值为0)(错误)==是关系比较运算,第一操作数不必须是左值对象X==0X*x==0(都正确,值为0或1)程序要特别注意作为相等性(==)条件判断的关系表达式常常错写成赋值表达式(=),而的不到预期的结果。例如:while(i==e%f)if(i==e%f)if(i=e%f)while(i=e%f)for(i=0;i==e%f;i++)for(i=0;i=e%f;i++)错写成:错写成:错写成:九、关于||与&&的优化运算处理在计算e1&&e2时,若e1的值为假,则不必再计算e2的值,因为不管e2是什么结果,整个表达式的值都是0。inta=0,b=5,c;c=a++0&&b--10;运算结果:c为0,a为1,b为5例如:在计算e1||e2时,若e1值为真,则不需要计算e2的值,整个表达式的值为1。例如:inta=0,b=5,c;c=++a0||b--10;运算结果:c为1,a为1,b为5sizeof的运算功能是计算给出对象占用的存储空间大小(以字节为单位)。十、关于sizeof运算使用形式:sizeof(表达式)sizeof(类型关键字或类型名)sizeof单一常量或单一变量名或单一数组名注意:若是数组名,结果是数组占用空间的总字节数sizeof(1+2)/*结果为2*/sizeof1.5/*结果为8*/sizeof‘A’/*结果为2*/sizeof(1.5*3LU+sin(x))/*结果为8*/sizeof(char)/*结果为1*/sizeof(float)/*结果为4*/sizeof“abcdefg”/*结果为8*/若有chara=‘A’;则sizeofa/*结果为1*/若有intb[10];则sozeofb/*结果为20*/若有floatf;则sozeoff/*结果为4*/十一、常用的数学计算的库函数sqrt(x)pow(x,y)计算x计算xyexp(x)计算ey注意:不能写成pow(e,x)sin(x)cos(x)计算sinx计算cosxfabs(x)计算浮点数x的绝对值abs(x)计算整数x的绝对值十一、for语句的执行for(e1;e2;e3)语句e2非0?语句真假计算e1计算e3计算e2结束循环表达式e1仅执行一次表达式e2用来控制循环继续与否for(x=0,y=100,z=0;x=y;x++,y--)e1e3e2Z+=++x+(y/=10);循环体中对循环控制变量的修改,将影响循环执行的次数。x0y100z0循环开始1++x10y/=10112x++9y--++x3y/=10014x++4y---1第一轮循环第二轮循环十二、关于switch语句的执行case后的表达式必须是整型常量表达式总是将switch后面括号中的“表达式”与case后的表达式作相等性的比较。当与case后的表达式相等时,执行其后列出的语句,一直到遇到一个break语句为止,若未遇到break,则继续执行下一条case后列出的语句,直到遇到一个break语句为止。switch(c){case'a':putchar(c+1);case'b':putchar(c+2);break;case'c':putchar(c+2);default:putchar(c+3);}如若switch后面括号中c变量的值为‘a’,则程序将在显示器上输出:bc十二、关于递归函数的执行与阅读intf(intn,intx){if(n==1)returnx;elsereturnf(n-1,x+2)+x;}例如,当开始时调用:f(3,4)intf(intn,intx){if(n==1)returnx;elsereturnf(n-1,x+2)+x;}34intf(intn,intx){if(n==1)returnx;elsereturnf(n-1,x+2)+x;}28intf(intn,intx){if(n==1)returnx;elsereturnf(n-1,x+2)+x;}1返回86返回8+6返回14+4十三、关于求一个整数的反序数的程序设计在程序设计中常常需要求一个整数的反序数。例如,求一个给出整数的回文数(若一个整数等于它自身的反序数,则称该整数为回文数,如123321)longrevers(longx)/*x为给出的整数*/{y=0;/*存放求得的反序数*/while(x0){y=y*10+x%10;x=x/10;}returny;}十四、关于用二分法求方程在指定区间内上的一个近似根。二分法的概念所谓二分法指每次将区间折半,计算折半后的两个小区间的端点函数值,舍去两端函数值同号者(在x轴的上方或下方)。如:0abC=(a+b)/2f(a)f(b)f(c)图中区间[c,b]的fc)与f(b)同号舍去,对[a,c]区间再作二分,依此类推……二分法的程序设计doublef(doublex){returnx*x-x-2;}例如,求方程x2-x-2=0在区间[1,4]中的一个根。先编写求指定函数值的函数:voidmain(){doublea,b,x;inti;do{scanf(%lf%lf,&a,&b);}while(f(a)*f(b)0);x=(a+b)/2;/*求中点*/while(fabs(f(x
本文标题:南京大学金陵学院C语言程序设计考试复习精讲
链接地址:https://www.777doc.com/doc-4244894 .html