国家二级(C语言)机试模拟试卷866
程序填空题
1.使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。此程序定义了学生结构体变量,存储了学生的学号、姓名和三门课的成绩。所有学生数据均以二进制方式输出到文件中。函数run( )的功能是从形参filename所指的文件中读入学生数据,先按照学号从小到大排序后,再用二进制方式把排序后的学生数据输出到filename所指的文件中,覆盖原来的文件内容。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:部分源程序在文件blank1.c中。
不得增行或删行,也不得更改程序的结构!
试题程序:
#include
#define N 5
typedef struct student{
long sno;
char name[10];
float score[3];
}STU;
void fun(char*filename)
{FILE*fp; int i,j;
STU s[N],t;
/*********found*********/
fp=fopen(filename,【1】);
fread(s,sizeof(STU),N,fp);
fclose(fp);
for(i=0;i<N-1;i++)
for(j=i+1; j<N;j++)
/*********found*********/
if(s[i].sno【2】s[j].sno)
{t=s[i]; s[i]=s[j];
s[j]=t;}
fp=fopen(filename,\\
(1)\\
解析:填空1:题目中要求从形参filename所指的文件中读入学生的数据,以此可以看出空1处应该填\\
程序修改题
2.使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,函数fun( )的功能是在字符串的最前面加入n个*号,形成新字符串,并覆盖原字符串。
字符串的长度最长允许为79。
请改正程序中的错误,使它能得出正确的结果。
注意:部分源程序在文件modi1.c中,不要改动main( )函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include
#include
void fun(char s[],int n)
{
char a[80],*p;
int i;
/*********found*********/
s=p;
for(i=0; i<n;i++)a[i]=’*’;
do
(a[i]=*p;
i++;
}
/*********found*********/
while(*p++)
a[i]=0;
strcpy(s,a);
}
main( )
{int n;char s[80];
printf(\\
(1)p=s;(2)while(*p++);
解析:(1)指针p应指向s,所以应改为p=s;。(2)循环等待,while循环每执行一次,临时变量p就应该指向字符串的下一位置,所以应改为while(*p++);。
程序设计题
3.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,请编写函数fun( ),该函数的功能是统计各年龄段的人数。N个年龄通过调用随机函数获得,并放入主函数的age数组中。要求函数把0~9岁的人数存放在d[0]中,把10~19岁的人数存放在d[1]中,把20~29岁的人数存放在d[2]中,依此类推,把100岁(含100岁)以上年龄的人数都存放在d[10]中。结果在主函数中输出。
注意:部分源程序在文件prog1.c中。
请勿改动main( )函数和其他函数中的任何内容,仅在函数fun( )的花括号中填入你编写的若干语句。
试题程序:
#include
#define N 50
#define M 11
void fun(int*a,int*b)
{
}
double rnd( )
{
static t=29,c=217,m=1024,r=0;
r=(r*t+c)%m;
return((double)r/m);
}
void main( )
{
FILE*wf;
int age[N],i,d[M];
int b[N]=(32,45,15,12,86,49,97,3,44,52,17,95,63};
for(i=0,i<N;i++)
age[i]=(int)(115*rnd( ));/*产生一个随机的年龄数组*/
printf(\\
void fun(int*a,Int*b)
{
int i,j;
for(j=0;j<M;j++)
b[j]=0;/*数组b初始化为0*/
for(i=0;i<N;i++)
if(a[i]>=100)
b[10]++;/*如果年龄大于等于100,b[10]自增1*/
else
b[a[i]/10]++;/*如果年龄小于100,则将其分别统计到b[a[i]/10]中*/
}
解析:本题是一个分段函数的问题,用两个循环来完成。第1个循环的作用是使数组b中的所有元素值都为0。这个循环不能省略,因为若未对数组b中的元素赋初值,则它们的值将是不可预测的。第2个循环的作用是分别统计数组a中各年龄段的人数。当a[i]≥100时,按题意要将其统计到b[10]中。else的作用是如果年龄小于100,则将其分别统计到b[a[i]/10]中。由运算优先级可知先进行a[i]/10的运算,所得结果作为b的下标。若a[i]为0~9,a[i]/10的值为0,且0~9岁的人数正好存入b[0]中。若a[i]为10~19,a[i]/10的值为1,且10~19岁的人数正好存入b[1]中,依此类推。
本文档预览:3600字符,共3402字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载