当前位置:首页 > 新闻资讯 > IT业界 > 新闻
2012年二级考试名师指导 冲刺吧,少年
  • 2012-9-5 18:51:35
  • 类型:原创
  • 来源:电脑报
  • 报纸编辑:陈邓新
  • 作者:
【电脑报在线】2012年9月22日,下半年的全国计算机等级考试就开考试了,在最后一周的冲刺阶段,怎么才能确保万无一失地通过考试?电脑报邀请名师,结合多年出题经验和阅卷经验,帮助大家解决这个问题,助大家一举成功。

上机题
28.人员的记录由编号和出生年、月、日组成,N名人员的数据已在主函数中存入结构体数组std中。函数fun的功能是:找出指定出生年份的人员,将其数据放在形参k所指的数组中,由主函数输出,同时由函数值返回满足指定条件的人数。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存入在考生文件夹下的BLANK.C中。不得增行或删行,也不得更改程序结构!
代码:
#include    <stdio.h>
#define    N    8
typedef  struct
{  int  num;
   int  year,month,day ;
}STU;
int fun(STU  *std, STU  *k, int  year)
{  int  i,n=0;
   for (i=0; i<N; i++)
/**********found**********/
      if(  ___1___==year)
/**********found**********/
         k[n++]= ___2___;
/**********found**********/
   return (___3___);
}
main()
{  STU  std[N]={ {1,1984,2,15},{2,1983,9,21},{3,1984,9,1},{4,1983,7,15},
                 {5,1985,9,28},{6,1982,11,15},{7,1982,6,22},{8,1984,8,19}};
   STU  k[N];         int  i,n,year;
   printf("Enter a year :  ");  scanf("%d",&year);
   n=fun(std,k,year);
   if(n==0)
      printf("\nNo person was born in %d \n",year);
   else
   {   printf("\nThese persons were born in %d \n",year);
       for(i=0; i<n; i++)
         printf("%d  %d-%d-%d\n",k[i].num,k[i].year,k[i].month,k[i].day);
   }
}
考点:结构体
名师解析:在fun函数中,要比较人员记录的出生年份是否为指定年份,只要比较STU变量中year成员变量是否等于形参中提供的year值,而在for循环中是对STU型数组中各个变量进行比较的;如果两者相等,则将其存入到STU型数组k中;最后,整数n就是能够查到的记录的条数。

29.给定程序modi.c中,函数fun的功能是:将十进制正整数m转换成k(2<=k<=9)进制数,并按位输出。例如:若输入8和2,则应输出1000(即十进制数8转换成二进制数表示为1000)。
请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include <conio.h>
#include <stdio.h>
#include <windows.h>  
void fun(int m,int k)
{
  int aa[20],i;
  for (i=0;m;i++)
  {
/************found************/
    aa[i]=m/k;
    m/=k;
  }
/************found************/
  for(;i;i--)
    printf("%d",aa[i]);
}


main()
   {
   int b,n;
   system("cls");
   printf("\nPlease enter a number and a base:\n");
   scanf("%d  %d",&n,&b);
   fun(n,b);
   printf("\n");
   }
考点:数制的转换
名师解析:k进制数有两个特点:有0到k-1共k个数码和逢k进1、借1当k。k进制数某一位上的数码实际上代表该数码乘上该位上的权,如十进制数12,1实际代表1*10。原程序给出的fun函数中,第一个for循环用来将十进制的整型数据m转换为k进制数据,并将结果按从低位到高位的顺序保存在数组aa中。在for循环之后,i即为转换成的k进制数的位数。

C语言模拟题答案
选择题
1.B  2.D 3.C 4.B 5.B 6.7.C 8.D 9.B 10.B 11.A 12.A 13.C 14.D 15.D 16.D 17.B 18.C 19.D 20.C

填空题
21. n(n-1)/2  22. 250   23. 身份证号  24. “*str1”和“*str1++=*str2++”  25. 4  26. c  27. 123456

上机题

28. std[i].year   std[i]   n 29. 第一个for循环之后应改为“aa[i]=m%k”或相同作用的语句。第二个错误处为:从后往前打印存有i个数的数组中的值,其下标应该为[i-1]到[0],应改为“for(i=i-1;i>=0;i--)”。



本文出自2012-09-10出版的《电脑报》第36期 F.APP软件
(网站编辑:吴融)


我来说两句(0人参与讨论)
发表给力评论!看新闻,说两句。
匿名 ctrl+enter快捷提交
读者活动
48小时点击排行
论坛热帖