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软件
(网站编辑:吴融)
读者活动
48小时点击排行
编辑推荐
论坛热帖
网站地图 | 版权声明 | 业务合作 | 友情链接 | 关于我们 | 招聘信息
报纸客服电话:4006677866 报纸客服信箱:pcw-advice@vip.sina.com 友情链接与合作:987349267(QQ) 广告与活动:675009(QQ) 网站联系信箱:cpcw@cpcw*.c*m
Copyright © 2006-2011 电脑报官方网站 版权所有 渝ICP备10009040号
报纸客服电话:4006677866 报纸客服信箱:pcw-advice@vip.sina.com 友情链接与合作:987349267(QQ) 广告与活动:675009(QQ) 网站联系信箱:cpcw@cpcw*.c*m
Copyright © 2006-2011 电脑报官方网站 版权所有 渝ICP备10009040号