Advertisement

C期末题库7

阅读量:

1

复制代码
    /*------------------------------------------------------        
    【程序改错】:只允许修改错误代码,其他代码不允许修改!
    --------------------------------------------------------
    
    功能:实现3行3列矩阵的转置,即行列互换。
    
    ------------------------------------------------------*/
    #include "stdio.h"
    void fun(int a[3][3],int n)
    { 
      int i,j,t;
      for(i=0;i<n;i++)
    for(j=0;j<n;j++)
      /**********ERROR**********/
      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++)
    /**********ERROR**********/
    for(j=0;j<n;j++)
    {
      /**********ERROR**********/
      a[i][j]=t;
      a[i][j]=a[j][i];
      /**********ERROR**********/
      t=a[j][i];
    }
      for(i=0;i<n;i++)
      {
    for(j=0;j<n;j++)
    printf("%4d",a[i][j]);
       printf("\n");
      }
    }
    void 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;j<i;j++)

==============================
【改错3】 正确
【学生答案】
t=a[i][j];
【参考答案】
t=a[i][j];

==============================
【改错4】 正确
【学生答案】
a[j][i]=t;
【参考答案】
a[j][i]=t;

2

复制代码
    /*------------------------------------------------------        
    【程序改错】
    --------------------------------------------------------
    
    题目:函数fun的功能是:计算正整数num的各位上的数字之积。
      例如,输入252,则输出应该是20。
      请改正程序中的错误,使它能得出正确的结果。
    
    --------------------------------------------------------
    注意:不可以增加或删除程序行,也不可以更改程序的结构。
    ------------------------------------------------------*/
    
    
    long fun (long num)
    {
    /**********ERROR**********/
     long k;
      do
      {
       k*=num%10;
    /**********ERROR**********/
       num\=10;
       }while (num);
       return k;
    }
    main()
    {
      long n;
      printf("\nPlease enter a number:");
    /**********ERROR**********/
      scanf("%ld", n);
    /**********ERROR**********/
      printf("\n%ld\n",fun(long n));
    }
    
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解释

答案
【改错1】 错误
【学生答案】
long k;
【参考答案】
long k=1;

==============================
【改错2】 正确
【学生答案】
num/=10;
【参考答案】
num/=10;

==============================
【改错3】 正确
【学生答案】
scanf("%ld", &n);
【参考答案】
scanf("%ld",&n);

==============================
【改错4】 错误
【学生答案】
printf("\n%ld\n",fun(long num);
【参考答案】
printf("\n%ld\n",fun(n));

3

复制代码
    /*------------------------------------------------
    【程序设计】
    --------------------------------------------------
    
    功能:用函数求fibonacci数列前28项的和。
    说明:fibonacci数列为数列的第一项值为1,第二项值也
      为1,从第三项开始,每一项均为其前面相邻两项
      的和。
    例如:当n=28时,运行结果:832039
    *********Begin**********和**********  End  **********不可删除
    
    ------------------------------------------------*/
    
    #include <stdio.h>
    void  TestFunc(); 
    
    long sum(long f1,long f2)
    {
      /*********Begin**********/
      
      
      
      
      
      
      /**********  End  **********/
    }
    
    main()
    {
      long int f1=1,f2=1;
      printf("sum=%ld\n",sum(f1,f2));
      TestFunc();
    }
    
    void TestFunc()
    {
      FILE *IN,*OUT;
      int n;
      int i[2];
      long int o;
      IN=fopen("in.dat","r");
      if(IN==NULL)
      {
    printf("Read FILE Error");
      }
      OUT=fopen("out.dat","w");
      if(OUT==NULL)
      {
    printf("Write FILE Error");
      }
      
      for(n=0;n<2;n++)
    fscanf(IN,"%d",&i[n]);
      o = sum(i[0],i[1]);
      fprintf(OUT,"%ld\n",o);
      
      fclose(IN);
      fclose(OUT);
    }
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解释

答案
【参考代码】

long f,k=f1+f2;
int i;
for(i=3;i<=28;i++)
{f=f1+f2;
k=k+f;
f1=f2;
f2=f;
}
return(k);

===============
【考生代码】
int s=0,i,a[28];
a[0]=a[1]=f1;
for(i=2;i<28;i++)
a[i]=a[i-1]+a[i-2];
for(i=0;i<28;i++)
s+=a[i];
return s;

4

复制代码
    /*------------------------------------------------
    【程序设计】
    --------------------------------------------------
    
    功能:计算出k以内最大的10个能被13或17整除的自然数之
      和。(k<3000)。
    
    *********Begin**********和**********  End  **********不可删除
    
    
    
    ------------------------------------------------*/
    
    #include "stdio.h"
    #include "conio.h"
      
    int fun(int k)
    {
      /*********Begin**********/
      
      
      
      
      
      
      /**********  End  **********/
      
    }
    
    main()   
    {
      int  m;
      void TestFunc();
      printf("Enter m: ");
      scanf("%d", &m);
      printf("\nThe result is %d\n", fun(m));
      TestFunc();
      
    }   
    
    void TestFunc()
    {
      FILE *IN,*OUT;
      int s ;
      int t;
      int o;
      
      IN=fopen("in.dat","r");
      if(IN==NULL)
      {
    printf("Read File Error");
      }
      OUT=fopen("out.dat","w");
      if(OUT==NULL)
      {
    printf("Write File Error");
      } 
      for(s=1;s<=5;s++)
      { 
    fscanf(IN,"%d",&t);
    o=fun(t);
    fprintf(OUT,"%d\n",o);
      }
      fclose(IN);
      fclose(OUT);
    }
    
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解释

答案
【参考代码】

int a=0,b=0;
while((k>=2)&&(b<10))
{if((k%13= =0)||(k%17==0))
{a=a+k;b++;}
k–;
}
return a;

===============
【考生代码】
int i,s=0,a=1;
for(i=k;i>=0;i–)
{if((i%13= =0 )||(i%17= =0))
s+=i,a++;
if(a==10)break;}
return s;

全部评论 (0)

还没有任何评论哟~