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

程序改错1

第1题〗『程序改错』(2.0分)(题号:22)

/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

题目:函数fun的功能是:求出两个非零正整数的最大公约数,
并作为函数值返回。例如,若给num1和num2分别输入49
和21,则输出的最大公约数为7。
请改正程序中的错误,使它能得出正确的结果。

--------------------------------------------------------
注意:不可以增加或删除程序行,也不可以更改程序的结构。
------------------------------------------------------*/


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



〖第2题〗『程序改错』(2.0分)(题号:8)

/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

题目:输入一行英文文本,将每一个单词的第一个字母变成大
写。例如:输入"This is a C program.",输出为"This
Is A C Program."。

--------------------------------------------------------
注意:不可以增加或删除程序行,也不可以更改程序的结构。
------------------------------------------------------*/


#include
#include
#include
/**********FOUND**********/
fun(char p)
{
int k=0;
/**********FOUND**********/
do 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;



〖第3题〗『程序改错』(2.0分)(题号:21)

/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

题目:函数fun的功能是:根据以下公式求鹬担⒆魑μ
返回。例如,给指定精度的变量eps输入0.0005时,应当
输出Pi=3.140578。

1 1 2 1 2 3 1 2 3 4
— = 1 + — + — x — + — x — x — + — x — x — x

— + ...
2 3 3 5 3 5 7 3 5 7 9

请改正程序中的错误,使它能得出正确的结果。

--------------------------------------------------------
注意:不可以增加或删除程序行,也不可以更改程序的结构。
------------------------------------------------------*/


double fun(double eps)
{
double s,t;
int n=1;
s=0.0;
t=1;
/**********FOUND**********/
while(t<=eps)
{
s+=t;
/**********FOUND**********/
t=n/(2*n+1)*t;
n++;
}
/**********FOUND**********/
return s;
}
main()
{
double x;
scanf("%lf",&x);
printf("\neps=%lf,Pi=%lf\n\n",x,fun(x));
}


答案:
1). while (t>eps) 或 while (eps=eps) 或 while (eps<=t)
2). t=t*n/(2*n+1); 或 1.0*n/(2*n+1)*t 或 n/(2*n+1.0)*t 或 n/(2.0*n+1)*t 或 n/(2.0*n+1.0)*T 或 1.0*n/(2.0*n+1.0)*t
3). return ★2★*★s★; 或 return (2*s); 或 return(2*s); 或 return (s*2); 或 return(s*2);



〖第4题〗『程序改错』(2.0分)(题号:11)

/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

题目:下列给定程序中,函数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 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;
}


答案:
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;



〖第5题〗『程序改错』(2.0分)(题号:15)

/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

题目:函数fun的功能是:输出Fabonacci数列的前20项,要求变
量类型定义成浮点型,输出时只输出整数部分,输出项
数不得多于或少于20。
请改正程序中的4个错误,使它能得出正确的结果。

--------------------------------------------------------
注意:不可以增加或删除程序行,也不可以更改程序的结构。
------------------------------------------------------*/


fun()
{
int i;
float f1=1,f2=1,f3;
/**********FOUND**********/
pr

intf("%8d",f1);
/**********FOUND**********/
for(i=1;i<=20;i++)
{
f3=f1+f2;
/**********FOUND**********/
f2=f1;
/**********FOUND**********/
f3=f2;
printf("%8.0f",f1);
}
printf("\n");
}
main()
{
fun();
}


答案:
1). printf("%8.0f",f1); 或 printf("%f",f1);
2). for(i=1;i<20;i++) 或 for(i=1;20>i;i++) 或 for(i=2;i<=20;i++) 或 for(i=2;20>=i;i++) 或 for(i=1;i<=19;i++) 或 for(i=1;19>=i;i++)
3). f1=f2;
4). f2=f3;



〖第6题〗『程序改错』(2.0分)(题号:251)

/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

题目:有一数组内放10个整数,要求找出最小数和它的下标,然后
把它和数组中最前面的元素即第一个数对换位置.

--------------------------------------------------------
注意:不可以增加或删除程序行,也不可以更改程序的结构。
------------------------------------------------------*/

main( )
{
int i,a[10],min,k=0;
printf("\n please input array 10 elements\n");
for(i=0;i<10;i++)
/***********FOUND***********/
scanf("%d", a[i]);
for(i=0;i<10;i++)
printf("%d",a[i]);
min=a[0];
/***********FOUND***********/
for(i=3;i<10;i++)
/***********FOUND***********/
if(a[i]>min)
{
min=a[i];
k=i;
}
/***********FOUND***********/
a[k]=a[i];
a[0]=min;
printf("\n after eschange:\n");
for(i=0;i<10;i++) printf("%d",a[i]);
printf("\nk=%d\nmin=%d\n",k,min);
}

答案:
1). scanf("%d",&a[i]);
2). for(i=1;i<10;i++) 或 for(i=0;i<10;i++) 或 for(i=1;i<=9;i++) 或 for(i=0;i<=9;i++)
3). if(a[i]4). a[k]=a[0];



〖第7题〗『程序改错』(2.0分)(题号:14)

/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

题目:函数fun的功能是:求1到20的阶乘的和。
请改正程序中的错误,使它能得出正确的结果。

--------------------------------------------------------
注意:不可以增加或删除程序行,也不可以更改程序的结构。
------------------------------------------------------*/


fun()
{
int n,j;
float 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=%f\n",s);



〖第8题〗『程序改错』(2.0分)(题号:25)

/*

------------------------------------------------------
【程序改错】
--------------------------------------------------------

题目: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;jj;j++) 或 for(j=0;n-1>=j;j++) 或 for(j=0;j<=n-1;j++)
3). for(j=0;jj;j++) 或 for(j=0;j<=n-1;j++) 或 for(j=0;n-1>=j;j++)
4). return c; 或 return (c);



〖第9题〗『程序改错』(2.0分)(题号:19)

/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

题目:函数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));



〖第10题〗『程序改错』(2.0分)(题号:250)

/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

题目:以下程序输出前六行杨辉三角形,既
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
…………
…………

--------------------------------------------------------
注意:不可以增加或删除程序行,

也不可以更改程序的结构。
------------------------------------------------------*/

main( )
{
static int a[6][6];
int i,j,k;
/***********FOUND***********/
for(i=1;i<=6;i++)
/***********FOUND***********/
{
for(k=0;k<5+i;k++)
printf(" ");
for(j=0;j<=i;j++)
{
/***********FOUND***********/
if(j==0&&j==i)
a[i][j]=1;
else
/***********FOUND***********/
a[i][j]=a[i-1][j-1]+a[i][j-1];
printf(" ");
printf("%-3d",a[i][j]);
}
printf("\n");
}
}

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



〖第11题〗『程序改错』(2.0分)(题号:30)

/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

题目:将字符串s中最后一次出现的子字符串t1替换成字符串t2,
所形成的新串放在w所指的数组中,在此处,要求t1和t2
所指字符串的长度相同。
例如,当s所指字符串中的内容为"abcdabfabc",t1中的
内容为"ab",t2中的内容为"99"时,结果w所指数组中的
内容应为"abcdabf99c"。
请改正程序中的语法错误,使它能运行出正确的结果。

--------------------------------------------------------
注意:不可以增加或删除程序行,也不可以更改程序的结构。
------------------------------------------------------*/


#include
#include
#include
int fun (char *s, char *t1, char *t2 , char *w)
{
int i; char *p , *r, *a;
strcpy( w, s );
/**********FOUND**********/
while ( w )
{
p = w; r = t1;
while ( *r )
/**********FOUND**********/
if ( *r = *p ) { r++; p++; }
else break;
/**********FOUND**********/
if ( *r == '/0' ) a = w;
w++;
}
r = t2;
while ( *r )
{
/**********FOUND**********/
a = *r;
a++; r++; }
}

main()
{
char s[100], t1[100], t2[100], w[100];
clrscr();
printf("\nPlease enter string S:"); scanf("%s", s);
printf("\nPlease enter substring t1:"); scanf("%s", t1);
printf("\nPlease enter substring t2:"); scanf("%s", t2);
if ( strlen(t1)==strlen(t2) )
{
fun( s, t1, t2, w);
printf("\nThe result is : %s\n", w);
}
else printf("\nError : strlen(t1) != strlen(t2)\n");
}



答案:
1). while (*w) 或 while (*w!=0) 或 while (*w!='\0') 或 for (;*w;) 或 for (;*w!='\0';)
2). if ( ★*r★ == ★*p★ ) { r++; p++; }
3). if (★ *r ★==★ '\0'★ ) a = w; 或 if (★ *r ★==0 ) a = w;
4). *a=*r;



〖第12题〗『程序改错』(2.0分)(题号:6)

/*------------------

------------------------------------
【程序改错】
--------------------------------------------------------

题目:以下程序的功能是求如下表达式:

1 1 1
S = 1 + —— + ——— + ...... + ———————
1+2 1+2+3 1+2+3+......+n

请改正程序中的错误,使程序能得到正确的运行结果。

--------------------------------------------------------
注意:不可以增加或删除程序行,也不可以更改程序的结构。
------------------------------------------------------*/


#include
main()
{
int n;
float fun();
printf("Please input a number:");
/**********FOUND**********/
print("%d",n) ;
printf("%10.6f\n",fun(n));
}
/**********FOUND**********/
fun(int n)
{
int i,j,t;
float s;
s=0;
/**********FOUND**********/
while(i=1;i<=n;i++);
{
t=0;
for(j=1;j<=i;j++)
t=t+j;
/**********FOUND**********/
=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;ii;i++)
4). s+=1.0/t 或 s=★s★+★1.0★/(float)t; 或 s=★s★+★1.0★/t; 或 s+=1.0/(float)t



〖第13题〗『程序改错』(2.0分)(题号:26)

/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

题目:fun函数的功能是:找出大于m的最小素数,并将其作为
函数值返回。
请改正程序中的错误,使它能得出正确的结果。

--------------------------------------------------------
注意:不可以增加或删除程序行,也不可以更改程序的结构。
------------------------------------------------------*/

int fun( int m)
{
int i,k;
for(i=m+1;;i++)
{
/**********FOUND**********/
for(k=1;k/**********FOUND**********/
if(i%k!=0) break;
/**********FOUND**********/
if(k/**********FOUND**********/
return k;
}
}
main()
{
int n;
scanf("%d",&n);
printf("%d\n",fun(n));
}


答案:
1). for(k=2;kk;k++)
2). if(★i%k★==★0★) break;
3). if(i<=k) 或 if(k>=i) 或 if(★k★==★i★)
4). return i; 或 return (i);



〖第14题〗『程序改错』(2.0分)(题号:3)

/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

题目:用起泡法对10个整数从小到大排序。
程序中共有4条错误语句,请改正错误。

--------------------------------------------------------
注意:不可以增加或删除程序行,也不可以更改程序的结构。

------------------------------------------------------*/


/**********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;}
}
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]);
/**********FOUND**********/
sort(n,a);
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;jj;j++)
3). if(x[j]>x[★j★+★1★]) 或 if(x[★j★+★1]★4). sort(a,n);



〖第15题〗『程序改错』(2.0分)(题号:256)

/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

题目:以下程序把两个数按由大到小的顺序输出来.

--------------------------------------------------------
注意:不可以增加或删除程序行,也不可以更改程序的结构。
------------------------------------------------------*/

/***********FOUND***********/
swap( int *p1,*p2)
{int p;
p=*p1;
*p1=*p2;
*p2=p;
}
main( )
{int a,b, *p1,*p2;
printf("input a,b:");
/***********FOUND***********/
scanf("%d%d",a,b);
/***********FOUND***********/
*p1=&a;*p2=&b;
if(aprintf("a=%d,b=%d\n",a,b);
/***********FOUND***********/
printf("max=%d,min=%d\n",p1,p2);
}

答案:
1). swap( int *p1,int *p2)
2). scanf("%d%d",&a,&b);
3). p1=&a;p2=&b;
4). printf("max=%d,min=%d\n",*p1,*p2);



〖第16题〗『程序改错』(2.0分)(题号:253)

/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

题目:有一数组内放10个整数,要求找出最小数和它的下标,然后
把它和数组中最前面的元素即第一个数对换位置.

--------------------------------------------------------
注意:不可以增加或删除程序行,也不可以更改程序的结构。
------------------------------------------------------*/

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



〖第17题〗『程序改错』(2.0分)(题号:2)

/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

题目:为一维数组输入10个整数;将其中最小的数与第一个数
对换,将最大的数与最后一个数对换;输出数组元素。
程序中共有4条错误语句,请改正错误。

--------------------------------------------------------
注意:不可以增加或删除程序行,也不可以更改程序的结构。
------------------------------------------------------*/


main()
{
int a[10];
void input();
void output();
void max_min();
input(a,10);
max_min(a,10);
output(a,10);
}
void input(int *arr,int n)
{ int *p,i;
p=arr;
printf("please enter 10 integers:\n");
for(i=0;i/**********FOUND**********/
scanf("%d",p);
}
void max_min(int *arr,int n)
{
int *min,*max,*p,t;
min=max=arr;
for(p=arr+1;p/**********FOUND**********/
if(*p<*max)
max=p;
else if(*p<*min) min=p;
t=*arr;*arr=*min;*min=t;
/**********FOUND**********/
if(max=arr)
max=min;
t=*(arr+n-1);*(arr+n-1)=*max;*max=t;
}
void output(int *arr,int n)
{
int *p,i;
p=arr;
printf("The changed array is:\n");
/**********FOUND**********/
while(i=0;iprintf("%3d",*p++);
printf("\n");
}

答案:
1). scanf("%d",p★++);
2). if(*p★>★*max)
3). if(★max★==★arr★)
4). for(i=0;ii;i++) 或 for(p=arr;p


〖第18题〗『程序改错』(2.0分)(题号:17)

/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

题目:函数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;



〖第19题〗『程序改错』(2.0分)(题号:28)

/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

题目:fun函数的功能是:求一个3行4列矩阵的外框的

元素值之
和,注意,矩阵四个角上的元素不能重复加。例如,矩阵
元素为1,2,3,4,5,6,7,8,9,10,11,12时,四
框元素值之和应为65。
请改正程序中的错误,使它能得出正确的结果。

--------------------------------------------------------
注意:不可以增加或删除程序行,也不可以更改程序的结构。
------------------------------------------------------*/


int fun(int a[3][4],int m,int n)
{
/**********FOUND**********/
int i,j,s,s1=s2=s3=s4=0;
for(j=0;j{
s1=s1+a[0][j];
/**********FOUND**********/
s2=s2+a[m][j];
}
/**********FOUND**********/
for(i=0;i{
s3=s3+a[i][0];
s4=s4+a[i][n-1];
}
/**********FOUND**********/
s=s1+s2-s3-s4;
return s;
}
main()
{
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
printf("total=%d\n",fun(a,3,4));
}



答案:
1). int i,j,s,s1=0,s2=0,s3=0,s4=0;
2). s2=★s2★+★a[m-1][j]★; 或 s2+=a[m-1][j];
3). for(i=1;ii;i++) 或 for(i=1;-1+m>i;i++) 或 for(i=1;i<=m-2;i++) 或 for(i=1;m-2>=i;i++)
4). s=s1+s2+s3+s4;



〖第20题〗『程序改错』(2.0分)(题号:5)

/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

题目:将一个字符串中第m个字符开始的全部字符复制成为另一
个字符串。
程序中共有4条错误语句,请改正错误。

--------------------------------------------------------
注意:不可以增加或删除程序行,也不可以更改程序的结构。
------------------------------------------------------*/


#include
void strcopy(char *str1,char *str2,int m)
/**********FOUND**********/
char p1,p2;
int i,j;
/**********FOUND**********/
= str1+m;
p2=str2;
/**********FOUND**********/
if(*p1);
*p2++=*p1++;
*p2='\0';
}
main()
{
int i,m;
char *p1,*p2,str1[80],str2[80];
p1=str1;
p2=str2;
gets(p1);
scanf("%d",&m);
/**********FOUND**********/
strcat(str1[0],str2[0],m);
puts(p1);puts(p2);
}


答案:
1). { char *p1,*p2; 或 { char *p2,*p1;
2). p1= ★str1★+★m★-1; 或 p1=-1+★str1★+★m★;
3). while(*p1)
4). strcopy(str1,str2,m);



〖第21题〗『程序改错』(2.0分)(题号:434)

/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

题目:编写一个程序模拟袖珍计算器的加、减、
乘、除四则运算。
--------------------------------------------------------
注意:不可以增加或删除程序行,也不可以更
改程序的结构。
------------------------------------------------------*/
#include
void main()
{
float x,y;
char operate1;
printf("Arithmetic expressio

n\n");
/**********FOUND**********/
scanf("%f",x);
/**********FOUND**********/
while((operate1==getchar())!='=')
{
printf("result=");
scanf("%f",&y);
/**********FOUND**********/
switch(y);
{
case '+':
x+=y;
break;
case '-':
x-=y;
break;
case '*':
x*=y;
break;
case '/':
x/=y;
break;
}
}

printf("%f",x);
getch();
return;
}



答案:
1). scanf("%f",&x);
2). while((operate1=getchar())!='=')
3). switch(operate1)



〖第22题〗『程序改错』(2.0分)(题号:353)

/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

题目:编写函数fun其功能是:根据整型形参m,计算如下
公式的值:y=1+1/3+1/5+1/7+...+1/(2m-3)
--------------------------------------------------------
注意:不可以增加或删除程序行,也不可以更改程序的
结构。
------------------------------------------------------*/
#include "stdio.h"



double fun(int m)
{
/**********FOUND**********/
double y=1
int i;
/**********FOUND**********/
for(i=1; i/**********FOUND**********/
{y+=1.0/(2*i-3);
return(y);

}
main()
{int n;
clrscr();
printf("Enter n: ");
scanf("%d", &n);
printf("\nThe result is %1f\n", fun(n));
getch();

}




答案:
1). double y=1;
2). for(i=1; i<=m; i++)
3). {y+=1.0/(2*i-3); }



〖第23题〗『程序改错』(2.0分)(题号:398)

/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

给定程序MODI1.C中函数fun的功能是: 将s所指字符串中的字母
转换为按字母序列的后续字母(但Z转换为A, z转换为a),其它字符不
变。


--------------------------------------------------------
注意:不可以增加或删除程序行,也不可以更改程序的结构。
------------------------------------------------------*/
#include
#include
#include
void fun (char *s)
{
/***********FOUND***********/
while(*s!="\0")

{ if(*s>='A' & *s <= 'Z' || *s >= 'a' && *s<='z')
{ if(*s=='Z') *s='A';
else if(*s=='z') *s='a';
/***********FOUND***********/
else s += 1;
}
/***********FOUND***********/
s++

}
}
main()
{ char s[80];
clrscr();
printf("\n Enter a string with length < 80. :\n\n "); gets(s);
printf("\n The string : \n\n "); puts(s);
fun ( s );
printf ("\n\n The Cords :\n\n "); puts(s);
getch();
getch();
}



答案:
1). while(*s!='\0')
2). else *s += 1;
3). s++;



〖第24题〗『程序改错』(2.0分)(题号:388)

/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

题目:给定程序MODI1.C中函数 fun 的功能是:求出
数组中最大数和次最大数,并

把最大数和a[0]
中的数对调、次最大数和a[1]中的数对调。
--------------------------------------------------------
注意:不可以增加或删除程序行,也不可以更改程序的结构。
------------------------------------------------------*/
#include
#include
#define N 20
int fun ( int * a, int n )
{ int i, m, t, k ;
for(i=0;i<2;i++)
/**********FOUND**********/
{ m=0;
/**********FOUND**********/
for(k=1;k/**********FOUND**********/
if(a[k]>a[m]) k=m;
t=a[i];a[i]=a[m];a[m]=t;
}
}
main( )
{ int x, b[N]={11,5,12,0,3,6,9,7,10,8}, n=10, i;
clrscr( );
for ( i=0; iprintf("\n");
fun ( b, n );
for ( i=0; iprintf("\n");
}



答案:
1). { m=i;
2). for(k=i;k3). if(a[k]>a[m]) m=k;



〖第25题〗『程序改错』(2.0分)(题号:444)

/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

题目:求100以内(包括100)的偶数之和.
--------------------------------------------------------
注意:不可以增加或删除程序行,也不可以更改程序
的结构。
------------------------------------------------------*/
#include "stdio.h"
main()
{
/**********FOUND**********/
int i,sum=1;
/**********FOUND**********/
for(i=2;i<=100;i+=1)
sum+=i;
/**********FOUND**********/
printf("Sum=%d \n";sum);
getch();
}








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



〖第26题〗『程序改错』(2.0分)(题号:448)

/*------------------------------------------------------
【程序改错】

--------------------------------------------------------


题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,
奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分
按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,
高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,
可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,
高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利
润I,求应发放奖金总数?
--------------------------------------------------------
注意:不可以增加或删除程序行,也不可以更改程序的结构。
------------------------------------------------------*/
#include "stdio.h"
main()
{
long int i;
int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;
/**********FOUND**********/
scanf("%ld"&i);
bonus1=100000*0.1;bonus2=bonus1+100000*0.75;
bonus4=bonus2+200000*0.5;
bonus6=bonus4+200000*0.3;
bonus10=bonus6+400000*0.15;
/**********FOUND**********/
if(i>100000)//
bonus=i*0.1;
else if(i<=200000)
bonus=bonus1+(i-100000)*

0.075;
else if(i<=400000)
bonus=bonus2+(i-200000)*0.05;
else if(i<=600000)
bonus=bonus4+(i-400000)*0.03;
else if(i<=1000000)
bonus=bonus6+(i-600000)*0.015;
else
bonus=bonus10+(i-1000000)*0.01;
/**********FOUND**********/
printf("bonus=%d",bonus)//
getch();
}




答案:
1). scanf("%ld",&i);
2). if(i<=100000)
3). printf("bonus=%d",bonus);



〖第27题〗『程序改错』(2.0分)(题号:410)

/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

题目:有1、2、3、4个数字,能组成多少个互不相同
且无重复数字的三位数?都是多少?
--------------------------------------------------------
注意:不可以增加或删除程序行,也不可以更改程序
的结构。
------------------------------------------------------*/

main()
{
int i,j,k;
/**********FOUND**********/
printf("\n")
/**********FOUND**********/
for(i=1;i<=5;i++)
for(j=1;j<5;j++)
for (k=1;k<5;k++)
{
/**********FOUND**********/
if (i!=k||i!=j||j!=k)
printf("%d,%d,%d\n",i,j,k);
}

}


答案:
1). printf("\n");
2). for(i=1;i<5;i++) 或 for(i=1;i<=4;i++)
3). if (i!=k&&i!=j&&j!=k)



〖第28题〗『程序改错』(2.0分)(题号:449)

/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

题目:编写函数fun计算下列分段函数的值:
x*20 x<0且x≠-3
f(x)= sin(x) 0≤x<10且x≠2及x≠3
x*x+x-1 其它

--------------------------------------------------------
注意:不可以增加或删除程序行,也不可以更改程序的结构。
------------------------------------------------------*/
#include"math.h"
#include "stdio.h"
float fun(float x)
{
/**********FOUND**********/
float y
/**********FOUND**********/
if (x<0 || x!=-3.0)
y=x*20;
else if(x>=0 && x<10.0 && x!=2.0 && x!=3.0)
y=sin(x);
else y=x*x+x-1;
/**********FOUND**********/
return x;
}

main()
{ float x,f;
printf("Input x=");
scanf("%f",&x);
f=fun(x);
printf("x=%f,f(x)=%f\n",x,f);
getch();
}






答案:
1). float y;
2). if (x<0 && x!=-3.0)
3). return y;



〖第29题〗『程序改错』(2.0分)(题号:360)

/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

题目:给定程序MODI1.C中函数fun的功能是:
将长整型数中每一位上为偶数的数依次取出,
构成一个新数放在t中。高位仍在高位,低位
仍在低位。
例如,当s中的数为:87653142时,t中的数为:
8642。
--------------------------------------------------------
注意:不可以增加或删除程序行,也不可以

更改程序
的结构。
------------------------------------------------------*/
#include
#include
void fun (long s, long *t)
{ int d;
long sl=1;
*t = 0;
while ( s > 0)
{ d = s%10;
/**********FOUND**********/
if(d%2=0)
/**********FOUND**********/
{ *t=d* sl+ t;
sl *= 10;
}
/**********FOUND**********/
s\=10;

}
}
main()
{ long s, t;
clrscr();
printf("\nPlease enter s:"); scanf("%ld", &s);
fun(s, &t);
printf("The result is: %ld\n", t);
getch();
}


答案:
1). if(★d%2★==★0★)
2). { *t=d* sl+ *t;
3). s/=10; 或 s=s/10;



〖第30题〗『程序改错』(2.0分)(题号:375)

/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

题目:给定程序的功能是:读入一个整数k
(2≤k≤10000),打印它的所有质因子(即所有
为素数的因子)。例如,若输入整数:2310,
则应输出:2、3、5、7、11。请改正程序中的
语法错误,使程序能得出正确的结果。
--------------------------------------------------------
注意:不可以增加或删除程序行,也不可以更改程序的结构。
------------------------------------------------------*/
#include "conio.h"
#include "stdio.h"
/**********FOUND**********/
IsPrime(integer n );
{ int i, m;
m = 1;
for ( i = 2; i < n; i++ )
/**********FOUND**********/
if ( n%i )
{ m = 0; break ; }
/**********FOUND**********/
return ( n );
}
main( )
{ int j, k;
clrscr();
printf( "\nPlease enter an integer number between 2 and 10000: " ); scanf( "%d", &k );
printf( "\n\nThe prime factor(s) of %d is( are ):", k );
for( j = 2; j <= k; j++ )
if( ( !( k%j ) )&&( IsPrime( j ) ) ) printf( "\n %4d", j );
printf("\n");
}



答案:
1). IsPrime(int n)
2). if(!(n%i))
3). return ( m );



〖第31题〗『程序改错』(2.0分)(题号:356)

/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

题目:下列程序中,函数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);
}
}
main()
{
int n;
clrscr();
printf("\nPlease enter n:");
scanf("%d",&n);
printf("%d\n",fun(n));
getch();
}


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



〖第32题〗『程序改错』(2.0分)(题号:416)

/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当
即吃了一半,还不过瘾,又多吃了一个,第二天
早上又将剩下的桃子吃掉一半,又多吃了一个。
以后每天早上都吃了前一天剩下的一半零一个。
到第10天早上想再吃时,见只剩下一个桃子了。
求第一天共摘了多少。
--------------------------------------------------------
注意:不可以增加或删除程序行,也不可以更改程序的
结构。
------------------------------------------------------*/
#include"stdio.h"
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;



〖第33题〗『程序改错』(2.0分)(题号:431)

/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

题目:编写函数fun求1000以内所有8的倍数之和。
--------------------------------------------------------
注意:不可以增加或删除程序行,也不可以更改程
序的结构。
------------------------------------------------------*/
#include"stdio.h"
#define N 1000

main()
{int sum;
sum=fun(8);
printf("%d以内所有%d的倍数之和为:%d\n",N,8,sum);
getch();
}
int fun(int m)
{
/**********FOUND**********/
int s=0;i;
/**********FOUND**********/
for(i=1;i>N;i++)
/**********FOUND**********/
if(i/m==0)
s+=i;
return s; }














答案:
1). int★ s=0★,★i★;
2). for(i=1;i3). if(i%m==0)



〖第34题〗『程序改错』(2.0分)(题号:432)

/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

题目:编写input()和output()函数输入,输出5个学生
的数据记录。
--------------------------------------------------------
注意:不可以增加或删除程序行,也不可以更改程序的
结构。
------------------------------------------------------*/
#include "stdio.h"
#define N 5
struct student
{char num[6];
char name[8];
int score[4];
} stu[N];
input(stu)
struct student stu[];
{
/**********FOUND**********/
int i;j;
for(i=0;i{printf("\n please input %d of %d\n",i+1,N);

printf("num: ");

scanf("%s",&stu[i].num);
printf("name: ");
scanf("%s",stu[i].name);
for(j=0;j<3;j++)
{
/**********FOUND**********/
printf("score %d

.",j);
scanf("%d",&stu[i].score[j]);
}
printf("\n");
}
}
print(stu)
struct student stu[];
{int i,j;
printf("\nNo. Name Sco1 Sco2 Sco3\n");
/**********FOUND**********/
for(i=0;i<=N;i++)
{printf("%-6s%-10s",stu[i].num,stu[i].name);
for(j=0;j<3;j++)
printf("%-8d",stu[i].score[j]);
printf("\n");
}
}
main()
{
input();
print();
getch();
}












答案:
1). int★ i★,★j★;
2). printf("score %d.",★j★+★1★);
3). for(i=0;i


〖第35题〗『程序改错』(2.0分)(题号:427)

/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

题目:有n个整数,使其前面各数顺序向后移m个位
置,最后m个数变成最前面的m个数.
--------------------------------------------------------
注意:不可以增加或删除程序行,也不可以更改程
序的结构。
------------------------------------------------------*/
#include"stdio.h"
main()
{
int number[20],n,m,i;
printf("the total numbers is:");
scanf("%d",&n);
printf("back m:");
scanf("%d",&m);
for(i=0;iscanf("%d,",&number[i]);
scanf("%d",&number[n-1]);
move(number,n,m);
for(i=0;iprintf("%d,",number[i]);
printf("%d",number[n-1]);
getch();
}
move(array,n,m)
/**********FOUND**********/
int n,m,array(20);
{
int *p,array_end;
/**********FOUND**********/
array_end=(array+n-1);
for(p=array+n-1;p>array;p--)
/**********FOUND**********/
*p==*(p-1);
*array=array_end;
m--;
if(m>0) move(array,n,m);
}








答案:
1). int n,m,array[20];
2). array_end=*(array+n-1);
3). *p=*(p-1);



〖第36题〗『程序改错』(2.0分)(题号:439)

/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

题目:输入n,计算s=1+1+2+1+2+3+1+2+3+4+...+1+2+3+4+...+n


--------------------------------------------------------
注意:不可以增加或删除程序行,也不可以更改程序的结构。
------------------------------------------------------*/
#include
void main()
{
/**********FOUND**********/
int i,s;p,n;
printf("Enter n!\n");
/**********FOUND**********/
scanf("%d",n);
/**********FOUND**********/
for(s=p=0,i=1;is+=p+=i;
printf("S= %d\n",s);
getch();
}



答案:
1). int i,s,p,n;
2). scanf("%d",&n);
3). for(s=p=0,i=1;i<=n;i++)



〖第37题〗『程序改错』(2.0分)(题号:384)

/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

题目:给定程序MODI1.C中函数 fun 的功能是:输入两
个双精度数,函数返回它们的平方和的平方根值。
例如输入:22.936 和 14.121,输出为:y
= 26.934415。
---------------------

-----------------------------------
注意:不可以增加或删除程序行,也不可以更改程序的结构。
------------------------------------------------------*/
#include
#include
#include
/**********FOUND**********/
double fun (double *a, *b)
{ double c;
/**********FOUND**********/
c = sqr(a*a + b*b);
/**********FOUND**********/
return *c;
}
main ( )
{ double a, b, y;
clrscr( );
printf ( "Enter a, b : ");
scanf ("%lf%lf", &a, &b );
y = fun (&a, &b);
printf ("y = %f \n", y );
}



答案:
1). double fun (double *a, double *b)
2). c = sqrt(*a * *a + *b * *b);
3). return c;



〖第38题〗『程序改错』(2.0分)(题号:396)

/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

题目:请编写一个函数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);

}

main( )
{
float a[10],ave;
int i=0;
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);
getch();
}


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



〖第39题〗『程序改错』(2.0分)(题号:409)

/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
题目:写一个程序,计算级数 ex=1+x+x2/2!+x3/3!+
...+xn/n! 的值。
--------------------------------------------------------
注意:不可以增加或删除程序行,也不可以更改程序
的结构。
------------------------------------------------------*/
#include"stdio.h"
main()
{
int m,n;
float x,term,ex1,ex2;
printf("x,m=");
scanf("%f %d",&x,&m);
/**********FOUND**********/
ex1==ex2=1;
term=1;
for(n=1;n<=m;n++)
{
/**********FOUND**********/
term*=x%n;
ex1+=term;
}
ex2=term;
/**********FOUND**********/
for (n=m;n>1; n--)
{
term*=n/x;
ex2+=term;
}
printf("exforward=%f exbac

krard=%f\n",ex1,ex2);
getch();
}


答案:
1). ex1=ex2=1;
2). term*=x/n;
3). for (n=m;n>=1; n--)



〖第40题〗『程序改错』(2.0分)(题号:370)

/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

题目:给定程序中函数fun的功能是:求
出在字符串中最后一次出现的子字符串的
地址,通过函数值返回,在主函数中输出
从此地址开始的字符串;若未找到,则函
数值为NULL。
例如,当字符串中的内容为:"abcdabfabcdx",
t中的内容为:"ab"时,输出结果应是:abcdx。
当字符串中的内容为:"abcdabfabcdx",t中的
内容为:"abd"时,则程序输出未找到信息:
not found!。
--------------------------------------------------------
注意:不可以增加或删除程序行,也不可以更改程序的
结构。
------------------------------------------------------*/
#include
#include
#include
char * fun (char *s, char *t )
{
char *p , *r, *a;
/**********FOUND**********/
a == NULL;
while ( *s )
{ p = s; r = t;
while ( *r )
/**********FOUND**********/
if ( r == p ) { r++; p++; }
else break;
/**********FOUND**********/
if ( *r ='\0' ) a = s;
s++;
}
return a ;
}

main()
{
char s[100], t[100], *p;
clrscr();
printf("\nPlease enter string S :"); scanf("%s", s );
printf("\nPlease enter substring t :"); scanf("%s", t );
p = fun( s, t );
if ( p ) printf("\nThe result is : %s\n", p);
else printf("\nNot found !\n" );
}


答案:
1). a = NULL;
2). if ( *r == *p ) { r++; p++; }
3). if ( *r == '\0' ) a = s;



〖第41题〗『程序改错』(2.0分)(题号:374)

/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

题目:给定程序MODI1.C中函数fun的功能是:
首先把b所指字符串中的字符按逆序存
放, 然后将a所指字符串中的字符和b
所指字符串中的字符,按排列的顺序交
叉合并到c所指数组中,过长的剩余字符
接在c所指数组的尾部。 例如,当a所指
字符串中的内容为"abcdefg",b所指字符
串中的内容为"1234"时,c所指数组中的内
容应该为"a4b3c2d1efg";而当a所指字符串
中的内容为"1234",b所指字符串中的内容
为"abcdefg"时,c所指数组中的内容应该
为"1g2f3e4dcba"。
--------------------------------------------------------
注意:不可以增加或删除程序行,也不可以更改
程序的结构。
------------------------------------------------------*/
#include
#include
#include
void fun( char *a, char *b, char *c )
{
int i , j; ch

ar ch;
i = 0; j = strlen(b)-1;
/**********FOUND**********/
while ( i > j )
{ ch = b[i]; b[i] = b[j]; b[j] = ch;
i++; j--;
}
/**********FOUND**********/
while ( *a &&*b )
/**********FOUND**********/
{ If ( *a ){ *c = *a; c++; a+; }
if ( *b ){ *c = *b; c++; b++; }
}
*c = 0;
}

main()
{
char s1[100],s2[100],t[200];
clrscr();
printf("\nEnter s1 string : ");scanf("%s",s1);
printf("\nEnter s2 string : ");scanf("%s",s2);
fun( s1, s2, t );
printf("\nThe result is : %s\n", t );
}



答案:
1). while(i2). while ( *a || *b )
3). { if ( *a ){ *c = *a; c++; a++; }



〖第42题〗『程序改错』(2.0分)(题号:372)

/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

题目:给定程序中函数 fun 的功能是:
将s所指字符串中最后一次出现的、t1所
指子串替换成t2所指子串,所形成的新串
放在w所指的数组中。在此处,要求t1和t2
所指字符串的长度相同。例如,当s所指字
符串中的内容为:"abcdabfabc",t1所指子
串中的内容为:"ab",t2所指子串中的内容
为:"99"时, 结果,在w所指的数组中的内
容应为:"abcdabf99c"。
--------------------------------------------------------
注意:不可以增加或删除程序行,也不可以更改程序
的结构。
------------------------------------------------------*/
#include
#include
#include
int fun (char *s, char *t1, char *t2 , char *w)
{
int i; char *p , *r, *a;
strcpy( w, s );
/**********FOUND**********/
while ( w )
{ p = w; r = t1;
while ( *r )
/**********FOUND**********/
if ( *r != *p )
{ r++; p++; }
else break;
/**********FOUND**********/
if ( *r ='\0' ) a = w;
w++;
}
r = t2;
while ( *r ){ *a = *r; a++; r++; }
}

main()
{
char s[100], t1[100], t2[100], w[100];
clrscr();
printf("\nPlease enter string S:"); scanf("%s", s);
printf("\nPlease enter substring t1:"); scanf("%s", t1);
printf("\nPlease enter substring t2:"); scanf("%s", t2);
if ( strlen(t1)==strlen(t2) )
{ fun( s, t1, t2, w);
printf("\nThe result is : %s\n", w);
}
else printf("\nError : strlen(t1) != strlen(t2)\n");
}



答案:
1). while (*w)
2). if(*r == *p)
3). if ( *r == '\0' ) a = w;



〖第43题〗『程序改错』(2.0分)(题号:426)

/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

题目:有n个人围成一圈,顺序排号。从第一个人
开始报数(从1到3报数),凡报到3的人退
出圈子,问最后留下的是原来第几号的那位。
--------------------------------------------------------
注意:不可以增加或删除程序行,也不可以更改程序
的结构。
----------

--------------------------------------------*/
#include"stdio.h"
#define nmax 50
main()
{
int i,k,m,n,num[nmax],*p;
printf("please input the total of numbers:");
scanf("%d",&n);
/**********FOUND**********/
p==num;
for(i=0;i*(p+i)=i+1;
i=0;
k=0;
m=0;
/**********FOUND**********/
while(m>n-1)
{
if(*(p+i)!=0) k++;
/**********FOUND**********/
if(k!=3)
{*(p+i)=0;
k=0;
m++;
}
i++;
if(i==n) i=0;
}
while(*p==0) p++;
printf("%d is left\n",*p);
getch();
}







答案:
1). p=num;
2). while(m3). if(k==3)



〖第44题〗『程序改错』(2.0分)(题号:433)

/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

题目:编写一个函数,输入n为偶数时,调用函数求
1/2+1/4+...+1/n,当输入n为奇数时,调用函
数1/1+1/3+...+1/n(利用指针函数)
--------------------------------------------------------
注意:不可以增加或删除程序行,也不可以更改程序
的结构。
------------------------------------------------------*/
#include "stdio.h"
main()
{
float peven(),podd(),dcall();
float sum;
int n;
while (1)
{
/**********FOUND**********/
scanf("%d",n);
if(n>1)
break;
}
if(n%2==0)
{
printf("Even=");
sum=dcall(peven,n);
}
else
{
printf("Odd=");
sum=dcall(podd,n);
}
printf("%f",sum);
getch();
}
float peven(int n)
{
float s;
int i;
s=0;
for(i=2;i<=n;i+=2)
/**********FOUND**********/
s+=1%(float)i;
return(s);
}
float podd(n)
int n;
{
float s;
int i;
/**********FOUND**********/
s=1;
for(i=1;i<=n;i+=2)
s+=1/(float)i;
return(s);
}
float dcall(fp,n)
float (*fp)();
int n;
{
float s;
s=(*fp)(n);
return(s);
}





答案:
1). scanf("%d",&n);
2). s+=1/(float)i;
3). s=0;



〖第45题〗『程序改错』(2.0分)(题号:378)

/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

题目:给定程序MODI1.C中函数 fun 的功能是:求广义
菲玻那契级数的第n项。广义菲玻那契级数的前n
项为: 1,1,1,3,5,9,17,31,……
项值通过函数值返回 main ( )函数。
例如,若 n = 15,则应输出:The value is: 2209。
--------------------------------------------------------
注意:不可以增加或删除程序行,也不可以更改程序的结构。

------------------------------------------------------*/
#include
#include
long fun ( int n )
{ long a=1, b=1, c=1, d=1, k;
/**********FOUND**********/
for (k=4; k{ d = a+b+c;
/**********FOUND**********/
a=b; b=c; c=d
}
/**********FOUND**********/
return k;
}
main( )
{ int n = 15;

clrscr( );
printf( "The value is: %ld\n", fun ( n ) );

}



答案:
1). for (k=4; k<=n; k++)
2)

. a=b; b=c; c=d;
3). return d;



〖第46题〗『程序改错』(2.0分)(题号:357)

/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

题目:下列程序中,函数fun的功能是:先将在字符
串s中的字符按正序存放到t串中,然后把s中
的字符按逆序连接到t串的后面。
例如:当s中的字符串为:“ABCDE”时,
则t中的字符串应为:“ABCDEEDCBA”。
--------------------------------------------------------
注意:不可以增加或删除程序行,也不可以更改程序的
结构。
------------------------------------------------------*/
#include
#include
#include
void fun(char *s,char *t)
{ int i,sl;
sl=strlen(s);
/**********FOUND**********/
for(i=0;it[i]=s[i];
for(i=0;i/**********FOUND**********/
t[sl+i]=s[sl-i];
/**********FOUND**********/
t[sl]='\0';
}
main()
{ char s[100],t[100];
clrscr();
printf("\nPlease enter string s:");scanf("%s",s);
fun(s,t);
printf("The result is:%s\n",t);
getch();
}


答案:
1). for(i=0;i<=sl;i++)
2). t[sl+i]=s[sl-i-1];
3). t[sl+i]='\0';



〖第47题〗『程序改错』(2.0分)(题号:7)

/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
题目:下面程序的功能是利用二维数组输出如图所示的图形。

*******
*****
***
*
***
*****
*******

请改正程序中的错误,使程序能得到正确的运行结果。
--------------------------------------------------------
注意:不可以增加或删除程序行,也不可以更改程序的结构。
------------------------------------------------------*/



#include
/**********FOUND**********/
#define N= 7
main()
{
char a[N][N];
int i,j,z;
clrscr();
for(i=0;ifor(j=0;j/**********FOUND**********/
a[i][j]=;
z=0;
for(i=0;i<(N+1)/2;i++)
{
for(j=z;ja[i][j]='*';
z=z+1;
}
/**********FOUND**********/
z=0;
for(i=(N+1)/2;i{z=z-1;
for(j=z;ja[i][j]='*';
}
for(i=0;i{
for(j=0;j/**********FOUND**********/
printf("%d",a[i][j]);
printf("\n");
}
}


答案:
1). #define N 7
2). a[i][j]=' ';
3). z=z-1; 或 z--; 或 z=-1+z; 或 z=(n+1)/2-1; 或 z=(1+n)/2-1
4). printf("%c",a[i][j]);



〖第48题〗『程序改错』(2.0分)(题号:406)

/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

题目:编写函数fun生成一个对角线元素为5,上三角元素为0,下三角元素
为1的3*3的二

相关文档