文档库 最新最全的文档下载
当前位置:文档库 › C语言程序改错

C语言程序改错

〖第1题〗『程序改错』(10分)
题目:函数fun的功能是:
求1到20的阶乘的和。
请改正程序中的错误,使它能得出正确的结果。
/*------------------------------------------------------*/
注意:不可以增加或删除程序行,也不可以更改程序的结构。
/*------------------------------------------------------*/
fun()
{ int n,j;
double s=0.0,t=1.0;
for(n=1;n<=20;n++)
{
/**********FOUND**********/
s=1;
for(j=1;j<=n;j++)
/**********FOUND**********/
t=t*n;
/**********FOUND**********/
s+t=s;
}
/**********FOUND**********/
printf("jiecheng=%d\n",s);
}
main()
{ fun(); }

答案:
1). t=1; 或 t=1.0;
2). t=t*j; 或 t*=j;
3). s=s+t; 或 s+=t;
4). printf("jiecheng=%lf\n",s);
或 printf("jiecheng=%f\n",s);


〖第2题〗『程序改错』(10分)
题目:给定程序MODI1.C中函数 fun 的功能是:
用选择法对数组中的n个元素按
从小到大的顺序进行排序。
#include
#define N 20
void fun(int a[], int n)
{ int i, j, t, p;
for (j = 0 ;j < n-1 ;j++)
{/**********FOUND**********/
p=j
for (i = j;i < n; i++)
/**********FOUND**********/
if(a[i] >a[p])
/**********FOUND**********/
p=j;
t=a[p] ; a[p]=a[j] ; a[j]=t;}
}

void 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");
}

答案:
1). p = j;
2). if(a[i] < a[p]) 或 if(a[p] > a[i])
3). p = i;


〖第3题〗『程序改错』(10分)
题目:编写函数fun,求两个整数的最小公倍数,
然后用主函数main()调用这个函数并输出结果
,两个整数由键盘输入。
#include "stdio.h"
void main()
{ unsigned int m,n,q;
printf("m,n=");
scanf("%d,%d",&m,&n);
/**********FOUND**********/
q==fun(m,n);
printf("p(%d,%d)=%d",m,n,q);
}

int fun(int m,int n)
{ int i;
/**********FOUND**********/
if (m=n)
{i=m;m=n;n=i;}
for(i=m;i<=m*n;i+=m)
/**********FOUND**********/
if(i%n==1)
return(i);
}

答案:
1). q=fun(m,n);
2). if (mm)
3). if(i%n==0)


〖第4题〗『程序改错』(10分)
题目:下列程序中,函数fun的功能是:
找出一个大于给定整数m且紧随m的素数,
并作为函数值返回。
#include
#include
int fun(int m)
/**********FOUND**********/
{ int i;k;
for(i=m+1;;i++){
for(k=2;k/**********FOUND**********/
if(i%k!=0)
break;
/**********FOUND**********/
if(k=i)
return(i);
}
}
void main()
{ int n;
printf("\nPlease enter n:");
scanf("%d",&n);
printf("%d\n",fun(n));
}

答案:
1). { int i,k;
2). if(i%k==0)
3). if(k==i) 或 if(k>=i)


〖第5题〗

『程序改错』(10分)
题目:打印出如下杨辉三角形(要求打印出6行).
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1

#include"stdio.h"
void main()
{ int i,j;
int a[6][6];
printf("\n");
/**********FOUND**********/
for(i=1;i<6;i++)
{ a[i][0]=1;
a[i][i]=1;
}
/**********FOUND**********/
for(i=1;i<6;i++)
for(j=1;j/**********FOUND**********/
a[i][i]=a[i-1][j-1]+a[i-1][j];
for(i=0;i<6;i++)
{
/**********FOUND**********/
for(j=0;jprintf("%5d",a[i][j]);
printf("\n");
}
}

答案:
1). for(i=0;i<6;i++) 或 for(i=0;i<=5;i++)
2). for(i=2;i<6;i++) 或 for(i=2;i<=5;i++)
3). a[i][j]=a[i-1][j-1]+a[i-1][j];
4). for(j=0;j<=i;j++) 或 for(j=0;i>=j;j++) 或
for(j=0;j

〖第6题〗『程序改错』(10分)
题目:给定程序MODI1.C中函数 fun 的功能是:
计算正整数num的各位上的数字之积。
例如,若输入:252,则输出应该是:20。
若输入:202,则输出应该是:0。
#include
long fun (long num)
/**********FOUND**********/
{long k=1
do
{ k*=num%10 ;
/**********FOUND**********/
num\=10;
/**********FOUND**********/
} while(!num) ;
return (k) ;
}

void main( )
{ long n ;
printf("\Please enter a number:") ; scanf("%ld",&n) ;
printf("\n%ld\n",fun(n)) ;
}

答案:
1). {long k=1;
2). num/=10; 或 num=num/10;
3). } while(num) ; 或 } while(num!=0) ;


〖第7题〗『程序改错』(10分)
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,
当即吃了一半,还不过瘾,又多吃了一个,
第二天早上又将剩下的桃子吃掉一半,
又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。
到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
#include"stdio.h"
void main()
{ int day,x1,x2;
 day=9;
/**********FOUND**********/
x2==1;
while(day>0)
/**********FOUND**********/
{ x1=(x2+1)/2;
x2=x1;
/**********FOUND**********/
day++;
}
printf("the total is %d\n",x1);
}

答案:
1). x2=1;
2). {x1=(x2+1)*2;
3). day--; 或 day-=1; 或 day=day-1;


〖第8题〗『程序改错』(10分)
题目:一个5位数,判断它是不是回文数。
即12321是回文数,个位与万位相同,十位与千位相同。
#include"stdio.h"
void main( )
{
/**********FOUND**********/
long ge,shi,qian;wan,x;
scanf("%ld",&x);
/**********FOUND**********/
wan=x%10000;
qian=x%10000/1000;
shi=x%100/10;
ge=x%10;
/**********FOUND**********/
if(ge==wan||shi==qian)
printf("this number is a huiwen\n");
else
printf("this number is not a huiwen\n");
}

答案:
1). long ge,shi,qian,wan,x;
2). wan=x/10000;
3). if(ge==wan&&shi==qian) 或 if(shi==qian&&ge==wan)


〖第9题〗『程序

改错』(10分)
题目:编写函数fun求20以内所有5的倍数之积。
#define N 20
#include "stdio.h"
void main()
{ int sum;
sum=fun(5);
printf("%d以内所有%d的倍数之积为: %d\n",N,5,sum);
}

int fun(int m)
{
/**********FOUND**********/
int s=0,i;
for(i=1;i/**********FOUND**********/
if(i%m=0)
/**********FOUND**********/
s=*i;
return s;
}

答案:
1). int s=1,i;
2). if(i%m==0)
3). s=s*i 或 s=i*s 或 s*=i

〖第10题〗『程序改错』(10分)
题目:请编写一个函数fun,函数的功能是:
统计出若干个学生的平均成绩,
最低分以及得最低分的人数。
例如,输入10名学生的成绩分别为
92,87,68,56,92,84,67,75,92,66,则
输出平均成绩为77.9,最低分为56,得最低分的人数为1人。
#include "stdio.h"
float Min=0;
int J=0;
float fun(float array[],int n)
{ int i;float sum=0,ave;
Min=array[0];
for(i=0;i{ if(Min>array [i]) Min=array [i];
/**********FOUND**********/
sum=+array[i]; }
/**********FOUND**********/
ave=sum\n;
for(i=0;i/**********FOUND**********/
if(array[i]=Min) J++;
return(ave);
}

void main( )
{ float a[10],ave;
int i=0;
printf("Input 10 scores:\n");
for(i=0;i<10;i++)
scanf("%f",&a[i]);
ave=fun(a,10);
printf("ave=%f\n",ave);
printf("min=%f\n",Min);
printf("Total:%d\n",J);
}

答案:
1). sum+=array[i];} 或 sum=sum+array[i]; }
2). ave=sum/n;
3). if(array[i]==Min) J++; 或 if(Min==array[i]) J++;


〖第11题〗『程序改错』(10分)
题目:有一数组内放10个整数,要求求出平均值,并打印.
#include
float average(float array[10])
{ int i;
float aver,sum=array[0];
/***********FOUND***********/
for(i=0;i<10;i++)
sum=sum+array[i];
aver=sum/10.0;
return(aver);
}

void main( )
{
/***********FOUND***********/
int score[10],aver ;
int i;
printf("input 10 scores:\n");
for(i=0;i<10;i++)
/***********FOUND***********/
scanf("%f", score);
printf("\n");
/***********FOUND***********/
aver=average(score[10]);
printf("average score is %5.2f",aver);
}

答案:
1). for(i=1;i<10;i++) 或 for(i=1;i<=9;i++)
2). float score[10],aver;
3). scanf("%f", &score[i]);
4). aver=average(score);


〖第12题〗『程序改错』(10分)
题目:利用递归方法求5!。
#include
void main()
{ int fact(int j);
printf("5!=%d\n",fact(5));
}
int fact(int j)
{ int sum;
/**********FOUND**********/
if(j=0)
/**********FOUND**********/
sum=0;
else
sum=j*fact(j-1);
/**********FOUND**********/
return j;

答案:
1). if(j==0) 或 if(j==0 || j==1) 或 if(j==1 || j==0)
2). sum=1;
3). return sum;} 或 return(sum);} 或 return (sum);}


〖第13题〗『程序改错』(10分)
题目:编写函数

求2!+4!+6!+8!+10+12!+14!。
#include "stdio.h"
long sum(int n)
{
/**********FOUND**********/
int i,j
long t,s=0;
/**********FOUND**********/
for(i=2;i<=n;i++)
{t=1;
for(j=1;j<=i;j++)
t=t*j;
s=s+t;}
/**********FOUND**********/
return(t);
}

void main()
{ printf("this sum=%ld\n",sum(14)); }

答案:
1). int i,j;
2). for(i=2;i<=n;i=i+2) 或
for(i=2;i<=n;i+=2) 或
for(i=2;i<=n;i++,i++)
3). return(s);


〖第14题〗『程序改错』(10分)
题目:下列给定程序中,函数fun的功能是:
判断m是否为素数,若是返回1,否则返回0。
主函数的功能是:按每行5个输出1-100之间的全部素数。
#include
/**********FOUND**********/
void fun( int n)
{ int i,k=1;
if(m<=1) k=0;
/**********FOUND**********/
for(i=1;i/**********FOUND**********/
if(m%i=0) k=0;
/**********FOUND**********/
return m;
}

void main()
{ int m,k=0;
for(m=1;m<100;m++)
if(fun(m)==1)
{
printf("%4d",m);k++;
if(k%5==0)printf("\n");
}
}

答案:
1).int fun( int m) 或 fun( int m)
2).for(i=2;ii;i++) 或
for(i=2;i<=m-1;i++) 或 for(i=2;m-1=>i;i++)
3). if(m%i==0) k=0;
4). return k;


〖第15题〗『程序改错』(10分)
题目:求100以内(包括100)的偶数之和.
#include "stdio.h"
void main()
{
/**********FOUND**********/
int i,sum=1;
/**********FOUND**********/
for(i=2;i<=100;i+=1)
sum+=i;
/**********FOUND**********/
printf("Sum=%d \n";sum);
}

答案:
1). int i,sum=0;
2). for(i=2;i<=100;i+=2) 或 for(i=2;i<=100;i=i+2)
3). printf("Sum=%d \n",sum);


〖第16题〗『程序改错』(10分)
题目:用起泡法对10个整数从小到大排序。
程序中共有4条错误语句,请改正错误。
#include
/**********FOUND**********/
void sort(int x,int n)
{ int i,j,k,t;
for(i=0;i/**********FOUND**********/
for(j=0;j/**********FOUND**********/
if(x[i]>x[i+1])
{ t=x[j];x[j]=x[j+1];x[j+1]=t;}
}
void main()
{ int i,n,a[100];
printf("please input the length of the array:\n");
scanf("%d",&n);
for(i=0;iscanf("%d",&a[i]);
sort(a,n);
printf("output the sorted array:\n");
for(i=0;i<=n-1;i++)
printf("%5d",a[i]);
printf("\n");
}

答案:
1). void sort(int *x,int n) 或 void sort(int x[],int n)
2).for(j=0;jj;j++)或
for(j=0;jj;j++)
3). if(x[j]>x[j+1]) 或 if(x[j+1]

〖第17题〗『程序改错』(10分)
题目:函数fun的功能是:求出两个非零正整数
的最大公约数,并作为函数值返回。
例如,若给num1和num2分别输入49和21,则
输出的最大公约数为7。
#include
int fun(int a,int b)
{ int r,t;
if(a{
t=a;
/**********FOUND**********/
b=a;


/**********FOUND**********/
a=t;
}
r=a%b;
while(r!=0)
{ a=b; b=r;
/**********FOUND**********/
r=a/b;}
/**********FOUND**********/
return a;
}

void main()
{ int num1,num2,a;
printf("Input two numbers:\n");
scanf("%d%d",&num1,&num2);
a=fun(num1,num2);
printf("the maximum common divisor is %d\n\n",a);
}

答案:
1). a=b;
2). b=t;
3). r=a%b;}
4). return b; 或 return (b); 或 return(b);


〖第18题〗『程序改错』(10分)
题目:请编写一个函数fun,函数的功能是:
求出N×M整型数组的最小元素及其所在的行坐标
及列坐标(如果最小元素不唯一,选择位置在最前面的一个)。
如:输入的数组为:
9 2 3
4 15 6
12 1 9
10 11 2

求出的最小数为1,行坐标为2,列坐标为1。
#define N 4
#define M 3
#include
int Row,Col;
void main()
{ int a[N][M],i,j,min,row,col;
printf("input a array:");
for(i=0;ifor(j=0;jscanf("%d",&a[i][j]);
for(i=0;i{
for(j=0;jprintf("%d",a[i][j]);
printf("\n");
}
min=fun(a);
printf("max=%d,row=%d,col=%d",min,Row,Col);
}
int fun(int array[N][M])
{ int min,i,j;
min=array [0][0];
Row=0;
Col=0;
for(i=0;i/**********FOUND**********/
{ for(j=i;j/**********FOUND**********/
if(min { min=array [i][j];
Row=i;
/**********FOUND**********/
Col=i;}
}
return(min);
}

答案:
1). {for(j=0;j2). if(min >array [i][j])
3). Col=j;}


〖第19题〗『程序改错』(10分)
题目:求n!,n值由键盘输入。
程序中共有4条错误语句,请改正错误。
#include
void main()
{ int n,i;
/**********FOUND**********/
int t;
printf("please input n(n>=0):");
/**********FOUND**********/
scanf("%d",n);
i=1;
/**********FOUND**********/
t=0;
while(i<=n)
/**********FOUND**********/
{ t+=i;
i++;
}
printf("%d!=%f",n,t);
}

答案:
1). float t; 或 double t;
2). scanf("%d",&n);
3). t=1.0; 或 t=1;
4). { t*=i; 或 { t=t*i;

相关文档