一、程序改错 共139题 (共计1390分)
第1题 (10.0分) 题号:351
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:在键盘上输入一个3行3列矩阵的各个元素的值(值为整数),
后输出矩阵第一行与第三行元素之积,并在fun()函数中输出。
------------------------------------------------------*/
#include "stdio.h"
main()
{
int i,j,s,a[3][3];;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
}
s=fun(a);
printf("Sum=%d\n",s);
getch();
}
int fun(int a[3][3])
{
int i,j,sum;
/**********FOUND**********/
sum=0;
/**********FOUND**********/
for(i=0;i<3;i++)
for(j=0;j<3;j++)
/**********FOUND**********/
sum=*a[i][j];
return sum;
}
答案:
1). sum=1;
2). for(i=0;i<3;i+=2) 或 for(i=0;i<3;i=i+2) 或 for(i=0;i<3;i++,i++)
3). sum=sum*a[i][j]; 或 sum*=a[i][j];
第2题 (10.0分) 题号:403
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:编写函数fun求20以内所有5的倍数之积。
------------------------------------------------------*/
#define N 20
#include "stdio.h"
main()
{
int sum;
sum=fun(5);
printf("%d以内所有%d的倍数之积为: %d\n",N,5,sum);
getch();
}
int fun(int m)
{
/**********FOUND**********/
int s=0,i;
for(i=1;i<N;i++)
/**********FOUND**********/
if(i%m=0)
/**********FOUND**********/
s=*i;
return s;
}
答案:
1). int s=1,i;
2). if(i%m==0)
3). s*=i;
第3题 (10.0分) 题号:424
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:一个偶数总能表示为两个素数之和。
------------------------------------------------------*/
#include "stdio.h"
#include <math.h>
main()
{
int a,b,c,d;
/**********FOUND**********/
scanf("%d",a);
for(b=3;b<=a/2;b+=2)
{
for(c=2;c<=sqrt(b);c++)
if(b%c==0)
break;
if(c>sqrt(b))
/**********FOUND**********/
d=a+b;
else
break;
for(c=2;c<=sqrt(d);c++)
/**********FOUND**********/
if(d%c=0)
break;
if(c>sqrt(d))
printf("%d=%d+%d\n",a,b,d);
getch();
}
}
答案:
1). scanf("%d",&a);
2). d=a-b;
3). if(d%c==0)
第4题 (10.0分) 题号:395
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:统计出若干个学生的平均成绩,最低分以及得最低分的人数。
例如:输入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++;
第5题 (10.0分) 题号:249
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:从键盘输入十个学生的成绩,统计最高分,最低分和平均分。
max代表最高分,min代表最低分,avg代表平均分。
------------------------------------------------------*/
main( )
{
int i;
/***********FOUND***********/
float a[8],min,max,avg;
printf("input 10 score:");
for(i=0;i<=9;i++)
{
printf("input a score of student:");
/***********FOUND***********/
scanf("%f",a);
}
/***********FOUND***********/
max=min=avg=a[1];
for(i=1;i<=9;i++)
{
/***********FOUND***********/
if(min<a[i])
min=a[i];
if(max<a[i])
max=a[i];
avg=avg+a[i];
}
avg=avg/10;
printf("max:%f\nmin:%f\navg:%f\n",max,min,avg);
}
答案:
1). float a[10],min,max,avg;
2). scanf("%f",&a[i]); 或 scanf("%f",a+i);
3). max=min=avg=a[0];
4). if (min>a[i]) 或 if (a[i]<min)
第6题 (10.0分) 题号:19
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:计算正整数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));
第7题 (10.0分) 题号:22
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:求出两个非零正整数的最大公约数,并作为函数值返回。
例如:若给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);
第8题 (10.0分) 题号:16
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:根据整型形参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; 或 y=y-1/(double)(i*i); 或 y-=1/(double)(i*i);
3). return y; 或 return (y); 或 return(y);
第9题 (10.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++)
{
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");
第10题 (10.0分) 题号:438
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:输入n,计算s=1+1+2+1+2+3+1+2+3+4+...+1+2+3+4+...+n
------------------------------------------------------*/
#include<stdio.h>
void main()
{
/**********FOUND**********/
int i,s;p,n;
printf("Enter n:\n");
/**********FOUND**********/
scanf("%d",n);
/**********FOUND**********/
for(s=p=0,i=1;i<n;i++)
s+=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++)
第11题 (10.0分) 题号:7
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:利用二维数组输出如图所示的图形。
*******
*****
***
*
***
*****
*******
------------------------------------------------------*/
#include <conio.h>
/**********FOUND**********/
#define N= 7
main()
{
char a[N][N];
int i,j,z;
clrscr();
for(i=0;i<N;i++)
for(j=0;j<N;j++)
/**********FOUND**********/
a[i][j]=;
z=0;
for(i=0;i<(N+1)/2;i++)
{
for(j=z;j<N-z;j++)
a[i][j]='*';
z=z+1;
}
/**********FOUND**********/
z=0;
for(i=(N+1)/2;i<N;i++)
{
z=z-1;
for(j=z;j<N-z;j++)
a[i][j]='*';
}
for(i=0;i<N;i++)
{
for(j=0;j<N;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]);
第12题 (10.0分) 题号:30
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:将字符串s中最后一次出现的子字符串t1替换成字符串t2,
所形成的新串放在w所指的数组中,在此处,要求t1和t2
所指字符串的长度相同。
例如:当s所指字符串中的内容为"abcdabfabc",t1中的内容
为"ab",t2中的内容为"99"时,结果w所指数组中的内容
应为"abcdabf99c"。
------------------------------------------------------*/
#include <conio.h>
#include <stdio.h>
#include <string.h>
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;
第13题 (10.0分) 题号:383
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:输入两个双精度数,函数返回它们的平方和的平方根值。
例如:输入:22.936 和 14.121,输出为:y = 26.934415。
------------------------------------------------------*/
#include <stdio.h>
#include <conio.h>
#include <math.h>
/**********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;
第14题 (10.0分) 题号:3
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:用起泡法对10个整数从小到大排序。
------------------------------------------------------*/
/**********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]);
/**********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) 或 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++) 或 for(j=0;j<= n -2 -i ;j++)
3). if(x[j]>x[ j + 1 ]) 或 if(x[ j + 1] <x[j])
4). sort(a,n);
第15题 (10.0分) 题号:556
/*
------------------------------------------------------------------------------
【程序改错】
------------------------------------------------------------------------------
题目:下列给定程序中,fun()函数的功能是:根据形参m,计算下列公式的前m项表达
式的值。
t=1-1/2+1/3-1/4+…
例如,若输入5,则应输出0.783333。
请改正程序中的错误,使它能得到正确结果。
------------------------------------------------------------------------------
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
------------------------------------------------------------------------------
*/
#include <conio.h>
#include <stdio.h>
/***********FOUND***********/
int fun(int m)
{
double t=1.0;
/***********FOUND***********/
int j=1;
int i;
/***********FOUND***********/
for(i=1;i<m;i++)
{
j= -1 * j; t += j/i;
}
return t;
}
main()
{
int m;
printf("\nPlease enter 1 integer number: ");
scanf("%d",&m);
printf("\nThe result is %lf\n", fun(m));
}
答案:
1). double fun(int m)
2). double j=1.0; 或 double j=1;
3). for(i=2;i<=m;i++)
第16题 (10.0分) 题号:359
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:将长整型数中每一位上为偶数的数依次取出,构成一个新
数放在t中。高位仍在高位,低位仍在低位。
例如:当s中的数为:87654时,t中的数为:864。
------------------------------------------------------*/
#include <conio.h>
#include <stdio.h>
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 ) 或 if(d%2!=1)
2). *t=d* sl+ *t; 或 *t+=d*sl; 或 *t+=sl*d; 或 *t=*t+d* sl; 或 *t=*t+sl*d;
3). s/=10; 或 s=s/10;
第17题 (10.0分) 题号:21
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:根据以下公式求π值,并作为函数值返回。
例如:给指定精度的变量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<t) 或 while(t>=eps) 或 while(eps<=t) 或 while (t>eps) 或 while (eps<t) 或 while (t>=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);
第18题 (10.0分) 题号:29
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:实现两个字符串的连接。
例如:输入dfdfqe和12345时,则输出dfdfqe12345.
------------------------------------------------------*/
#include"stdio.h"
main()
{
char s1[80],s2[80];
void scat(char s1[],char s2[]);
gets(s1);
gets(s2);
scat(s1,s2);
puts(s1);
}
void scat (char s1[],char s2[])
{
int i=0,j=0;
/**********FOUND**********/
while(s1[i]= ='\0') i++;
/**********FOUND**********/
while(s2[j]= ='\0')
{
/**********FOUND**********/
s2[j]=s1[i];
i++;
j++;
}
/**********FOUND**********/
s2[j]='\0';
}
答案:
1). while( s1[i] != '\0' )i++; 或 while(s1[i])i++; 或 while(s1[i]!=NULL)i++; 或 while( s1[i] != 0 )i++;
2). while( s2[j] != '\0' ) 或 while(s2[j]) 或 while(s2[j]!=NULL) 或 while( s2[j] != 0 )
3). s1[i]=s2[j];
4). s1[i]='\0'; 或 s1[i]=NULL; 或 *(s1+i)='\0'; 或 s1[i]=0;
第19题 (10.0分) 题号:2
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:为一维数组输入10个整数;将其中最小的数与第一个数
对换,将最大的数与最后一个数对换,输出数组元素。
------------------------------------------------------*/
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<n;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<arr+n;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;i<n;i++)
printf("%3d",*p++);
printf("\n");
}
答案:
1). scanf("%d",p ++); 或 scanf("%d",arr[i]); 或 scanf("%d",p+i); 或 scanf("%d",arr+i);
2). if(*p>*max) 或 if(*max<*p)
3). if( max == arr )
4). for(i=0;i<n;i++) 或 for(i=0;n>i;i++) 或 for(p=arr;p<arr+n;) 或 for(i=0;i<=n-1;i++) 或 for(i=0;n-1>=i;i++) 或 for(p=arr;p<=arr+n-1;) 或 for(p=arr;arr+n-1>=p;)
第20题 (10.0分) 题号:384
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:求二分之一的圆面积,函数通过形参得到圆的半径,函数
返回二分之一的圆面积。
例如:输入圆的半径值:19.527 输出为:s = 598.950017。
------------------------------------------------------*/
#include <stdio.h>
#include <conio.h>
/**********FOUND**********/
float fun( r)
{
float s;
/**********FOUND**********/
s=1/2*3.14159* r * r;
/**********FOUND**********/
return r;
}
main()
{
float x;
clrscr( );
printf ( "Enter x: ");
scanf ( "%f", &x );
printf (" s = %f\n ", fun ( x ) );
getch();
}
答案:
1). float fun(float r)
2). s=1.0/2*3.14159* r * r;
3). return s;
第21题 (10.0分) 题号:11
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:判断m是否为素数,若是返回1,否则返回0。
------------------------------------------------------*/
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<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;
第22题 (10.0分) 题号:405
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:编写函数fun生成一个对角线元素为5,上三角元素为0,
下三角元素为1的3*3的二维数组。
------------------------------------------------------*/
#include "stdio.h"
main()
{
int a[3][3],i,j;
fun(a);
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%d ",a[i][j]);
printf("\n");
}
getch();
}
fun(int arr[][3])
{
/**********FOUND**********/
int i,j
/**********FOUND**********/
for(i=1;i<3;i++)
for(j=0;j<3;j++)
/**********FOUND**********/
if(i=j)
arr[i][j]=5;
else if(j>i)
arr[i][j]=0;
else
arr[i][j]=1;
}
答案:
1). int i,j;
2). for(i=0;i<3;i++)
3). if(i==j)
第23题 (10.0分) 题号:398
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:使数组左下三角元素中的值乘以n 。
------------------------------------------------------*/
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define N 3
int fun ( int a[][N], int n )
{
/**********FOUND**********/
int i;j;
for(i=0; i < N; i++)
/**********FOUND**********/
for(j=0; j<N; j++)
/**********FOUND**********/
a[i][j]=*n;
}
main ( )
{
int a[N][N], n, i, j;
clrscr();
printf("***** The array *****\n");
for ( i =0; i<3;i++)
{
for ( j =0; j<3;j++)
{
a[i][j] = rand()%10;
printf( "%4d", a[i][j] );
}
printf("\n");
}
do
n = rand();
while ( n >=5||n<1 );
printf("n = %4d\n",n);
fun ( a, n );
printf ("***** THE RESULT *****\n");
for ( i =0; i<3;i++)
{
for ( j =0; j<3;j++)
printf( "%4d", a[i][j] );
printf("\n");
}
getch();
}
答案:
1). int i,j;
2). for(j=0; j<=i; j++)
3). a[i][j]*=n;
第24题 (10.0分) 题号:354
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:在字符串str中找出ASCII码值最小的字符,将其放在第一
个位置上,并将该字符前的原字符向后顺序移动。
例如:调用fun函数之前给字符串输入:eBCDAFGH,调用后字符串
中的内容为:AeBCDFGH。
------------------------------------------------------*/
#include <stdio.h>
#include <string.h>
fun(char *p)
{
char min,*q=p;int i=0;
min=p[i];
while(p[i]!=0)
{
if(min>p[i])
{
min=p[i];
/**********FOUND**********/
p=p+i;
}
i++;
}
/**********FOUND**********/
while(q<p)
{
/**********FOUND**********/
*q=(q-1);
q--;
}
p[0]=min;
}
main()
{
char str[80];
printf("Enter a string:");gets(str);
printf("\nThe original string:");puts(str);
fun(str);
printf("\nThe string after moving:");puts(str);
}
答案:
1). q=p+i;
2). while(q>p)
3). *q=*(q-1); 或 q[0]=q[-1];
第25题 (10.0分) 题号:9
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:将一个字符串中的大写字母转换成小写字母。
例如:输入aSdFG输出为asdfg。
------------------------------------------------------*/
#include<stdio.h>
/**********FOUND**********/
bool 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);
第26题 (10.0分) 题号:376
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:根据整型形参 n,计算某一数据项的值。
A[1]=1, A[2]=1/(1 + A[1]), A[3]=1/(1 + A[2]), …,
A[n]=1/(1 + A[n-1])
例如:若 n=10,则应输出:a10=0.617977。
------------------------------------------------------*/
#include <conio.h>
#include <stdio.h>
/**********FOUND**********/
int fun ( int n )
{
float A=1; int i;
/**********FOUND**********/
for (i=2; i<n; i++)
/**********FOUND**********/
A = 1.0\(1+A);
return A ;
}
main( )
{
int n ;
clrscr( ) ;
printf("\nPlease enter n: ") ;
scanf("%d", &n ) ;
printf("A%d=%f\n", n, fun(n) ) ;
}
答案:
1). float fun(int n)
2). for (i=2; i<=n; i++)
3). A = 1.0/(1+A);
第27题 (10.0分) 题号:353
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:在字符串str中找出ASCII码值最大的字符,将其放在第一
个位置上,并将该字符的原字符向后顺序移动。
例如:调用fun函数之前给字符串输入:ABCDeFGH,调用后字符串
中的内容为:eABCDFGH。
------------------------------------------------------*/
#include<stdio.h>
fun(char *p)
{
char max,*q;int i=0;
max=p[i];
while(p[i]!=0)
{
if(max<p[i])
{
max=p[i];
/**********FOUND**********/
p=q+i;
}
i++;
}
/**********FOUND**********/
while(q<p)
{
/**********FOUND**********/
q=*(q-1);
q--;
}
p[0]=max;
}
main()
{
char str[80];
printf("Enter a string:");gets(str);
printf("\nThe original string:");puts(str);
fun(str);
printf("\nThe string after moving:");puts(str);
getch();
}
答案:
1). q=p+i;
2). while(q>p) 或 while(q>=p)
3). *q=*(q-1);
第28题 (10.0分) 题号:15
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:输出Fabonacci数列的前20项,要求变量类型定义成浮点型,
输出时只输出整数部分,输出项数不得多于或少于20。
------------------------------------------------------*/
fun()
{
int i;
float f1=1,f2=1,f3;
/**********FOUND**********/
printf("%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); 或 printf("%8f",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;
第29题 (10.0分) 题号:366
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:求出以下分数序列的前n项之和。和值通过函数值返回main
函数。
2/1+3/2+5/3+8/5+13/8+21/13 ……
例如:若n = 5,则应输出:8.391667。
------------------------------------------------------*/
#include <conio.h>
#include <stdio.h>
/**********FOUND**********/
fun ( int n )
{
int a, b, c, k; double s;
s = 0.0; a = 2; b = 1;
for ( k = 1; k <= n; k++ )
{
/**********FOUND**********/
s = (double)a / b;
c = a;
a = a + b;
b = c;
}
/**********FOUND**********/
return c;
}
main( )
{
int n = 5;
clrscr( );
printf( "\nThe value of function is: %lf\n", fun ( n ) );
}
答案:
1). double fun(int n)
2). s = s + (double)a / b; 或 s += (double)a / b; 或 s += a /(double)b; 或 s=s+a/(double)b;
3). return s;
第30题 (10.0分) 题号:391
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:编写程序, 求矩阵(3行3列)与5的乘积
例如:输入下面的矩阵:
100 200 300
400 500 600
700 800 900
程序输出:
500 1000 1500
2000 2500 3000
3500 4000 4500
------------------------------------------------------*/
#include "stdio.h"
int fun(int array[3][3])
{
/**********FOUND**********/
int i;j;
/**********FOUND**********/
for(i=1; i < 3; i++)
for(j=0; j < 3; j++)
/**********FOUND**********/
array[i][j]=array[i][j]/5;
}
main()
{
int i,j;
int array[3][3]={{100,200,300},
{400,500,600},
{700,800,900}};
clrscr() ;
for (i=0; i < 3; i++)
{
for (j=0; j < 3; j++)
printf("%7d",array[i][j]);
printf("\n");
}
fun(array);
printf("Converted array:\n");
for (i=0; i < 3; i++)
{
for (j=0; j < 3; j++)
printf("%7d",array[i][j]);
printf("\n");
}
getch();
}
答案:
1). int i,j;
2). for(i=0; i < 3; i++)
3). array[i][j]=array[i][j]*5;
第31题 (10.0分) 题号:256
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:将6个数按输入时顺序的逆序进行排列.
------------------------------------------------------*/
sort(char *p,int m)
{
int i;
char change,*p1,*p2;
for(i=0;i<m/2;i++)
{
/***********FOUND***********/
*p1=p+i; *p2=p+(m-1-i);
change=*p1;
*p1=*p2;
*p2=change;
}
}
main( )
{
int i;
/***********FOUND***********/
char p,num[6];
for(i=0;i<=5;i++)
/***********FOUND***********/
scanf("%d",num[i]);
p=&num[0];
/***********FOUND***********/
sort(*p,6);
for(i=0;i<=5;i++)
printf("%d",num[i]);
}
答案:
1). p1=p+i; p2=p+(m-1-i);
2). char *p,num[6];
3). scanf("%d",&num[i]);
4). sort(p,6);
第32题 (10.0分) 题号:255
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:以下程序把两个数按由大到小的顺序输出来.
------------------------------------------------------*/
/***********FOUND***********/
swap( int *p1,*p2)
{
int p;
p=*p1;
*p1=*p2;
*p2=p;
}
main( )
{
int a,b, *p,*q;
printf("input a,b:");
/***********FOUND***********/
scanf("%d%d",a,b);
p=&a;
q=&b;
if(a<b)
swap(p,q);
printf("a=%d,b=%d\n",a,b);
/***********FOUND***********/
printf("max=%d,min=%d\n",p,q);
}
答案:
1). swap( int *p1,int *p2) 或 void swap( int *p1,int *p2)
2). scanf("%d%d",&a,&b);
3). printf("max=%d,min=%d\n",*p1,*p2); 或 printf("max=%d,min=%d\n",a,b);
第33题 (10.0分) 题号:444
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:将一个数字字符串转换为一个整数(不得调用C语言提供的
将字符串转换为整数的函数)。
例如:若输入字符串“-1234”,则函数把它转换为整数值 -1234。
------------------------------------------------------*/
#include"stdio.h"
long fun ( char *p)
{
int i=1;
long n=0;
/**********FOUND**********/
if(p=='-')
{
p++; i=-1;
}
else if(*p=='+')
p++;
while(*p>='0' && *p<='9')
n=10*n + *p++ - '0';
/**********FOUND**********/
return n+i;
}
main()
{
char s[6];
long n;
printf("Enter a string:\n") ;
gets(s);
/**********FOUND**********/
n == fun(s);
printf("%ld\n",n);
getch( );
}
答案:
1). if(*p=='-')
2). return n*i;
3). n = fun(s);
第34题 (10.0分) 题号:442
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:求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);
第35题 (10.0分) 题号:385
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:求两个形参的乘积和商数,并通过形参返回调用程序。
例如:输入:61.82 和 12.65,输出为:c = 782.023000
d = 4.886957
------------------------------------------------------*/
#include <stdio.h>
#include <conio.h>
/**********FOUND**********/
void fun ( double a, b, double *x, double *y )
{
/**********FOUND**********/
x = a * b;
/**********FOUND**********/
y = a / b;
}
main ( )
{
double a, b, c, d;
clrscr( );
printf ( "Enter a , b : ");
scanf ( "%lf%lf", &a, &b );
fun ( a , b, &c, &d ) ;
printf (" c = %f d = %f\n ", c, d );
getch();
}
答案:
1). void fun ( double a, double b, double *x, double *y )
2). *x = a * b;
3). *y = a / b;
第36题 (10.0分) 题号:407
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:编写函数求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);
}
main()
{
printf("this sum=%ld\n",sum(14));
getch();
}
答案:
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);
第37题 (10.0分) 题号:433
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:编写一个程序模拟袖珍计算器的加、减、乘、除四则运算。
例如:输入3+5=或5-2=或3*4=或4/2=,求表达式结果。
------------------------------------------------------*/
#include<stdio.h>
void main()
{
float x,y;
char operate1;
printf("Arithmetic expression\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)
第38题 (10.0分) 题号:375
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:根据整型形参 m,计算某一数据项的值。
y = 1/(100*100)+1/(200*200)+1/(300*300)+ …… +1/(m*m)
例如:若m = 2000,则应输出: 0.000160。
------------------------------------------------------*/
#include <conio.h>
#include <stdio.h>
/**********FOUND**********/
fun ( int m )
{
double y = 0, d ;
int i ;
/**********FOUND**********/
for( i = 100, i <= m, i += 100 )
{
d = (double)i * (double)i ;
/**********FOUND**********/
y += 1.0 \ d ;
}
return( y ) ;
}
main( )
{
int n = 2000 ;
clrscr( ) ;
printf( "\nThe result is %lf\n", fun ( n ) ) ;
}
答案:
1). double fun ( int m )
2). for( i = 100; i <= m; i += 100 )
3). y += 1.0 / d ;
第39题 (10.0分) 题号:423
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:打印出杨辉三角形(要求打印出10行).
------------------------------------------------------*/
#include"stdio.h"
main()
{
int i,j;
int a[10][10];
printf("\n");
/**********FOUND**********/
for(i=1;i<10;i++)
{
a[i][0]=1;
a[i][i]=1;
}
/**********FOUND**********/
for(i=1;i<10;i++)
for(j=1;j<i;j++)
/**********FOUND**********/
a[i][i]=a[i-1][j-1]+a[i-1][j];
for(i=0;i<10;i++)
{
for(j=0;j<=i;j++)
printf("%5d",a[i][j]);
printf("\n");
getch();
}
}
答案:
1). for(i=0;i<10;i++) 或 for(i=0;i<=9;i++)
2). for(i=2;i<10;i++) 或 for(i=2;i<=9;i++)
3). a[i][j]=a[i-1][j-1]+a[i-1][j];
第40题 (10.0分) 题号:372
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:将a所指字符串中的字符和b所指字符串中的字符, 按排
列的顺序交叉合并到c所指数组中,过长的剩余字符接在
c所指数组的尾部。
例如:当a所指字符串中的内容为“abcdefg”,b所指字符串中
的内容为“1234”时,c所指数组中的内容应该为“a1b2
c3d4efg”;而当a所指字符串中的内容为“1234”,b所
指字符串中的内容为“abcdefg”时,c所指数组中的内
容应该为“1a2b3c4defg”。
------------------------------------------------------*/
#include <conio.h>
#include <stdio.h>
#include <string.h>
/**********FOUND**********/
fun( char a, char b, char c )
{
while ( *a && *b )
{
*c = *a;
c++;
a++;
*c = *b; c++; b++;
}
if( *a == '\0' )
/**********FOUND**********/
while( *b ) *c = *b; c++; b++; }
else
/**********FOUND**********/
while( *a ) *c = *a; c++; a++; }
*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). void fun( char *a, char *b, char *c ) 或 fun( char *a, char *b, char *c )
2). while( *b ) { *c = *b; c++; b++; }
3). while( *a ) { *c = *a; c++; a++; }
第41题 (10.0分) 题号:431
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:编写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<N;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<N;i++)
第42题 (10.0分) 题号:257
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:用指针作函数参数,编程序求一维数组中的最大和最小的
元素值.
------------------------------------------------------*/
#define N 10
/***********FOUND***********/
void maxmin(int arr[ ],int *pt1, *pt2, n)
{
int i;
/***********FOUND***********/
*pt1=*pt2=&arr[0];
for(i=1;i<n;i++)
{
/***********FOUND***********/
if(arr[i]<*pt1) *pt1=arr[i];
if(arr[i]<*pt2) *pt2=arr[i];
}
}
main( )
{
int array[N]={10,7,19,29,4,0,7,35,-16,21},*p1,*p2,a,b;
/***********FOUND***********/
*p1=&a;*p2=&b;
maxmin(array,p1,p2,N);
printf("max=%d,min=%d",a,b);
}
答案:
1). void maxmin(int arr[ ],int *pt1,int *pt2,int n) 或 maxmin(int arr[ ],int *pt1,int *pt2,int n) 或 void maxmin(int *arr,int *pt1,int *pt2,int n)
2). *pt1=*pt2=arr[0]; 或 *pt1=*pt2=*(arr+0); 或 *pt2=*pt1=arr[0];
3). if(arr[i]>*pt1) *pt1=arr[i]; 或 if(*(arr+i)>*pt1)) *pt1=arr[i]; 或 if(*pt1<*(arr+i))) *pt1=arr[i]; 或 if(*pt1<arr[i]) *pt1=arr[i];
4). p1=&a;p2=&b;
第43题 (10.0分) 题号:379
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:读入一个整数m( 5≤m≤20 ),函数getarr调用函数rnd获
得m个随机整数,函数sortpb将这m个随机整数从小到大排序。
例如:若输入整数7,则应输出:3 10 17 28 32 36 47。
------------------------------------------------------*/
#include "conio.h"
#include "stdio.h"
sortpb ( int n, int *a )
{
/**********FOUND**********/
int i, j, p, t
for ( j = 0; j < n-1 ; j++ )
{
p = j;
for ( i = j + 1; i < n ; i ++ )
/**********FOUND**********/
if ( a[p] > a[j] ) p = i;
/**********FOUND**********/
if ( p == j )
{
t = a[j];
a[j] = a[p];
a[p] = t;
}
}
}
double rnd ( )
{
static t = 29, c = 217, m = 1024, r = 0;
r =( r*t + c )%m; return( ( double )r/m );
}
getarr( int n, int *x )
{
int i;
for( i = 1; i <= n; i++, x++ ) *x = ( int )( 50*rnd() );
}
putarr( int n, int *z )
{
int i;
for( i = 1; i <= n; i++, z++ )
{
printf( "%4d", *z );
if ( !( i%10 ) ) printf( "\n" );
}
printf("\n");
}
main()
{
int aa[20], n;
clrscr();
printf( "\nPlease enter an integer number between 5 and 20: " );
scanf( "%d", &n );
getarr( n, aa );
printf( "\n\nBefore sorting %d numbers:\n", n ); putarr( n, aa );
sortpb( n, aa );
printf( "\nAfter sorting %d numbers:\n", n ); putarr( n, aa );
getch();
}
答案:
1). int i, j, p, t;
2). if ( a[p] > a[i] ) p = i;
3). if ( p != j )
第44题 (10.0分) 题号:258
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:判断整数x是否是同构数。若是同购数,函数返回1;否则返回0。
说明:所谓“同构数”是指这个数出现在它的平方数的右边。
例如:输入整数25,25的平方数是625,25是625中右侧的数,
所以25是同构数。
注意:x的值由主函数从键盘读入,要求不大于1000。
------------------------------------------------------*/
#include "stdio.h"
int fun(int x)
{
/**********FOUND**********/
int k
/**********FOUND**********/
k=x;
/**********FOUND**********/
if((k%10==x)&&(k%100==x)&&(k%1000==x))
return 1;
else
return 0;
}
main()
{
int x,y;
clrscr();
printf("\nPlease enter a integer numbers:");
scanf("%d",&x);
if(x>100){printf("data error!\n");exit(0);}
y=fun(x);
if(y)
printf("%d YES\n",x);
else
printf("%d NO\n",x);
getch();
}
答案:
1). int k;
2). k=x*x;
3). if((k%10==x)||(k%100==x)||(k%1000==x))
第45题 (10.0分) 题号:28
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:求一个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<n;j++)
{
s1=s1+a[0][j];
/**********FOUND**********/
s2=s2+a[m][j];
}
/**********FOUND**********/
for(i=0;i<m;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]; 或 s2=a[m-1][j]+s2;
3). for(i=1;i<m-1;i++) 或 for(i=1;i<-1+m;i++) 或 for(i=1;m-1>i;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 ;
第46题 (10.0分) 题号:12
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:用下面的和式求圆周率的近似值。直到最后一项的绝对值
小于等于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" 或 #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 );
第47题 (10.0分) 题号:374
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:读入一个整数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 );
第48题 (10.0分) 题号:367
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:用插入排序法将n个字符进行排序(降序)。
提示:插入法排序的思路是:先对数组的头两个元素进行排序,
然后根据前两个元素的情况插入第三个元素,再插入第
四个元素…)。
------------------------------------------------------*/
#define N 81
#include <stdio.h>
#include <string.h>
void fun(char *aa, int n)
{
/**********FOUND**********/
int a ,b;t;
for( a = 1; a<n; a++)
{
t = aa[a]; b = a-1;
/**********FOUND**********/
while((b>=0) and (t>aa[b]))
{
aa[b+1]=aa[b]; b--; }
/**********FOUND**********/
aa[b+1] = t
}
}
main()
{ char a[N];
int i;
printf("\nEnter a string: ");gets( a);
fun(a , strlen(a));
printf("\nThe string: ");puts(a);
getch();
}
答案:
1). int a ,b,t;
2). while((b>=0)&&(t>aa[b]))
3). aa[b+1]=t;
第49题 (10.0分) 题号:421
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:给一个不多于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;
3). if (a!=0) 或 if (!a)
第50题 (10.0分) 题号:387
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:求出数组中最大数和次最大数,并把最大数和a[0]中的数
对调、次最大数和a[1]中的数对调。
------------------------------------------------------*/
#include <conio.h>
#include <stdio.h>
#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<n;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; i<n; i++ ) printf("%d ", b[i]);
printf("\n");
fun ( b, n );
for ( i=0; i<n; i++ )
printf("%d ", b[i]);
printf("\n");
}
答案:
1). m=i;
2). for(k=i;k<n;k++)
3). if(a[k]>a[m]) m=k;
第51题 (10.0分) 题号:411
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:将一个正整数分解质因数。
例如:输入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;
第52题 (10.0分) 题号:425
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:有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<n;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(m<n-1)
3). if(k==3)
第53题 (10.0分) 题号:414
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:一球从100米高度自由落下,每次落地后反跳回原高度的
一半;再落下,求它在第10次落地时,共经过多少米?
第10次反弹多高?
------------------------------------------------------*/
#include"stdio.h"
main()
{
/**********FOUND**********/
float sn=100.0;hn=sn/2;
int n;
/**********FOUND**********/
for(n=2;n<10;n++)
{
sn=sn+2*hn;
/**********FOUND**********/
hn=hn%2;
}
printf("the total of road is %f\n",sn);
printf("the tenth is %f meter\n",hn);
}
答案:
1). float sn=100.0,hn=sn/2;
2). for(n=2;n<=10;n++) 或 for(n=2;n<11;n++)
3). hn=hn/2;
第54题 (10.0分) 题号:441
/*------------------------------------------------
【程序改错】
--------------------------------------------------
功能:编写函数fun,求两个整数的最小公倍数,然后用主
函数main()调用这个函数并输出结果,两个整数由
键盘输入。
------------------------------------------------*/
#include "stdio.h"
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);
getch();
}
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 (m<n)
3). if(i%n==0)
第55题 (10.0分) 题号:356
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:先将在字符串s中的字符按正序存放到t串中,然后把s中的
字符按逆序连接到t串的后面。
例如:当s中的字符串为:“ABCDE”时,则t中的字符串应为:
“ABCDEEDCBA”。
------------------------------------------------------*/
#include<conio.h>
#include<stdio.h>
#include<string.h>
void fun(char *s,char *t)
{
int i,sl;
sl=strlen(s);
/**********FOUND**********/
for(i=0;i<sl;i++)
t[i]=s[i];
for(i=0;i<sl;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';
第56题 (10.0分) 题号:360
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:将长整型数中每一位上为奇数的数依次取出,构成一个新
数放在t中。高位仍在高位,低位仍在低位。
例如:当s中的数为:87653142时,t中的数为: 7531。
------------------------------------------------------*/
#include <conio.h>
#include <stdio.h>
void fun (long s, long *t)
{
int d;
long sl=1;
/**********FOUND**********/
t = 0;
while ( s > 0)
{
d = s%10;
/**********FOUND**********/
if (d%2 == 0)
{
*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). *t = 0;
2). if(d%2) 或 if(d%2!=0) 或 if((d%2)!=0)
3). s /= 10; 或 s=s/10
第57题 (10.0分) 题号:412
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同
学用A表示,60-89分之间的用B表示,60分以下的用C表示。
------------------------------------------------------*/
#include "stdio.h"
main()
{
int score;
/**********FOUND**********/
char *grade;
printf("please input a score\n");
/**********FOUND**********/
scanf("%d",score);
/**********FOUND**********/
grade=score>=90?'A';(score>=60?'B':'C');
printf("%d belongs to %c",score,grade);
}
答案:
1). char grade;
2). scanf("%d",&score);
3). grade=score>=90?'A':(score>=60?'B':'C');
第58题 (10.0分) 题号:416
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:读取7个数(1-50)的整数值,每读取一个值,程序打印
出该值个数的*。
------------------------------------------------------*/
#include "stdio.h"
main()
{
int i,a,n=1;
/**********FOUND**********/
while(n<7)
{
do
{
scanf("%d",&a);
}
/**********FOUND**********/
while(a<1&&a>50);
/**********FOUND**********/
for(i=0;i<=a;i++)
printf("*");
printf("\n");
n++;
}
getch();
}
答案:
1). while(n<=7) 或 while(n<8)
2). while(a<1||a>50); 或 while(a>50||a<1);
3). for(i=1;i<=a;i++)
第59题 (10.0分) 题号:437
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:以下程序能求出1*1+2*2+......+n*n<=1000中满足条件的
最大的n。
------------------------------------------------------*/
#include "string.h"
main()
{
int n,s;
/**********FOUND**********/
s==n=0;
/**********FOUND**********/
while(s>1000)
{
++n;
s+=n*n;
}
/**********FOUND**********/
printf("n=%d\n",&n-1);
getch();
}
答案:
1). s=n=0;
2). while(s<=1000)
3). printf("n=%d\n",n-1);
第60题 (10.0分) 题号:368
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:从m个学生的成绩中统计出高于和等于平均分的学生人数,
此人数由函数值返回。平均分通过形参传回,输入学生成
绩时,用-1结束输入,由程序自动统计学生人数。
例如:若输入 8 名学生的成绩,输入形式如下:
80.5 60 72 90.5 98 51.5 88 64 -1
结果为:
The number of students :4
Ave = 75.56。
------------------------------------------------------*/
#include <conio.h>
#include <stdio.h>
#define N 20
int fun ( float *s, int n, float *aver )
{
float av, t ; int count , i;
count = 0; t=0.0;
for ( i = 0; i < n; i++ ) t += s [ i ];
av = t / n; printf( "ave =%f\n",av );
for ( i = 0; i < n; i++ )
/**********FOUND**********/
if ( s[ i ] < av ) count++;
/**********FOUND**********/
aver = av;
/**********FOUND**********/
return count
}
main()
{
float a, s[30], aver;
int m = 0, i;
clrscr();
printf ( "\nPlease enter marks ( -1 to end):\n ");
scanf("%f",&a );
while( a>0 )
{
s[m] = a;
m++;
scanf ( "%f", &a );
}
printf( "\nThe number of students : %d\n" , fun ( s, m, &aver ));
printf( "Ave = %6.2f\n",aver );
}
答案:
1). if ( s[ i ] >= av ) count++;
2). *aver = av;
3). return count;
第61题 (10.0分) 题号:574
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:一个已排好序的一维数组,输入一个数number,要求按原来
排序的规律将它插入数组中.
------------------------------------------------------*/
main( )
{
int a[11]={1,4,6,9,13,16,19,28,40,100};
int temp1,temp2,number,end,i,j;
/***********FOUND***********/
for(i=0;i<=10;i++)
printf("%5d",a[i]);
printf("\n");
scanf("%d",&number);
/***********FOUND***********/
end=a[10];
if(number>end)
/***********FOUND***********/
a[11]=number;
else
{
for(i=0;i<10;i++)
{
/***********FOUND***********/
if(a[i]<number)
{
temp1=a[i];
a[i]=number;
for(j=i+1;j<11;j++)
{
temp2=a[j];
a[j]=temp1;
temp1=temp2;
}
break;
}
}
}
for(i=0;i<11;i++)
printf("%6d",a[i]);
}
答案:
1). for(i=0;i<10;i++) 或 for(i=0;i<=9;i++)
2). end=a[9];
3). a[10]=number;
4). if(a[i]>number)
第62题 (10.0分) 题号:393
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:输入一个字符串,过滤此串,滤掉字母字符,并统计新生
成串中包含的字符个数。
例如:输入的字符串为ab234$df4,则输出为:
The new string is 234$4
There are 5 char in the new string.。
------------------------------------------------------*/
#include <stdio.h>
#include <conio.h>
#define N 80
main()
{
char str[N];
int s;
clrscr();
printf("input a string:");gets(str);
printf("The original string is :"); puts(str);
s=fun(str);
printf("The new string is :");puts(str);
printf("There are %d char in the new string.",s);
getch();
}
fun(char *ptr)
{
int i,j;
/**********FOUND**********/
for(i=0,j=0;*(ptr+i)!="\\0";i++)
/**********FOUND**********/
if(*(ptr+i)>'z'|| *(ptr+i)<'a'||*(ptr+i)>'Z' || *(ptr+i)<'A')
{
/**********FOUND**********/
(ptr+j)=(ptr+i);
j++;
}
*(ptr+j)='\0';
return(j);
}
答案:
1). for(i=0,j=0;*(ptr+i)!='\0';i++)
2). if( *(ptr+i)>'z' || *(ptr+i)<'a'&&*(ptr+i)>'Z' || *(ptr+i)<'A' )
3). *(ptr+j)=*(ptr+i);
第63题 (10.0分) 题号:430
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:编写函数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)
第64题 (10.0分) 题号:382
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:读入一行英文文本,将其中每个单词的最后一个字母改成
大写,然后输出此文本行 (这里的“单词”是指由空格
隔开的字符串)。
例如:若输入“I am a student to take the examination.”,
则应输出“I aM A studenT tO takE thE examination.”。
------------------------------------------------------*/
#include "conio.h"
#include "stdio.h"
#include "ctype.h"
#include "string.h"
up1st ( char *p )
{
/**********FOUND**********/
integer k = 0;
for ( ; *p; p++ )
if ( k )
{
/**********FOUND**********/
if ( *p = ' ' )
{
k = 0;
/**********FOUND**********/
*(p -1 ) = toupper( *( p - 1 );
}
}
else if ( *p != ' ' ) k = 1;
*( p-1 ) = toupper( *(p-1) );
}
main( )
{
char chrstr[81];
clrscr();
printf( "\nPlease enter a string: " );
gets ( chrstr );
printf( "\n\nBefore changing:\n %s", chrstr );
up1st( chrstr );
printf( "\nAfter changing:\n %s", chrstr );
}
答案:
1). int k=0;
2). if ( *p == ' ' )
3). *(p -1 ) = toupper( *( p - 1 ));
第65题 (10.0分) 题号:399
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:将整型数组中所有小于0的元素放到所有大于0的元素的前
面(要求只能扫描数组一次)。
------------------------------------------------------*/
#include<stdio.h>
#define Max 100
void fun(int a[],int n)
{
/**********FOUND**********/
int i=5;j=n-1,temp;
while(i<j)
{
while(a[i]<0)
i++;
while(a[j]>=0)
/**********FOUND**********/
j++;
/**********FOUND**********/
if(i>j)
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
void main()
{
static a[]={1,-3,-1,3,2,4,-4,5,-5,-2},n=10,i;
fun(a,n);
for(i=0;i<10;i++)
printf("%d ",a[i]);
getch();
}
答案:
1). int i=0 , j=n-1 , temp ;
2). j--;
3). if(i<j)
第66题 (10.0分) 题号:447
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:企业发放的奖金根据利润提成。利润(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);
第67题 (10.0分) 题号:23
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:计算数组元素中值为正数的平均值(不包括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; 或 double sum=0;
2). while( s[i] != 0 ) 或 while(!s[i]==0) 或 while(!0==s[i]) 或 while(s[i])
3). sum/=c; 或 sum=sum/c;
4). return sum; 或 return (sum);
第68题 (10.0分) 题号:439
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:编制统计营业员一天的营业额的程序,设程序采用一个循环
实现,每次循环输入一笔交易金额并累计营业额。由于营
业员一天完成的交易次数是不确定的,为此以最后附加输
入一笔0或负数交易额作为交易金额已全部输入结束的标志。
有以下统计营业员一天营业额的算法:
统计营业员一天营业额
{
营业额清0;
输入第一笔交易额;
while(交易额>0.0)
{
累计营业额;
输入下一笔交易额;
}
输出营业额;
}
记一笔交易额为变量sale,营业额为sigma。
------------------------------------------------------*/
#include<stdio.h>
void main()
{
/**********FOUND**********/
float sale,sigma
sigma=0.0;
printf("Enter sale data.\n");
/**********FOUND**********/
scanf("%f",sale);
while(sale>0.0)
{
/**********FOUND**********/
sigma+==sale;
printf("Enter next sale data(<=0 to finish).\n");
scanf("%f",&sale);
}
printf("Sigma of sale is %.2f\n",sigma);
getch();
}
答案:
1). float sale,sigma;
2). scanf("%f",&sale);
3). sigma+=sale; 或 sigma=sigma+sale;
第69题 (10.0分) 题号:389
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:判断两个指针所指存储单元中的值的符号是否相同;若相
同函数返回1,否则返回0。这两个存储单元中的值都不为0。
------------------------------------------------------*/
#include <stdio.h>
#include <conio.h>
/**********FOUND**********/
fun ( double *a, *b )
{
/**********FOUND**********/
if ( a * b > 0.0 )
return 1;
/**********FOUND**********/
return 0;
}
main( )
{
double n , m;
clrscr( );
printf ("Enter n , m : ");
scanf ("%lf%lf", &n, &m );
printf( "\nThe value of function is: %d\n", fun ( &n, &m ) );
}
答案:
1). fun ( double *a, double *b )
2). if ( *a * *b > 0.0 )
3). else return 0;
第70题 (10.0分) 题号:373
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:首先把b所指字符串中的字符按逆序存放, 然后将a所指字
符串中的字符和b所指字符串中的字符,按排列的顺序交叉
合并到c所指数组中,过长的剩余字符接在c所指数组的尾部。
例如:当a所指字符串中的内容为“abcdefg”,b所指字符串中的
内容为“1234”时,c所指数组中的内容应该为“a4b3c2d1
efg”;而当a所指字符串中的内容为“1234”,b所指字符
串中的内容为“abcdefg”时,c所指数组中的内容应该为
“1g2f3e4dcba”。
------------------------------------------------------*/
#include <conio.h>
#include <stdio.h>
#include <string.h>
void fun( char *a, char *b, char *c )
{
int i , j;
char 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 )
{
if ( *a )
{
*c = *a;
c++;
/**********FOUND**********/
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(i<j)
2). while ( *a || *b )
3). a++;
第71题 (10.0分) 题号:378
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:将 m(1≤m≤10)个字符串连接起来,组成一个新串,放
入pt所指字符串中。
例如:把3个串:“abc”,“CD”,“EF”串连起来,结果是
“The result is: abcCDEF”。
------------------------------------------------------*/
#include <conio.h>
#include <stdio.h>
#include <string.h>
int fun ( char str[][10], int m, char *pt )
{
/**********FOUND**********/
int k, q, i
for ( k = 0; k < m; k++ )
{
q = strlen ( str [k] );
for (i=0; i<q; i++)
/**********FOUND**********/
pt[i] = str[k,i] ;
/**********FOUND**********/
pt = q ;
pt[0] = 0 ;
}
}
main( )
{
int m, h ;
char s[10][10], p[120] ;
clrscr() ;
printf( "\nPlease enter m:" ) ;
scanf("%d", &m) ; gets(s[0]) ;
printf( "\nPlease enter %d string:\n", m ) ;
for ( h = 0; h < m; h++ ) gets( s[h]) ;
fun(s, m, p) ;
printf( "\nThe result is : %s\n", p) ;
}
答案:
1). int k, q, i;
2). pt[i] = str[k][i] ;
3). pt += q ; 或 pt= pt + q ;
第72题 (10.0分) 题号:370
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:将s所指字符串中出现的、t1所指子串全部替换成t2所指
子字符串,所形成的新串放在w所指的数组中。在此处,
要求t1和t2所指字符串的长度相同。
例如:当s所指字符串中的内容为:"abcdabfab",t1所指子串中
的内容为:"ab",t2所指子串中的内容为:"99"时,结果
在w所指的数组中的内容应为:"99cd99f99"。
------------------------------------------------------*/
#include <conio.h>
#include <stdio.h>
#include <string.h>
int fun (char *s, char *t1, char *t2 , char *w)
{
int i; char *p , *r, *a;
strcpy( w, s );
while ( *w )
{
p = w; r = t1;
/**********FOUND**********/
while ( r )
if ( *r == *p )
{
r++;
p++;
}
else
break;
/**********FOUND**********/
if ( *r = '\0' )
{
a = w; r = t2;
/**********FOUND**********/
while ( *a )
{
*a = *r;
a++;
r++;
}
w += strlen(t2) ;
}
else
w++;
}
}
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("Error : strlen(t1) != strlen(t2)\n");
}
答案:
1). while(*r)
2). if ( *r == '\0' )
3). while ( *r )
第73题 (10.0分) 题号:390
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:判断字符ch是否与str所指串中的某个字符相同; 若相同,
什么也不做,若不同,则将其插在串的最后。
------------------------------------------------------*/
#include <conio.h>
#include <stdio.h>
#include <string.h>
/**********FOUND**********/
void fun(char str, char ch )
{
while ( *str && *str != ch )
str++;
/**********FOUND**********/
if ( *str == ch )
{
str [ 0 ] = ch;
/**********FOUND**********/
str[1] = '0';
}
}
main( )
{
char s[81], c ;
clrscr();
printf( "\nPlease enter a string:\n" );
gets ( s );
printf ("\n Please enter the character to search : " );
c = getchar();
fun(s, c) ;
printf( "\nThe result is %s\n", s);
}
答案:
1). void fun(char *str, char ch )
2). if ( *str == '\0' )
3). str[1] = '\0';
第74题 (10.0分) 题号: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);
第75题 (10.0分) 题号:17
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:实现交换两个整数的值。
例如:给a和b分别输入3和6 ,输出为a=6 b=3
------------------------------------------------------*/
/**********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;
第76题 (10.0分) 题号:350
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:编写一个函数,该函数可以统计一个长度为3的字符串在另
一个字符串中出现的次数。
例如:假定输入的字符串为:asdasasdfgasdaszx67asdmklo,字符
串为:asd,则应输出n=4。
------------------------------------------------------*/
#include<stdio.h>
#include<string.h>
#include<conio.h>
int fun(char *str,char *substr)
{
/**********FOUND**********/
int i,n=0
/**********FOUND**********/
for(i=0;i<=strlen(str);i++)
if((str[i]==substr[0])&&(str[i+1]==substr[1])&&(str[i+2]==substr[2]))
/**********FOUND**********/
++i;
return n;
}
main()
{
char str[81],substr[4];
int n;
clrscr();
printf("输入主字符串: ");
gets(str);
printf("输入子字符串: ");
gets(substr);
puts(str);
puts(substr);
n=fun(str,substr);
printf("n=%d\n",n);
getch();
}
答案:
1). int i,n=0;
2). for(i=0;i<=strlen(str)-3;i++) 或 for(i=0;i<strlen(str)-2;i++)
3). n++; 或 n+=1; 或 n=n+1; 或 ++n;
第77题 (10.0分) 题号:426
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:有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;i<n-1;i++)
scanf("%d,",&number[i]);
scanf("%d",&number[n-1]);
move(number,n,m);
for(i=0;i<n-1;i++)
printf("%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);
第78题 (10.0分) 题号:362
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:求出a所指数组中最大数和次最大数(规定最大数和次最大
数不在a[0]和a[1]中),依次和a[0]、a[1]中的数对调。
例如:数组中原有的数:7、10、12、0、3、6、9、11、5、8,
输出的结果为:12、11、7、0、3、6、9、10、5、8。
------------------------------------------------------*/
#include <conio.h>
#include <stdio.h>
#define N 20
int fun ( int * a, int n )
{
int k,m1,m2,max1,max2,t;
max1=max2= -32768; m1=m2=0;
for ( k = 0; k < n; k++ )
if ( a[k]>max1 )
{
max2 = max1; m2 = m1;
max1 = a[k]; m1 = k;
}
/**********FOUND**********/
else if( a[k]>max1 )
{
max2 = a[k]; m2 = k; }
/**********FOUND**********/
t = a[0];
a[m1]=a[0];
a[m1] = t;
/**********FOUND**********/
t = a[1];
a[m2]=a[1];
a[m2] = t;
}
main( )
{
int x, b[N]={7,10,12,0,3,6,9,11,5,8}, n=10, i;
clrscr( );
for ( i = 0; i<n; i++)
printf("%d ",b[i]);
printf("\n");
fun (b, n);
for ( i=0; i<n; i++ )
printf("%d ",b[i]);
printf("\n");
getch();
}
答案:
1). else if( a[k]>max2 )
2). t = a[0]; a[0]=a[m1]; a[m1] = t;
3). t = a[1]; a[1]=a[m2]; a[m2] = t;
第79题 (10.0分) 题号:10
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:将若干学生的档案存放在一个文件中,并显示其内容。
------------------------------------------------------*/
struct student
{
int num;
char name[10];
int age;
};
struct student stu[3]={{001,"Li Mei",18},
{002,"Ji Hua",19},
{003,"Sun Hao",18}};
#include <stdio.h>
main()
{
/**********FOUND**********/
struct student p;
/**********FOUND**********/
cfile fp;
int i;
if((fp=fopen("stu_list","wb"))==NULL)
{
printf("cannot open file\n");
return;
}
/**********FOUND**********/
for(*p=stu;p<stu+3;p++)
fwrite(p,sizeof(struct student),1,fp);
fclose(fp);
fp=fopen("stu_list","rb");
printf(" No. Name age\n");
for(i=1;i<=3;i++)
{
fread(p,sizeof(struct student),1,fp);
/**********FOUND**********/
scanf("%4d %-10s %4d\n",*p.num,p->name,(*p).age);
}
fclose(fp);
}
答案:
1). struct student *p;
2). FILE *fp;
3). for(p=stu;p< stu + 3 ;p++) 或 for(p=stu; stu + 3 >p;p++) 或 for(p=stu;p<= stu + 2 ;p++) 或 for(p=stu; stu + 2 >=p;p++)
4). printf("%4d %-10s %4d\n",(*p).num ,p->name,(*p).age); 或 printf("%4d %-10s %4d\n",p->num ,p->name,p->age); 或 printf("%4d %-10s %4d\n",(*p).num ,(*p).name,(*p).age); 或 printf(("%4d%-10s%4d \n",p->num,p->name,(*p).age); 或 printf(("%4d%-10s%4d \n",(*p).num,p->name,p->.age); 或 printf(("%4d%-10s%4d \n",p->num,(*p).name,(*p).age);
第80题 (10.0分) 题号:365
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:删除字符串s中的所有空白字符(包括Tab字符、回车符及
换行符)。输入字符串时用'#'结束输入。
-----------------------------------------------------*/
#include <string.h>
#include <stdio.h>
#include <ctype.h>
fun ( char *p)
{
int i,t; char c[80];
/**********FOUND**********/
for (i = 1,t = 0; p[i] ; i++)
/**********FOUND**********/
if(!isspace((p+i))) c[t++]=p[i];
/**********FOUND**********/
c[t]="\\0";
strcpy(p,c);
}
main( )
{
char c,s[80];
int i=0;
printf("Input a string:");
c=getchar();
while(c!='#')
{
s[i]=c;i++;c=getchar();
}
s[i]='\0';
fun(s);
puts(s);
}
答案:
1). for (i = 0,t = 0; p[i] ; i++)
2). if(!isspace(*(p+i))) c[t++]=p[i];
3). c[t]='\0';
第81题 (10.0分) 题号:381
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:读入一个英文文本行,将其中每个单词的第一个字母改成
大写,然后输出此文本行 (这里的“单词”是指由空格
隔开的字符串)。
例如:若输入:“I am a student to take the examination.”,
则应输出:“I Am A Student To Take The Examination.”。
------------------------------------------------------*/
#include <ctype.h>
#include <string.h>
#include <stdio.h>
/**********FOUND**********/
upfst ( char p )
{
int k=0;
/**********FOUND**********/
for ( ; p; p++ )
if ( k )
{
if ( *p == ' ') k = 0;
}
/**********FOUND**********/
else if ( *p == ' ' )
{
k = 1;
*p = toupper( *p );
}
}
main( )
{
char chrstr[81];
clrscr();
printf( "\nPlease enter an English text line: " );
gets( chrstr );
printf( "\n\nBefore changing:\n %s", chrstr );
upfst( chrstr );
printf( "\nAfter changing:\n %s\n", chrstr );
}
答案:
1). upfst(char *p)
2). for ( ; *p; p++ )
3). else if ( *p != ' ' )
第82题 (10.0分) 题号:394
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:求出N×M整型数组的最小元素及其所在的行坐标及列坐标
(如果最小元素不唯一,选择位置在最前面的一个)。
例如:输入的数组为:
9 2 3
4 15 6
12 1 9
10 11 2
求出的最小数为1,行坐标为2,列坐标为1。
------------------------------------------------------*/
#define N 4
#define M 3
#include <stdio.h>
int Row,Col;
main()
{
int a[N][M],i,j,min,row,col;
printf("input a array:");
for(i=0;i<N;i++)
for(j=0;j<M;j++)
scanf("%d",&a[i][j]);
for(i=0;i<N;i++)
{
for(j=0;j<M;j++)
printf("%d",a[i][j]);
printf("\n");
}
min=fun(a);
printf("max=%d,row=%d,col=%d",min,Row,Col);
getch();
}
int fun(int array[N][M])
{
int min,i,j;
min=array [0][0];
Row=0;
Col=0;
for(i=0;i<N;i++)
{
/**********FOUND**********/
for(j=i;j<M;j++)
/**********FOUND**********/
if(min <array [i][j])
{
min=array [i][j];
Row=i;
/**********FOUND**********/
Col=i;
}
}
return(min);
}
答案:
1). for(j=0;j<M;j++)
2). if(min >array [i][j])
3). Col=j;
第83题 (10.0分) 题号:361
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:求两数平方根之和,作为函数值返回。
例如:输入12和20,输出结果是:y = 7.936238。
------------------------------------------------------*/
#include <conio.h>
#include <math.h>
/**********FOUND**********/
double fun (double *a, *b)
{
double c;
/**********FOUND**********/
c = sqr(a)+sqr(b) ;
/**********FOUND**********/
return a;
}
main ( )
{
double a, b, y;
clrscr( );
printf ( "Enter a & b : "); scanf ("%lf%lf", &a, &b );
y = fun (&a, &b); printf ("y = %f \n", y );
getch();
}
答案:
1). double fun (double *a, double *b)
2). c = sqrt(*a)+sqrt(*b) ; 或 c = sqrt(*b)+sqrt(*a) ;
3). return c; 或 return(c); 或 return sqrt(*b)+sqrt(*a); 或 return sqrt(*a)+sqrt(*b);
第84题 (10.0分) 题号:427
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:八进制转换为十进制。
------------------------------------------------------*/
#include "stdio.h"
main()
{
/**********FOUND**********/
char p,s[6];
int n;
p=s;
gets(p);
/**********FOUND**********/
n==0;
/**********FOUND**********/
while(*(p)=='\0')
{
n=n*8+*p-'0';
p++;
}
printf("%d",n);
getch();
}
答案:
1). char *p,s[6];
2). n=0;
3). while(*(p)!='\0')
第85题 (10.0分) 题号:369
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:求出在字符串中最后一次出现的子字符串的地址,通过函
数值返回,在主函数中输出从此地址开始的字符串;若未
找到,则函数值为NULL。
例如:当字符串中的内容为:"abcdabfabcdx",t中的内容为:
"ab"时,输出结果应是:abcdx。当字符串中的内容为:
"abcdabfabcdx",t中的内容为:"abd"时,则程序输出
未找到信息:not found!。
------------------------------------------------------*/
#include <conio.h>
#include <stdio.h>
#include <string.h>
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;
第86题 (10.0分) 题号:446
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:写一个函数,求一个字符串的长度,在main函数中输入字
符串,并输出其长度。
------------------------------------------------------*/
#include "stdio.h"
#include <conio.h>
main()
{
int len;
/**********FOUND**********/
char *str[20];
printf("please input a string:\n");
scanf("%s",str);
/**********FOUND**********/
len==length(str);
printf("the string has %d characters.",len);
getch();
}
int length(p)
char *p;
{
int n;
n=0;
/**********FOUND**********/
while(*p=='\0')
{
n++;
p++;
}
return n;
}
答案:
1). char str[20];
2). len=length(str);
3). while(*p!='\0') 或 while(*p) 或 while(*p!=0) 或 while(*p!=NULL)
第87题 (10.0分) 题号:409
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:有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)
第88题 (10.0分) 题号:401
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:编写一个程序,从键盘接收一个字符串,然后按照字符顺
序从小到大进行排序,并删除重复的字符。
------------------------------------------------------*/
#include <stdio.h>
#include <string.h>
void main()
{
char str[100],*p,*q,*r,c;
printf("输入字符串:");
gets(str);
/**********FOUND**********/
for(p=str;p;p++)
{
for(q=r=p;*q;q++)
if(*r>*q)
r=q;
/**********FOUND**********/
if(r==p)
{
/**********FOUND**********/
c=r;
*r=*p;
*p=c;
}
}
for(p=str;*p;p++)
{
for(q=p;*p==*q;q++);
strcpy(p+1,q);
}
printf("结果字符串:%s\n\n",str);
getch();
}
答案:
1). for(p=str;*p;p++)
2). if(r!=p)
3). c=*r;
第89题 (10.0分) 题号:358
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:先将在字符串s中的字符按逆序存放到t串中,然后把s中的
字符按正序连接到t串的后面。
例如:当s中的字符串为:“ABCDE”时,则t中的字符串应为:
“EDCBAABCDE”。
------------------------------------------------------*/
#include <conio.h>
#include <stdio.h>
#include <string.h>
void fun (char *s, char *t)
{
/**********FOUND**********/
int i;
sl = strlen(s);
for (i=0; i<sl; i++)
/**********FOUND**********/
t[i] = s[sl-i];
for (i=0; i<sl; i++)
t[sl+i] = s[i];
/**********FOUND**********/
t[2*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). int i,sl;
2). t[i] = s[sl-i-1];
3). t[2*sl] = '\0'; 或 t[2*sl] = 0;
第90题 (10.0分) 题号:418
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:利用递归方法求5!。
------------------------------------------------------*/
#include"stdio.h"
#include "stdio.h"
main()
{
int i;
int fact();
printf("5!=%d\n",fact(5));
}
int fact(j)
int j;
{
int sum;
/**********FOUND**********/
if(j=0)
/**********FOUND**********/
sum=0;
else
sum=j*fact(j-1);
/**********FOUND**********/
return j;
}
答案:
1). if(j==0)
2). sum=1;
3). return sum;
第91题 (10.0分) 题号:400
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:输入两个实数,按代数值由小到大输出它们,并在fun()
函数中输出。(输出的数据都保留2位小数)
------------------------------------------------------*/
#include "stdio.h"
main()
{
fun();
getch();
}
fun(float a,float b )
{
/**********FOUND**********/
float t
scanf("%f %f",&a,&b);
/**********FOUND**********/
if(a<b)
{
t=a;
a=b;
b=t;
}
/**********FOUND**********/
printf("%5.2f ,%5.2f\n",&a,&b);
}
答案:
1). float t;
2). if(a>b)
3). printf("%5.2f, %5.2f\n",a,b);
第92题 (10.0分) 题号:364
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:用选择法对数组中的n个元素按从小到大的顺序进行排序。
------------------------------------------------------*/
#include <stdio.h>
#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;
}
}
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");
getch();
}
答案:
1). p = j;
2). if(a[i] < a[p]) 或 if(a[p] > a[i])
3). p = i;
第93题 (10.0分) 题号:410
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:某个公司采用公用电话传递数据,数据是四位的整数,在
传递过程中是加密的,加密规则如下:每位数字都加上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). scanf("%d",&a);
2). aa[1]=a%100/10;
3). for(i=0;i<=3;i++) 或 for(i=0;i<4;i++)
第94题 (10.0分) 题号:432
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:编写一个函数,输入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;
第95题 (10.0分) 题号:388
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:分别统计字符串中大写字母和小写字母的个数。
例如:给字符串 s 输入:AAaaBBb123CCccccd,
则应输出结果:upper = 6, lower = 8。
------------------------------------------------------*/
#include <conio.h>
#include <stdio.h>
/**********FOUND**********/
void fun ( char *s, int a, int b )
{
while ( *s )
{
if ( *s >= 'A' && *s <= 'Z' )
/**********FOUND**********/
a++ ;
if ( *s >= 'a' && *s <= 'z' )
/**********FOUND**********/
b++;
s++;
}
}
main( )
{
char s[100]; int upper = 0, lower = 0 ;
clrscr();
printf( "\nPlease a string : " ); gets ( s );
fun ( s, & upper, &lower );
printf( "\n upper = %d lower = %d\n", upper, lower );
}
答案:
1). void fun ( char *s, int *a, int *b )
2). (*a)++ ;
3). (*b)++;
第96题 (10.0分) 题号:392
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:根据整型形参m,计算如下公式的值:
y=1/2+1/8+1/18+...+1/2m*m
------------------------------------------------------*/
#include "stdio.h"
double fun(int m)
{
/**********FOUND**********/
double y=0
int i;
/**********FOUND**********/
for(i=1; i<m; i++)
{
/**********FOUND**********/
y=+1.0/(2*i*i);
}
return(y);
}
main()
{
int n;
clrscr();
printf("Enter n: ");
scanf("%d", &n);
printf("\nThe result is %1f\n", fun(n));
getch();
}
答案:
1). double y=0;
2). for(i=1; i<=m; i++)
3). y+=1.0/(2*i*i);
第97题 (10.0分) 题号:31
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:将s所指字符串的反序和正序进行连接形成一个新串放在
t所指的数组中。
例如:当s所指的字符串的内容为"ABCD"时,t所指数组中
的内容为"DCBAABCD"。
------------------------------------------------------*/
#include <conio.h>
#include <stdio.h>
#include <string.h>
/**********FOUND**********/
void fun (char s, char t)
{
int i, d;
/**********FOUND**********/
d = len(s);
/**********FOUND**********/
for (i = 1; i<d; i++)
t[i] = s[d - 1 - i ];
for (i = 0; i<d; i++)
t[ d + i ] = s[i];
/**********FOUND**********/
t[2*d] = '/0';
}
main()
{
char s[100], t[100];
clrscr();
printf("\nPlease enter string S:");
scanf("%s", s);
fun(s, t);
printf("\nThe result is: %s\n", t);
}
答案:
1). void fun (char s[],char t[]) 或 void fun (char *s,char *t)
2). d = strlen(s);
3). for (i = 0; i<d; i++) 或 for (i = 0; d>i; i++) 或 for (i = 0; i<=d-1; i++) 或 for (i = 0; d-1>=i; i++)
4). t[ 2 * d ] = '\0'; 或 t[ i + d ] = '\0'; 或 t[ i + d ] =NULL; 或 t[ 2 * d ] = NULL; 或 t[ 2 * d ] = 0; 或 t[ i + d ] = 0;
第98题 (10.0分) 题号:555
/*
------------------------------------------------------------------------------
【程序改错】
------------------------------------------------------------------------------
题目:下列给定的程序中,函数fun()的功能是:用选择法对数组中的n个元素按从大到
小的顺序进行排序。
请改正程序中的错误,使它能得到正确结果。
------------------------------------------------------------------------------
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
------------------------------------------------------------------------------
*/
#include<stdio.h>
#define N 20
/***********FOUND***********/
void fun(int n,int a[])
{
int i,j,t,p;
/***********FOUND***********/
for(j=0;j<n;j++)
{
p=j;
for(i=j;i<n;i++)
if(a[i]>a[p])
p=i;
t=a[p];
a[p]=a[j];
/***********FOUND***********/
a[p]=t;
}
}
main()
{
int a[N]={11,32,-5,2,14},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). void fun(int a[],int n)
2). for(j=0;j<n-1;j++)
3). a[j]=t;
第99题 (10.0分) 题号:396
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能: 移动一维数组中的内容; 若数组中有n个整数, 要求把下
标从0到p(含p,p小于等于n-1)的数组元素平移到数组的最后。
例如: 一维数组中的原始内容为:“1,2,3,4,5,6,7,8,9,10” p的
值为3。移动后,一维数组中的内容应为“ 5,6,7,8,9,10,1,2,3,4”
------------------------------------------------------*/
#include <stdio.h>
#define N 80
void fun(int *w, int p, int n)
{
/**********FOUND**********/
int i,k=0;b[N];
/**********FOUND**********/
for(i=1; i < n; i++) b[k++]=w[i];
/**********FOUND**********/
for(i=0; i <= p; i++) b[k]=w[i];
for(i=0; i < n; i++) w[i]=b[i];
}
main()
{
int a[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
int i,p,n=15;
printf("The original data:\n");
printf("\n\nEnter p: ");scanf("%d",&p);
fun(a,p,n);
printf("\nThe data after moving:\n");
for(i=0; i < n; i++)
printf("%d ",a[i]);
printf("\n\n");
getch();
}
答案:
1). int i,k=0,b[N];
2). for(i=p+1; i < n; i++) b[k++]=w[i];
3). for(i=0; i <= p; i++) b[k++]=w[i];
第100题 (10.0分) 题号:440
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:输入字符序列,字符序列以特殊字符“#”结束。程序从前
向后依次读入字符,并翻译出新的字符输出。翻译的规则
是:如果当前读入的字符是数字符,如果该字符的面值为n,
则它的后一个字符(包括数字符)需重复输出n+1次如果当前
读入的字符不是数字符,则输出该字符。输出时,以上述一
次翻译为一组,不同组间输出用一个空白字符隔开。翻译
直至当前读入的字符为字符‘#’,结束翻译和输出。
------------------------------------------------------*/
#include<stdio.h>
void main()
{
char ch,nch;
int count;
int k;
printf("Enter string.\n");
scanf("%c",&ch);
/**********FOUND**********/
while(ch='#')
{
if(ch>='0'&&ch<='9')
{
/**********FOUND**********/
count=ch-'0'-1;
scanf("%c",&nch);
for(k=0;k<count;k++)
printf("%c",nch);
}
else
/**********FOUND**********/
printf("%f",ch);
printf(" ");
scanf("%c",&ch);
}
printf("#\n");
}
答案:
1). while(ch!='#')
2). count=ch-'0'+1;
3). printf("%c",ch);
第101题 (10.0分) 题号:24
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:先从键盘上输入一个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);
第102题 (10.0分) 题号:377
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:求广义菲玻那契级数的第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;
/**********FOUND**********/
for (k=4; k<n; 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;
3). return d;
第103题 (10.0分) 题号:14
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:求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);
第104题 (10.0分) 题号:380
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:删除w所指数组中下标为k的元素中的值。程序中,调用了
getindex、arrout和arrdel三个函数,getindex用以输入
所删元素的下标,函数中对输入的下标进行检查,若越界,
则要求重新输入,直到正确为止。arrout用以输出数组中
的数据,arrdel进行所要求的删除操作。
------------------------------------------------------*/
#include "conio.h"
#include "stdio.h"
#define NUM 10
/**********FOUND**********/
arrout ( int w, int m )
{
int k;
/**********FOUND**********/
for (k = 1; k < m; k++)
/**********FOUND**********/
printf ("%d " w[k]);
printf ("\n");
}
arrdel ( int *w, int n, int k )
{
int i;
for ( i = k; i < n-1; i++ )
w[i] = w[i+1];
n--;
return n;
}
getindex( int n )
{ int i;
do
{ printf("\nEnter the index [ 0<= i< %d ]: ", n );
scanf ("%d",&i );
} while( i < 0 || i > n-1 );
return i;
}
main( )
{ int n, d, a[NUM]={21,22,23,24,25,26,27,28,29,30};
n = NUM;
clrscr();
printf ("Output primary data :\n"); arrout ( a, n );
d = getindex( n ); n = arrdel ( a, n, d );
printf ("Output the data after delete :\n"); arrout( a, n );
}
答案:
1). arrout ( int *w, int m )
2). for (k = 0; k < m; k++)
3). printf ("%d ", w[k]);
第105题 (10.0分) 题号:25
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:给定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);
第106题 (10.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]<min)
4). a[k]=a[0];
第107题 (10.0分) 题号:420
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:有5个人坐在一起,问第五个人多少岁?他说比第4个人
大2岁。问第4个人岁数,他说比第3个人大2岁。问第三
个人,又说比第2人大两岁。问第2个人,说比第一个人
大两岁。最后问第一个人,他说是10岁。请问第五个人
多大?
------------------------------------------------------*/
#include"stdio.h"
age(n)
int n;
{
int c;
/**********FOUND**********/
if(n=1)
c=10;
else
/***********FOUND***********/
c=age(n)+2;
return(c);
}
main()
{
/**********FOUND**********/
printf("%d",age5);
}
答案:
1). if(n==1)
2). c=age(n-1)+2;
3). printf("%d",age(5));
第108题 (10.0分) 题号:402
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:编写函数fun求20以内所有5的倍数之积。
------------------------------------------------------*/
#define N 20
#include "stdio.h"
main()
{
int sum;
sum=fun(5);
printf("%d以内所有%d的倍数之积为: %d\n",N,5,sum);
getch();
}
int fun(int m)
{
/**********FOUND**********/
int s=0,i;
for(i=1;i<N;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
第109题 (10.0分) 题号:386
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:分别统计输入的字符串中各元音字母(即:A、E、I、O、U)
的个数。
注意:字母不分大、小写。
例如:若输入:THIs is a boot,则输出应该是:1、0、2、2、0。
------------------------------------------------------*/
#include <conio.h>
#include <stdio.h>
fun ( char *s, int num[5] )
{
int k, i=5;
for ( k = 0; k<i; k++ )
/**********FOUND**********/
num[i]=0;
for (; *s; s++)
{
i = -1;
/**********FOUND**********/
switch ( s )
{
case 'a':
case 'A':
{
i=0;
break;
}
case 'e':
case 'E':
{
i=1;
break;
}
case 'i':
case 'I':
{
i=2;
break;
}
case 'o':
case 'O':
{
i=3;
break;
}
case 'u':
case 'U':
{
i=4;
break;
}
}
/**********FOUND**********/
if (i < 0)
num[i]++;
}
}
main( )
{
char s1[81]; int num1[5], i;
clrscr();
printf( "\nPlease enter a string: " ); gets( s1 );
fun ( s1, num1 );
for ( i=0; i < 5; i++ )
printf ("%d ",num1[i]);
printf ("\n");
}
答案:
1). num[k]=0;
2). switch(*s)
3). if (i >= 0)
第110题 (10.0分) 题号:355
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:找出一个大于给定整数m且紧随m的素数,并作为函数值返回。
------------------------------------------------------*/
#include<conio.h>
#include<stdio.h>
int fun(int m)
{
/**********FOUND**********/
int i;k;
for(i=m+1;;i++)
{
for(k=2;k<i;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; 或 int i; int k; 或 int k,i; 或 int k; int i;
2). if(i%k==0) 或 if(!(i%k))
3). if(k==i) 或 if(i==k)
第111题 (10.0分) 题号:419
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:利用递归函数调用方式,将所输入的5个字符,以相反顺序
打印出来。
------------------------------------------------------*/
#include"stdio.h"
main()
{
int i=5;
void palin(int n);
printf("\40:");
palin(i);
printf("\n");
}
void palin(n)
int n;
{
/**********FOUND**********/
int next;
if(n<=1)
{
/**********FOUND**********/
next!=getchar();
printf("\n\0:");
putchar(next);
}
else
{
next=getchar();
/**********FOUND**********/
palin(n);
putchar(next);
}
}
答案:
1). char next;
2). next=getchar();
3). palin(n-1);
第112题 (10.0分) 题号:415
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,
还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉
一半,又多吃了一个。以后每天早上都吃了前一天剩下的一
半零一个。到第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;
第113题 (10.0分) 题号:6
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:求如下表达式:
1 1 1
S = 1 + —— + ——— + ...... + ———————
1+2 1+2+3 1+2+3+......+n
------------------------------------------------------*/
#include <stdio.h>
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;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;
第114题 (10.0分) 题号:404
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:编写函数fun计算下列分段函数的值:
x*x+x x<0且x≠-3
f(x)= x*x+5x 0≤x<10且x≠2及x≠3
x*x+x-1 其它
------------------------------------------------------*/
#include "stdio.h"
float fun(float x)
{
/**********FOUND**********/
float y
/**********FOUND**********/
if (x<0 ||x!=-3.0)
y=x*x+x;
else if(x>=0 && x<10.0 && x!=2.0 && x!=3.0)
y=x*x+5*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;
第115题 (10.0分) 题号:448
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:编写函数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;
第116题 (10.0分) 题号:13
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:求1到10的阶乘的和。
------------------------------------------------------*/
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); 或 s=fac(i)+s;
3). float y=1.0; 或 float y=1;
4). return y; 或 return(y); 或 return (y);
第117题 (10.0分) 题号:1
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:在一个一维整型数组中找出其中最大的数及其下标。
------------------------------------------------------*/
#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**********/
get("%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]); 或 scanf("%d", a + i );
4). max=fun(a,&p,N);
第118题 (10.0分) 题号:254
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:用"起泡法"对连续输入的十个字符排序后按从小到大的次序
输出.
------------------------------------------------------*/
#define N 10
#include <stdio.h>
#include <string.h>
main( )
{
int i;
char str[N];
/***********FOUND***********/
for(i=0;i<N;i++)scanf("%c",str[i]);
/***********FOUND***********/
sort(str[N]);
for(i=0;i<N;i++)
printf("%c",str[i]);
printf("\n");
}
sort(char str[N])
{
int i,j; char t;
for(j=1;j<N;j++)
/***********FOUND***********/
for(i=0;i<N-j;i--)
/***********FOUND***********/
if(str[i]<str[i+1])
{
t=str[i];
str[i]=str[i+1];
str[i+1]=t;
}
}
答案:
1). for(i=0;i<N;i++)scanf("%c",&str[i]);
2). sort(str);
3). for(i=0;i<N-j;i++)
4). if(str[i]>str[i+1]) 或 if(str[i+1]<str[i])
第119题 (10.0分) 题号:357
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:请编写函数fun,对长度为8个字符的字符串,将8个字符按
降序排列。
例如:原来的字符串为CEAedcab,排序后输出为edcbaECA。
------------------------------------------------------*/
#include<stdio.h>
#include<ctype.h>
#include<conio.h>
int fun(char *s,int num)
{
/**********FOUND**********/
int i;j;
char t;
for(i=0;i<num;i++)
/**********FOUND**********/
for(j=i;j<num;j++)
/**********FOUND**********/
if(s[i]>s[j])
{
t=s[i];
s[i]=s[j];
s[j]=t;
}
}
main()
{
char s[10];
clrscr();
printf("输入8个字符的字符串:");
gets(s);
fun(s,8);
printf("\n%s",s);
getch();
}
答案:
1). int i,j;
2). for(j=i+1;j<num;j++)
3). if(s[i]<s[j])
第120题 (10.0分) 题号:413
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:输入一行字符,分别统计出其中英文字母、空格、数字和
其它字符的个数。
------------------------------------------------------*/
#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==' ')
第121题 (10.0分) 题号: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("%d",&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;
第122题 (10.0分) 题号:20
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:已知一个数列从第0项开始的前三项分别为0、0、1,以
后的各项都是其相邻的前三项的和。下列给定程序中,
函数fun的功能是:计算并输出该数列的前n项的平方根
之和sum,n的值通过形参传入。
例如:当n=10时,程序的输出结果应为23.197745。
------------------------------------------------------*/
#include <math.h>
/**********FOUND**********/
fun (int n)
{
double sum,s0,s1,s2,s;
int k;
/**********FOUND**********/
sum=0.0;
if(n<=2) sum=0.0;
s0=0.0;
s1=0.0;
/**********FOUND**********/
s2=0.0;
/**********FOUND**********/
for(k=4;k>n;k++)
{
s=s0+s1+s2;
sum+=sqrt(s);
s0=s1;s1=s2;s2=s;
}
return sum;
}
main()
{
int n;
scanf("%d",&n);
printf("%lf\n",fun(n));
}
答案:
1). double fun (int n)
2). sum=1.0; 或 sum=1;
3). s2=1.0; 或 s2=1;
4). for(k=4;k<=n;k++) 或 for(k=4;n>=k;k++) 或 for(k=4;k<n+1;k++) 或 for(k=4;k<1+n;k++) 或 for(k=4;n+1>k;k++) 或 for(k=4;1+n>k;k++)
第123题 (10.0分) 题号:352
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:根据整型形参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<m; i++)
/**********FOUND**********/
y+=1.0/(2i-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);
第124题 (10.0分) 题号:406
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:成一个周边元素为5,其它元素为1的3*3的二维数组。
------------------------------------------------------*/
#include "stdio.h"
main()
{
int a[3][3],i,j;
fun(a);
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%d ",a[i][j]);
printf("\n");
}
getch();
}
fun(int arr[][3])
{
/**********FOUND**********/
int i,j
/**********FOUND**********/
for(i=1;i<3;i++)
for(j=0;j<3;j++)
if(i==0||j==0||i==2||j==2)
arr[i][j]=5;
/**********FOUND**********/
else if(i+j==1&&i+j==3)
arr[i][j]=5;
else
arr[i][j]=1;
}
答案:
1). int i,j;
2). for(i=0;i<3;i++)
3). else if(i+j==1||i+j==3)
第125题 (10.0分) 题号:371
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:将s所指字符串中最后一次出现的、t1所指子串替换成t2所
指子串,所形成的新串放在w所指的数组中。在此处,要求
t1和t2所指字符串的长度相同。
例如:当s所指字符串中的内容为:"abcdabfabc",t1所指子串中
的内容为:"ab",t2所指子串中的内容为:"99"时, 结果,
在w所指的数组中的内容应为:"abcdabf99c"。
------------------------------------------------------*/
#include <conio.h>
#include <stdio.h>
#include <string.h>
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;
第126题 (10.0分) 题号:435
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:一个整数,它加上100后是一个完全平方数,再加上168又
是一个完全平方数,请问该数是多少?
------------------------------------------------------*/
#include <math.h>
main()
{
long int i,x,y,z;
/**********FOUND**********/
for (i==1;i<100000;i++)
{
/**********FOUND**********/
x=sqrt(i+100)
y=sqrt(i+268);
/**********FOUND**********/
if(x*x==i+100||y*y==i+268)
printf("\n%ld\n",i);
}
}
答案:
1). for (i=1;i<100000;i++)
2). x=sqrt(i+100);
3). if(x*x==i+100&&y*y==i+268)
第127题 (10.0分) 题号:27
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:实现3行3列矩阵的转置,即行列互换。
------------------------------------------------------*/
fun(int a[3][3],int n)
{
int i,j,t;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
/**********FOUND**********/
scanf("%d",a[i][j]);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%4d",a[i][j]);
printf("\n");
}
for(i=0;i<n;i++)
/**********FOUND**********/
for(j=0;j<n;j++)
{
/**********FOUND**********/
a[i][j]=t;
a[i][j]=a[j][i];
/**********FOUND**********/
t=a[j][i];
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%4d",a[i][j]);
printf("\n");
}
}
main()
{
int b[3][3];
fun(b,3);
}
答案:
1). scanf("%d",&a[i][j]); 或 scanf("%d",(*(a+i)+j));
2). for(j=0;j<i;j++) 或 for(j=0;i>j;j++) 或 for(j=0;j<=i;j++) 或 for(j=0;i>=j;j++) 或 for(j=i+1;j<n;j++) 或 for(j=i;j<n;j++) 或 for(j=0;j<=i-1;j++) 或 for(j=0;i-1>=j;j++) 或 for(j=i+1;j<=n-1;j++) 或 for(j=i;j<=n-i;j++)
3). t=a[i][j];
4). a[j][i]=t;
第128题 (10.0分) 题号:422
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:一个5位数,判断它是不是回文数。即12321是回文数,个
位与万位相同,十位与千位相同。
------------------------------------------------------*/
#include"stdio.h"
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");
getch();
}
答案:
1). long ge,shi,qian,wan,x;
2). wan=x/10000;
3). if (ge==wan&&shi==qian) 或 if (shi==qian&&ge==wan)
第129题 (10.0分) 题号:436
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:学习使用按位或 | 。
------------------------------------------------------*/
#include "stdio.h"
main()
{
/**********FOUND**********/
int a b;
a=077;
b=a|3;
/**********FOUND**********/
printf("\40: The a & b(decimal) is %d \n",&b);
/**********FOUND**********/
b|=7
printf("\40: The a & b(decimal) is %d \n",b);
}
答案:
1). int a,b;
2). printf("\40: The a & b(decimal) is %d \n",b);
3). b|=7; 或 b=b|7;
第130题 (10.0分) 题号:397
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:将s所指字符串中的字母转换为按字母序列的后续字母(但
Z转换为A, z转换为a),其它字符不变。
------------------------------------------------------*/
#include <stdio.h>
#include <ctype.h>
#include <conio.h>
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';
else
/***********FOUND***********/
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++;
第131题 (10.0分) 题号:26
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:找出大于m的最小素数,并将其作为函数值返回。
------------------------------------------------------*/
#include <math.h>
int fun( int m)
{
int i,k;
for(i=m+1;;i++)
{
/**********FOUND**********/
for(k=1;k<i;k++)
/**********FOUND**********/
if(i%k!=0) break;
/**********FOUND**********/
if(k<i)
/**********FOUND**********/
return k;
}
}
main()
{
int n;
scanf("%d",&n);
printf("%d\n",fun(n));
}
答案:
1). for(k=2;k<i;k++) 或 for(k=2;i>k;k++) 或 for(k=2;k<=i-1;k++) 或 for(k=2;k<i/2;k++) 或 for(k=2;i/2>k;k++) 或 for(k=2;k<=sqrt(i);k++) 或 for(k=2;sqrt(i)>=k;k++)
2). if( i%k == 0 ) break; 或 if(!(i%k)) break;
3). if(i<=k) 或 if(k>=i) 或 if( k == i ) 或 if(k>=i/2) 或 if(k=i/2) 或 if(k>sqrt(i))
4). return i; 或 return (i);
第132题 (10.0分) 题号:445
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:请输入星期几的第一个字母来判断一下是星期几,如果第一
个字母一样,则继续判断第二个字母。
------------------------------------------------------*/
#include <stdio.h>
void main()
{
char letter;
printf("please input the first letter of someday\n");
/**********FOUND**********/
while ((letter=getch())='Y')
{
switch (letter)
{
case 'S':
printf("please input second letter\n");
if((letter=getch())=='a')
printf("saturday\n");
else if ((letter=getch())=='u')
printf("sunday\n");
else printf("data error\n");
break;
case 'F':
printf("friday\n");
break;
case 'M':
printf("monday\n");
break;
case 'T':
printf("please input second letter\n");
/**********FOUND**********/
if((letter=getch())!='u')
printf("tuesday\n");
else if ((letter=getch())=='h')
printf("thursday\n");
else
printf("data error\n");
/**********FOUND**********/
break
case 'W':
printf("wednesday\n");
break;
default:
printf("data error\n");
}
}
getch();
}
答案:
1). while ((letter=getch())!='Y')
2). if((letter=getch())=='u')
3). break;
第133题 (10.0分) 题号:428
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:求0-7这8个数字所能组成的奇数个数。
------------------------------------------------------*/
#include "stdio.h"
main()
{
/**********FOUND**********/
long sum=4;s=4;
int j;
for(j=2;j<=8;j++)
{
/**********FOUND**********/
printf("\n%d",sum);
/**********FOUND**********/
if(j<2)
s*=7;
else
s*=8;
sum+=s;
}
printf("\nsum=%ld",sum);
getch();
}
答案:
1). long sum=4,s=4;
2). printf("\n%ld",sum);
3). if(j<=2) 或 if(j<3)
第134题 (10.0分) 题号:429
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:809*??=800*??+9*??+1 其中??代表的两位数,8*??的结果
为两位数,9*??的结果为3位数。求??代表的两位数,及809*??
后的结果。
------------------------------------------------------*/
#include "stdio.h"
output(long b,long i)
{
printf("\n%ld=800*%ld+9*%ld+1\n",b,i,i);
printf("??代表的两位数: %d",i);
printf("\n809*??后的结果:%d",b);
getch();
}
main()
{
/**********FOUND**********/
long int a;b;i;
a=809;
/**********FOUND**********/
for(i=10;i<100,i++)
{
/**********FOUND**********/
b=i/a+1;
if(b>=1000&&b<=10000&&8*i<100&&9*i>=100)
output(b,i);
}
}
答案:
1). long int a , b , i ;
2). for(i=10;i<100;i++) 或 for(i=10;i<=99;i++)
3). b= i*a + 1 ; 或 b= a*i + 1 ;
第135题 (10.0分) 题号:417
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:下题是一段有关结构体变量传递的程序.
------------------------------------------------------*/
#include "stdio.h"
struct student
{
int x;
char c;
} a;
main()
{
a.x=3;
/**********FOUND**********/
a.c='a'
f(a);
/**********FOUND**********/
printf("%d,%c",a.x,b.c);
getch();
}
f(struct student b)
{
b.x=20;
/**********FOUND**********/
b.c=y;
}
答案:
1). a.c='a';
2). printf("%d,%c",a.x,a.c);
3). b.c='y';
第136题 (10.0分) 题号:408
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:写计算级数 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 exbackrard=%f\n",ex1,ex2);
getch();
}
答案:
1). ex1=ex2=1;
2). term*=x/n;
3). for (n=m;n>=1; n--)
第137题 (10.0分) 题号:434
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:编写一个程序计算某年某月有几天。(注意要区分闰年)
------------------------------------------------------*/
#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 :
第138题 (10.0分) 题号:363
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:计算正整数num的各位上的数字之积。
例如:若输入:252,则输出应该是:20。
若输入:202,则输出应该是:0。
------------------------------------------------------*/
#include <stdio.h>
#include <conio.h>
long fun (long num)
{
/**********FOUND**********/
long k=1
do
{
k*=num%10 ;
/**********FOUND**********/
num\=10;
/**********FOUND**********/
}while(!num) ;
return (k) ;
}
main( )
{
long n ;
clrscr() ;
printf("\Please enter a number:") ; scanf("%ld",&n) ;
printf("\n%ld\n",fun(n)) ;
getch();
}
答案:
1). long k=1;
2). num/=10;
3). } while(num) ; 或 while(num!=0)
第139题 (10.0分) 题号:18
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:计算并输出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) && (mc<10) ) 或 while ( (2<=k) && (mc<=9) ) 或 while ( (k>=2) && (mc<=9) )
2). if(!( k%17!=0 || k%13!=0 )) 或 if( k%13==0 || k%17==0)
3). k--; 或 k=k-1; 或 k-=1;
4). return m; 或 return(m);