资源描述
(完整版)C语言程序改错
〖第1题〗『程序改错』(5分)(题号:422)
/*-—--—-————---——————------———---—----——————-—-———-——---
【程序改错】
—--————----—-----—-—-----———--————--———-——-————————--—--
题目:给一个不多于5位的正整数,要求:一、求它是
几位数,二、逆序打印出各位数字。
————-————-——--—-——-———--—--—---------——-—----—-—---—--—-
注意:不可以增加或删除程序行,也不可以更改程序
的结构。
-—-————--—--—-———--——-—-———--———-—---—-——--—-———————-—*/
#include"stdio。h”
main( )
{
/**********FOUND**********/
long a,b,c,d,e,x,
scanf(”%ld",&x);
a=x/10000;
/**********FOUND**********/
b=x/10000/1000;
c=x%1000/100;
d=x%100/10;
e=x%10;
/**********FOUND**********/
if (a==0)
printf(”there are 5, %ld %ld %ld %ld %ld\n”,e,d,c,b,a);
else if (b!=0) printf(”there are 4, %ld %ld %ld %ld\n",e,d,c,b);
else if (c!=0) printf(” there are 3,%ld %ld %ld\n”,e,d,c);
else if (d!=0) printf("there are 2, %ld %ld\n",e,d);
else if (e!=0) printf(” there are 1,%ld\n",e);
getch();
}
答案:
1)。 long a,b,c,d,e,x;
2). b=x%10000/1000; 或 b=x/1000%10;
3)。 if (a!=0) 或 if (!a)
〖第2题〗『程序改错』(5分)(题号:411)
/*—-—————-—-——-—----—-—---—---———-—-——--—-————-—--——-—-—
【程序改错】
--———-—-———--—-——-———-———---—--—-—-———-—---—--—————————-
题目:某个公司采用公用电话传递数据,数据是四位的
整数,在传递过程中是加密的,加密规则如下:
每位数字都加上5,然后除以10的余数代替该位数
字。再将新生成数据的第一位和第四位交换,第
二位和第三位交换。
举例:输入一个四位整数1234,则结果为:9876。
—-—---——--——-————————————-—-————————-———--——---—-—--—-——
注意:不可以增加或删除程序行,也不可以更改程序
的结构。
—--———-——--———--—--———----—---————---——--—-—————-—--——*/
#include "stdio。h"
main()
{int a,i,aa[4],t;
printf("输入一个四位整数:");
/**********FOUND**********/
scanf("%d”,&a);
aa[0]=a%10;
/**********FOUND**********/
aa[1]=a%100%10;
aa[2]=a%1000/100;
aa[3]=a/1000;
/**********FOUND**********/
for(i=0;i〈=3;i++)
{aa[i]+=5;
aa[i]%=10;
}
for(i=0;i〈=3/2;i++)
{t=aa[i];
aa[i]=aa[3—i];
aa[3-i]=t;
}
for(i=3;i〉=0;i—-)
printf("%d",aa[i]);
getch();
}
〖第1题〗『程序改错』(5分)(题号:253)
/*-——-——--—-—---————-—--——--——-————----—----————---——--—
【程序改错】
—--———————--—--———-——--———-----—-—-——-—--—-———-—-—-——--—
题目:输入10个数,要求输出这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; 或 float aver,score[10];
3)。 scanf("%f”, &score[i]); 或 scanf(”%f", score+i);
4). aver=average(score);
〖第2题〗『程序改错』(5分)(题号:414)
/*—--—-----—---——-—--—--—-—-—-———-——————--——--——--—---—-
【程序改错】
—---—-—-—————-————---—--—--————--—-—----——--—-----—--—-—
题目:输入一行字符,分别统计出其中英文字母、空
格、数字和其它字符的个数。
--———-—---—--———--—-—--—--—--—-—-—----——-——-——---—————--
注意:不可以增加或删除程序行,也不可以更改程序
的结构.
——————----———-—---——--——-—----—----——-—------—--——--——*/
#include "stdio。h”
main()
{char c;
int letters=0,space=0,digit=0,others=0;
printf(”please input some characters\n”);
/**********FOUND**********/
while((c=getchar())==’\n’)
{
/**********FOUND**********/
if(c>='a’&&c〈='z’&&c>='A’&&c<=’Z’)
letters++;
/**********FOUND**********/
else if(c=!’ ’)
space++;
else if(c〉=’0’&&c<=’9')
digit++;
else
others++;
}
printf("all in all:char=%d space=%d digit=%d others=%d\n",letters,
space,digit,others);
}
答案:
1). while((c=getchar())!=’\n’)
2). if( c〉='a’&&c<=’z' || c>=’A’&&c〈=’Z’ ) 或 if( c〈='z’&&c〉=’a' || c>='A’&&c〈=’Z’ ) 或 if( c<='z’&& c>='a’||
3)。 else if(c==' ’)
〖第3题〗『程序改错』(5分)(题号: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++)
{for(k=0;k〈10-2*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]);
}
/***********FOUND***********/
printf("\t");
}
}
答案:
1)。 for(i=0;i<6;i++) 或 for(i=0;i<=5;i++)
2)。 if(j == 0 || j == i)
3). a[i][j]=a[i—1][j]+a[i-1][j—1]; 或 a[i][j]=a[i—1][j-1]+a[i-1][j];
4). printf(”\n");
答案:
1). scanf("%d",&a);
2)。 aa[1]=a%100/10; 或 aa[1]=a/10%10;
3)。 for(i=0;i<=3;i++) 或 for(i=0;i〈4;i++)
〖第1题〗『程序改错』(5分)(题号:3)
/*-—--—--—--—-——---—---—-——--—---—-—-—-—--—---———————---
【程序改错】
--——--——-——-——————————-——-—————-——-—------—-—--———---——-
题目:用起泡法对10个整数从小到大排序。
程序中共有4条错误语句,请改正错误。
-—-—--—---——-————-—-———--——-----—--—--——-—-——--—-——-——--
注意:不可以增加或删除程序行,也不可以更改程序的结构。
-——--—------—---——--—--—-———------————————-——-——————--*/
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++)
/**********FOUND**********/
scanf("%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). 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++) 或 for(j=0;j<= n —2 —i ;j++)
2). if(x[j]>x[ j + 1 ]) 或 if(x[ j + 1] <x[j])
3)。 scanf("%d”,&a[i]); 或 scanf("%d”,a+i);
4). sort(a,n); 或 sort(&a[0],n);
〖第2题〗『程序改错』(5分)(题号: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;i〈N;i++)
3). if(i%m==0)
〖第3题〗『程序改错』(5分)(题号: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);
〖第1题〗『程序改错』(5分)(题号: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; 或 t=j*t;
3)。 s= s + t ; 或 s+=t; 或 s=t+s;
4). printf("jiecheng=%f\n",s);
〖第2题〗『程序改错』(5分)(题号: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<n;i++)
{ if(Min>array [i]) Min=array [i];
/**********FOUND**********/
sum=+array [i]; }
/**********FOUND**********/
ave=sum\n;
for(i=0;i<n;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++; 或 if(Min==array[i]) J++;
〖第3题〗『程序改错』(5分)(题号: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);
〖第1题〗『程序改错』(5分)(题号: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; 或 t=j*t;
3). s= s + t ; 或 s+=t; 或 s=t+s;
4). printf(”jiecheng=%f\n",s);
〖第2题〗『程序改错』(5分)(题号:412)
/*-—-——----——-—--———--—--—————-————-——---—-——————-------
【程序改错】
-——---————----—---——--—----——----————---—-——---—-———----
题目:将一个正整数分解质因数。例如:输入90,打印出
90=2*3*3*5
—-—-—-——----———---——-———-—--—-————---——----—-—--—-—-----
注意:不可以增加或删除程序行,也不可以更改程序
的结构。
—--—----——--————--—————-—-------—————---—-—---————-———*/
#include "stdio.h"
main()
{
int n,i;
printf("\nplease input a number:\n”);
scanf(”%d",&n);
printf(”%d=”,n);
for(i=2;i<=n;i++)
{
/**********FOUND**********/
while(n==i)
{
/**********FOUND**********/
if(n%i==1)
{ printf("%d*",i);
/**********FOUND**********/
n=n%i;
}
else
break;
}
}
printf(”%d”,n);
}
答案:
1). while(n!=i)
2). if(n%i==0) 或 if (!(n%i))
3). n=n/i;
〖第3题〗『程序改错』(5分)(题号: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; 或 return (y);
〖第1题〗『程序改错』(5分)(题号: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);
〖第2题〗『程序改错』(5分)(题号:435)
/*—-—-—-——--—--————-—-—--—---—-—-——------—--—---—-—-————
【程序改错】
-—-——--—--—----—-——--—-————--——-------——-—-——————-—---—-
题目:编写一个程序计算某年某月有几天
。(注意要区分闰年)
-——---—————-———-—-—----—-———-—---—--—-——----———-——------
注意:不可以增加或删除程序行,也不可
以更改程序的结构。
-—-——--——-————-----—--—---———-—--———---—--—————-———---*/
#include〈stdio.h>
void main()
{
int yy,mm,len;
printf("year,month=”);
scanf("%d%d",&yy,&mm);
/**********FOUND**********/
switch(yy)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
len=31;
/**********FOUND**********/
break
case 4:
case 6:
case 9:
case 11:
len=30;
break;
case 2:
if (yy%4==0 && yy%100!=0 || yy%400==0)
len=29;
else
len=28;
break;
/**********FOUND**********/
default
printf(”input error!\n”);
break;
}
printf("The length of %d %d id %d\n”,yy,mm,len);
getch();
}
答案:
1). switch(mm)
2). break;
3)。 default :
〖第3题〗『程序改错』(5分)(题号:404)
/*——-----————---—-—-—-———-—-——----—-------——-—---——--——-
【程序改错】
--—--——---—-—----—————--————----—-———-—-——-———-—------—-
题目:编写函数fun求20以内所有5的倍数之积。
--—-—-———-—--————--—-—-—
展开阅读全文