Advertisement

C期末题库9

阅读量:

1

复制代码
    /*------------------------------------------------
    【程序设计】
    --------------------------------------------------
    
    题目: 给定n个数据, 求最大值出现的位置
      (如果最大值出现多次,求出第一次出
      现的位置即可)。
    
    --------------------------------------------------
    注意:部分源程序给出如下。请勿改动主函数
      main和其它函数中的任何内容,仅在函数
      station的花括号中填入所编写的若干语句。
    *********Begin**********和**********  End  **********不可删除
    
    ------------------------------------------------*/
    #include<stdio.h>
    int station(int s[],int n)
    {
    /*********Begin**********/
    
    
    
    
    
    
    /**********  End  **********/
    }
    
    main()
    {
     int a[100],n,i,t;
     
     scanf("%d",&n);
     for(i=0;i<n;i++)
       scanf("%d",&a[i]);
     t=station(a,n);
     printf("the max_value position is:%d\n",t);
     TestFunc();
     
     }
    TestFunc()
    {
    FILE *IN,*OUT;
    int n;
    int i[10];
    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<10;n++)
    {    
    fscanf(IN,"%d",&i[n]);
    }
    o=station(i,10);
    fprintf(OUT,"%d\n",o);
    fclose(IN);
    fclose(OUT);
    }
    
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解释

答案
【参考代码】

int i,k;
k=0;
for(i=1;i<n;i++)
if(s[i]>s[k]) k=i;
return(k);

===============
【考生代码】
int i,m=s[0],p=1;
for(i=0;i<n;i++)
if(s[i]>m)
p=++i;
return p;
2

复制代码
    /*------------------------------------------------
    【程序设计】
    --------------------------------------------------
    功能:求n阶方阵主、副对角线上的元素之积。程序中如果
      用到循环,必须使用for循环。
    *********Begin**********和**********  End  **********不可删除
    
    ------------------------------------------------*/
    
    #define N 4
    #include "stdlib.h"
    #include "stdio.h"
    void TestFunc();
    
    float mul(int arr[][N])
    {
      /**********Begin**********/
      
      
      
      
      
      
      /**********  End  **********/
    }
    
    void main()
    {
      int a[N][N],i,j;
      for(i=0;i<N;i++)
    for(j=0;j<N;j++)
      a[i][j]=rand()%10;
    for(i=0;i<N;i++)
    {
      for(j=0;j<N;j++)
        printf("%4d",a[i][j]);
      printf("\n");
    }
    printf("The sum is %d\n",mul(a));
    TestFunc();
    }
    
    void TestFunc()
    {
      FILE *IN,*OUT;
      int m,n;
      int i[4][4];
      float 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(m=0;m<100;m++)
    for(n=0;n<100;n++)
    {    
      fscanf(IN,"%d",&i[m][n]);
    }
    o=mul(i);
    fprintf(OUT,"%f\n",o);
    fclose(IN);
    fclose(OUT);
    }
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解释

答案
【参考代码】

int i,j;
float t=1;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
if(i= =j||i+j==N-1)
t=t*arr[i][j];
return(t);
3

复制代码
    /*    给定程序中函数fun的功能是:
      统计一个无符号整数中各位数字值为零的个数,通过形参传回主函数;
      并把该整数中各位上最大的数字值作为函数值返回。
      例如,若输入无符号整数30800,则数字值为零的个数为3,各位上数字值最大的是8。
      请改正函数fun中指定部位的错误,使它能得出正确的结果。
      注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!    */
    
    #include <stdio.h>
    int fun(unsigned n, int *zero)
    {int count=0,max=0,t;
       do
       {t=n%10;
    
    /**********ERROR**********/
      if(t=0)
      count++;
      if(max<t) max=t;
      n=n/10;
       }while(n);
    
    /**********ERROR**********/
       zero=count;
       return max;
    }
    main()
    {unsigned n; int zero,max;
       printf("\nInput n(unsigned): "); scanf("%d",&n);
       max = fun(n,&zero);
       printf("\nThe result: max=%d zero=%d\n",max, zero);
    }
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解释

答案
【改错1】 正确
【学生答案】
if(t= =0)
【参考答案】
if(t==0)

==============================
【改错2】 错误
【学生答案】
zero=++count;
【参考答案】
*zero=count;
4

复制代码
    /*------------------------------------------------------        
    【程序改错】
    --------------------------------------------------------
    
    题目:fun函数的功能是:先从键盘上输入一个3行3列矩阵的各
      个元素的值,然后输出主对角线上的元素之和sum。
      请改正程序中的错误,使它能得出正确的结果。
    
    --------------------------------------------------------
    注意:不可以增加或删除程序行,也不可以更改程序的结构。
    ------------------------------------------------------*/
    
    
    #include "stdio.h"
    int fun()
    {
      int a[3][3],sum;
      int i,j;
    /**********ERROR**********/
      a=0;
      for(i=0;i<3;i++)
    for(j=0;j<3;j++)
    /**********ERROR**********/
      scanf("%d",a[i][j]);
      for(i=0;i<3;i++)
    /**********ERROR**********/
    sum=sum+a[i][j];
    /**********ERROR**********/
      printf("sum=%f\n",sum);
    }
    main()
    {
     fun();
    }
    
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解释

答案
【改错1】 正确
【学生答案】
sum=0;
【参考答案】
sum=0;

==============================
【改错2】 正确
【学生答案】
scanf("%d",&a[i][j]);
【参考答案】
scanf("%d",&a[i][j]);

==============================
【改错3】 错误
【学生答案】
sum=sum+a[i][j];
【参考答案】
sum=sum+a[i][i];
sum+=a[i][i];

==============================
【改错4】 正确
【学生答案】
printf(“sum=%d\n”,sum);
【参考答案】
printf(“sum=%d\n”,sum);

全部评论 (0)

还没有任何评论哟~