《国二上机题型总结及解题技巧C语言.docx》由会员分享,可在线阅读,更多相关《国二上机题型总结及解题技巧C语言.docx(45页珍藏版)》请在三一办公上搜索。
1、国二上机题型总结及解题技巧C语言上机题型总结1(3)/16,11(3)/28,21(3)/38,97(2)/1153、比较两个字符串的长度,返回较长的字符串。40(2)/59,98(2)/116,4、将矩阵左下三角元素的值乘以n。3(3)/19,49(3)/68,52(1)/71,72(3)/91,84(3)/103,90(2)/109,97(1)/1145、将M行N列的二维数组中的字符数据,按列的顺序依次放到一个字符串中。例如: W W W WS S S S -> WSH WSH WSH WSH H H H H 83(3)/1026、将大于m且靠近m的k个非素数,存入所指的数组中。4(1
2、)/19,7(3)/23,23(3)/40,30(2)/48,36(1)/54, 45(2)/64, 46(3)/65,50(1)/69,76(1)/94,85(3)/104,7、将s所指字符串的正序和反序进行连接,形成一个新串放到t所指的数组中。8(2)/24,29(2)/47,43(2)/628、假定输入的字符串中只包含字母和*号,编写函数fun,功能是将字符串中的前导*号全部移到字符串的尾部。12(3)/29,18(3)/35,25(2)/43,26(3)/44,41(3)/60,57(3)/76,59(3)/78,63(3)/819、将两数合并问题,以及求一个数的各位数字之和。例如:a
3、=456,b=123, 合并为c=415263. 3(2)/18,14(3)/31,15(3)/32,29(3)/47,30(3)/48, 38(1)/57,57(2)/76,70(2)/88,72(1)/90,10、将s所指字符串中的内容逆序/对换。59(1)/78,60(3)/79,91(3)/110 11、统计26个字母分别出现的次数。 17(3)/34,31(2)/49,95(1)/11212、将数字字符串转换为相应的整数。20(1)/36,20(3)/37,26(1)/43 ;13、实现矩阵转置。 22(3)/39,43(3)/62,14、找出一维整型数组中元素最大的值和它所在下标。
4、 70(3)/89,89(3)/108,91(1)/109,92(3)/11015、求二维数组周边元素的和。 16(3)/33,22(2)/39,31(3)/49,45(1)/64,78(3)/9716、将字符串中下标为奇数位置上的字母转为大写。 32(3)/50,67(2)/85,17、数组元素的移动问题。 6(1)/21,13(1)/29,13(3)/30, 19(1)/35,27(1)/45,28(1)/46,34(2)/53,35(3)/54,50(3)/6951(3)/70,73(1)/91,96(1)/113,99(3)/11718、统计一行字符串中单词的个数。 29(1)/47,
5、36(3)/55,75(1)/93,93(2),19、删除一维数组中所有相同的数。38(3)/58例如:222344566667789101010-> 2345678910 20、将放在字符串数组中的M个字符串,按顺序合并组成一个新串。例如:AAAABBBBBB -> AAAABBBBBBCC 81(3)/100,92(2)/110,100(3)/118CC 21、统计一个串在另一个串中出现的次数。2(2)/17,21(2)/38,31(1)/49,48(3)/67,99(2)/11722、求最大公约数、最小公倍数。6(2)/21,53(1)/72,69(2)/8723、删除字符串中的
6、空格。 44(1)/63,53(3)/72,56(2)/75,88(3)/107,24、将给定变量保留两位小数,并对第3位进行四舍五入处理。 54(3)/73,98(3)/11625、删除字符串中指定下标的字符。44(3)/63,70(1)/8826、求n门课程的平均成绩,作为函数值返回。(大于平均分的人数等)1(1)/16,4(3)/20,17(1)/33,33(2)/51,68(1)/86,71(2)/89,78(1)/96,93(1)/111,27、将s所指字符串中下标为偶数的字符删除,剩余字符形成的新串放入t所指数组中。61(3)/80 28、找出二维数组中每列最大的元素,依次放入PP
7、所指的一维数组中。2(1)/17,87(3)/10629、将在s串中,下标为偶数位置上的字符,紧随其后重复出现一次,放到一个新串t中。例如:ABCDE->AACCEE 73(2)/92,74(2)/93,75(2)/94,76(2)/95,77(2)/95,78(2)/9630、统计字符串中,指定字符出现的次数。28(2)/46,30(1)/48,65(1)/83,76(3)/95,86(1)/104,31、判断字符串是否为回文? 79(3)/9832、将没有在字符串s中出现而在字符串t中出现的字符形成一个新的字符串放在u中。80(2)/99,81(2)/100,85(2)/104,86(
8、2)/105,88(1)/106,33、删除字符串中的指定字符。 4(2)/19,12(2)/29,24(2)/41,52(2)/71,62(1)/80,93(3)/111,94(3)/11234、宏定义问题: 26(2)/44 35、进制转换问题:10(2)/26,62(2)/80,99(1)/11736、整除问题:(闰年84(1)/102)8(3)/24,23(1)/40,39(3)/58, 67(1)/85,71(3)/90,83(2)/102,86(3)/105,90(3)/109,94(1)/112,100(2)/11837、循环问题:14(2)/30,17(2)/34,18(1)/
9、34, 19(2)/36, 22(1)/39,27(2)/45,33(3)/52,35(2)/54,37(2)/56(折半查找),37(3)/56, 38(2)/57,39(1)/58, 42(1)/61,43(1)/62,47(1)/66, 47(2)/66,48(1)/67,49(1)/68,51(2)/70,56(1)/75, 58(1)/76,58(2)/77,59(2)/78,60(1)/78,60(2),61(1)/79,61(2)/80, 64(1)/82,64(2,3)/82, 74(1)/92, 77(1)/95,79(1)/97,88(2)/107 , 91(2)/109,
10、95(3)/113,97(3)/11537、累加求和(循环的一种)1(2)/16,5(1)/20, 6(3)/22, 11(2)/27, 16(1)/32, 19(3)/36, 20(2)/37, 23(2)/40, 27(3)/45, 28(3)/46, 39(2)/58, 40(1)/59, 40(3)/59, 46(2)/65,54(1)/73, 56(3)/75, 62(3)/81, 63(2)/81, 65(2,3)/83,66(3)/85, 67(3)/86, 68(2,3)/86, 69(3)/87, 74(3)/93,77(3)/96, 82(2)/101,89(2)/107,
11、 90(1)/108,92(1)/110, 96(3)/11438、排序问题:3(1)/18,5(2)/20,9(2)/24,11(1)/27,32(2)/50,41(1)/60,42(2)/61,44(2)/63,46(1)/65,53(2)/72,55(1)/74,66(1)/84,71(1)/89,82(3)/101,95(2)/113,39、结构体问题:7(1)/22,10(3)/26,14(1)/30,21(1)/37,24(3)/42,32(1)/50,33(1)/51,34(3)/53,42(3)/61,45(3)/64,47(3)/66(排序),51(1)/70,52(3)/7
12、1,72(2)/90,100(1)/11840、链表问题:7(2)/22,9(3)/25,12(1)/28,15(1)/31,24(1)/40,25(3)/43,34(1)/52,58(3)/77,66(2)/84,80(1)/98,96(2)/11441、文件 10(1)/25,25(1)/42,35(1)/53,37(1)/55,82(1)/100,83(1)/101,98(1)/11642、求数组中最大数和次最大数问题13(2)/29,69(1)/87,47、递归和迭代求根2(3)/17,18(2)/35, 41(2)/60,49(2)/68,54(2)/73,55(3)/74,63(1
13、)/81,75(3)/94,79(2)/98,87(1)/105,60、指向函数的指针的使用 8(1)/23,81(1)/99,解题技巧一、填空题链表类型题目包括:15、42、43、50、56、75、79、85、86、87技巧解析:1、 首先看清楚题目要求和意思。看清楚链表有没有带头结点,如果带有头结点,指向数据源的指针内容是p=h>next;如果是不带有头结点,则填写的是p=h;2、 如果所要填写的空在循环语句while的括号中的时候,里面的内容填写的是p或者是q,以最近出现的为主;如果是在循环语句的里面的时候,填写的是q=p>next;3、如果是排序的时候,从小到大的时候是大于号,
14、从大到小的时候是小于号。4、如果链表题目中考到调用函数,一般只需要填入实参head,例如:fun(head);在构造链表的时候都会有头结点,一般用head来表示,head指向了链表中的第一个数据的地址。细化分类:将数据域中的数据进行排序,类似题目:15、42void fun(NODE *h) NODE *p, *q; int t;/*found*/p = _1_ ;指向数据源,由于h是带头结点的链表,因此需要填入h->nextwhile (p) 判断链表p是否已经到末尾/*found*/q = _2_ ; 比较两个数的大小,因此需要q指向p中的下一个数据需要填入p->next,也就是说
15、p指向了第一个数据,q指向了第二个数据。while (q) 判断q是否指向了末尾/*found*/if (p->data _3_ q->data)从小到大排序,因此填入大于符号 t = p->data; p->data = q->data; q->data = t; 交换数据q = q->next; q自增,目的是比较出最小的数据p = p->next; p自增联想记忆分析1:对一维数组进行从小到大排序void fun(int bN) int i, j, a;for(i=0;i<N-1;i+)for(j=i;j<N;j+)if(bi>bj)a=bi;
16、bi=bj;bj=a;联想记忆分析2:对结构体数组按照姓名进行从小到大排序for(i=0;i<N-1;i+)for(j=i;j<N;j+)if(strcmp(ai.name,aj.name)>0)a=bi;bi=bj;bj=a;将数据域中的元素逆置,类似的题目:43、50链表中数据域中的元素逆置,首先将第一个数据取出来放在最后一个位置,也就是将其next置空,表示已经到了末尾。接着将第二个数据放到第一个的前面,依次类推即可将整个数据域逆置。void fun(NODE *h) NODE *p, *q, *r;/*found*/p = _1_;指向数据源,由于h是带头结点的链表,因此需
17、要填入h->next/*found*/if (_2_) return;填入p=NULL,判断第一个数据是否为空,如果为空就无需逆置,执行return语句,结束函数的执行。q = p->next; q指向了p的下一个数据,确保链表的完整性p->next = NULL; 将第一个数据取出来放在最后一个位置,也就是将其next置空,表示已经到了末尾。while (q) r = q->next; 用来跟踪数据,指向了q的下一个数据q->next = p; 将第二个数据放到第一个的前面,依次类推即可将整个数据域逆置。/*found*/p = q; q = _3_;这里需要将q指向后面
18、的数据,因此可以填入q->next,或者是r都可以。h->next = p;联想记忆分析1:数组元素的逆置int a10=1,2,3,4,5,6,7,8,9,10;int i,j=0,b10;for(i=9;i>=0;i-)bj=ai,j+;数组的逆置只需从数组长度减一开始往后将元素放在另外一个数组中就行。联想记忆分析2:字符串的逆置void fun(char *str) char *p;int len;len=strlen(str);while(len) *p=strlen-1;len-;p+;函数的功能实现了指针p指向了字符串str逆置后的首地址。输出数据,释放结点,缩短链表,
19、类似的题目:56给一个递增有序的链表插入一个新结点,并保持链表有序。类似的题目:87统计结点个数,计算结点之和。类似的题目:75、85删除链表中数据域值相同的节点,保留一个。类似的题目:79结构体类型的题目:2、9、16、22、23、30、33、47、51、78、80、82、88、92、971.对数据进行排序,类似的题目:2、97注意:排序涉及到数据的经典交换,所要填写的数据有窍门。例如:t=a; a=b;_需要填空,根据交换的“三步曲”很容易确定这个空一定填入b=t。for(i=0;i<N-1;考点i+)for(j=i;j<N;考点j+)if(strcmp(ai.name,aj.na
20、me)>0)考点a=bi;bi=bj;bj=a;考点中要求填入i<N-1,但是填入i<N也不会出错,考试的时候最好填入i<N-1考点必须填入i<N,不能填入i<N-1考点注意两点,一是strcmp(ai.name,aj.name)比较ai和aj中的name谁大,二是“>”的使用,大于符号用于从小到大的排序,小于符号用于从大到小的排序。2.将形参a所指的结构体变量中的数据赋值给结构体变量b,进行相应的修改,类似的题目:9、16、23、33、51、78、82、92void fun(struct student a) struct student b; int i;/*f
21、ound*/b = _1_;将形参a中的值赋值给结构体变量b,因此填入a进去即可b.sno = 10002;改变结构体变量b中的sno为10002/*found*/strcpy(_2_, LiSi);将“LiSi”赋值给变量b中的name,因此填入b.nameprintf(nThe data after modified :n);printf(nNo: %ld Name: %snScores: ,b.sno, b.name);输出变量b中的学号和姓名/*found*/for (i=0; i<3; i+) printf(%6.2f , b._3_);输出变量b中的成绩,因为成绩是一个数组有三
22、个元素,因此用循环来控制输出,所以填入b.scoreiprintf(n);对比记忆:struct student考点 fun(struct student a) int i;a->sno=1002;考点strcpy(a->name,”LiSi”);考点for(i=0;i<3;i+)a->scarei+=1;考点return a;3.结构体和文件结合,类似的题目:22、30、47、80、88void fun(char *filename, long sno) FILE *fp;STU n; int i;fp = fopen(filename考点,rb+);/*found*/whi
23、le (!_1_考点) fread(&n, sizeof(STU), 1, fp);考点/*found*/if (n.sno_2_) break;if (!feof(fp) for (i=0; i<3; i+) n.scorei += 3;/*found*/fseek(fp, -1L*_3_, SEEK_CUR);考点fwrite(&n, sizeof(STU), 1, fp);考点fclose(fp);考点1需要注意打开的是哪个文件,本题目中指向的是形参filename所指向文件。考点2 feof(fp)用于判断文件是否结束。考点3 fread(&n, sizeof(STU), 1, f
24、p)从文件中读取一个数据给变量n。考点4 fseek(fp, -1L*_3_, SEEK_CUR);将指针移动到当前位置前一位,由于指针指向的是结构体,因此fseek(fp, -1L*sizeof(STU), SEEK_CUR);考点5 写入数据fwrite(&n, sizeof(STU), 1, fp);文件类型的题目:22、28、30、32、47、63、80、88、941、文件类型的题目,看清楚题目意思,定义一个文件的指针,第一个位置出现fp的时候要填FILE *;2、掌握文件中fopen、fprintf、fscanf、fputs、fputc、fgets、fgetc、fseek、fwrit
25、e、fread、rewind函数的使用的格式。fopen(“文件名”,“打开方式”);fclose;fscanf;fprintf;fwrite(存入数据的指针,每一个数据占有的字节,输入数据的个数,文件指针);fread(读出数据的指针,每一个数据占有的字节,输出数据的个数,文件指针);3、文件打开之后要注意关闭文件,关闭文件的函数fclose(文件指针);4、在循环语句中如果使用到的是while(!feof( )空格中填写的文件指针,表明判断的是文件指针是否已经指到了文件的末尾。备注:如果文件指针指到了文件的末尾,则feof返回的是非零值,如果没有指在文件的末尾,返回的是0值。数组类型的题目
26、:3、4、7、20、24、26、39、40、41、54、57、64、68、70、71、76、89、90、99一维数组中存在这样一些类型:1、 求一个数值数组中的所有值的平均值和把大于或者小于平均值的数辅导例外一个数组中。在计算机平均值时,首先定义一个变量来存放平均分,平均分一般用av变量来代替,如果av已经定义但是没有赋初值,那么这个空填写的内容的为:av=0;2、 求算平均值值时有两种方法,第一种是算出总的分数,最后再除以总的个数即可,如算1到6之间的数的平均值,首先算出1到6的和,其次用综合除以总的个数6,即可以得到平均值;第二种方法是用每一个数除以6再把所有的和加起来。即1/6+2/6+
27、3/6+4/6+5/6+6/6;所以在执行的一维数组中算平均值时也是存在来中情况,如果在for语句的后面有av=av/N;则第二个空一般的填写时av+=si;如果说没有av=av/N;则填写的是:av+=si/N;3、 在后面的一个空的填写的时候要注意变量的使用情况,如果变量使用了j和i,那么这一个空的填写的内容为:j+;4、 如果一维数组中求的是把大于或者是小于平均值的数移动到数组的首部的时候,这种题目的解答时这样的,第一个空一般填写的内容为:j+;第二个空填写的内容是-1;5、 对数组进行排序时:如果是从大到小的排序的时候,用的是小于符号,如果是从小到大排序时使用的是大于符号。二维数组中的
28、题目类型以及解决的技巧:1、 二维数组的题目,填空的时候一般是填在函数调用,函数在调用时候写的应该是而为数组的名字;在定义函数的时候使用的是函数的类型和由m各元素组成一行的指针变量,假设二维数组的名字是ss,那么填写的内容是:(*ss)M;如果调用的是普通变量则填写的内容为:int n;2、 二维数组遍历时,使用的是两个循环,使用的是循环的嵌套使用,第二个循环的使用的时候填写的内容为:j=0;(特殊的特殊处理)3、 交换两个变量的值的使用的格式为:t=a;a=b;b=t;记住交换变量的格式和顺序。4、 如果二维数组是字符串的题目的时候,要记住字符串中函数的使用的格式;即:strlen、strc
29、mp、strcpy、sizeof、strcat的使用格式。注意里面的格式中使用的都是和指针。5、 特殊的特殊处理。第7题的填空的内容记住。字符串类型的题目:5、8、10、11、12、14、18、19、21、34、35、45、48、49、53、55、62、65、67、72、74、77、81、91、93、100解题方法:1、循环的条件是判断该字符是否和结束符相等,如果相等,说明该字符串结束,否则说明没有结束,继续循环。2、把一个数字字符转变成对应的数值的格式是:ch=ch-0;把大写字母转变为小写字母的格式:ch=ch+32;把小写字母转变为大写字母的格式为: ch=ch-32;3、 区分好字符数
30、组中的指针(p)和指针所指的值(*p)的关系。在循环语句中,当指针往后走一个位置的时候,用的是指针的自加,而不是指针所指的值的自加。即:p+,不能是(*p)+,后者就是值的自加。4、 掌握字符数组中的函数的使用的格式。即:strlen、strcmp、strcpy、sizeof、strcat的使用格式。注意里面的格式中使用的都是指针或是地址。5、 字符数组结束时都有一个结束符:0;在字符数组中的题目中的结束后要加上一个结束符。也可以用0来代替0。6、如果考察的是字符串数组,注意函数定义中形参的定义,例如:定义的是N行M列的二维数组来存放字符串。那么void fun(char (*ss) _1_,
31、 int k)fun函数中的形参必须填入的是char (*ss)M,不能是char (*ss)N考试的时候要特别注意。数学题目:6、13、25、29、36、46、52、60、66、69、73、83、95解题方法:1.如果在函数中定义变量,但是没有定义成静态存储变量,即变量前面没有static,应给变量赋初值,如果以后用到的是加减运算,则赋初值为0或者是0.0;如果以后用到的是乘除运算,则赋初值为1或者是1.0;2.循环条件的填空,分析表达式的规律,看表达式中的最后一项的值是否到了第m项或者是第n项,如果到了第m或者第n项,则在循环中的第二个表达式中用到的是i<=m或者是i<=n;3.循
32、环条件中如果用的是while语句,则循环变量的初值应该在while的外面定义和赋初值,在循环语句中必须给变量自加或者是自减。如果没有则一般填的是i+;4.看表达式中的每一项的运算规则,按照运算的规则把每一项中的n值替换为i,特殊情况例外。如果是表达式中用到的是间隔相加减的运算时,注意给中间变量赋初值为1或者是1.0;在后面的运算中给变量乘以一个-1,以改变中间变量的符号。解题分析:看清题目中要求的题意,题目要求做什么就只需考虑什么。找出题目中的表达式:当n=1时,表达式变为,当n=2时,表达式为,n不断的变化,得到的表达式值也不相同,题目中要求将n=1,n=2n=n的值进行一个累加,最后得到一
33、个结果赋值给变量s。通过以上的分析我们可以得到如下的信息:需要一个变量来存储结果值。对应到程序中,我们使用s来表示,因为计算的结果可能为小数,因此将s定义为实型。需要一个变量从1开始递增到n,对应到程序中用i表示。需要用到循环的知识。函数最后会将s的值进行返回。double fun(int n) int i; double s, t;/*found*/s=_1_;需要给s赋初始值,一般赋值为0或是1,这里面有规律,在填空题中一定填入的是0。/*found*/for(i=1; i<=_2_; i+)需要填入的是i变量的初始值和结束值,结束值一般是通过实参传递给形参的,因此很多时候填入形参名即
34、可。 t=2.0*i; 将2*i的值赋值给变量t,因此遇到直接用t*t代替就行。/*found*/s=s+(2.0*i-1)*(2.0*i+1)/_3_; 需要在(2.0*i-1)*(2.0*i+1)/_3_;中填入适当的值来补充完整表达式,比较得知,(2.0*i-1)*(2.0*i+1)/_3_;缺少的是部分,上面分析过可以用t*t来代替,因此,第三个填入t*t就行!return s;二改错题分类总结改错题总的出错分为两大类:语法出错和逻辑出错,此类题目是比较简单的题型,因此也是最容易把握的知识点。注意:错误都是出现在/*found*/下面的这一行。只是下面的这一行,其他行都没有错误。不能修
35、改其他行。做题方法:1.首先拿到题目,先将题目详细看看,看清题目对做题时很有帮助的,特别是一些逻辑性较强的题目很有用。有的同学可能会觉得题目太难了不想去读,其实在做改错题目时即便你不会也能把题目做对。2按照以下的步骤解决题目中的错误的内容,对应着修改。修改完之后保存即可。一 语法错误1.关键字出错:在二级C语言考试中仅仅考查学生对基本的关键字掌握情况,比如:整型就是int不是Int,知识点简单。6题第二个空:If应该改为if;12题第二个空:If应该改为if;23题第一空:dounle应该改为double;35题第二空:If应该改为if;9036题第二空:Double应该改为double。51
36、题的第一空double2题第二空:wihle应该改为while。return为小写,不能使大写的。54、862.格式出错:在考试中主要考查学生细心的程度,最喜欢考简单的知识点。少分号:2题第一空、28题第一空、29题第一空、34题第二空、37题第二空、48题第二空。考查的知识点:分号是语句结束的标志。59、70、79、97、for语句的格式:for( ; ; )中间用分号隔开不是用逗号隔开。3题第二空、6题第一空、14题第二空都是出现了for语句格式出错的问题。53、73if语句的格式:if(表达式),if后面必须加上小括号。37题第一空if后面必须加上小括号。命令行格式出错:17题第一空中i
37、nclude命令少了#,正确的形式应该是#include “stdio.h”;常用函数格式:A 22题第一空中n=strlenaa应该改为n=strlen(aa),记住函数名后面一定是花括号,不能是方括号,方括号只有在数组下标中用到。B 49题第一空int j,c,float xa=0.0;应该改为int j,c;float xa=0.0;记住:要同时定义两种以上不同的数据类型的时候必须在不同类型的数据中间加上分号。C 41题第二空scanf(“%d”,aij);应该改为scanf(“%d”,&aij)。考查Scanf输入函数的格式。数组:所有老师讲到数组时候必须统一将此知识点给学生回顾一遍!
38、A数组下标引用时候只能用反括号。28题第二空t(k)=b(j)应该改为tk=bj。B二维数组中的列下标不能省略。46题第一空必须将数组列下标补充完整。常用符号出错:A C语言中大于等于符号是“>=”,但是在考试的时候可能出现将它写为“=>”,49题第二空就是这样的错误。B 当题目中需要比较某个字符是否是大写字母或是小写字母、数字时,必须将“与”、“或”、“非”记住。判断某个字符是否是大写字母:char ch;if(ch>=A&ch<=Z)printf(“%c”,ch);判断某个字符是否是小写字母:char ch;if(ch>=a&ch<=z) printf(“%c”,c
39、h);判断某个字符是否是数字:char ch;if(ch>=0&ch<=9)printf(“%c”,ch);判断某个数字是否能同时被5和7整除:int i=35; if(i%5=0&i%7=0)printf(“%d”,i);判断某个数字是否能被5或7整除:int i=35; if(i%5=0|i%7=0)printf(“%d”,i);判断某个数字是否是偶数或奇数:int i=35; if(i%2=0)printf(“%d是一个偶数”,i);else printf(“%d是一个奇数”,i);二 逻辑错误1.使用了没有定义过的变量:这种题目可以通过编译查找出出错的地方并改之。0和o的区别:
40、19题第一空、23题第二空、43题第二空、51题第二空。77、98、P和p的区别:33题第一空。82普通变量大小写的区别:A有的变量在定义的时候是小写但是在使用的时候是大写,或是在定义的时候是大写在使用的时候却是小写。B 大小写没有出错,程序中直接使用了没有定义过的变量,要求学生更加细心的读题目。45题第二空使用到了i这个变量,但是我们在定义行中没有找到i的定义,因此在做题时候要上下结合来分析题目。22题第二空c=aaj中的c没有定义过,参看定义的语句不能发现应该是ch=aaj。38题第一空要求将后面用到的变量s1定义完整。2.运算符号出错:C语言中除号是“/”不是“”赋值号和等号混淆,记住在
41、if语句中出现赋值号一般是讲它改为等号。14题第一空和29题第二空都是这样的错误。87、91、943.表达式的取值范围出错:当遇到计算表达式的累加或是累减时,一定用到循环来完成相应的操作。例如:改错题第七题中要求计算t=1-1/2*2-1/3*3-.-1/m*m这个表达式,在这个题目中第一空有这样的for语句:for(i=2;i<m;i+)y-=1/(i*i);从题目中不难发现i是一个变量,它的取值范围从整数2开始到m-1结束,最终计算的结果为 y=1-1/2*2-1/3*3-.-1/(m-1)*(m-1)和题目要求的不符,因此将i<m改为i<=m。做这样的题目看两点:一看题目中的
42、表达式,二看for语句中变量的取值范围。31题第二空同样的考点。52.2、81、88、4.C语言中的除法运算:这个考点同样考查表达式的相关知识。例如:改错题第七题中要求计算t=1-1/2*2-1/3*3-.-1/m*m这个表达式,在这个题目中第一空有这样的for语句:for(i=2;i<m;i+)y-=1/(i*i);刚才我们将了表达式的范围,现在我们考虑y-=1/(i*i);是否正确?赋值号左边问题不大,我们看看右边1/(i*i),其中i是整数,那么i*i也是整数,在C语言中1除以比它大的数时值为零。这样和题目的要求就不相符。记住:1/2的值为零,只有1.0/2或是1.0/2.0的值为0
43、.5。39题第一空也同样是这种错误。57、765.找最大值和排序问题:遇到这种题目在改错题中最容易考查的是大于、小于等符号的变化,当你查找出错的地方没有语法错误,也没有使用了未定义的变量时,记住这个口诀:将大于改为小于,将小于改为大于!11题第二空、12题第一空和13题第二空、4题第二空都可以用这样的方法。586.函数的返回值及其参数:重点int fun(int x,int y) main if(x>y)return x; int a,b,c;else return y; scanf(“%d%d”,&a,&b); c=fun(a,b);printf(“最大值为:%d”,c);函数的返回类型
44、:在上面的例子中fun函数的返回值是int,如果将int改为double,很明显是错误的。从两个地方来看,首先return x;中x的类型必须和fun函数中的返回值相同,x是整型。其次c=fun(a,b);中fun函数将一个返回值赋值给了变量C,说明函数返回的值一定是整型。记住:函数调用、函数的返回值和ruturn中数据类型必须一致!1.1、3.1、16.1、19.2、34.1、36.1、40.1、48.1、71都死这样的错误,。78、89、90、return后面的表达式及其类型:19.2、30.2、39.2函数传递的参数:int fun(int *x,int *y) main if(*x>*y)return *x; int a,b,c;else return *y;