1、国家二级 C语言程序设计机试(程序填空题)模拟试卷 5及答案与解析 一、程序填空题 1 给定程序的主函数中,已给出由结构体构成的链表结点 a、 b、 c,各结点的数据域中均存入字符,函数 fun()的作用是:将 a、 b、 c三个结点链接成一个单向链表,并输出链表结点中的数据。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:不得增行或删行,也不得更改程序的结构 ! 试题程序: #include typedef struct list char dam; struct list*next: Q; void hn(Q*pa, Q*pb, Q*pc) Q*p; *fo
2、und* pa一 next=_1_; pb一 next=pc; P=pa; while(P) *found* printf(“ c”, _2_); *found* P=_3_; pfinff(“ n”); main() Q a, b, c; a.dam=E; b data=F; c.data=G: C next=NULL; hn( a, &b, &c); 2 程序通过定义学生结构体变量,存储了学生的学号、姓名和三门课的成绩。所有学生数据均以二进制方式输出到文件中。函数 fun的功能是从形参 filename所指的文件中读入学生数据,并按照学号从小到大排序后,再用二进制方式把排序后的学生数据输出
3、到 filename所指的文件中,覆盖原来的文件内容。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:不得增行或删行,也不得更改程序的结构 ! 试题程序: nclude #define N 5 typedef struct student long sno; char name10; float score3; STU; void fun(char*filename) FILE*fp; int i, j; STU sN, t; *found * fp=fopen(filename, _1_); fread(s, sizeof(STU), N, fp); felo
4、se(fp); for(i=0; i typedef struet char nllm8; double 81201“e2; *found* (1); int fun(STU std, int n) int i, k=0; for(i=0; i int hn(int n) int a10000, i, j, count=0; for(i=2; idata (3)p一 next 【试题解析】 填空 1:将 三个结点连接起来,即将 pa的指针域指向 pb, pb的指针域指向 pc。 填空 2:输出链表结点中的数据,表示为 p一 data。 填空 3:指针后移,指向下一个结点,即 p=p一 next
5、。 2 【正确答案】 (1)“r” (2) (3)fwrite 【试题解析】 填空 1:题目中要求从形参 fiename所指的文件中读入学生的数据,以此可以看出本空应该填写 “r”。 填空 2:此处的 if语句是比较学号的大小,如果学号大就和学号小的换位,以此本空填写 。 填空 3:题目要求所有的学生数据均以二进制方式输出 到文件中,因此本空填写fwrite。 3 【正确答案】 (1)STU (2)11 (3)k 【试题解析】 本题考查:对结构体的定义和使用,以及逻辑运算符的使用。 填空 1: STU结构体别名,通过 main()中的语句可知。 填空 2: 11只要学生两门课成绩有不及格的,就算不及格,因此使用或运算。 填空 3: k返回的是不及格的学生个数,有题意可知 k是累计个数的。 4 【正确答案】 (1)ai (2)ai (3)0 【试题解析】 填空 1:因为本题的方法是首先从素数 2开 始,将所有 2的倍数的数从中删去 (把数表中相应位置置零 ),可知本空应填 ai。 填空 2: while循环表示接着从数表中找下一个非零数,并从表中删去该数的所有倍数,此空填 ai。 填空 3:因为要统计表中素数个数,因而只需把置零的数排除开来,此空填写 0。