资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,二级,C,上机复习,1.C,程序的基本结构,2.,上机题型,3.,程序演示,4.,上机注意事项,5.C,编程时常犯的错误,C,基本结构,函数是,C,程序的基本单位,有且只有一个,main,函数。,一个,C,程序总是从,main,函数开始执行的,到,main,函数结束,函数是由函数首部和函数体构成的。,#include ,double f1(double x),return x*x;,double f2(double x,double y),return x*y;,/*found*/,double fun(int i,double x,double y),if(i=1),/*found*/,return f1(x);,else,/*found*/,return f2(x,y);,main(),double x1=5,x2=3,r;,r=fun(1,x1,x2);,r+=fun(2,x1,x2);,printf(nx1=%f,x2=%f,x1*x1+x1*x2=%fnn,x1,x2,r);,1.,有几个函数?,2.,如何执行?,3.,结果?,上机题型,程序填空题(,2-3,个空),程序改错题(,2-3,个错误)已经定位,程序编写题(,fun,函数),程序演示,上机注意事项,改错题:,试题中用,*found*/,来提示在下一行,(,或下面第二行,),有错。,错误的性质基本分,语法错,和,逻辑错,两种。,特别要注意的是:只能在出错的行上进行修改,不要改动程序行的顺序,更不要自己另编程序。,C,编程时常犯的错误,书写标识符时,忽略了大小写字母的区别。,main(),int a=5;,printf(%d,A);,C,区分大小写。习惯上,符号常量名用大写,变量名用小写表示,以增加可读性。,忽略了变量的类型,进行了不合法的运算。,main(),float a,b;,printf(%d,a%b);,%,是求余运算,得到,a/b,的整余数。整型变量,a,和,b,可以进行求余运算,而实型变量则不允许进行“求余”运算。,将字符常量与字符串常量混淆。,char c;,c=a;,在这里就混淆了字符常量与字符串常量,字符常量是由一对,单引号,括起来的单个字符,字符串常量是一对,双引号,括起来的字符序列。,C,规定以“,0,”作字符串结束标志,它是由系统自动加上的,所以字符串“,a,”实际上包含两个字符:,a,和,0,,而把它赋给一个字符变量是不行的。,忽略了“,=,”与“,=,”的区别。,C,语言中,“,=,”是赋值运算符,“,=,”是关系运算符。如:,if(a=3)a=b;,前者是进行比较,,a,是否和,3,相等,后者表示如果,a,和,3,相等,把,b,值赋给,a,。,忘记加分号。,分号是,C,语句中不可缺少的一部分,语句末尾必须有分号。,a=1,b=2,编译时,编译程序在“,a=1,”后面没发现分号,就把下一行“,b=2,”也作为上一行语句的一部分,这就会出现语法错误。改错时,有时在被指出有错的一行中未发现错误,就需要看一下上一行是否漏掉了分号。,z=x+y;,t=z/100;,printf(%f,t);,对于复合语句来说,最后一个语句中最后的分号不能忽略不写。,多加分号。,对于一个复合语句,如:,z=x+y;,t=z/100;,printf(%f,t);,;,复合语句的花括号后不应再加分号,否则将会画蛇添足。,又如:,if(a%3=0);,I+;,本是如果,3,整除,a,,则,I,加,1,。但由于,if,(a%3=0),后多加了分号,则,if,语句到此结束,程序将执行,I+,语句,不论,3,是否整除,a,,,I,都将自动加,1,。,再如:,for(I=0;I5;I+);,scanf(%d,printf(%d,x);,本意是先后输入,5,个数,每输入一个数后再将它输出。由于,for(),后多加了一个分号,使循环体变为空语句,此时只能输入一个数并输出它。,输入变量时忘记加地址运算符“,&,”。,int a,b;,scanf(%d%d,a,b);,这是不合法的。,Scanf,函数的作用是:按照,a,、,b,在内存的地址将,a,、,b,的值存进去。“,&a,”指,a,在内存中的地址。,输入数据的方式与要求不符。,scanf(%d%d,输入时,不能用逗号作两个数据间的分隔符,如下面输入不合法:,3,,,4,输入数据时,在两个数据之间以一个或多个空格间隔,也可用回车键,跳格键,tab,。,scanf(%d,%d,C,规定:如果在“格式控制”字符串中除了格式说明以外还有其它字符,则在输入数据时应输入与这些字符相同的字符。下面输入是合法的:,3,,,4,此时不用逗号而用空格或其它字符是不对的。,3 4,3,:,4,又如:,scanf(a=%d,b=%d,输入应如以下形式:,a=3,b=4,输入字符的格式与要求不一致。,在用“,%c,”格式输入字符时,“空格字符”和“转义字符”都作为有效字符输入。,scanf(%c%c%c,如输入,a b c,字符“,a,”送给,c1,,字符“”送给,c2,,字符“,b,”送给,c3,,因为,%c,只要求读入一个字符,后面不需要用空格作为两个字符的间隔。,输入输出的数据类型与所用格式说明符不一致。,例如,,a,已定义为整型,,b,定义为实型,a=3;b=4.5;,printf(%f%dn,a,b);,编译时不给出出错信息,但运行结果将与原意不符。这种错误尤其需要注意。,输入数据时,企图规定精度。,scanf(%7.2f,这样做是不合法的,输入数据时不能规定精度。,switch,语句中漏写,break,语句。,例如:根据考试成绩的等级打印出百分制数段。,switch(grade),case A:printf(85100n);,case B:printf(7084n);,case C:printf(6069n);,case D:printf(60n);,default:printf(errorn);,由于漏写了,break,语句,,case,只起标号的作用,而不起判断作用。因此,当,grade,值为,A,时,,printf,函数在执行完第一个语句后接着执行第二、三、四、五个,printf,函数语句。正确写法应在每个分支后再加上“,break;,”。例如,case A:printf(85100n);break;,在定义数组时,将定义的“元素个数”误认为是可使的最大下标值。,main(),static int a10=1,2,3,4,5,6,7,8,9,10;,printf(%d,a10);,C,语言规定:定义时用,a10,,表示,a,数组有,10,个元素。其下标值由,0,开始,所以数组元素,a10,是不存在的。,在不应加地址运算符,&,的位置加了地址运算符。,scanf(%s,C,语言编译系统对数组名的处理是:数组名代表该数组的起始地址,且,scanf,函数中的输入项是字符数组名,不必要再加地址符,&,。应改为:,scanf(%s,str);,
展开阅读全文