首页 > 全部 > 二级C语言 > 国家二级C语言机试(操作题)模拟试卷551

国家二级C语言机试(操作题)模拟试卷551

本单篇文档共3288字,内容预览3600字,预览为有答案版,源文件无水印,下载后包含无答案空白卷版和有答案版,同时也有计算机类NCRE全国计算机二级整科真题模拟题,讲义课件,思维导图,易错高频题等下载。
二级C语言 章节练习 3843人下载
价格: 0.80 原价:¥9.00
收藏

国家二级C语言机试(操作题)模拟试卷551

程序填空题

1.程序通过定义学生结构体变量,存储了学生的学号、姓名和三门课的成绩。所有学生数据均以二进制方式输出到文件中。函数fun的功能是从形参filename所指的文件中读入学生数据,并按照学号从小到大排序后,再用二进制方式把排序后的学生数据输出到filename所指的文件中,覆盖原来的文件内容。

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

注意:部分源程序在文件BLANK1.C中。

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

试题程序:

#include<stdio.h>

#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所指的文件中读入学生的数据,以此可以看出本空应该填写”rb”。

填空2:此处的if语句是比较学号的大小,如果学号大就和学号小的换位,以此本空填写>。

填空3:题目要求所有的学生数据均以二进制方式输出到文件中,因此本空填写fwrite。

程序修改题

2.下列给定程序中函数fun的功能是:在字符串的最前端加入n个*号,形成新串,并且覆盖原串。

字符串的长度最长允许为79。

请改正程序中的错误,使它能得出正确的结果。

注意:部分源程序在文件MODI1.c中,不要改动main函数,不得增行或删行,也不得更改程序的结构!

试题程序:

#include < stdio .h >

#include < string.h >

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.请编写函数fun,该函数的功能是:

统计各年龄段的人数。N个年龄通过调用随机函数获得,并放入主函数的age数组中。要求函数把0~9岁年龄段的人数放在d[0]中,把10~19岁年龄段的人数放在d[1]中,把20~29岁年龄段的人数放在d[2]中,依此类推,把100岁(含100岁)以上年龄的人数都放在d[10]中。结果在主函数中输出。

注意:部分源程序在文件PROGl.C中。

请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

试题程序:

#include<stdio.h>

#define N 50

#define N 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()

{

FTLE*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字符,共3288字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载

剩余未完,查看全文
收藏
国家二级C语言机试(操作题)模拟试卷551

推荐资源

客服

扫码添加客服微信

热线

官方客服

如遇问题,请联系客服为您解决

电话客服:

客服微信:pujinet

工作时间:9:00-18:00,节假日休息

公众号

扫码关注微信公众号