江苏省高校计算机等级考试命题研究院 江苏省高校计算机等级考试辅导
2015年3月全国计算机二级C第2套操作题真题

一、基本操作

 函数fun的功能是:根据所给的年、月、日,计算出该日是这一年的第几天,并作为函数值返回。其中函数 isleap用来判别某一年是否为闰年。

    例如,若输入:2008  5  1,则程序输出:2008年5月1日是该年的第122天。

    请在程序的下划线处填入正确的内容,并把下划线删除,使程序得出正确的结果。

    注意:源程序存放在考生文件夹下的BLANK1.C中。

不得增行或删行,也不得更改程序的结构!

#include  <stdio.h>

int  isleap(int  year)

{ int  leap;

  leap= (year%4==0 && year%100!=0 || year%400==0);

/**********found**********/

  return  __(1)__;

}

int fun(int  year, int  month, int  day)

{  int  table[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};

   int  days=0 , i;

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

      days=days + table[i];

/**********found**********/

   days=days+__(2)__ ;

   if( isleap(year) && month>2 )

 /**********found**********/

     days=days+__(3)__;

   return  days;

}

main()

{  int  year, month, day, days ;

   printf("请输入年、月、日");

   scanf("%d%d%d",&year, &month, &day);

   days = fun(year, month, day);

   printf("%d%d%d日是该年的第%d\n",year, month, day, days);

}

   二、简单应用

给定程序MODI1.C函数fun的功能是在有n名学生2门课成绩的结构体数组std中,计算出第1门课程的平均分,作为函数值返回。例如,主函数中给出了4名学生的数据,则程序运行的结果为:第1门课程的平均分是:76.125000

    请改正函数fun中指定部位的错误,使它能得出正确的结果。

 

    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

#include  <stdio.h>

typedef  struct

{  char  num[8];

  double  score[2];

}STU ;

double fun(STU  std[], int  n)

{  int   i;

/**********found**********/

   double  sum ;

/**********found**********/

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

/**********found**********/

      sum += std[i].score[1];

   return  sum/n;

}

main()

{  STU  std[ ]={ "N1001", 76.5,82.0 ,"N1002", 66.5,73.0,

              "N1005", 80.5,66.0,"N1006", 81.0,56.0 };

   printf("第1门课程的平均分是:%lf\n", fun(std,4) );

}

   三、综合应用

  请编写函数fun,其功能是:判断形参n中的正整数是几位数(输入数据的位数不超过4位),并将结果通过函数值返回。    例如:若输入的数据为 123,则输出结果为:输入的数字是3位。

    注意:部分源程序存在PROG1.C中,请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

#include  <stdio.h>

int  fun(int  n)

{

 

}

main()

{  int  n, place ;

   do{

      printf("请输入一个4位以内的正整数:    ");

      scanf("%d", &n);

     }  while (n<0 || n>9999);

   place = fun(n);

   printf( "输入的数字是%d\n", place );

}

 

 

一、基本操作答案

 

【参考答案】

 

(1)    leap

(2)    day

(3)    1

 

【考点分析】

 

主要考察考生对循环结构的理解的掌握

 

【解题思路】

 

填空1 leap  isleap()函数判断是否是闰年,由于初始化2月为28天,但是闰年是29,因此闰年要多加1天,isleap()应该返回0或者1leap的表达式为逻辑运算,得到的结果刚好是01

 

填空2day  前面累加了平年月份的天数,还需要加上日的天数。

 

填空31  如果是闰年并且累加月份大于2月,需要多加1.

 

 

 

 二、简单应用答案

 

【参考答案】

 

1double sum改为double sum=0.0;

 

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

 

(3)sum += std[i].score[1]改为sum += std[i].score[0];

 

【考点分析】

 

主要考察临时变量初始化,C语言里临时变量不初始化,它的默认值是不确定的一个值。再者,考察C语言约定数组的下标是从0开始的

 

【解题思路】

 

1double sum改为double sum=0.0;累加求和需要初始化累加结果的临时变量。

 

2for(i=0; i<2 ; i++)改为for(i=0; i<n ; i++);共有n个学生的成绩,需要累加所有学生第一门课的成绩

 

(3)sum += std[i].score[1]改为sum += std[i].score[0]; 1门课程的平均分,C语言的下标是从0开始的

 

 

 

三、综合应用答案

【参考答案】

 

int bits=1;//临时变量统计位数

 

         while(n/10)//判断是否为0,若不为0bits1,再将n除以10,继续判断

         {

                   bits++;

                   n=n/10;

         }

         return bits;

 

【考点分析】

 

主要考察考生对循环跳出的条件的理解,以及理解取数字位数的方法

 

【解题思路】

 

通过对指定的多位数每次除以10,去掉最后一位,直到为0结束,使用临时变量来统计一个多位数的位数。

 

 

 

107