C语言改错题真题解析(30题)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.改错题(30题)
第一题:
#include
void main()
{
int a,b,c;
/**/ float f; /**/ f为小数类型,具体下方f的输出用%f可看出为float 类型
clrscr();
printf("Please input a b :");
scanf("%d%d",/**/&a,&b/**/);变量a,b必须取地址,除非数组名不取地址,因数组名就是地址
f=/**/ (float)a/b; /**/ a,b均为整数,要获得结果的小数部分必须进行强制类型转换
c=(int)((f-(int)f)*10);
printf("\n%f %d\n",f,c);
getch();
}
第二题:
#include
void find(/**/int m /**/)参数类型必须指出,具体main函数中调用find函数的参数k为int 类型,所以对应的参数m也是int类型
{
int a1,a2;
a1=m%10;求m的个位
a2=m/10;求m的十位
if(m%3==0 &&(/**/ a1==4 || a2==4 /**/))如果m能被3整除且个位或者十位是4 printf("%d\n",m);则输出m
}
void main()
{ int k;
for(k=10;k<=99;k++)k从10到99,一一尝试
/**/ find( k ) /**/;调用函数find,函数的作用是寻找满足条件的数
getch();
}
第三题:
#include
void main()
{
/**/ int a,tag; /**/语法错误c语言的变量区分大小写,程序中用到小写tag,此处改为小写int num1=0,num2=0; num1和num2分别为大于个数和小于个数的计数器,程序开始归零clrscr();
printf("please input numbers :");
scanf("%d",/**/ &a /**/);语法错误变量a需取地址,输入第一个数
tag=a;将第一个数放入tag中
while(a)程序以0结束,循环的条件为:只要不输入0
{ scanf("%d",&a);程序循环输入数字,存入a
/**/ if(!a) /**/ continue;逻辑错误,程序执行的条件,a不为0
else if(a else if(a>tag) num2++;如果a中数比tag大,计数器num2增加1 } printf("\n%d %d\n",num1,num2); getch(); } 第四题: #include long int fsum(int n) fsum函数用于求阶乘 { long int k; if(n==1) /**/ k=1 /**/;逻辑错误,1的阶乘为1 else k=n*fsum(n-1);n的阶乘为n-1的阶乘乘以n return (/**/ k /**/);逻辑错误,运算结果在k中 } void main() { int i; long int sum; sum=0; for(i=1;i<=9;/**/ i++,i++ /**/)语法错误for语句格式不符 sum+=fsum(i); printf("sum=%ld\n",sum); getch(); } 第五题: #include void main() { int i,a=0; /**/char c1,c2; /**/ 语法错误c1,c2为字符类型,程序中用getchar()获取 clrscr(); printf("Enter an 8 bit binary number :"); c2=getchar(); /**/ for(i=1;i<=7;i++) /**/语法错误for语句中间为; { c1=getchar(); a=a*2+c1-'0'; } /**/ if (c2=='1') /**/ a=(-1)*a;如果依照题意c2=='1',a是负数 printf("\n%d \n",a); getch(); } 第六题: #include void main( ) { int i,n; /**/ n = 0; /**/n为计数器,从0开始 for(i=10;i<=100;i++)判断10-99是否是对称数 if(i/10==i%10) i/10得到十位,i%10得到个位,若相等则是对称数 {printf("%5d",i);输出对称数 n++;计数器增加1 if(/**/ n%9==0 /**/)语法错误表示相等的关系用双等号; printf("\n");9个数一行输出,换行 } for(i=100;i<=999;i++)判断100-999是否是对称数 if(/**/ i/100==i%10 /**/) i/100得到百位,i%10得到个位,若相等则是对称数 {printf("%5d",i); n++; if(n%9==0) printf("\n"); }