C 程序改错题
一、要求说明:
1. 在考生文件夹的 Paper/CM 子文件夹中,已有 CM.c 文件 2. 该程序中标有“/****** 1 ******/”、“/****** 2*****/”、“/***** 3*****/”、“/******** 4 *******/”等部分为需要程序改错的标志,其下一行程序语句有错误。考生需根据程序的功能自行改错,并调试运行程序; 3. 单击“回答”按钮后进行程序改错; 二、注意事项:
1. 在改错时,不得删除改错标志(如:“/****** 1 ******/”等),考生在该改错标志下方的下一行,根据程序功能改错;调试运行程序。
2. 不得加行、减行、加句、减句。 三、程序功能:
1 输入x和正数eps,计算多项式
的和,直到末项的绝对值小于eps为止。 (1.19) #include
{ double x,eps,s=1,t=1; /******* 1 ********/ float i=0;
/******* 2 **********/ scanf(\ do { i++;
/***** 3 *****/ t=-t*x/i; s+=t;
/***** 4 *****/
} while(fabs(t)>=eps); printf(\}
2 程序运行时,若输入a,n分别为3,6,则输出下列表达式的值: 3+33+333+3333+33333+333333 #include
{ int a,n,i; long s=0,t; /******* 1 ********/ scanf(\ /******* 2 **********/ t=0;
/******* 3 **********/ for(i=1;i<=n;i++) { t=t*10+a;
/******* 4 ********/
(1.11) s=t+s; }
printf(\}
3 程序运行时输入n,输出n的所有质数因子。 (2.3)
例如:输入n为60,则输出 60=2*2*3*5 #include
/****** 1 ******/ scanf(\ printf(\ /****** 2 ******/ i=2; /****** 3 ******/ while(n>1) if(n%i==0) {
printf(\ /****** 4 ******/ n=n/i; }
else i++; printf(\}
4 程序运行时输入整数n,则输出n的各位数字之和。 (1.12)
例如:输入n=1308,则输出12;n=-3204,则输出9 #include
{ /****** 1 ******/ int n,s=0;
scanf(\ /****** 2 ******/ n=n<0?-n:n;
/****** 3 ******/ while(n>0){
/***** 4 *****/ s=s+n; n=n/10; }
printf(\}
5 程序运行时,输入10个数,分别输出其中的最大值和最小值。(2.6) #include
{ float x,max,min; int i; /******** 1 *******/
for(i=1;i<=10;i++) { /****** 2 *******/ scanf(\
/******* 3 ********/ if(i==1)
{ max=x;min=x;} else {
if(x>max) max=x; if(x /******* 4 ********/ printf(\} 6 输入n,再输入n个点的平面坐标,则输出那些距离坐标原点不超过5的点的坐标值。(2.11) #include struct axy { float x,y;}; /***** 1 *****/ struct axy *a; /***** 2 *****/ scanf(\ a=(struct axy*) malloc(n*sizeof(struct axy)); for(i=0;i scanf(\ /***** 3 ******/ for(i=0;i if(sqrt(pow(a[i].x,2)+pow(a[i].y,2))<=5) { printf(\ /*************** 4 **************/ printf(\ } } 7 循环输入x,n,调用递归函数计算,显示x的n次方。 当输入n小于0时,结束循环。 #include /****** 2 ******/ return x*f(x,n-1); } void main() { float y,z; int m; while(1) { scanf(\ /****** 3 *******/ if(m<0) break; /******* 4 ********/ z=f(y,m); printf(\ } } 8 输入两个字符串s1,s2后,将它们首尾先连。(2.7) #include { char s1[80],s2[40]; int j; /***** 1 *****/ int i=0; printf(\ gets(s1); printf(\ gets(s2); /********** 2********/ while(s1[i]!= '\\0') i++; for(j=0;s2[j]!='\\0';j++) /****** 3 ******/ s1[i+j]=s2[j]; /******* 4 *******/ s1[i+j]= '\\0'; puts(s1); } 9 用“选择法”对10个整数按升序排序。(2.12) #include { int i,j,min,temp; int a[N]={5,4,3,2,1,9,8,7,6,0}; printf(\排序前:\ /******** 1 *********/ for(i=0;i printf(\ putchar('\\n'); for(i=0;i for(j=i+1;j if(a[j] temp=a[min];a[min]=a[i];a[i]=temp; } printf(\排序后:\ for(i=0;i 10 将十进制的整数,以十六进制的形式输出。(1.6) #include /********** 1 *********/ void DtoH(int n) { int k=n & 0xf; if(n>>4!=0) DtoH(n>>4); /********** 2 *********/ if(k<10) putchar(k+'0'); else /********** 3 *********/ putchar(k-10+'a'); } void main() { int a[4]={28,31,255,378},i; for(i=0;i<4;i++) { printf(\ /******** 4 ********/ DtoH(a[i]); putchar('\\n'); } } 11 输入一个字符串,将其中所有的非英文字母的字符删除后输出。(1.4) #include { char str[81]; int i,flag; /******* 1 ******/ gets(str); for(i=0;str[i]!='\\0';) { flag=tolower(str[i])>='a' && tolower(str[i])<='z'; /********* 2 *********/ flag=!flag; if(flag) { /******* 3 ********/ strcpy(str+i,str+i+1); /******* 4 ********/ i--;