资源描述
程序改错
-------------------------------------
1题目:在一个一维整型数组中找出其中最大的数及其下标。
程序中共有4条错误语句,请改正错误。
-----------------*/
#define N 10
/**********FOUND**********/
float fun(int *a,int *b,int n)
{
int *c,max=*a;
for(c=a+1;c<a+n;c++)
if(*c>max)
{
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<N;i++)
/**********FOUND**********/
scanf("%d",a[i]);
/**********FOUND**********/
m=fun(a,p,N);
printf("max=%d,position=%d",max,p);
}
-------------------------------------『错误答案』:
1 int fun(int *a,int *b,int n)
2 *b=c-a;}
3 scanf("%d",&a[i]);
4 max=fun(a,&p,N);
/*-----------------------------------
2题目:用起泡法对10个整数从小到大排序。
程序中共有4条错误语句,请改正错误。
-------------------------------------
/**********FOUND**********/
void sort(int x,int n)
{
int i,j,k,t;
for(i=0;i<n-1;i++)
/**********FOUND**********/
for(j=0;j<n-i;j++)
/**********FOUND**********/
if(x[i]>x[i+1])
{ t=x[j];x[j]=x[j+1];x[j+1]=t;}
}
main()
{
int i,n,a[100];
printf("please input the length of the array:\n");
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%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)
2 for(j=0;j<n-1-i;j++) 或 for(j=0;n-1-i>j;j++) 或 for(j=0;j<n-(1+i);j++) 或 for(j=0;n-(1+i)>j;j++)
3 if(x[j]>x[j+1]) 或 if(x[j+1]<x[j])
-------------------------------------
3题目:在一个已按升序排列的数组中插入一个数,插入后,数
组元素仍按升序排列。
程序中共有4条错误语句,请改正错误。
#define N 11
main()
{
int i,j,t,number,a[N]={1,2,4,6,8,9,12,15,149,156};
printf("please enter an integer to insert in the array:\n");
/**********FOUND**********/
scanf("%f",&number)
printf("The original array:\n");
for(i=0;i<N-1;i++)
printf("%5d",a[i]);
printf("\n");
/**********FOUND**********/
for(i=N-1;i>=0;i--)
if(number<=a[i])
/**********FOUND**********/
a[i]=a[i-1];
else
{a[i+1]=number;
/**********FOUND**********/
exit;}
if(number<a[0]) a[0]=number;
printf("The result array:\n");
for(i=0;i<N;i++)
printf("%5d",a[i]);
printf("\n");
}
-------------------------------------
『错误答案』:
1 scanf("%d",&number);
2 for(i=N-2;i>=0;i--) 或 for(i=N-2;0<=i;i--)
3 a[i+1]=a[i];
4 break;}
------------------------------------
4【程序改错】
题目:以下程序的功能是求如下表达式:
S = 1 + 1/(1+2)+1/(1+2+3)+
1/(1+2+3+4)…
请改正程序中的错误,使程序能得到正确的运行结果。
#include <stdio.h>
main()
{
int n;
float fun();
printf("Please input a number:");
/**********FOUND**********/
printf("%d",n) ;
printf("%10.6f\n",fun(n));
}
/**********FOUND**********/
fun(int n)
{
int i,j,t;
float s;
s=0;
/**********FOUND**********/
for(i=1;i<=n;i++);
{
t=0;
for(j=1;j<=i;j++)
t=t+j;
/**********FOUND**********/
s=s+1/t;
}
return s;
}
『错误答案』:
1 scanf("%d",&n);
2 float fun(int n)
3 for(i=1;i<=n;i++) 或 for(i=1;n>=i;i++) 或 for(i=1;i<n+1;i++) 或 for(i=1;n+1>i;i++)
4 s+=1.0/t 或 s=s+1.0/(float)t; 或 s=s+1.0/t; 或 s+=1.0/(float)t
/*-----------------------------------
5题目:输入一行英文文本,将每一个单词的第一个字母变成大写。例如:输入"This is a C program.",输出为"This
Is A C Program."。
-------------------------------------
#include <string.h>
#include <stdio.h>
#include <conio.h>
/**********FOUND**********/
fun(char p)
{
int k=0;
/**********FOUND**********/
while(*p=='\0')
{
if(k==0&&*p!=' ')
{
*p=toupper(*p);
/**********FOUND**********/
k=0;}
else if(*p!=' ') k=1;
else k=0;
/**********FOUND**********/
*p+;
}
}
main()
{
char str[81];
clrscr();
printf("please input a English text line:");
gets(str);
printf("The original text line is :");
puts(str);
fun(str);
printf("The new text line is :");
puts(str);
}
『错误答案』:
1 fun(char *p) 或 fun(char p[])
2 while(*p!='\0') 或 while(*p)
3 k=1;}
4 p++; 或 p=1+p; 或 ++p; 或 p=p+1;
-------------------------------------
6【程序改错】
题目:将一个字符串中的大写字母转换成小写字母。
例如:输入aSdFG输出为asdfg。
-------------------------------------
#include<stdio.h>
/**********FOUND**********/
char fun(char c)
{
if(*c<='Z'&&*c>='A')*c-='A'-'a';
/**********FOUND**********/
fun= c;
}
main()
/**********FOUND**********/
char s[81],*p=s;
gets(s);
while(*p)
{
*p=fun(p);
/**********FOUND**********/
puts(*p);
p++;
}
putchar('\n');
}
-------------------------------------『错误答案』:
1 char fun(char *c)
2 return *c; 或 return (*c); 或 return(*c);
3 { char s[81],*p=s;
4 putchar(*p); 或 printf("%c",*p);
-------------------------------------
7【程序改错】
-------------------------------------题目:下列给定程序中,函数fun的功能是:判断m是否为素数,若是返回1,否则返回0。主函数的功能是:按每行5个输出1-100之间的全部素数。
请改正程序中的4个错误,使它能得出正确的结果。
-------------------------------------
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");
}
}
/**********FOUND**********/
void fun( int m)
{
int i,k=1;
if(m<=1) k=0;
/**********FOUND**********/
for(i=1;i<m;i++)
/**********FOUND**********/
if(m%i=0) k=0;
/**********FOUND**********/
return m;
}
『错误答案』:
1 int fun( int m) 或 fun( int m)
2 for(i=2;i<m;i++) 或 for(i=2;m>i;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;
-------------------------------------
8题目:函数fun的功能是:用下面的和式求圆周率的近似值。直到最后一项的绝对值小于等于0.0001。
π 1 1 1
— = 1 - — + — - — + ...
4 3 5 7
请改正程序中的错误,使它能得出正确的结果。
-------------------------------------
/**********FOUND**********/
#include "stdio.h"
fun()
{
int i=1;
/**********FOUND**********/
int s=0,t=1,p=1;
/**********FOUND**********/
while(fabs(t)<=1e-4)
{
s=s+t;
p=-p;
i=i+2;
t=p/i;
}
/**********FOUND**********/
printf("pi=%d\n",s*4);
}
main()
{
fun();
}
『错误答案』:
1 #include "math.h"
2 float s=0,t=1,p=1;
或 float s=0,p=1,t=1;
或 float p=1,s=0,t=1;
或 float p=1,t=1,s=0;
或 float t=1,p=1,s=0;
或 float t=1,s=0,p=1;
3 while(fabs(t)>1e-4) 或 while(0.0001<fabs(t)) 或 while(1e-4<fabs(t)) 或 while(fabs(t)>0.0001)
4 printf("pi=%f\n",s*4);
9题目:下列给定程序中,函数fun的功能是:求1到10的阶乘的和。主函数和fun函数中,各有两个错误,请改正,使其能得到正确的运行结果。
-------------------------------------main()
{
int i;
float t,s=0;
float fac(int n);
/**********FOUND**********/
for(i=1;i<10;i++)
/**********FOUND**********/
s=fac(i);
printf("%f\n",s);
}
float fac(int n)
{
/**********FOUND**********/
int y=1;
int i;
for(i=1 ;i<=n;i++)
y=y*i;
/**********FOUND**********/
return;
}
-------------------------------------
『错误答案』:
1 for(i=1;i<=10;i++) 或 for(i=1;10>=i;i++) 或 for(i=1;i<11;i++) 或 for(i=1;11>i;i++)
2 s=s+fac(i); 或 s+=fac(i);
3 float y=1.0; 或 float y=1;
4 return y; 或 return(y); 或 return (y);
10题目:函数fun的功能是:求1到20的阶乘的和。请改正程序中的错误,使它能得出正确的结果。
-------------------------------------
fun()
{
int n,j;
float s=0.0,t;
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=%f\n",s);
-------------------------------------
11题目:函数fun的功能是:求1到20的阶乘的和。
请改正程序中的错误,使它能得出正确的结果。
-------------------------------------
fun()
{
int n,j;
float s=0.0,t;
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=%f\n",s);
-------------------------------------
12【程序改错】
题目:函数fun的功能是:根据整型形参m的值,计算如下公式的值。
1 1 1
t = 1- —— - —— - ... - ——
2x2 3x3 mxm
例如,若m=5,则应输出:0.536389
请改正程序中的错误,使它能得出正确的结果。
-------------------------------------
double fun(int m)
{
double y=1.0;
int i;
/**********FOUND**********/
for(i=2;i<m;i--)
/**********FOUND**********/
y-=1/(i*i);
/**********FOUND**********/
return m;
}
main()
{
int n=5;
printf("\nthe result is %lf\n",fun(n));
}
-------------------------------------
『错误答案』:
1 for(i=2;i<=m;i++) 或 for(i=2;m>=i;i++) 或 for(i=2;i<m+1;i++) 或 for(i=2;i<1+m;i++) 或 for(i=2;m+1>i;i++) 或 for(i=2;1+m>i;i++)
2 y-=1.0/(i*i); 或 y=y-1.0/(i*i); 或 y-=1.0/(float)(i*i); 或 y=y-1.0/(float)(i*i); 或 y=y-1.0/i/i; 或 y=y-1.0/(float)i/(float)i;
3 return y; 或 return (y); 或 return(y);
【程序改错】
12题目:函数fun的功能是:实现交换两个整数的值。例如给a和b
分别输入3和6 ,输出为a=6 b=3
请改正程序中的4个错误,使它能得出正确的结果。
-------------------------------------
/**********FOUND**********/
void fun (int a, b)
{
int t;
/**********FOUND**********/
t=a;
/**********FOUND**********/
a=b;
/**********FOUND**********/
b=t;
}
main()
{
int a,b;
printf("enter a,b:");scanf("%d%d",&a,&b);
fun(&a,&b);
printf("a=%d b=%d\n",a,b);
}
-------------------------------------
『错误答案』:
1 void fun (int *a,int *b) 或 fun (int *a,int *b)
2 t=*a;
3 *a=*b;
4 *b=t;
-------------------------------------
13【程序改错】
题目:函数fun的功能是:计算并输出k以内最大的10个能被13
或17整除的自然数之和。k的值由主函数传入,若k的值
为500,则函数值为4622。
请更改程序中的错误,使它能得出正确的结果。
-------------------------------------
int fun(int k)
{
int m=0,mc=0,j;
/**********FOUND**********/
while ((k>=2)||(mc<10))
{
/**********FOUND**********/
if((k%13=0)||(k%17=0))
{m=m+k; mc++;}
/**********FOUND**********/
k++;
}
/**********FOUND**********/
return ;
}
main()
{
printf("%d\n",fun(500));
}
-------------------------------------
『错误答案』:
1 while ((2<=k)&&(mc<10)) 或 while ((k>=2)&&(10<mc)) 或 while ((2<=k)&&(10<mc)) 或 while ((k>=2)&&(mc<10)) 或 while ((2<=k)&&(mc<=9)) 或 while ((k>=2)&&(9<=mc)) 或 while ((2<=k)&&(9<=mc)) 或 while ((k>=2)&&(mc<=9))
2 if ((k%17==0)||(k%13==0)) 或 if !((k%17!=0)&&(k%13!=0))
3 k--;
4 return m; 或 return(m);
-------------------------------------
14【程序改错】
题目:函数fun的功能是:计算正整数num的各位上的数字之积。
例如,输入252,则输出应该是20。
请改正程序中的错误,使它能得出正确的结果。
-------------------------------------
long fun (long num)
{
/**********FOUND**********/
long k;
do
{
k*=num%10;
/**********FOUND**********/
num\=10;
}while (num);
return k;
}
main()
{
long n;
printf("\nPlease enter a number:");
/**********FOUND**********/
scanf("%ld", n);
/**********FOUND**********/
printf("\n%ld\n",fun(long n));
}
-------------------------------------
『错误答案』:
1 long k=1;
2 num/=10; 或 num=num/10;
3 scanf("%ld",&n);
4 printf("\n%ld\n",fun(n));
-------------------------------------
15题目:函数fun的功能是:求出两个非零正整数的最大公约数,
并作为函数值返回。例如,若给num1和num2分别输入49
和21,则输出的最大公约数为7。
请改正程序中的错误,使它能得出正确的结果。
-------------------------------------
int fun(int a,int b)
{
int r,t;
if(a<b)
{
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;
}
main()
{
int num1,num2,a;
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);
-------------------------------------
16题目:在主函数中从键盘输入若干个数放入数组中,用0结束输入并放在最后一个元素中。下列给定程序中,函数fun的 功能是:计算数组元素中值为正数的平均值(不包括0)。 例如,数组中元素的值依次为39,-47,21,2,-8,15, 0,则程序的运行结果为19.250000。
请改正程序中的错误,使它能得出正确的结果。
double fun(int s[])
{
/**********FOUND**********/
int sum=0.0;
int c=0,i=0;
/**********FOUND**********/
while(s[i] =0)
{
if (s[i]>0)
{sum+=s[i];c++;}
i++;
}
/**********FOUND**********/
sum\=c;
/**********FOUND**********/
return c;
}
main()
{
int x[1000];int i=0;
do
{scanf("%d",&x[i]);}
while(x[i++]!=0);
printf("%f\n",fun(x));
}
『错误答案』:
1 double sum=0.0;
2 while(s[i]!=0) 或 while!(s[i]==0) 或 while!(0==s[i])
3 sum/=c; 或 sum=sum/c;
4 return sum; 或 return (sum);
-------------------------------------
17【程序改错】
-------------------------------------
题目:fun函数的功能是:先从键盘上输入一个3行3列矩阵的各
个元素的值,然后输出主对角线上的元素之和sum。请改正程序中的错误,使它能得出正确的结果。
-------------------------------------
#include "stdio.h"
int fun()
{
int a[3][3],sum;
int i,j;
/**********FOUND**********/
a=0;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
/**********FOUND**********/
scanf("%d",a[i][j]);
for(i=0;i<3;i++)
/**********FOUND**********/
sum=sum+a[i][j];
/**********FOUND**********/
printf("sum=%f\n",sum);
}
main()
{
fun();
}
-------------------------------------
『错误答案』:
1 sum=0;
2 scanf("%d",&a[i][j]);
3 sum=sum+a[i][i]; 或 sum+=a[i][i];
4 printf("sum=%d\n",sum);
-------------------------------------
18【程序改错】
-------------------------------------
题目:fun函数的功能是:给定n个实数,输出平均值,并统计
在平均值以下(含平均值)的实数个数。例如,n=6时,
输入23.5, 45.67, 12.1, 6.4,58.9, 98.4所得平均值
为40.828335,在平均值以下的实数个数应为3。
请改正程序中的错误,使它能得出正确的结果。
-------------------------------------int fun(float x[],int n)
{
int j,c=0;
/**********FOUND**********/
float j=0;
/**********FOUND**********/
for(j=0;j<=n;j++)
xa+=x[j];
xa=xa/n;
printf("ave=%f\n",xa);
/**********FOUND**********/
for(j=0;j<=n;j++)
if(x[j]<=xa) c++;
/**********FOUND**********/
return xa;
}
main()
{
float x[]={23.5,45.67,12.1,6.4,58.9,98.4};
printf("%d\n",fun(x,6));
}
『错误答案』:
1 float xa=0; 或 float xa=0.0;
2 for(j=0;j<n;j++) 或 for(j=0;n>j;j++) 或 for(j=0;n-1>=j;j++) 或 for(j=0;j<=n-1;j++)
3 for(j=0;j<n;j++) 或 for(j=0;n>j;j++) 或 for(j=0;j<=n-1;j++) 或 for(j=0;n-1>=j;j++)
4 return c; 或 return (c);
-------------------------------------
展开阅读全文