详细内容

C语言程序改错题

[日期:2011-11-27] 来源:计算机系  作者:张永超 [字体: ]

1题目:在一个一维整型数组中找出其中最大的数及其下标。

      程序中共有4条错误语句,请改正错误。

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

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

 scanf("%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]);

        4 max=fun(a,&p,N);

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

2题目:为一维数组输入10个整数;将其中最小的数与第一个数对换,将最大的数与最后一个数对换;输出数组元素。

      程序中共有4条错误语句,请改正错误。

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

main()

{

 int a[10];

 void input();

 void output();

 void max_min();

 input(a,10);

 max_min(a,10);

 output(a,10);

}

void input(int *arr,int n)

{ int *p,i;

  p=arr;

  printf("please enter 10 integers:\n");

  for(i=0;i<n;i++)

/**********FOUND**********/

  sca("%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++)

    if(*p>*max)

/**********FOUND**********/

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

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

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

3题目:用起泡法对n个整数从小到大排序。

      程序中共有4条错误语句,请改正错误。

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

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

 sort(a,n);

 printf("output the sorted array:\n");

 for(i=0;i<=n-1;i++)

  printf("%5d",a[i]);

 printf("\n");

}

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

『答案』:

   1 void sort(int x[],int n)

  2 for(j=0;j<n-1-i;j++) 或 for(j=0;n-1-i>j;j++) 或 for(j=0;j<n-(1+i);j++) 或 for(j=0;n-(1+i)>j;j++)

        3 if(x[j]>x[j+1]) 或 if(x[j+1]<x[j])

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

4题目:在一个已按升序排列的数组中插入一个数,插入后,数组元素仍按升序排列。

      程序中共有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("%f",&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;}

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

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

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

#include<stdio.h>

void strcopy(char *str1,char *str2,int m)

/**********FOUND**********/

{char p1,p2;

 int i,j;

/**********FOUND**********/

 p1=str1+m;

 p2=str2;

/**********FOUND**********/

  if(*p1);

  *p2++=*p1++;

  *p2='\0';

}

main()

{

 int i,m;

 char *p1,*p2,str1[80],str2[80];

 p1=str1;

 p2=str2;

 gets(p1);

 scanf("%d",&m);

/**********FOUND**********/

 strcat(str1[0],str2[0],m);

 puts(p1);puts(p2);

}

『答案』:

        1 { char *p1,*p2; 或 { char *p2,*p1;

        2 p1=str1+m-1; 或 p1=-1+str1+m;

        3 while(*p1)

        4 strcopy(str1,str2,m);       

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

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

        S = 1 + 1/(1+2)+1/(1+2+3)+

1/(1+2+3+4)…

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

 

#include <stdio.h>

main()

{

 int n;

 float fun();

 printf("Please input a number:");

/**********FOUND**********/

 printf("%d",n) ;                             

 printf("%10.6f\n",fun(n));

}

/**********FOUND**********/

fun(int n)                                 

{

 int i,j,t;

 float s;

 s=0;

/**********FOUND**********/

 for(i=1;i<=n;i++);                           

 {

  t=0;

  for(j=1;j<=i;j++)

  t=t+j;

/**********FOUND**********/

  s=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

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

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

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

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

      Is A C Program."。

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

#include <string.h>

#include <stdio.h>

#include <conio.h>

/**********FOUND**********/

fun(char p)

{

 int k=0;

/**********FOUND**********/

 while(*p=='\0')

  {

  if(k==0&&*p!=' ')

    {

    *p=toupper(*p);

/**********FOUND**********/

      k=0;}

  else if(*p!=' ') k=1;

          else k=0;

/**********FOUND**********/

  *p+;

  }

}

main()

{

 char str[81];

 clrscr();

 printf("please input a English text line:");

 gets(str);

 printf("The original text line is :");

 puts(str);

 fun(str);

 printf("The new text line is :");

 puts(str);

}

『答案』:

        1 fun(char *p) 或 fun(char p[])

        2 while(*p!='\0') 或 while(*p)

        3 k=1;}

        4 p++; 或 p=1+p; 或 ++p; 或 p=p+1;

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

9题目:将一个字符串中的大写字母转换成小写字母。例如:输入aSdFG输出为asdfg。

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

#include<stdio.h>

/**********FOUND**********/

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

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

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

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

  printf("%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++)

        4printf("%4d %-10s %4d\n",

(*p).num ,p->name,(*p).age);       

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

11题目:下列给定程序中,函数fun的功能是:判断m是否为素数,若是返回1,否则返回0。主函数的功能是:按每行5个输出1-100之间的全部素数。 请改正程序中的4个错误,使它能得出正确的结果。

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

main()

{

 int m,k=0;

 for(m=1;m<100;m++)

  if(fun(m)==1)

    {

    printf("%4d",m);k++;

    if(k%5==0)printf("\n");

    }

 }

/**********FOUND**********/

void  fun( int m)

{

  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;       

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

12题目:函数fun的功能是:用下面的和式求圆周率的近似值。直到最后一项的绝对值小于等于0.0001。

      π      1    1    1

      — = 1 - — + — - — + ...

      2        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"

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

       

13题目:下列给定程序中,函数fun的功能是:求1到10的阶乘的和。主函数和fun函数中,各有两个错误,请改正,使其能得到正确的运行结果。

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

        3 float y=1.0; 或 float y=1;

        4 return y; 或 return(y); 或 return (y);

       

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

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

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

fun()

{

  int n,j;

  float s=0.0,t;

  for(n=1;n<=20;n++)

  {       

/**********FOUND**********/

        s=1;

  for(j=1;j<=n;j++)

/**********FOUND**********/

    t=t*n;

/**********FOUND**********/

    s+t=s;

    }

/**********FOUND**********/

 printf("jiecheng=%d\n",s);

}

main()

{

 fun();}

 

『答案』:

        1 t=1; 或 t=1.0;

        2 t=t*j; 或 t*=j;

        3 s=s+t; 或 s+=t;

        4 printf("jiecheng=%f\n",s);

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

15题目:函数fun的功能是:求1到20的阶乘的和。

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

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

fun()

{

  int n,j;

  float s=0.0,t;

  for(n=1;n<=20;n++)

  {       

/**********FOUND**********/

        s=1;

  for(j=1;j<=n;j++)

/**********FOUND**********/

    t=t*n;

/**********FOUND**********/

    s+t=s;

    }

/**********FOUND**********/

 printf("jiecheng=%d\n",s);

}

main()

{

 fun();

}

 

『答案』:

        1 t=1; 或 t=1.0;

        2 t=t*j; 或 t*=j;

        3 s=s+t; 或 s+=t;

        4 printf("jiecheng=%f\n",s);

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

16题目:函数fun的功能是:根据整型形参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;

        3 return y; 或 return (y); 或 return(y);

17题目:函数fun的功能是:实现交换两个整数的值。例如给a和b分别输入3和6 ,输出为a=6 b=3      请改正程序中的4个错误,使它能得出正确的结果。

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

/**********FOUND**********/

void fun (int a, b)

{

 int t;

/**********FOUND**********/

 t=a;

/**********FOUND**********/

 a=b;

/**********FOUND**********/

 b=t;

}

main()

{

 int a,b;

 printf("enter a,b:");scanf("%d%d",&a,&b);

 fun(&a,&b);

 printf("a=%d b=%d\n",a,b);

}

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

『答案』:

        1 void fun (int *a,int *b) 或 fun (int *a,int *b)

        2 t=*a;

        3 *a=*b;

        4 *b=t;

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

18题目:函数fun的功能是:计算并输出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)&&(10<mc)) 或 while ((2<=k)&&(10<mc)) 或 while ((k>=2)&&(mc<10)) 或 while ((2<=k)&&(mc<=9)) 或 while ((k>=2)&&(9<=mc)) 或 while ((2<=k)&&(9<=mc)) 或 while ((k>=2)&&(mc<=9))

        2 if ((k%17==0)||(k%13==0)) 或 if !((k%17!=0)&&(k%13!=0))

        3 k--;

        4 return  m; 或 return(m);

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

19题目:函数fun的功能是:计算正整数num的各位上的数字之积。例如,输入252,则输出应该是20。请改正程序中的错误,使它能得出正确的结果。

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

long fun (long num)

{

/**********FOUND**********/

 long k;

  do

  {

  k*=num%10;

/**********FOUND**********/

  num\=10;

  }while (num);

  return k;

}

main()

{

  long n;

  printf("\nPlease enter a number:");

/**********FOUND**********/

  scanf("%ld", n);

/**********FOUND**********/

  printf("\n%ld\n",fun(long n));

}

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

『答案』:

        1 long k=1;

        2 num/=10; 或 num=num/10;

        3 scanf("%ld",&n);

        4 printf("\n%ld\n",fun(n));

       

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

20题目:已知一个数列从第0项开始的前三项分别为0、0、1,以后的各项都是其相邻的前三项的和。下列给定程序中,函数fun的功能是:计算并输出该数列的前n项的平方根之和sum,n的值通过形参传入。

      例如,当n=10时,程序的输出结果应为23.177745。请更改程序中的错误,使它能得出正确的结果。

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

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

        3 s2=1.0;

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

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

21题目:函数fun的功能是:根据以下公式求π值,并作为函数值返回。例如,给指定精度的变量eps输入0.0005时,应当输出Pi=3.140578。

 

π/2=1+1/3+(1/3)*(2/5)+ (1/3)*(2/5)*(3/7)+ (1/3)*(2/5)* (3/7)*(4/9)+…

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

double fun(double eps)

{

 double s,t;

 int n=1;

 s=0.0;

/**********FOUND**********/

 t=0;

/**********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 t=1; 或 t=1.0;

        2 while (t>eps) 或 while (eps<t) 或 while (t>=eps) 或 while (eps<=t)

        3 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

        4 return 2*s; 或 return (2*s); 或 return(2*s); 或 return (s*2); 或 return(s*2);

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

22题目:函数fun的功能是:求出两个非零正整数的最大公约数,并作为函数值返回。例如,若给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);

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

23题目:在主函数中从键盘输入若干个数放入数组中,用0结束输入并放在最后一个元素中。下列给定程序中,函数fun的功能是:计算数组元素中值为正数的平均值(不包括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;

        2 while(s[i]!=0) 或 while!(s[i]==0) 或 while!(0==s[i])

        3 sum/=c; 或 sum=sum/c;

        4 return sum; 或 return (sum);

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

24题目:fun函数的功能是:先从键盘上输入一个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);

       

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

25题目:fun函数的功能是:给定n个实数,输出平均值,并统计在平均值以下(含平均值)的实数个数。例如,n=6时,输入23.5, 45.67, 12.1, 6.4,58.9, 98.4所得平均值为40.828335,在平均值以下的实数个数应为3。

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

-------------------------------------int fun(float x[],int n)

 {

  int j,c=0;

/**********FOUND**********/

  float j=0;

/**********FOUND**********/

  for(j=0;j<=n;j++)

    xa+=x[j];

    xa=xa/n;

    printf("ave=%f\n",xa);

/**********FOUND**********/

 for(j=0;j<=n;j++)

    if(x[j]<=xa)  c++;

/**********FOUND**********/

 return xa;

}

main()

{

 float x[]={23.5,45.67,12.1,6.4,58.9,98.4};

 printf("%d\n",fun(x,6));

}

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

『答案』:

        1 float xa=0; 或 float xa=0.0;

        2 for(j=0;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);

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

26.fun函数的功能是:找出大于m的最小素数,并将其作为函数值返回。

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

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

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

        2 if(i%k==0) break;

        3 if(i<=k) 或 if(k>=i) 或 if(k==i)

        4 return i; 或 return (i);

       

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

27题目:fun函数的功能是:实现3行3列矩阵的转置,即行列互换。      请改正程序中的错误,使它能得出正确的结果。

fun(int a[3][3],int m,int n)

{

  int i,j,t;

  for(i=0;i<m;i++)

    for(j=0;j<n;j++)

/**********FOUND**********/

    scanf("%d",a[i][j]);

  for(i=0;i<m;i++)

  {

    for(j=0;j<n;j++)

      printf("%4d",a[i][j]);

    printf("\n");

  }

  for(i=0;i<m;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<m;i++)

      {

      for(j=0;j<n;j++)

        printf("%4d",a[i][j]);

      printf("\n");

      }

}

 main()

{

  int b[3][3];

  fun(b,3,3);

}

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

『答案』:

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

        3 t=a[i][j];

        4 a[j][i]=t;

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

28题目:fun函数的功能是:求一个3行4列矩阵的外框的元素值之和,注意,矩阵四个角上的元素不能重复加。例如,矩阵元素为1,2,3,4,5,6,7,8,9,10,11,12时,四框元素值之和应为65。

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

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

int fun(int a[3][4],int m,int n)

{

/**********FOUND**********/

 int i,j,s,s1=s2=s3=s4=0;

 for(j=0;j<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];

        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;

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

29题目:fun函数的功能是:实现两个字符串的连接。例如:输入dfdfqe和12345时,则输出dfdfqe12345.

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

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

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]=='\0')i++;

        2 while(s2[j]!='\0') 或 while!(s2[j]=='\0')

        3 s1[i]=s2[j];

        4 s1[i]='\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;

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

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 t[],char s[])

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

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

32题目:下面程序的功能是:从键盘输入十个学生的成绩,统计最高分,最低分和平均分。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]);

        3 max=min=avg=a[0];

        4 if (min>a[i])

33题目:以下程序输出前六行杨辉三角形,既

            1

          1    1

      1    2    1

    1    3    3    1

 1     4    6    4    1

        …………

        …………

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

main( )

{

    static int a[6][6];

    int i,j,k;

/***********FOUND***********/

    for(i=1;i<=6;i++) 

    {

/***********FOUND***********/

        for(k=0;k<5+i;k++) 

              printf(" ");

              for(j=0;j<=i;j++)

              {

/***********FOUND***********/

              if(j==0&&j==i) 

                a[i][j]=1;

              else

/***********FOUND***********/

                a[i][j]=a[i-1][j-1]+a[i][j-1];

              printf(" ");

              printf("%-3d",a[i][j]);

              }

              printf("\n");   

        }

}

『答案』:

        1 for(i=0;i<6;i++) 或 for(i=0;i<=5;i++)

        2 for(k=0;k<5-i;k++)

        3 if(j==0||j==i)

        4 a[i][j]=a[i-1][j-1]+a[i-1][j];       

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

34题目:有一数组内放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=2;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];

       

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

float average(float array[10])

{

    int i;

    float aver,sum=array[0];

/***********FOUND***********/

    for(i=0;i<10;i++)

        sum=sum+array[i];

    aver=sum/10.0;

    return(aver);

}

main( )

/***********FOUND***********/   

    int score[10],aver ;

    int i;

    printf("input 10 scores:\n");

for(i=0;i<10;i++)

/***********FOUND***********/

    scanf("%f", score);

printf("\n");

/***********FOUND***********/

aver=average(score[10]);

printf("average score is %5.2f",aver);

}

『答案』:

        1 for(i=1;i<10;i++) 或 for(i=1;i<=9;i++)

        2 float score[10],aver;

        3 scanf("%f", &score[i]);

        4 aver=average(score);

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

36题目:一个已排好序的一维数组,输入一个数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];

/***********FOUND***********/

if(number>end)  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 if(number>end)  a[10]=number;

        4 if(a[i]>number)

       

37题目:用"起泡法"对输入的十个字符排序后按从小到大的次序输出.

#define  N  10

main( )

{int  i;

char  str[N];

/***********FOUND***********/

scanf("%s",&str);

/***********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)||(str[i]!='\0');i++)

/***********FOUND***********/

    if(str[i]<str[i+1])

    {t=str[i];str[i]=str[i+1];str[i+1]=t;}

}

『答案』:

        1 scanf("%s", str);

        2 sort(str);

        3 for(i=0;(i<N-j)&&(str[i]!='\0');i++)

        4 if(str[i]>str[i+1])

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

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

/***********FOUND***********/

swap( int *p1,*p2)

{int p;

 p=*p1;

*p1=*p2;

*p2=p;

}

main( )

{int a,b, *p1,*p2;

printf("input a,b:");

/***********FOUND***********/

scanf("%d%d",a,b);

/***********FOUND***********/

*p1=&a;*p2=&b;

if(a<b) swap(p1,p2);

printf("a=%d,b=%d\n",a,b);

/***********FOUND***********/

printf("max=%d,min=%d\n",p1,p2);

}

『答案』:

        1 swap( int *p1,int *p2)

        2 scanf("%d%d",&a,&b);

        3 p1=&a;p2=&b;

        4 printf("max=%d,min=%d\n",*p1,*p2);

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

39题目:将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);

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

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

        2 *pt1=*pt2=arr[0];

        3 {if(arr[i]>*pt1)

        4 p1=&a;p2=&b;

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

Copyright © 信息与控制工程学院 . All Rights Reserved.
地址:吉林省吉林市承德街45号 邮 编:132022 | 吉ICP备05009250号
 
Powered by iwms 5.1
Processed in 0.015 second(s), 3 queries, Gzip enabled