C语言程序改错基本题库
北京石油化工学院12级复习题
程序改错
一、下面每个程序的划线处有语法或逻辑错误,请找出并改正,使其得到符合题意的执行结果。
1 .求1234n
mai n()
{ long int sum;
int n,i=1;
scan f("%d", n);
printf( “ \n ”);
while(i< n)
{ sum=sum*i;
i++;
}
prin tf("sum=%d",sum);
}
2 .求一个数组中最大值及其下标。
mai n()
{ 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;
}
prints "下标:%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=x+y; return;
}
main ()
{ float a,b;
int c; scaf"%f,%f",&a,&b);
c=sum(a,b);
prin tf("\nSum is %f",sum);
}
5 .用指针作函数参数,对输入的两个整数按大小顺序输出。
swap(int *p 1,* p2)
{ int *p;
*p=*p 1;* p1=* p2;* p2=* p;
}
main ()
{ int a,b;
int *q1,*q2;
scan f("%d,%d",&a,&b);
&q 仁a, &q2=b; if(a
prin tf("\n%d,%d\n",q1,q2);
scanf( “ %d ,&n);
while(i<=n)
prin tf("sum=%ld",sum);
for(j=0;j<5;j++)
scanf( “ %d ,&a[j]);
for(j=0;j<5;j++)
if(max printf( "下标:%d\n 最大值:%d ” , m,max) int c; pnntf( “ c=%d' ,c); float sum(float x, float y ); return(z); 第八行:float C ; 第 ^一行:prin tf("\nSum is %f',c); 5. 第 2、3 行:{ int t; t=* p1;* p1=* p2;* p2=t;前五题答案: 应初始化即加入sum=1 第四 行改为: 第六行改为: 第十行改为: 2. 第四行改为: 第五行改为: 第七行改为: 第八行改为: 第十三行改为: 3. 第三行改为: 第五行改为: 4. 第一行改为: 第四行改为: 第9 行:q仁&a,q2=&b; 第10 行:if(a 第11 行:printf("\n%d,%d\n",*q1,*q2); 6.程序读入20个整数,统计非负数个数,并计算非负数之和 #in clude “” main () { int i, a[20], s , count ; s=co un t=1; s=co un t=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; con ti nue; s +=a[i]; coun t++; } prints “ s=% } printf( n , s, coun t); “ s=%d count=%d\n ” ,s,count); 7. x , y 两个数中,让x中存较大的数,y存较小的数 #in clude<> mai n() { 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; ____________ scanf( “ %d,&x); y=+x; prints "y=%d'); } 9.从1加到100,并输出. Mai n ()正确的: printf( int x; float y; “y=%f”: y); {int i , sum i=1; While ( i<=100 ) { sum=sum*i; i++ ; } printf ( “ %C , sum ) } 10、求一个 4X4矩阵的对角线元素之和mai n() {int a[4][4], sum=0; int i,j; printf( “ Enter data:\n ” ); for(i=0;i<=4;l++) for _________ scanf( “ %c”,&a[i][j]); for(i=0;i<4;I++) for(j=0;j<4;j++) ______________ sum=sum+a[i][j]; printf( “sum=%5d\r” ,sum); } 12 .求1+2+3+4+……n的值。mai n() { long int sum; int n,i=1; scanf("d",&n); printf( “ \n ” ); while(i> n) { sum=sum*i; i++; } prin tf("sum=%d",sum); } *13 .调用起泡法函数排序 void sort(i nt a[], n); { int i,j,te mp ,* p; for(i=0; i for(j=n-1; j>i; j--) if(data[i]< data[j-1]) {te mp=a[j]; a[j]= a[j-1]; a[j-1]=tem p; } mai n() { int data[10]; *p=data; printfC'PI ease input 10 nu mbers:\n"); for(i=0; i sea nf("%d", &p); p=& data[0]; sort(data[10],10); prin tf("\nthe result of sort:\n"); for(i=0; i<10; i++) prin tf("%d ",data[i]); } 15.编程计算下面分段函数,输入x,输出y mai n() { int x,y; printf( “ seanf( “ %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 ;*=300; n++) { if(n%3=0) sum=sum*n; ?? \ n ); pnntf( “%I d ” ,sum); } 17.用函数实现两个整数的交换。 swap(int *p1,int *p2) { int *p; P=P _________ p仁 ____ P2= _________ } main () { int a,b; printf( “ ninput a,b: ” ); scanf( “%d,%d,&a,&b); swa p(&a , &b ); printf( “ n%d,%d ,a,b); } 18.实现华氏温度转换为摄氏温度,公式为: c=*(f-32),要求输出结果取2位小数。 mai n() { int c , f; prin tf(" PI ease enter f:") scanf("%f" , &f);c=5/9*(f-32) printf("f=%f,c=%f" , c, f) ; } 19.下面程序的功能是计算n!。 mai n() { int i , n; int s printfC'PI ease en ter n:") scanf("%d" , n); for(i=1 ; i<=n ; i++); S=*i ; printf("%d! = %d" , i , s) ; } 20.编程计算12+ 32+ 52+…+ 92,要求输出中间计算结果。 mai n() { int i , sum=0; for(i=1 ; i<=9 ; i+2) sum+=i; printf("sum = %d" , sum); 21.求表达式的值 #in elude <> #in clude <> int fun (i nt x, int y); main () { int a,b; float f; scanf( “ %d,%d ,a,b); if(ab>0) { f = fun( a,b); prin tf("The result is:%d\n", &f) } else prints “error! ” );} fun(X, y) { float result; result = sqrt(a+b); __________________ return; } 22、通过函数调用,求两个数之差 sub(x,y) { float 乙 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的累加和. mai n () {int i , sum i=1; while ( i<=100 ) { sum=sum*i j _____________________ i++ ; } printf ( “ %C , sum ) } 24、一个小于 1000的正整数每位上的数字是多少。 #i nclude "" mai n() { int n,i,j,k; prin tf("I np ut a number n(0< n <1000):\n"); sea __________ if(n<=0|| n>=1000) {prin tf("error");exit(0);} k=n __________ j=( n%100)/10; i=n/100; prin ___________________ } 25、输入三角形的三边长,求三角形的面积。 #in elude <> mai n() {float a,b,c,s,area; sea n( "%d,%d,%d",a,b,c); s=2*(a+b+c); are ________________ prin tf("a=%,b=%,c=%,s=%\n",&a,&b,&c,& s); prin ____________ } 26、求和1! +2! +3! +4! +……+20!。 mai n() { float s=0,t=0; int n; for(n=0;n<20;n++) { t=t+ n; s=s*t; } prin tf("1 ! +2! +3! +4! +……+20!=%d\n",s); } *27、下面程序实现的功能是求两整数的最小公倍数。 #i nclude "" mai n() { int m ,n , resultl; result pnnt( “ input two in tegers: \n ”); scaf( “%d %d , m, n); &m,&n result= m while( (result % m !=0 ) || ( result % n = =0)) != result++; result } 28.下列程序实现按分数从高到低的顺序输出,划线处存在错误,请予以更正 #in clude <> #define ARR_SIZE 40 void Sort(float score[], I ong nu m[], int n) main () { float score[ARR_SIZE]; int n, i; lo ng nu m[ARR_SIZE]; printfC'PI ease en ter total nu mber:"); sea nf(”%d\n", n); printfC'PI ease en ter the nu mber and score:\n"); for (i=0; i { scan f("%ld%f",&n um[i], &score[i]); } Sort(score, num, n); prin tf("Sorted results:\n"); for (i=0;i< n;i++) {prin tf("%ld\t%\n", num[i],score[i]);} } void Sort(score, num, n) { int i, j; float tempi; long temp2; for (i=0; i { for (i=i; i<=n; i++) ____________________ { if (sco ______________________ { tempi = score[j]; score[j] = score[i]; score[i] = tempi; temp2 = nu m[j]; nu m[j] = nu m[i]; nu m[i] = temp2; 29.把用户输入的数据累加,直到输入零为止,输出累加的结果。 #in clude<> mai n() { in tt sum=O,d; prin tf("E nter a serial of nu mbers en ded by 0:\n"); while(1) { scan f("%d",d); 正确:scan f("%d", &d); if(d=O) break; 正确:d==0 sum+=d; prin tf("sum=%f\n",sum); 正确:prin tf("sum=%d\n",sum); 30、求1+2+3+4++n(n< 100) #in clude<> fun(n); 正确: mai n() { int p, n; scan f("%d",&n); p=int fun(n); 正确: prin tf(" p=%d", p); int fun (i nt m) { int total 正确: int i=1; while(i<=m) { total=total+i; i++; return; 正确: 32.求一个3 X 3矩阵的主对角线元素之和 mai n() { 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++) sca nf( for(i=0;i<3;i++) for(j=0,j<=3;j++) if (i ___________ sum +=a[i][j]; printf( “sum=%5d\r ” ,sum); 摄氏温度C=(5/9)(F-32),求华氏温度F=100时对应的摄氏温度。 #in elude <> void ma in (void) { int Celsius; fahr; _________________ fahr = 100; Celsius = 5 * (fahr - 32) / 9; prin tf("fahr = d, Celsius = %d\n", fahr, Celsius); } 下列程序有逻辑错误,请改正,使之能完成要求的功能 1.输入6个整数,按每行 3个数输出这些整数,最后输出 6个整数的平均值。 #in clude <> void mai n() int av for(i=0 ; i scan f("%d",a[i]) for(i=0 ; i { prin tf("%d",a[i]) if(i%3==0) prin tf("\n") for(i=0 ; i!=n ; i++) { sum+=a[i] av=su m/n;} prin tf("av=%f\n",av) } 2. 输入一系列学生成绩,输入负数为止。统计不及格的人数,计算平均分。 #include <> #define ARR_SIZE 80 33. { int i, a[6] ,sum=0 ,n=0 ; { 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、以下程序的功能是求如下表达式: 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 (一)功能:用选择法对数组中的n个元素按从小到大的顺序进行排序。#include "stdio.h" #define N 20 void fun(int a[], int n) { int i, j, t, k; for (j = 0 ;j < n-1 ;j++) { /**********ERROR**********/ k = j for (i = j+1;i < n; i++) /**********ERROR**********/ if(a[i] >a[k]) /**********ERROR**********/ k=j; t = a[k] ; a[k] = a[j] ; a[j] = t; } } main() { int a[N]={9,6,8,3,-1},i, m = 5; printf("排序前的数据:") ; for(i = 0;i < m;i++) printf("%d ",a[i]); printf("\n"); fun(a,m); printf("排序后的数据:") ; for(i = 0;i < m;i++) printf("%d ",a[i]); printf("\n"); } 【参考答案】 k = j; 【参考答案】 if(a[i] < a[k]) if(a[k] > a[i]) 【参考答案】 k = i; (二)功能:求广义菲玻那契级数的第n项。广义菲玻那契级数的前n 项为: 1,1,1,3,5,9,17,31,…… 项值通过函数值返回 main ( )函数。 例如:若 n = 15,则应输出:The value is: 2209。 #include "conio.h" #include "stdio.h" long fun ( int n ) { long a=1, b=1, c=1, d=1, k; /**********ERROR**********/ for (k=4; kc语言程序改错题
C语言程序改错及填空题
c语言程序改错
C语言程序改错2
C语言程序改错题
程序改错完整版---C语言
齐齐哈尔大学C语言题库 程序改错(部分)