北京石油化工学院12级复习题
程序改错
一、下面每个程序的划线处有语法或逻辑错误,请找出并改正,使其得到符合题意的执行结果。
1.求1234n
main()
{ long int sum;
int n,i=1;
scanf("%d",n);
printf(“\n”);
while(i { sum=sum*i; i++; } printf("sum=%d",sum); } 2.求一个数组中最大值及其下标。 main( ) { int max,j,m; int a[5]; for(j=1;j<=5;j++) scanf(“%d”,a); max=a[0]; for(j=1;j<=5;j++) if(max>a[j]) { max=a[j]; m=j; } printf(“下标:%d\n最大值:%d”, j, max) } *3、求3+4 int a=3,b=4; main() { int a,c; c=a+b; printf(“c=%d”); } 4.用一个函数求两个数之与。 sum(x,y) { float z; z=x+y; return; } main() { float a,b; int c; scanf("%f,%f",&a,&b); c=sum(a,b); printf("\nSum is %f",sum); } 5.用指针作函数参数,对输入的两个整数按大小顺序输出。 s *p1,*p2) { int *p; *p=*p1;*p1=*p2;*p2=*p; } main() { int a,b; int *q1,*q2; scanf("%d,%d",&a,&b); &q1=a,&q2=b; if(a printf("\n%d,%d\n",q1,q2); } 前五题答案: 1、sum应初始化即加入sum=1 第四行改为:scanf(“%d”,&n); 第六行改为:while(i<=n) 第十行改为:printf("sum=%ld",sum); 2、第四行改为:for(j=0;j<5;j++) 第五行改为:scanf(“%d”,&a[j]); 第七行改为:for(j=0;j<5;j++) 第八行改为:if(max 第十三行改为:printf(“下标:%d\n最大值:%d”, m,max) 3、第三行改为:int c; 第五行改为:printf(“c=%d”,c); 4、第一行改为:float sum(float x, float y ); 第四行改为:return(z); 第八行:float c; 第十一行:printf("\nSum is %f",c); 5、第2、3行:{ int t; t=*p1;*p1=*p2;*p2=t; 第9行:q1=&a,q2=&b; 第10行:if(a 第11行:printf("\n%d,%d\n",*q1,*q2); 6.程序读入20个整数,统计非负数个数,并计算非负数之与、#include “stdio、h” main() { int i, a[20], s , count ; s=count=1; s=count=0; for( i=1; i<20; i- -) for(i=0;i<20;i--) scanf(“%d”, a[i] );scanf(“%d”,&a[i]); for(i=0;i<20;i++) { if(a[i]<0) break; continue; s +=a[i]; count++; } printf(“s=%f count=%f\n”, s, count); } printf(“s=%d count=%d\n”,s,count); 7、x , y两个数中,让x中存较大的数,y存较小的数 #include main( ) { int x , y=200 , z=0; x=180; if ( x z=x; x=y; y=z; { z=x;x=y;y=z;} printf(“x=%d,y=%d\n”,&x,&y); } printf(“x=%d,y=%d\n”,x,y); } 8、从键盘输入整数x的值,并输出y的值、 main() { float x,y; 正确的: int x; float y; scanf(“%d”,&x); y=3、5+x; printf(“y=%d”); printf(“y=%f”,y); } 9、从1加到100,并输出、 Main ( ) {int i , sum i=1; While ( i<=100 ) { sum=sum*i; i++ ; } printf ( “%c”, sum ) } 10、求一个4×4矩阵的对角线元素之与 main( ) {int a[4][4], sum=0; int i,j; printf(“Enter data:\n”); for(i=0;i<=4;I++) for(j=0,j<=4;j++) scanf(“%d”,&a[i][j]); for(i=0;i<4;I++) for(j=0;j<4;j++) sum=sum+a[i][j]; printf(“sum=%5d\n”,sum); } 12.求1+2+3+4+……n的值。 main() { long int sum; int n,i=1; scanf("d",&n); printf(“\n”); while(i>n) { sum=sum*i; i++; } printf("sum=%d",sum); } *13.调用起泡法函数排序 void sort(int a[], n); { int i,j,temp,*p; for(i=0; i for(j=n-1; j>i; j--) if(data[j]< data[j-1]) {temp=a[j]; a[j]= a[j-1]; a[j-1]=temp; } main() { int data[10]; *p=data; printf("Please input 10 numbers:\n"); for(i=0; i scanf("%d", &p); p=&data[0]; sort(data[10],10); printf("\nthe result of sort:\n"); for(i=0; i<10; i++) printf("%d ",data[i]); } 15、编程计算下面分段函数, 输入x, 输出y main() { int x,y; printf(“\n Input x:\n”); scanf(“%d”, x); if(x<0) y=x-1; else if(x>=0||x<=10) y=2x-1; else y=3x-1; printf(“y=%d”,&y); } 16、求100~300间能被3整除的数的与。 main() { int n; long sum; for(n=100;n<=300;n++) { if(n%3=0) sum=sum*n; } printf(“%l d ”,sum); } 17、用函数实现两个整数的交换。 s *p1,int *p2) { int *p; p=p1; p1=p2; p2=p; } main() { int a,b; printf(“\nInput a,b: ”); scanf(“%d,%d”,&a,&b); s , &b ); pri ntf(“\n%d,%d”,a,b); } 18、实现华氏温度转换为摄氏温度,公式为:c=*(f-32),要求输出结果取2位小数。 main() { int c,f; printf("Please enter f:"); scanf("%f", &f); c=5/9*(f-32); printf("f=%f,c=%f",c,f);} 19.下面程序的功能就是计算n!。 main() { int i,n; int s; printf("Please enter n:"); scanf("%d", n); for(i=1;i<=n;i++) ; s=*i; printf("%d! = %d",i,s);} 20.编程计算12+32+52+…+92,要求输出中间计算结果。 main() { int i, sum=0; for(i=1;i<=9;i+2) sum+=i;printf("sum = %d",sum); } 21、求表达式的值 #include #include int fun(int x, int y); main() { int a,b; float f; scanf(“%d,%d”,a,b); if(ab>0) { f = fun(a,b); printf("The result is:%d\n", &f) } else printf(“error!”);} fun(x, y) { float result; result = sqrt(a+b); return; } 22、通过函数调用,求两个数之差 sub(x,y) { float z; z=x-y; return; } main() { float a,b; int c; scanf(“%f,%f”,&a,&b); c=sub(a,b); printf(“\nSub is %f”,sub); } 23、求1到100的累加与、 main ( ) {int i , sum i=1; while ( i<=100 ) { sum=sum*i ; i++ ; } printf ( “%c”, sum ) } 24、一个小于1000的正整数每位上的数字就是多少。 #include "stdio、h" main() { int n,i,j,k; printf("Input a number n(0 scanf("%d",n); if(n<=0||n>=1000) {printf("error");exit(0);} k=n%10、0; j=(n%100)/10; i=n/100; printf("%s %s %s\n",i,j,k); } 25、输入三角形的三边长,求三角形的面积。 #include main( ) {float a,b,c,s,area; scan("%d,%d,%d",a,b,c); s=1、0/2*(a+b+c); area=sqrt(s(s-a)(s-b)(s-c)); printf("a=%7、2f,b=%7、2f,c=%7、2f,s=%7、2f\n",&a,&b,&c,&s); printf("area=%7、2f\n",&area) } 26、求与1!+2!+3!+4!+……+20!。 main( ) { float s=0,t=0; int n; for(n=0;n<20;n++) { t=t+n; s=s*t; } printf("1!+2!+3!+4!+……+20!=%d\n",s); } *27、下面程序实现的功能就是求两整数的最小公倍数。 #include "stdio、h" main( ) { int m ,n , result1; result print(“input two integers: \n”); scaf(“%d%d”, m, n); &m,&n result=m while( (result % m !=0 ) || ( result % n = =0) ) != result++; printf(“The least common multiple of m and n is %d\n”, &result); result } 28.下列程序实现按分数从高到低的顺序输出,划线处存在错误,请予以更正、 #include #define ARR_SIZE 40 void Sort(float score[], long num[], int n) main() { float score[ARR_SIZE]; int n, i; long num[ARR_SIZE]; printf("Please enter total number:"); scanf("%d\n", n); printf("Please enter the number and score:\n"); for (i=0; i { scanf("%ld%f",&num[i],&score[i]); } Sort(score, num, n); printf("Sorted results:\n"); for (i=0;i { printf("%ld\t%4、0f\n",num[i],score[i]);} } void Sort(score, num, n) { int i, j; float temp1; long temp2; for (i=0; i { for (j=i; j<=n; j++) { if (score[j] < score[i]) { temp1 = score[j]; score[j] = score[i]; score[i] = temp1; temp2 = num[j]; num[j] = num[i]; num[i] = temp2; } } } } 29. 把用户输入的数据累加,直到输入零为止,输出累加的结果。 #include main() { intt sum=0,d; printf("Enter a serial of numbers ended by 0:\n"); while(1) { scanf("%d",d); 正确: scanf("%d",&d); if(d=0) break; 正确: d==0 sum+=d; } printf("sum=%f\n",sum); 正确: printf("sum=%d\n",sum) ; } 30、求1+2+3+4++n(n<100) #include fun(n); 正确: main() { int p, n; scanf("%d",&n); p=int fun(n); 正确: printf("p=%d",p); } int fun(int m) { int total; 正确: int i=1; while(i<=m) { total=total+i; i++; } return; 正确: } 32、求一个3×3矩阵的主对角线元素之与 main( ) { int a[3][3]; int sum; int i,j; printf(“Enter data:\n”); for(i=0;i<3;i++) for(j=0,j<3,j++) scanf(“%f”,&a[i][j]); for(i=0;i<3;i++) for(j=0,j<=3;j++) if (i=j) sum +=a[i][j]; printf(“sum=%5d\n”,sum); } 33、摄氏温度 C=(5/9)(F-32),求华氏温度F=100时对应的摄氏温度。 #include void main(void) { int celsius; fahr; fahr = 100; celsius = 5 * (fahr - 32) / 9; printf("fahr = d, celsius = %d\n", fahr, celsius); } 二、下列程序有逻辑错误,请改正,使之能完成要求的功能 1.输入6个整数,按每行3个数输出这些整数,最后输出6个整数的平均值。 #include void main( ) { int i, a[6],sum=0 ,n=0; int av; for(i=0;i scanf("%d",a[i]); for(i=0;i { printf("%d",a[i]); if(i%3==0) printf("\n"); } for(i=0;i!=n;i++) { sum+=a[i]; av=sum/n;} printf("av=%f\n",av); } 2、输入一系列学生成绩,输入负数为止。统计不及格的人数,计算平均分。 #include #define ARR_SIZE 80 void main() { int score[ARR_SIZE]; int i ; int no_pass = 0; float ave; printf("Please input the score:"); scanf(“%d”,& score [i]); while(score [i]>=0) { if (score [i]<60) no_pass ++; ave=ave+ score [i] ; ave=ave/n; } printf("not pass num: %d\n", no_pass); printf("the ave is: %f\n", ave); } 程序改错------------------------------------- 1题目:在一个一维整型数组中找出其中最大的数及其下标。 程序中共有4条错误语句,请改正错误。 -----------------*/ #define N 10 /**********FOUND**********/ float fun(int *a,int *b,int n) { int *c,max=*a; for(c=a+1;cmax) { max=*c; /**********FOUND**********/ b=c-a;} return max; } main() { int a[N],i,max,p=0; printf("please enter 10 integers:\n"); for(i=0;i 下列程序是建立一个包含学生有关数据的单向链表。但该程序有2个错误,错误出现在每个注释行附近,请调试改正。调试改正中,不得改变程序结构,也不得增删语句。 #define NULL 0 struct stud { long num; char name[10]; float score; struct stud *next; }; /* …………… comment …………… */ int n; struct stud create() 序中有两处错误代码,请改正.注意,不得改变程序结构。 #include <> main() { int a[8],*p=a; int i,j; int tempmin,tempcode; printf("\n input the numbers:\n"); for (i=0;i<8;i++) scanf("%d",p+i); tempmin=*p; for (i=0;i<7;i++) { for (j=i;j<8;j++) if (j==i||*(p+j) 【程序改错】 1.功能:利用递归函数调用方式,将所输入的5个字符,以相反顺序 打印出来。 char next; next=getchar(); palin(n-1); 2.功能:求广义菲玻那契级数的第n项。广义菲玻那契级数的前n 项为: 1,1,1,3,5,9,17,31,…… 项值通过函数值返回 main ( )函数。 例如:若 n = 15,则应输出:The value is: 2209。 for (k=4; k<=n; k++) a=b; return d; 3.功能:根据整型形参m,计算如下公式的值: y=1/2+1/8+1/18+...+1/2m*m double y=0.0; 4.功能:编制统计营业员一天的营业额的程序,设程序采用一个循环 实现,每次循环输入一笔交易金额并累计营业额。由于营 业员一天完成的交易次数是不确定的,为此以最后附加输 入一笔0或负数交易额作为交易金额已全部输入结束的标志。 float sale,sigma; scanf("%f",&sale); sigma=sigma+sale; 5.功能:读取7个数(1-50)的整数值,每读取一个值,程序打印出该值个数的*。while(n<8) while(a<1||a>50); for(i=0;i 1 / 4 程序改错题(共15题) 1、在考生文件夹下,给定程序MODI.C 的功能是: 求一维数组a 中所有元素的平均值,结果保留两位小数。 例如,当一维数组a 中的元素为:10,4,2,7,3,12,5,34,5,9 程序的输出应为:The aver is: 9.10 。 #include 第1题 /*------------------------------------------------------ 【程序改错】 -------------------------------------------------------- 功能:判断m是否为素数,若是返回1,否则返回0。 ------------------------------------------------------*/ #include 1、以下程序的功能是求如下表达式: 1 1 1 S = 1 + ——+ ———+ ...... + ——————— 1+2 1+2+3 1+2+3+......+n 『答案』:1 scanf("%d",&n); 2 float fun(int n) 3 for(i=1;i<=n;i++) 4 s+=1.0/t 或s= s + 1.0 /t; 2、题目:函数fun的功能是:根据整型形参m的值,计算如下公式的值。 1 1 1 t = 1- ——- ——- ... - —— 2x2 3x3 mxm 例如,若m=5,则应输出:0.536389 『答案』:1 for(i=2;i<=m;i++)或for(i=2;i 第12次上机程序改错第1题 【程序改错】 -------------------------------------------------------- 功能:求二分之一的圆面积,函数通过形参得到圆的半径,函数返回二分之一的圆面积。 例如:输入圆的半径值:19.527 输出为:s = 598.950017。 ------------------------------------------------------*/ #include printf ( "Enter x: "); scanf ( "%f", &x ); printf (" s = %f\n ", fun ( x ) ); } 第2题【程序改错】 功能:先将在字符串s中的字符按逆序存放到t串中,然后把s中的字符按正序连接到t串的后面。 例如:当s中的字符串为:“ABCDE”时,则t中的字符串应为:“EDCBAABCDE”。 ------------------------------------------------------*/ #include 1.给定程序MODI1.C中函数fun的功能是:根据以下公式求π值,并作为函数值返回。例如,给指定精度的变量eps输入0.0005时,应当输出Pi=30140578.。(1)“t=0;”改为“t=1;”。(2)改成“return(2*s);” 2.给定程序MODI1.C中函数fun的功能是:将长整型中每一位上为偶数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。例如:当s中的数为:7654321时,t中的数为:7531。(1)“void fun (long s, long *t)”(2)“sl = sl*10;” 3.给定程序MODI1.C中函数fun的功能是:用下面的公式求π的近似值,知道最后一项的近似值小于指定数(参数num)为止:例如程序0.0001,则程序输出 3.1414。(1) “while(t>=num)”改为 “while(fabs(t)>=num) ”。(2)“t=s%n;”改为 “t=s/n;”。 4.给定程序MODI1.C中函 数fun的功能是:把主函 数中输入的三个数,最大 的放在a中,最小的放在 c中,中间的放在b中。 例如a=55.0 b=34.0 c=12.0。(1)“float k;”。 (2)“if(*a<*c)”。 5. 给定程序MODI1.C中 函数fun的功能是:为一 个偶数寻找两个素数,这 两个素数之和等于该偶 数,并将这两个素数通过 形参指针传回主函数。(1) “y=1;”。(2)“d=a-i;”。 6. 给定程序MODI1.C中 函数fun的功能是:由形 参给定n个实数,输出平 均值以上(含平均值)的 实数个数。所的平均值为: 195.838745,在平均值以 上的实数个数应为:5。(1) “int j, c=0; double xa=0.0;”。(2)“if (x[j]>=xa)”。 7.例如:当s中的数为: 7654321时,t中的数为: 7531。(1)“*t=0;”(2) “if(d%2!=0)” 8.函数功能是:求出 以下分数序列的前n项 和。 2/1,3/2,5/3,8/5/13/ 8,21/13,…...。和值 通过函数值返回到 main函数。例如,n=5, 则应输出:8.391667。 (1)“fun(int n)”改为 “double fun(int n)”。 (2)“b+=c;”改为“b=c;”。 9.函数fun的功能是: 判断一个整数是否是 素数,若是返回1,否 则返回0。(1)“k++” 改为“k++;”(2) “if(m=k)”改为 “if(m==k)” 10.给定程序MODI1.C 中函数fun的功能是: 从整数1到55之间,选 出能被3整除、且有一 位上的数是5的那些 事,并且把这些数放 在b所指的数组中,这 些数作为函数值返回。 规定,函数中a1放个 位数,a2放十位数。 (1)“a2=k/10;”。(2) “return i;”。 11.给定程序MODI1.C 中函数fun的功能是: 计算小于形参k的最大 的10个能被13或17整 除的自然数之和。K的 值由主函数传入,若K 的值为500.则主函数 为4622。(1) “if((k%13==0)||(k%17 ==0))”。(2)“______” 填“}”。 12.已知一个数列从第 0项开始的前三项分别 是0、0、1以后的各项 都是它相邻的前三项 之和。给定程序 MODI1.C中函数fun的 功能是:计算并输出该 数列前n项的平方根之 和。n的值通过形参传 入。(1)“double fun(int n)”。(2)“return sum;”。 13.函数fun的功能是: 根据整形形参m的值: 计算如下公式的 值……例如:若m中的 值为5,则应输出: 0.536389。(1) “for(i=2; i<=m; i++)”(2) “y-=1.0/(i*i);”。 14.函数的功能是:将 字符串中的字符按逆 序输出,但不改变字符 串中的内容。例如字符 串abcd,则应输出dcba。 (1)“void fun(char *a)”。(2)“printf("%c", *a);”。 15.函数fun的功能是:求 三个数的最小公倍数。 X1=15 x2=11 x3=2(1) 改成“int fun(int x, int y, int z )”。(2)return j 16.函数fun的功能是:根 据整型形参m计算如下 公式的值。若主函数中输 入5,则应输出-0.283333。 (1)“t=t-1.0/i;”。 (2)填空“return t;” 17. 例如,若输入:edcba, 则应输出:abcde。(1) “for( i=strlen( t )-1; i; i- - )” (2)“if(t[j]>t[j+1])” 18.函数fun的功能是: 根据形参m的值 (2<=m<=9),在m行m 列的二维数组中存放 如下所示规律的数据, 由main函数输出。(1) “void fun(int a[][M], int m)”。(2) “a[j][k]=(k+1)*(j+1);”。 19.函数fun的功能是: 先从键盘上输入一个3 行3列矩阵的各个元素c语言程序改错题
C语言程序改错及填空题
c语言程序改错
最新二级C语言考试题库及答案程序改错专项练习 精华版
ccu-C语言-练习一程序改错题
C语言程序改错2
C语言程序改错题
2012计算机国二C语言等级考试题库(内部资料)程序改错
程序改错练习题