c语言程序改错

 一、程序改错   共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);

 

 

 

  • 13
    点赞
  • 87
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值