2015年3月全国计算机二级C上机操作真题第1套

108

 

一、基本操作
 函数fun的功能是:在有n个元素的结构体数组std中,查找有不及格科目的学生,找到后输出学生的学号;函数的返回值是有不及格科目的学生人数。例如,主函数中给出了4名学生的数据,则程序运行的结果为:
        学号:N1002  学号:N1006
        共有2位学生有不及格科目
    请在程序的下划线处填入正确的内容,并把下划线删除,使程序得出正确的
结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!
 
 #include  <stdio.h>
typedef struct
{ char num[8]; 
  double score[2];
/**********found**********/
} __(1)__ ;
int  fun(STU  std[ ], int  n)
{  int  i, k=0;
   for(i=0; i<n; i++)
/**********found**********/
     if( std[i].score[0]<60__(2)__std[i].score[1]<60 )
     { k++;     printf("学号:%s ",std[i].num);   }
/**********found**********/
   return __(3)__ ;
}
main()
{  STU  std[4]={ "N1001", 76.5,82.0 ,"N1002", 53.5,73.0,
                "N1005", 80.5,66.0,"N1006", 81.0,56.0 };
  printf( "\n共有%d位学生有不及格科目\n" , fun(std,4) );
}


 
   二、简单应用
给定程序MODI1.C中,函数fun 的功能是判断整数n是否是“完数”。当一个数的因子之和恰好等于这个数本身时,就称这个数为“完数”。例如:6的因子包括1、2、3,而6=1+2+3,所以6是完数。如果是完数,函数返回值为1,否则函数返回值为0。数组a中存放的是找到的因子,变量k中存放的是因子的个数。
    请改正函数fun中指定部位的错误,使它能得出正确的结果。
    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
 
 #include <stdio.h>
int  fun(int  n, int  a[], int  *k)
{   int  m=0, i, t;
    t = n;
/**********found**********/
    for( i=0; i<n; i++ )
       if(n%i==0)
       {  a[m]=i;  m++;  t=t - i;  }
/**********found**********/
    k=m;
/**********found**********/
    if ( t=0 )  return  1;
    else  return  0;
}
main()
{  int  n , a[10], flag, i, k;
   printf("请输入一个整数:    ");  scanf("%d",&n);
   flag = fun( n, a, &k );
   if(flag)
   {  printf(" %d 是完数,其因子是:  ", n);
      for(i=0;i<k;i++)   printf("  %d ", a[i]);
      printf("\n");
   }
   else    printf(" %d 不是完数.\n ", n );
}


 
   三、综合应用
 请编写函数fun :在形参指针所指的4个整数中找出最大值和最小值,最大的放在a中,最小的放在d中。
    注意:部分源程序存在PROG1.C中,请勿改动主函数main和其他函数中的任何
内容,仅在函数fun的花括号中填入所编写的若干语句。

 

#include   <stdio.h>
void NONO();
void  fun(int  *a, int  *b, int  *c, int  *d)
{

 

}
main()
{  int  a, b, c, d;
   printf("请输入4个整数:    ");  scanf("%d%d%d%d", &a,&b,&c,&d);
   printf("原始顺序:    %d,%d,%d,%d\n", a, b, c, d);
   fun(&a,&b,&c,&d);
   printf("处理后:      %d,%d,%d,%d\n", a, b, c, d);
   NONO();
}

void NONO()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
  FILE *fp, *wf ;
  int i, a, b, c, d ;

  fp = fopen("in.dat","r") ;
  wf = fopen("out.dat","w") ;
  for( i=0; i<5; i++ )
  {
     fscanf(fp, "%d %d %d %d", &a, &b, &c, &d);
     fun(&a,&b,&c,&d);
     fprintf(wf, "a=%d,d=%d\n", a, d);
  }
  fclose(fp) ;
  fclose(wf) ;
}

一、基本操作答案

 

【参考答案】

 

(1)    STU

(2)    ||

(3)    k

 

【考点分析】

 

主要考察对结构体的定义和使用,以及逻辑运算符的使用

 

【解题思路】

 

填空1  STU 结构体别名,通过main()中的语句可知

 

填空2  || 只要学生二门课成绩有不及格的,就算不及格,因此使用或运算

 

填空3  k 返回的是不及格的学生个数,有题意可知k是累计个数的。

 

 二、简单应用答案

 

【参考答案】

 

(1)for( i=0; i<n; i++ )改为for( i=1; i<n; i++ )

(2)k=m改为*k=m

(3)if ( t=0 )改为if ( t==0 )

 

【考点分析】

 

主要考察C语言约定数组的下标是从0开始的,理解指针的指向和指针的区别,以及逻辑运算符的使用

 

【解题思路】

 

(1)for( i=0; i<n; i++ )改为for( i=1; i<n; i++ );一个数的因子从1开始,不能从0开始

(2)k=m改为*k=m;k为指针不能直接赋值整数,*k为指针指向的内容

(3)if ( t=0 )改为if ( t==0 );括号内应为判断语句而不是赋值语句。

 

 

 

三、综合应用答案

【参考答案】

 

int max,min;//临时存放最大值、最小值

 

         max=min=*a;//初始化为*a

         if(max<*b)//*b比较,如果max*b,修改max,如果min*b大,修改min,下同

                   max=*b;

         if(min>*b)

                   min=*b;

         if(max<*c)

                   max=*c;

         if(min>*c)

                   min=*c;

         if(max<*d)

                   max=*d;

         if(min>*d)

                   min=*d;

         *d=min;

         *a=max;

 

【考点分析】

 

主要考察考生对临时变量的初始化及使用,以及如何比较多个数的大小

 

【解题思路】

 

通过初始化指定最大值,最小值,再使用当前的最值与剩下的值比较,若比最大值大,修改最大值;若比最小值小,修改最小值。