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

C改错


━━━━━━━━━━━━━━━━━━
一、程序改错 共138题 (共计1380分)
━━━━━━━━━━━━━━━━━━

第1题 (10.0分)
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

功能:根据整型形参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=3; i
#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;


第3题 (10.0分)
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

功能:编写一个程序,从键盘接收一个字符串,然后按照字符顺
序从小到大进行排序,并删除重复的字符。

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

#include
#include
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;


第4题 (10.0分)
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

功能:编写程序, 求矩阵(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;


第5题 (10.0分)
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

功能:用"冒泡法"对连续输入的十个字符排序后按从小到大的次序
输出.

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

#define N 10

#include
#include

main( )
{
int i;
char str[N];
/***********FOUND***********/
for(i=0;istr[i+1]) 或 if(str[i+1]

int="int" c="*a;" for="a+1;c<a+n;c++)" if="if">max)
{
max=*c;
/**********FOUND**********/
b=c-a;
}
return max;
}

void main(void)
{
int a[N],i,max,p=0;
printf("please enter 10 integers:\n");
for(i=0;i*max) 或 if(*max<*p)
3). if( max == arr )
4). for(i=0;ii;i++) 或 for(p=arr;p=i;i++) 或 for(p=arr;p<=arr+n-1;) 或 for(p=arr;arr+n-1>=p;)


第9题 (10.0分)
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

功能:求两个形参的乘积和商数,并通过形参返回调用程序。
例如:输入:61.82 和 12.65,输出为:c = 782.023000
d = 4.886957

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

#include
#include

/**********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;


第10题 (10.0分)
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

功能:写计算级数 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--)


第11题 (10.0分)
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

功能:编制统计营业员一天的营业额的程序,设程序采用一个循环
实现,每次循环输入一笔交易金额并累计营业额。由于营
业员一天完成的交易次数是不确定的,为此以最后附加输
入一笔0或负数交易额作为交易金额已全部输入结束的标志。
有以下统计营业员一天营业额的算法:
统计营业员一天营业额
{
营业额清0;
输入第一笔交易额;
while(交易额>0.0)
{
累计营业额;
输入下一笔交易额;
}
输出营业额;
}
记一笔交易额为变量sale,营业额为sigma。

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

#include
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;


第12题 (10.0分)
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

功能:根据整型形参 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
#include
/**********FOUND**********/
int fun ( int n )
{
float A=1; int i;
/**********FOUND**********/
for (i=2; i

"c" c3d4efg="c3d4efg" abcdefg="abcdefg" a2b3c4defg="a2b3c4defg" include="include" conio="conio">
#include
#include

/**********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++; }


第15题 (10.0分)
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

功能:以下程序能求出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);


第16题 (10.0分)
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

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

------------------------------------------------------*/
#include
/***********FOUND***********/
swap( int *p1,*p2)
{
int p;
p=*p1;
*p1=*p2;
*p2=p;
}

void main(void)
{
int a,b, *p,*q;
printf("input a,b:");
/***********FOUND***********/
scanf("%d%d",a,b);
p=&a;
q=&b;
if(a50);
/**********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++)


第18题 (10.0分)
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------


功能:将6个数按输入时顺序的逆序进行排列.

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

sort(char *p,int m)
{
int i;
char change,*p1,*p2;
for(i=0;i
#include

long fun ( int n )
{
long a=1, b=1, c=1, d=1, k;
/**********FOUND**********/
for (k=4; k
#include
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


第21题 (10.0分)
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

功能:将一个正整数分解质因数。
例如:输入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;


第22题 (10.0分)
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

功能:删除字符串s中的所有空白字符(包括Tab字符、回车符及
换行符)。输入字符串时用'#'结束输入。

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

#include
#include
#include

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';


第23题 (10.0分)
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

功能:有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;in-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
#include
#include

/**********FOUND**********/
double fun (double *a, *b)
{
double c;
/**********FOUND**********/
c = sqr(a*a + b*b);
/**********FOUND**********/
return *c;
}

main ( )
{
double a, b, y;
clrscr( );
printf ( "Enter a, b : ");
scanf ("%lf%lf", &a, &b );
y = fun (&a, &b);
printf ("y = %f \n", y );
}


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


第25题 (10.0分)
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

功能:利用条件运算符的嵌套来完成此题:学习成绩>=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');


第26题 (10.0分)
/*-------------------------------------------

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

功能:将八进制转数的字符串换为十进制数。如输入“127”,结果为87

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

#include "stdio.h"

void main(void)
{
/**********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') 或 while(*p) 或 while(*p!=0)


第27题 (10.0分)
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

功能:下题是一段有关结构体变量传递的程序.

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

#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';


第28题 (10.0分)
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

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

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

#include
#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;
}

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





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


第29题 (10.0分)
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

功能:编写一个函数,该函数可以统计一个长度为3的字符串在另
一个字符串中出现的次数。
例如:假定输入的字符串为:asdasasdfgasdaszx67asdmklo,字符
串为:asd,则应输出n=4。

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

#include
#include
#include
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
#include
#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);


第31题 (10.0分)
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

功能:输入一行字符,分别统计出其中英文字母、空格、数字和
其它字符的个数。

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

#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==' ')


第32题 (10.0分)
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

功能:利用递归方法求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;


第33题 (10.0分)
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

功能:求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);


第34题 (10.0分)
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

功能:求出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
#include
#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; imax2 )
2). t = a[0]; a[0]=a[m1]; a[m1] = t;
3). t = a[1]; a[1]=a[m2]; a[m2] = t;


第35题 (10.0分)
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

功能:用指针作函数参数,编程序求一维数组中的最大和最小的
元素值.

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

#define N 10

/***********FOUND***********/
void maxmin(int arr[ ],int *pt1, *pt2, n)
{
int i;
/***********FOUND***********/
*pt1=*pt2=&arr[0];
for(i=1;i

und="found" p1="&a;*p2=&b;" maxmin="maxmin" printf="%d,min=%d",a,b);" void="void" maxmin="maxmin" arr="arr" int="int" pt1="pt1" pt2="pt2" n="n" maxmin="maxmin" arr="arr" int="int" pt1="pt1" pt2="pt2" n="n" void="void" maxmin="maxmin" arr="arr" pt1="pt1" pt2="pt2" n="n" pt1="*pt2=arr[0];" pt1="*pt2=*(arr+0);" pt2="*pt1=arr[0];" if="if">*pt1) *pt1=arr[i]; 或 if(*(arr+i)>*pt1)) *pt1=arr[i]; 或 if(*pt1<*(arr+i))) *pt1=arr[i]; 或 if(*pt1

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)


第38题 (10.0分)
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

功能:删除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,2

6,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]);


第39题 (10.0分)
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

功能:将s所指字符串中的字母转换为按字母序列的后续字母(但
Z转换为A, z转换为a),其它字符不变。

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

#include
#include
#include
void fun (char *s)
{
/***********FOUND***********/
while(*s!="\\0")
{
if(*s>='A' && *s <= 'Z' || *s >= 'a' && *s<='z')
{
if(*s=='Z')
*s='A';
else if(*s=='z')
*s='a';
else
/***********FOUND***********/
s += 1;
}
/***********FOUND***********/
s++
}
}

void main()
{
char s[80];
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);
}
答案:
1). while(*s!='\0')
2). else *s += 1;
3). s++;


第40题 (10.0分)
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

功能:利用二维数组输出如图所示的图形。

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

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

#include
/**********FOUND**********/
#define N= 7
main()
{
char a[N][N];
int i,j,z;
clrscr();
for(i=0;i
double fun(int s[])
{
double 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;
}

void main(void)
{
int x[1000];int i=0;
do
{
scanf("%d",&x[i]);}
while(x[i++]!=0);
printf("%f\n",fun(x));
}

答案:
1). while( s[i] != 0 ) 或 while(!s[i]==0) 或 while(!0==s[i]) 或 while(s[i])
2). sum/=c; 或 sum=sum/c;
3). return sum; 或 return (sum);



第42题 (10.0分)
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

功能:写一个函数,求一个字符串的长度,在main函数中输入字
符串,并输出其长度。

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

#include "stdio.h"
#include

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)


第43题 (10.0分)
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

功能:分别统计字符串中大写字母和小写字母的个数。
例如:给字符串 s 输入:AAaaBBb123CCccccd,
则应输出结果:upper = 6, lower = 8。

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

#include
#include

/**********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 ;

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


第44题 (10.0分)
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

功能:首先把b所指字符串中的字符按逆序存放, 然后将a所指字
符串中的字符和b所指字符串中的字符,按排列的顺序交叉
合并到c所指数组中,过长的剩余字符接在c所指数组的尾部。
例如:当a所指字符串中的内容为“abcdefg”,b所指字符串中的
内容为“1234”时,c所指数组中的内容应该为“a4b3c2d1
efg”;而当a所指字符串中的内容为“1234”,b所指字符
串中的内容为“abcdefg”时,c所指数组中的内容应该为
“1g2f3e4dcba”。

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

#include
#include
#include

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
#include
#include

char * fun (char *s, char *t )
{
char *p , *r, *a;
/**********FOUND**********/
a == NULL;
while ( *s )
{
p = s;
r = t;
while ( *r )
/**********FOUND**********/
if ( r == p )
{
r++;
p++;
}
else
break;
/**********FOUND**********/
if ( *r ='\0' ) a = s;
s++;
}
return a ;
}

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

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


第47题 (10.0分)
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

功能:求出数组中最大数和次最大数,并把最大数和a[0]中的数
对调、次最大数和a[1]中的数对调。

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

#include
#include
#define N 20

int fun ( int * a, int n )
{
int i, m, t, k ;
for(i=0;i<2;i++)
{
/**********FOUND**********/
m=0;
/**********FOUND**********/
for(k=1;

ka[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; ia[m]) m=k;


第48题 (10.0分)
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

功能:从键盘输入十个学生的成绩,统计最高分,最低分和平均分。
max代表最高分,min代表最低分,avg代表平均分。

------------------------------------------------------*/
#include
void main( void)
{
int i;
float a[10],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(mina[i]) 或 if (a[i]=a[i]) 或 if (a[i]<=min)


第49题 (10.0分)
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

功能:将长整型数中每一位上为偶数的数依次取出,构成一个新
数放在t中。高位仍在高位,低位仍在低位。
例如:当s中的数为:87654时,t中的数为:864。

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

#include
#include

void fun (long s, long *t)
{
int d;
long sl=1;
*t = 0;
while ( s > 0)
{
d = s%10;
/**********FOUND**********/
if(d%2=0)
{
/**********FOUND**********/
*t=d* sl+ t;
sl *= 10;
}
/**********FOUND**********/
s\=10;
}
}

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

答案:
1). if( d%2 == 0 ) 或 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;


第50题 (10.0分)
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

功能:分别统计输入的字符串中各元音字母(即:A、E、I、O、U)
的个数。
注意:字母不分大、小写。
例如:若输入:THIs is a boot,则输出应该是:1、0、2、2、0。

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

#include

onio.h>
#include

fun ( char *s, int num[5] )
{
int k, i=5;
for ( k = 0; k= 0)


第51题 (10.0分)
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

功能:编写函数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
#include

int fun(int m)
{
/**********FOUND**********/
int i;k;
for(i=m+1;;i++)
{
for(k=2;k
#include
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(qp)
3). *q=*(q-1); 或 q[0]=q[-1];


第54题 (10.0分)
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

功能:编写函数fun求20以内所有5的倍数之积。

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

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

#define N 20
#include "stdio.h"
void main(void)
{
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
#include
#include

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

main()
{
char s[100], t1[100], t2[100], w[100];
clrscr();
printf("\nPlease enter string S:"); scanf("%s", s);
printf("\nPlease enter substring t1:"); scanf("%s", t1);
printf("\nPlease enter substring t2:"); scanf("%s", t2);
if ( strlen(t1)==strlen(t2) )
{
fun( s, t1, t2, w);
printf("\nThe result is : %s\n", w);
}
else
printf("\nError : strlen(t1) != strlen(t2)\n");
}
答案:
1). while (*w)
2). if(*r == *p)
3). if ( *r == '\0' ) a = w;


第56题 (10.0分)
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

功能:读入一个英文文本行,将其中每个单词的第一个字母改成
大写,然后输出此文本行 (这里的“单词”是指由空格
隔开的字符串)。
例如:若输入:“I am a student to take the examination.”,
则应输出:“I Am A Student To Take The Examination.”。

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

#include
#include
#include

/**********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 != ' ' )


第57题 (10.0分)
/*------------------------------------------------------
【程序改错】
----------------------------

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

功能:在字符串str中找出ASCII码值最大的字符,将其放在第一
个位置上,并将该字符的原字符向后顺序移动。
例如:调用fun函数之前给字符串输入:ABCDeFGH,调用后字符串
中的内容为:eABCDFGH。

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

#include
fun(char *p)
{
char max,*q;int i=0;
max=p[i];
while(p[i]!=0)
{
if(maxp) 或 while(q>=p)
3). *q=*(q-1);


第58题 (10.0分)
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

功能: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 ;


第59题 (10.0分)
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

功能:先将在字符串s中的字符按逆序存放到t串中,然后把s中的
字符按正序连接到t串的后面。
例如:当s中的字符串为:“ABCDE”时,则t中的字符串应为:
“EDCBAABCDE”。

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

#include
#include
#include

void fun (char *s, char *t)
{
/**********FOUND**********/
int i;
sl = strlen(s);
for (i=0; i=0;i--)
if(number<=a[i])
/**********FOUND**********/
a[i]=a[i-1];
else
{
a[i+1]=number;
/**********FOUND**********/
exit;
}
if(number=0;i--) 或 for(i=N-2;0<=i;i--)
3). a[ i + 1 ]=a[i];
4). break;


第61题 (10.0分)
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

功能:请输入星期几的第一个字母来判断一下是星期几,如果第一
个字母一样,则继续判断第二个字母。

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

#include
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;


第62题 (10.0分)
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

功能: 移动一维数组中的内容; 若数组中有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
#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];


第63题 (10.0分)
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

功能:先将在字符串s中的字符按正序存放到t串中,然后把s中的
字符按逆序连接到t串的后面。
例如:当s中的字符串为:“ABCDE”时,则t中的字符串应为:
“ABCDEEDCBA”。

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

#include
#include
#include

void fun(char *s,char *t)
{
int i,sl;
sl=strlen(s);
/**********FOUND**********/
for(i=0;iarray [i]) Min=array [i];
/**********FOUND**********/
sum=+array [i];
}
/**********FOUND**********/
ave=sum\n;
for(i=0;i
#include

/**********FOUND**********/
double fun (double *a, *b)
{
double c;
/**********FOUND**********/
c = sqr(a)+sqr(b) ;

return c;
}

void main (void)
{
double a, b, y;

printf ( "Enter a & b : "); scanf ("%lf%lf", &a, &b );
/**********FOUND***

相关文档