第一篇:09-6省考2C改错题
第二部分:改错题(每题10分,2题/套,共20分)
说明如下:
(1)修改程序中每对“/**/”之间存在的错误;(2)不得删改程序中的“/**/”注释和其它代码;
(3)源程序均在考生文件夹中,务必以原文件名保存程序;(3)按Alt+Tab键,切换考试程序与Turbo C;按Alt+Enter键,切换Turbo C窗口大小。
第1套
1.程序Cmody011.C的功能是:从字符串数组str1中取出ASCII码值为偶数且下标为偶数的字符依次存放到字符串t中。
例如,若str1所指的字符串为:4AZ18c?Ge9a0z!
则t所指的字符串为:4Z8z
注意:数组下标从0开始。
2.程序Cmody012.C中,函数fun(int n)的功能是:根据参数n,计算大于10的最小n个能被3整数的正整数的倒数之和。例如:
fun(8)1121151181211330.396
----------Cmody011.C-------------------#include
int i, j;/**/ i = 0;/**/
clrscr();
strcpy(str1, “4AZ18c?Ge9a0z!”);
for(i = 0;i { /**/ if((str1[i] %2== 0)&&(i%2!=0))/**/ { t[j] = str1[i]; j++; } } t[j] = ' '; printf(“n Original string: %sn”, str1); printf(“n Result string: %sn”, t);} ----------Cmody012.C-------------------#include int i,j; j=0; for(i=1;;i++) { /**/ if((i<10)&&(i%3==0))/**/ { /**/ y+=1/i;/**/ j++; } if(j==n)break; } return y;} void main(){ clrscr(); printf(“fun(8)= %8.3lfn”, fun(8));} 第2套 1.程序Cmody021.C输出如下所示图形: * * * * * * * * * * * * * * * * * * * * * * * * * 2.程序Cmody022.C的功能是求解百元买百鸡问题: 设一只公鸡2元、一只母鸡1元、一只小鸡0.5元。问一百元买一百只鸡,公鸡、母鸡、小鸡数可分别为多少?有多少种分配方案? ----------Cmody021.C-------------------#include for(i=1;i<=5;i++) { for(j=1;j<=10-2*i;j++)printf(“ ”);/**/ for(j=1;j<=5;j++)/**/ printf(“* ”); printf(“n”); } }----------Cmody022.C-------------------#include clrscr(); for(cock=0;cock<=50;cock+=1) for(hen=0;hen<=100;hen=hen+1) { chicken=2*(100-hen-2*cock); /**/ if(cock+hen+chicken=100)/**/ { n++; printf(“%d-->hen:%d,cock:%d,chicken:%dn”,n,hen,cock,chicken); if(n==20)getch(); } } return n;} void main(){ int num; num=fun(); printf(“n There are %d solutions.n”,num); getch();} 第3套 1.程序Cmody031.C的功能是:从键盘上输入两个整数,及一个运算符(+、-、*、/或%),进行相应的运算后输出运算的结果。 如输入:1+2 将输出:1+2=3 2.程序Cmody032.C的功能是:输出201-300之间的所有素数,统计总个数。 ----------Cmody031.C-------------------#include clrscr(); printf(“Input an expression: ”); scanf(“%d%c%d”,&m,&ch,&n);/**/ switch ch /**/ { case '+': result=m+n;break; case '-': result=m-n;break; case '*': result=m*n;break; case '%': result=m%n;break; case '/': result=m/n;break; default: { printf(“Error!n”);flag=1;} } if(!flag)printf(“%d %c %d = %dn”,m,ch,n,result); getch();}----------Cmody032.C-------------------#include printf(“n”); num=fun(); printf(“nThe total of prime is %d”,num); getch();} int fun(){ int m,i,k,n=0; for(m=201;m<=300;m+=2) { k=sqrt(m+1); for(i=2;i<=k;i++)/**/ if(m/i==0)/**/ break;/**/ if(i==k)/**/ { printf(“%-4d”,m); n++;; if(n%10==0)printf(“n”); } } return n;} 第4套 1.程序Cmody041.C,其功能是统计输入字符串中小写英文字母的个数。 如 输入:abcdEFGHIJK123 输出:4 2.程序Cmody042.C,其功能是将从键盘依次输入的M个整数逆序输出。 如 输入:12 4 656 83 25 35 76 29 输出:29 76 35 25 83 656 4 12----------Cmody041.C------------------- #include char str1[128];/**/ int i;len, sum=0;/**/ gets(str1); len = strlen(str1); for(i=0;i { /**/ if(str1[i] >= 'a' || str1[i] <= 'z')/**/ sum++; } printf(“%dn”,sum); getch();}----------Cmody042.C-------------------#include printf(“Please input 8 numbers:n”); for(i=0;i scanf(“%d”, /**/ a[i] /**/); printf(“Inverse order is: n”);/**/ for(i=M-1;i<=0;i--)/**/ printf(“%d ”, a[i]); printf(“n”); getch();} 第5套 1.程序Cmody051.C,其功能是统计输入字符串中大写英文字母的个数。 如 输入:abcDEFGH123 输出:5 2.程序Cmody052.C,其功能是实现从键盘依次输入M个整数,输出其中所有的偶数。 如 输入:23 62 38 45 26 输出:62 38 26----------Cmody051.C-------------------#include /**/ char str1 /**/; int i,len, sum=0; printf(“Please input a string:n”); scanf(“%s”, str1); len = strlen(str1); for(i=0;i { if(str1[i] >= 'A' && str1[i] <= 'Z') /**/ sum--;/**/ } printf(“%dn”,sum); getch();}----------Cmody052.C-------------------#include M 5 /**/ main(){ int a[M],i; printf(“Please input 5 numbers:n”); for(i=0;i scanf(“%d”, &a[i]); printf(“Even numbers:n”); for(i=0;i /**/ printf(“%d ”, a[i]); printf(“n”); getch();} 第6套 1.程序Cmody061.C,其功能是将输入字符串中‘0’~‘8’的数字字符变为比它大1的数字字符,将‘9’变为‘0’。 如 输入:abc12cd56EF89GH4 输出:abc23cd67EF90GH5 2.程序Cmody062.C,其功能是将程序中的两个字符串“ABC”、“xyz”连接在一起,并输出“ABCxyz”。 ----------Cmody061.C-------------------#include char str1[128], str2[128]; int i,len; gets(str1); len = strlen(str1);/**/ for(i=0;i>len;i++)/**/ { if(str1[i] >= '0' && str1[i] <= '8') str2[i] = str1[i] + 1; else if(str1[i] == '9') str2[i] = '0'; else str2[i] = str1[i]; } /**/ str2[i] = 'n';/**/ puts(str2); getch();}----------Cmody062.C-------------------#include char s1[12]=“ABC”, s2[]=“xyz”; char * ps1=s1,*ps2;/**/ ps2 = NULL;/**/ /**/ while(*ps1 == NULL)/**/ ps1++; while(*ps2)*(ps1++)= *(ps2++); printf(“%sn”,s1); getch();} 第7套 1.程序Cmody071.C,其功能是从键盘输入三角形的三边长,求其面积,若三个边长不能构成三角形,则提示。 如 输入:6 9 11 输出:26.98 2.程序Cmody072.C,其功能是求解百马百担问题。 有100匹马,驮100担货,大马驼3担,中马驼2担,两匹小马驮1担,问大、中、小马数可分别为多少?有多少种解决方案? ----------Cmody071.C-------------------#include float a[3],s,area; int i; printf(“Please input 3 numbers:n”); for(i=0;i<3;i++) scanf(“%f”,/**/ a[i] /**/);/**/ if(a[0]+a[1]>a[2] || a[1]+a[2]>a[0] || a[0]+a[2]>a[1])/**/ { s =(a[0]+a[1]+a[2])/2; area = sqrt(s*(s-a[0])*(s-a[1])*(s-a[2])); printf(“area is %.2fn”,area); } else printf(“error.n”); getch();}----------Cmody072.C-------------------#include int large,middle,small,n=0; clrscr(); for(large=0;large<=33;large++) for(middle=0;middle<=50;middle++) { small = 2*(100-3*large-2*middle); /**/ if(large+middle+small=100)/**/ { n++; printf(“%d-->large:%d,middle:%d,small:%dn”,n,large,middle,small); } } return n;} void main(){ int num; num = fun(); printf(“n There are %d solutions.n”,num); getch();} 第8套 1.程序Cmody081.C,其功能是求一堆零件的总数(100到200之间)。 如果分成4个零件一组的若干组,则多2个零件;若分成7个零件一组,则多3个零件;若分成9个零件一组,则多5个零件。 2.程序Cmody082.C,其功能是交换两个变量的值。如输入:2 3 输出:Original: a=2 b=3 Result: a=3 b=2----------Cmody081.C-------------------#include int i; /**/ for(i=100;i<200;i++);/**/ if((i-2)%4 == 0) if(!((i-3)%7)) if(i%9 == 5) printf(“%dn”,/**/ &i /**/); getch();}----------Cmody082.C-------------------#include int temp; temp = *p1; /**/ p1 = p2;/**/ *p2 = temp;} void main(){ int a,b; printf(“please input 2 numbers:n”); scanf(“%d%d”,&a,&b); printf(“nOriginal: a=%d b=%dn”,a,b); swap(&a,&b); printf(“nResult: a=%d b=%dn”,a,b); getch();} 第9套 1.程序Cmody091.C,其功能是计算1至100之间的奇数之和,偶数之和。 2.程序Cmody092.C的功能是求满足等式xyz+yzz=520的x,y,z值(其中xyz和yzz分别表示一个三位数)。 ----------Cmody091.C-------------------#include int b,i;/**/ int a=c=0;/**/ /**/ for(i=0,i<=100,i+=2)/**/ { a+=i; b=i+1; c+=b; } printf(“total of even numbers: %dn”,a); printf(“total of odd numbers: %dn”,c-101); getch();}----------Cmody092.C-------------------#include int x,y,z,i,result=520; for(x=1;x<10;x++) for(y=1;y<10;y++) /**/ for(z=1;z<10;z++)/**/ { i=100*x+10*y+z+100*y+10*z+z; /**/ if(i=result)/**/ printf(“x=%d,y=%d,z=%dn”,x,y,z); } getch();} 第10套 1.程序Cmody101.c,其功能是计算如下所示的数学表达式: s=a2.3a5.6a8.22+ b2.3b5.6b8.22--c2.3c5.6c8.22 2.程序Cmody102.c,其功能是实现打印出所有的“水仙花数”。所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如,153是一个水仙花数,因为153=13+53+33。 ----------Cmody101.c------------------- #include float a=6.0,b=3.0,c; /**/ int s;/**/ printf(“nPlease input c: ”); scanf(“%f”,/**/ c /**/); /**/ s=F(a,b,c);/**/ printf(“ns=%.2fn”,s); getch();}----------Cmody102.c------------------- #include int f,s,t,n; printf(“nThe list is:n”); for(n=100;n<1000;n++) { f=n%10; s=(n%100)/10; /**/t=n%100;/**/ /**/if(t*t*t+s*s*s+f*f*f=n)/**/ printf(“%d ”,n); } printf(“n”); getch();} 第11套 1.程序Cmody111.c,输出如下所示图形: @ @@ @@@ @@@@ @@@@@ @@@@@@ Cmody112.c,实现输出如下所示的4×4的矩阵: 2 3 4 7 6 5 10 11 12 2.程序 1 8 9 16 15 14 13----------Cmody111.c------------------- #include /**/ int i;j;/**/ /**/ for(i=6;i>1;i--)/**/ { printf(“@”); for(j=1;j<=6-i;j++) printf(“@”); printf(/**/ “r” /**/); } getch();}----------Cmody112.c------------------- #include for(j=0;j {if(i%2==0) /**/ a[i][j]=i+j+1;/**/ else a[i][j]=i*N+N-j; } } main(){ /**/ int a[N,N];/**/ int i,j; init(a); for(i=0;i {for(j=0;j printf(“%3d”,a[i][j]); printf(“n”); } getch();} 第12套 1.程序Cmody121.C,统计1~100之间的整数中含有数字3或5的整数的个数。 2.程序Cmody122.C 中函数void chg(char *s),实现将字符串中所有偶数位置上的小写 英文字母转换为大写英文字母(不是英文字母不转换)。 ----------Cmody121.C-------------------#include int i,gw,sw,count=0; for(i=1;i<=100;i++) { sw=i/10; /**/ gw=i-sw;/**/ /**/ if((gw==3 || gw==5)&&(sw==3 ||sw==5))/**/ count++; } printf(“nThe count of 1-100:%d”,count); getch();}----------Cmody122.C-------------------#include {n++; p++; } for(i=0;i s[i]=s[i]-32;/**/ s[i]='0';/**/ } void main(){ char ss[100]; printf(“Enter string: n”); gets(ss); chg(ss); printf(“nNow string is :n”); puts(ss); getch();} /**/ 类型A:素数 A1、下面的程序是求400以内的所有的素数之和。请修改程序中的错误,使它能得出正确的结果,并给出正确结果。#include if(n<=1){return 0;} yes=1; /*原来的代码: for(i=2;i<=sqrt(n);i++) if(n%i==0){ yes=0;break;} return yes;} main(){ int sum=0, i; clrscr(); for(i=2;i<=400;i++) if(prime(i))sum+=i; printf(“%dn”, sum);} yes=0 */ /*原来的代码: yes=1 */ A2、下面的程序是求1000以内的最大的20个素数之和。请修改程序中的错误,使它能得出正确的结果,并给出正确结果。18580 #include while((high>=2)&&(n<20)) /*原来的代码: while((high>=2)||(n<10))*/ {yes=1; for(j=2;j<=sqrt(high);j++) if(high%j==0) { yes=0;break;} /*原来的代码: yes=0;break;忘了大括号 */ if(yes){sum+=high;n++;} high--; } return sum;} main(){ clrscr(); printf(“%d n”,fun(1000));} 类型B:完数,多因子完备数 B1、若某个整数N的所有因子之和等于N的倍数,则称N为多因子完备数。例如,28是多因子完备数。因为:1+2+4+7+14+28=56=28*2,下面程序求[150,1000]间有多少个多因子完备数,请修改程序中的错误,使它能得出正确的结果,并给出正确结果,填入相应窗口。#include /*原来的代码: b=0 写在此行,应该把它移到循环内.*/ for(a=150;a<=1000;a++) { b=0; /*原来的代码: 移后的新位置 */ for(c=1;c<=a;c++)/*原来的代码: c=2 */ if(a%c ==0) b=b+c; if(b%a==0) { count=count+1; } } printf(“n count = %d”,count); } B2、若某个整数N的所有因子之和等于N的倍数,则称N为多因子完备数。例如,28是多因子完备数。因为:1+2+4+7+14+28=56=28*2,下面程序求[1,700]间最大的多因子完备数,请修改程序中的错误,使它能得出正确的结果,并给出正确结果,填入相应窗口。#include for(a=1;a<=700;a++) { b=0; for(c=1;c<=a;c++) /*原来的代码: c=2 */ if(a%c ==0) b=b+c; if(b%a==0) { big=a; /*原来的代码: big=b */ } } printf(“%dn ”,big); } B3、以下程序求10000以内的所有完全数的个数,请修改程序中的错误,使它能得出正确的结果,并给出正确结果,填入相应窗口。”完全数”是指:一个数如果刚好与它所有的真因子(不包括该数本身)之和相等,如:6=1+2+3,则6就是一个完全数。#include int count,n,m,s,k;count=0;for(n=3;n<=10000;n++){ s=0; /*原来的代码: s=1 */ } k=n/2+1; for(m=1;m } printf(“nThe count=%d”,count);if(n%m==0)s+=m; /*原来的代码: s+=1 */ if(s==n){ count+=1;} 类型C:数字问题 C1、下面程序是求[10,650]之间同时满足除4余3或除5余4条件的数之和。请修改程序中的错误,使它能得出正确的结果,并给出正确结果,填入相应窗口。84544 #include if(fmod(i,4)==3 || fmod(i,5)==4) sum+=i;} clrscr();printf(“%ldn”,sum);} C2、下面程序是求[2,60]之间的所有偶数的立方和。请修改程序中的错误,使它能得出正确的结果,并给出正确结果,填入相应窗口。1729800 #include if(fmod(i,2)==0) sum+=i*i*i; /*原来的代码: sum+=i*3 */ } clrscr();} C3、下例程序中,函数fun的功能是:计算并输出k以内的最大的10个能被13和17整除的自然数之和。请改正程序中的错误,并运行正确的程序。当从键盘输入2500时,给出程序运行的正确结果 14365 #include { m=m+k;mc++;} k--;} return m; /*原来的代码:return;*/ } printf(“%ldn”,sum);main(){ int k; clrscr(); printf(“n 请输入整数:”); scanf(“%d”, &k); printf(“n 结果是: %dn”,fun(k));} 类型D:数列 D1、下面的程序中,函数fun的功能是:根据形参m,计算下面公式的值。T=1/1!+1/2!+1/3!+......+1/m!请改正程序中的错误,并运行改正后的程序。当从键盘输入10时,给出程序运行的正确结果(按四舍五入保留10位小数)。#include for(j=1;j<=i;j++)fac=fac*j; /*原来的代码: for(j=1;j<=m;j++)fac=fac*i;*/ t+=1.0/fac;} return t;} main(){ int m;clrscr();printf(“n 请输入整数: ”);scanf(“%d”, &m);printf(“n 结果是: %12.10lf n”,fun(m));} D2、下面的程序是计算:s=f(-30)+f(-29)+......+f(-1)+f(0)+f(1)+......+f(30)的值。其中函数定义如下: f(x)=(x+1)/(x-2)if x>1 f(x)=0 if x=0 or x=2 f(x)=(x-1)/(x-2) if x<0 请改正程序中的错误,并给出正确程序的运行结果(保留6位小数)。65.223018 #include /*原来的代码: && */ return 0.0; else if(x<0.0) return(x-1)/(x-2); else return(x+1)/(x-2);} double fsum(int n){ int i;double s=0.0, y; for(i=-n;i<=n;i++) {y=f(1.0*i);s+=y;} return s;/*原来的代码: return y;} main(){ clrscr();printf(“%lfn”, fsum(30));} D3、已知fibonacci数列:1,1,2,*/ 3,5,......,它可由下面公式表述: 8 F(1)=1 if n=1 F(2)= 1 if n=2 F(n)=F(n-1)+F(n-2) if n>2 以下程序是求F(30),请修改程序中的错误,使它能得出正确的结果,并给出正确结果,填入相应窗口。832040 #include int i; f1=1;f2=1; for(i=1;i<=14;i++) /*原来的代码: i<=30 */ { f1=f1+f2; f2=f2+f1; } clrscr(); printf(“n the number is :%12.0lf”,f2); /*原来的代码: f1 */ } D4、下面的程序是求表达式的值: s=1+1/3+(1*2)/(3*5)+(1*2*3)/(3*5*7)+......+(1*2*3*....*n)/(3*5*7*.....(2*n+1))请修改程序中的错误,并运行修改后的程序。当n=30时,程序的运行结果(保留10位小数)。1.5707963267 #include s=1.0;t=1.0; for(i=1;i<=n;i++) { t=t*i/(2*i+1); /*原来的代码: t=t*n/(2*n+1);*/ s+=t; /*原来的代码: s=t */ } return s;} main(){printf(“n %12.10lf”, fun(30));} D5、下面的程序是求如下表达式的值。S=sqrt(ln(1)+ln(2)+ln(3)+……+ln(n))请改正程序中的错误,并运行修改后的程序,当n=50时,给出程序运行结果(保留6位小数)。12.185145 #include /*原来的代码: int fun(int n)*/ { double s=0;int i;/*原来的代码: int s=0;*/ for(i=1;i<=n;i++) s+=log(1.0*i); s=sqrt(s); return s;} main(){clrscr();printf(“%lfn”,fun(50));} D6、下列程序的功能是求出以下分数序列的前35之和,2/1,3/2,5/3,8/5,13/8,21/13,......请改正程序中的错误,并运行修改后程序,给出程序结果(保留6位小数)。56.930771 #include double s; clrscr(); s=0.0;a=2;b=1; for(k=1;k<=30;k++) { s=s+(double)a/b;/*原来的代码:(Double)a/b */ c=a;a=a+b;b=c; /*原来的三条交换语句写错了:a=a+b;c=a;b=c;*/ } printf(“n 结果: %lfn”, s);} D7、下列程序的功能是求出以下分数序列的前25之和,2/1,3/2,5/3,8/5,13/8,21/13,......请改正程序中的错误,并运行修改后程序,给出程序结果(保留6位小数)。40.750431 #include /*原来的代码: fun(n)*/ { long a,b,c; int k;double s; s=0.0;a=2;b=1; for(k=1;k<=n;k++) { s=s+(double)a/b; c=a;a=a+b;b=c; } return s;} main(){ int n=25; clrscr(); printf(“n result: %lfn”,fun(n));} 类型E:同构数 E1下面程序求[1,600]之间最大的同构数,请修改程序中的错误,使它能得出正确的结果,并给出正确结果,填入相应窗口。同构数是:一自然数平方的末几位与该数相同时,称此数为自构数,例如:5*5=25,则称5为自同构数。376 #include for(n=3;n<=600;n++)/*原来的代码: n<=750 */ { if(n<10)k=10; else if(n<100)k=100; else k=1000; s=n*n; s=s-n; if(s%k==0) { big=n; /*原来的代码: big=s */ } } printf(“n The biggest = %ld”,big);/*原来的代码: %d */ } 改错题: 1.程序Cmody 041.c,其功能是统计输入字符串中大小写字母的个数,如输入:abcdEFGHIJK 123 输出:4 答案: #include char str1[128];/**/ int i, len, sum=0;/**/ gets(str1); len = strlen(str1); for(i=0;i { /**/ if(str1[i] >= 'a' && str1[i] <= 'z')/**/ sum++; } printf(“%dn”,sum); getch();} 2.程序Cmody 042.c,其功能是将从键盘依次输入的M个整数逆序输出.如,输入:12 4 656 83 25 35 76 29 输出:29 76 35 25 83 656 4 12 答案: #include printf(“Please input 8 numbers:n”); for(i=0;i scanf(“%d”, /**/ &a[i] /**/); printf(“Inverse order is: n”);/**/ for(i=M-1;i>=0;i--)/**/ printf(“%d ”, a[i]); printf(“n”); getch();} 3.程序Cmody 012.c中函数fun(int n)的功能是:根据参数n,计算大于10的最小n个能被3整除的正整数之和.例如: fun(8)=答案: 1121151181211330.396 #include int i,j; j=0; for(i=1;;i++) { /**/ if((i>10)&&(i%3==0))/**/ { /**/ y+=1.0/i;/**/ j++; } if(j==n)break; } return y;} void main(){ clrscr(); printf(“fun(8)= %8.3lfn”, fun(8));} 4.程序cmody031.C的功能是:从键盘上输入两个整数,及一个运算符(+、-、*、/或%),进行程序相应的运算后输出运算的结果。 如输入:1+2 将输出:1+2=3 答案: #include clrscr(); printf(“Input an expression: ”); scanf(“%d%c%d”,&m,&ch,&n);/**/ switch(ch)/**/ { case '+': result=m+n;break; case '-': result=m-n;break; case '*': result=m*n;break; case '%': result=m%n;break; case '/': result=m/n;break; default: { printf(“Error!n”);flag=1;} } if(!flag)printf(“%d %c %d = %dn”,m,ch,n,result); getch();} 5.程序cmody032.C的功能是:输出201~300之间的所有素数,统计总个数。答案: #include printf(“n”); num=fun(); printf(“nThe total of prime is %d”,num); getch();} int fun(){ int m,i,k,n=0; for(m=201;m<=300;m+=2) { k=sqrt(m+1); for(i=2;i<=k;i++)/**/ if(m%i==0)/**/ break;/**/ if(i>k)/**/ { printf(“%-4d”,m); n++;; if(n%10==0)printf(“n”); } } return n;} 6.程序cmcdy051.c,其功能是统计输入字符串中大写类英文字母的个数。 如输入:abcDEFGH123,输出:5 答案: #include /**/ char str1[255] /**/; int i,len, sum=0; printf(“Please input a string:n”); scanf(“%s”, str1); len = strlen(str1); for(i=0;i { if(str1[i] >= 'A' && str1[i] <= 'Z') /**/ sum++;/**/ } printf(“%dn”,sum); getch();} 7.程序cmody052.c,其功能是实现从键盘依次输入M个整数,输出其中所有的偶数。如输入:23 45 输出:62 答案: #include M 5 /**/ main(){ int a[M],i; printf(“Please input 5 numbers:n”); for(i=0;i scanf(“%d”, &a[i]); printf(“Even numbers:n”); for(i=0;i /**/ printf(“%d ”, a[i]); printf(“n”); getch();} ?8.程序cmody 021.c输出如下所示图形 ******************** *****答案: #include for(i=1;i<=5;i++) { for(j=1;j<=10-2*i;j++) printf(“ ”);/**/ for(j=1;j<=2*i-1;j++)/**/ printf(“* ”); printf(“n”); } } 9.程序cmody 022.c的功能是求解百元买百鸡问题: 设一只公鸡2元,一只母鸡1元,一只小鸡0.5元。问一百元买一百只鸡、公鸡、母鸡、小鸡数可分别为多少?有多少种分配方案? 答案: #include for(cock=0;cock<=50;cock+=1) for(hen=0;hen<=100;hen=hen+1) { chicken=2*(100-hen-2*cock); /**/ if(cock+hen+chicken==100)/**/ { n++; printf(“%d-->hen:%d,cock:%d,chicken:%dn”,n,hen,cock,chicken); if(n==20)getch(); } } return n;} void main(){ int num; num=fun(); printf(“n There are %d solutions.n”,num); getch();} 10、程序cmody061.c功能输入字符串‘0~8’的数字字符比它大1的数字字符将‘9’变为‘0’。如输入:a b 1 2 c d 5 6 E F 8 9 G H 4 a b 2 3 c d 6 7 E F 9 0 G H 5 答案: #include char str1[128], str2[128]; int i,len; gets(str1); len = strlen(str1);/**/ for(i=0;i { if(str1[i] >= '0' && str1[i] <= '8') str2[i] = str1[i] + 1; else if(str1[i] == '9') str2[i] = '0'; else str2[i] = str1[i]; } /**/ str2[i] = ' ';/**/ puts(str2); getch();} 11、程序cmody062.c功能将程序中两个字符串“ABC”、“xyz”连接在一起并输出ABCxyz 答案: #include char s1[12]=“ABC”, s2[]=“xyz”; char * ps1=s1,*ps2;/**/ ps2 = s2; /**/ /**/ while(*ps1!= ' ')/**/ ps1++; while(*ps2)*(ps1++)= *(ps2++); printf(“%sn”,s1); getch();} 12、程序cmody011.c的功能是:从字符串数组str1中取出ASCII码值为偶数且下标为偶数的字符依次存放到字符串中。 eg:若str1所指的字符串为:4AZ18C?Ge9a0z! 则t所指的字符串为:4ZBZ 答案: #include int i, j;/**/ j = 0;/**/ // clrscr(); strcpy(str1, “4AZ18c?Ge9a0z!”); for(i = 0;i { /**/ if((str1[i] %2== 0)&&(i%2==0))/**/ { t[j] = str1[i]; j++; } } t[j] = ' '; printf(“n Original string: %sn”, str1); printf(“n Result string: %sn”, t);} 改错题分类总结 改错题总的出错分为两大类:语法出错和逻辑出错,此类题目是比较简单的题型,因此也是最容易把握的知识点。 注意:错误都是出现在/**********found**********/下面的这一行。只是下面的这一行,其他行都没有错误。不能修改其他行。做题方法: 1.首先拿到题目,先将题目详细看看(包括题干),看清题目对做题时很有帮助,特别是一些逻辑性较强的题目很有用。有的同学可能会觉得题目太难了不想去读,其实在做改错题目时即便你不会也能把题目做对。 2.按照以下的步骤解决题目中的错误的内容,对应着修改。修改完之后保存即可。一 语法错误 1.关键字出错:在二级C语言考试中仅仅考查学生对基本的关键字掌握情况,比如:整型就是int 不是Int,知识点简单。(1)6题第二个空:If应该改为if;(2)1 2题第二个空:If应该改为if;(3)2 3题第一空:dounle 应该改为double;(4)3 5题第二空:I f应该改为if;(5)3 6题第二空:Double 应该改为double。(6)2题第二空:wihle 应该改为while。 2.格式出错:在考试中主要考查学生细心的程度,最喜欢考简单的知识点。 (1)少分号:2题第一空、28 题第一空、29 题第一空、34 题第二空、37 题第 二空、48 题第二空。考查的知识点:分号是语句结束的标志。 (2)for 语句的格式:for(;;)中间用分号隔开不是用逗号隔开。3题第二空、6 题第一空、14 题第二空都是出现了for 语句格式出错的问题。 (3)if 语句的格式:if(表达式),if 后面必须加上小括号。3 7题第一空if 后面必须加上小括号。 (4)命令行格式出错:17 题第一空中include 命令少了#,正确的形式应该是#include “std io.h”; (5)常用函数格式: A 22 题第一空中n=strlen[aa]应该改为n=strlen(aa),记住函数名后面一定是花括号,不能是方括号,方括号只有在数组下标中用到。 B 4 9题第一空int j,c, float xa =0.0;应该改为int j,c;float xa =0.0;记住:要同时定义两种以上不同的数据类型的时候必须在不同类型的数据中间加上分号。 C 4 1题第二空scanf(“%d”,a[i][j]);应该改为scan f(“%d”,&a[i][j])。考查scanf 输入函数的格式。 (6)数组:所有老师讲到数组时候必须统一将此知识点给学生回顾一遍!A数组下标引用时候只能用反括号。2 8题第二空t(k)=b(j)应该改为t[k]=b[j]。 B二维数组中的列下标不能省略。4 6题第一空必须将数组列下标补充完整。A[][3](7)常用符号出错: A C语言中大于等于符号是“>=”,但是在考试的时候可能出现将它写为“=>”,49 题第二空就是这样的错误。 B当题目中需要比较某个字符是否是大写字母或是小写字母、数字时,必须将“与”、“或”、“非”记住。判断某个字符是否是大写字母:char ch;if(ch>=’A’&&ch<=’Z’)printf(“%c”,c h);判断某个字符是否是小写字母:char ch;if(ch>=’a’&&ch<=’z’)printf(“%c”,c h);判断某个字符是否是数字:c har ch;if(c h>=’0’&&c h<=’9’)printf(“%c”,c h);判断某个数字是否能同时被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.使用了没有定义过的变量:这种题目可以通过编译查找出出错的地方并改之。(1)0(零)和o(字母欧)的区别:19 题第一空、2 3题第二空、43 题第二空。(2)P(大)和p(小)的区别:3 3题第一空。(3)普通变量大小写的区别:int a=10;A A有的变量在定义的时候是小写但是在使用的时候是大写,或是在定义的时候是大写在使用的时候却是小写。B大小写没有出错,程序中直接使用了没有定义过的变量,要求学生更加细心的读题目。4 5题第二空使用到了i这个变量,但是我们在定义行中没有找到i的定义,因此在做题时候要上下结合来分析题目。22 题第二空c=aa [j]中的c没我们一直用心做教育!有定义过,参看定义的语句不能发现应该是c h=aa [j]。3 8题第一空要求将后面用到的变量s1 定义完整。2.运算符号出错: (1)C语言中除号是“/”不是“” (2)赋值号(=)和等号(==)混淆,记住在if 语句中出现赋值号(=)一般是讲它改为等号(==)。14 题第一空和29 题第二空都是这样的错误。3.表达式的取值范围出错: 当遇到计算表达式的累加或是累减时,一定用到循环来完成相应的操作。例如:改错题第七题中要求计算t=1-1/2*2-1/3*3-„.-1/m*m这个表达式,在这个题目中第一空有这样的f or 语句:for(i=2;i 这个考点同样考查表达式的相关知识。例如:改错题第七题中要求计算t=1-1/2*2-1/3*3-„.-1/m*m这个表达式,在这个题目中第一空有这样的for 语句:for(i=2;i 遇到这种题目在改错题中最容易考查的是大于(>)、小于(<)等符号的变化,当你查找出错的地方没有语法错误,也没有使用了未定义的变量时,记住这个口诀:将大于改为小于,将小于改为大于!6.函数的返回值及其参数:重点 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);}(1)函数的返回类型:在上面的例子中fun 函数的返回值是int,如果将int 改为doubl e,很明显是错误的。从两个地方来看,首先return x;中x的类型必须和fun 函数中的返回值相同,x是整型。其次c=fun(a,b);中fun 函数将一个返我们一直用心做! 回值赋值给了变量C,说明函数返回的值一定是整型。记住:函数调用、函数的返回值和return中数据类型必须一致! (2)return后面的表达式及其类型:1 9.2、3 0.2、39.2(3)函数传递的参数: 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); prin t f(“最大值为:%d”,c);} 一定注意:传递的是值还是地址。比较上面两个例子大家很容易区别传递的是值 还是地址,第一个例子调用函数的时候传递的是值,因此在f u n函数的形参中x 和y仅仅是普通的变量,而第二个例子中调用函数的时候传递的是地址,因此在 f un 函数的形参中x和y就是两个指针变量。5.1、13.1、17.2、2 0.1、2 5.2依据刚 刚讲的方法很快就能找出出错点。(4)指针的使用: int fun(in t *x, in t *y){ if(*x>*y)return*x;else return*y;} 在此例中f un 函数的形参是x和y,它们的类型是整型的指针,那么在f un 函数的函数体中使用到x和y的值时一定要区分:x>y比较的是x和y所存变量地址的大小,*x>*y才是比较值的大小。如果存在*x=x+y;的类似情况一定是错误的,必须要将赋值号的左右两边的类型变为一致。5.2、5.3、20.2、24.2、35.1、44.1 一定特别注意!7.数组: (1)数组下标的初始值:数组下标从零开始,到长度减一结束。考试技巧:当出错行在定义部分时,先检查该定义语句有没有语法错误,再看定义语句中的变量有没有赋初始值,最后看变量赋的初始值有没有正确。定义初始值有窍门,遇到累加时,用来存放累加和的变量一般赋值为零,遇到求阶乘时,用来存放阶乘值的变量一般赋值为一。8.1中的变量k赋值为1,但是我们说了数组的下标只能从0开始,因此将1改为0就行了。 (2)普通变量的初始值:依照上面的技巧,我们同样可以将它延伸到普通变量中。4 1.1中需要将变量的值进行初始化,题目中有这样的要求:“输出主对角线元素之和”,既然这样我们很肯定初始值应该为零,接着我们看看是给哪个变量赋值?看printf(“su m =%d”,su m);输出的是sum 的值,说明sum 就是我们要补充在横线上的变量。10.1也可以用同样的方法来分析。 (3)数组和字符串长度减一:当使用数组中的元素时,最大值只能到数组长度减一。字符串以’ ’作为字符串的结束标志,因此取值最大也只能到字符串长度减一。25.2中输出p r in t f(“%d”,a a[i]);分析程序知道i在此时就是数组的长度,我们要输出数组中的元素,最大就只能到a a[i-1],因此改为printf(“%d”,aa[i-1]);就行了。4.1和38.2中考查的是字符串长度减一的问题。 (4)数组下标往后走:当题目要求将一个数组中的元素直接赋值或是以某种方式复制到另一个数组中时,接受数据的数组中的下标要自增9.。1中s[j]=s[i];将s[i]中的值复制给s[j],联系上下函数段发现i是一个变量被for语句控制,从0开始直到遇到’ ’结束。i一直在加但是j没有变化,因此改为s[j++]=s[i];即可。类似的题目有:25.2、26.2、32.1、50.2。8.特例: 部分题目的解答很特殊,需要根据上下文中的内容来解答题目;例如10.1,在此题目中,定义了变量t=0;根据下面程序中的循环,s=0.0,首先加的是变量t的值,即s的值是从0.0开始的,s得到的值是:s=0.0+0.0+1.0/3+„„,观察表达式的值,这个少加了第一项1.0的值,所以变量t的初值不能是0.0,只能是1.0,或者是1;21.2中的这个题目中,表达式的值是从2/1+3/2+5/3„„即表达式的规律是从第一项开始,以后的每一项的分子是前一项的分子和分母的和,分母为前一项的分子。所以该题目的第二个空中的内容应该是:c=a;a+=b;b+=c;这一条语句中a代表的变量的分子,b代表的是变量的分母,执行第一个表达式的值,把a的值赋值给变量c,第二个表达式是把分子和分母的和相加复制给变量a,第三个表达式是把原来a的值和变量b的值相加之后得到的值赋值给变量b,则变量b得到的值也为分子分母的和,不满足题意,而分母应该为原来分子的值。第三表达式的值应该改为:b=c;9.素数 掌握求素数的格式: 判断一个数是否是素数的方法很多,只用掌握一种即可,首先掌握判断一个素数的方法; 素数的定义: 1、是自然数 2、只能被1和本身整除,2到本身减一之间的数不能整除该数。判断m是否为素数的格式: for(i=2;i 求素数的题目只要把格式给带进去就可以了。1 1.1这个题目中只用改为“==”。29 题也是一样的解答方法。10、链表 链表的题目分为带头结点的和不带头结点的链表; 1、带头结点的链表 带头结点的链表的第一个空的改为:p=h->next;第二个空改为:p=p->next;.2、不带头结点的链表 不带头结点的链表的第一个空的改为:p=h;第二个空改为:p=p->next;. C语言上机考试改错题分析总结 以下对改错题的改错方式做一些总结,当然这些总结只能对大部分改错行有效。 1、若错误行是函数首部,可分为以下几种情况: A、该行最后若有分号则删除,中间若有分号则改成逗号 B、形参类型不一致的问题,特别是指针类型,若后面用到某形参时有指针运算则该形参必为指针类型;若形参是二维数组或指向m个元素的指针变量,则第二维的长度必须与main中对应数组的第二维长度相同 C、函数类型不一致的问题,若函数中没有return语句则函数类型为void,若有return语句则函数的类型必须与return后变量的类型一致。 2、若错误行是if或while语句,则首先看有没有用小括号将整个表达式括起,若没有则加上小括号。 3、若错误行中有if、while、for则要特别注意条件表达式的错误问题: A、指针变量的应用,若表达式中有指针变量且没有指针运算符,则加上指针运算符 B、若条件表达式中只有一个等于号,则改成两个等于号,若为其它比较运算符则一般是进行逆转或加一个等于号 C、for中要用分号分隔表达式,而不是用逗号 4、语法错误 A、语句缺少分号,若错误行中有语句没有用分号结束,则加上分号。 B、大小写不对,若错误行中有大写字母则一般都改成小写字母。 5、指针变量的运用,若错误行中有指针变量,并且该变量名前没有指针运算符则一般都是加上指针运算符 6、若错误行为return语句,则首先看是否是缺少分号若是则加上分号即可;否则就是return后的变量或表达式错误(此时可通过看题意,来分析该返回哪一变量或表达式) 7、若错误行中见到整型1除以某个表达式时,一概改成1.0。但若是整型变量或表达式则只能用强制转换 8、复合运算符写错 9、字符串结束符写错,若有字符串结束符则要特别注意有没有写错,但第11题例外,因为该题是要将数字字符转换成对应的数字。 10、若错误行是定义语句,则首先看类型是否符合;再看所赋初值是否正确;若以上均不是,则看是否少定义了某个变量或少了花括号。 11、表达式错误(占的份量最多,并且没有统一的改法,我们只能通过题目要求来分析并修改) 12、若错误行中有一条横线,则必须将横线删除再填空。填空题中亦是如此。第二篇:C改错题例题
第三篇:C改错题[定稿]
第四篇:二级C语言改错题分类总结
第五篇:C语言上机考试改错题分析总结