1、国家二级 C+机试(操作题)模拟试卷 183及答案与解析 一、基本操作题 1 给定程序的主函数中,已给出由结构体构成的链表结点 a、 b、 e,各结点的数据域中均存入字符,函数 fun()的作用是:将 a、 b、 c三个结点链接成一个单向链表,并输出链表结点中的数据。 请在程序的中括号处填入正确的内容并把中括号删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANKl C中。不得增行或删行,也不得更改程序的结构 ! 试题程序: #include typedef struct list char data; struct list*next; Q; void fun(Q*pa,
2、 Q*pb, Q*pc) Q*p; *found* pa一 next=【 1】; pb一 next=pc; p=pa; while(p) *found* printf(“ c“,【 2】 ); *found* p=【 3】; printf(“ n“); main() Q a, b, c; a data=E; b data=F; C data=G; c next=NULL; fun(&a, &b, &c); 二、简单应用题 2 假定整数数列中的数不重复,并存放在数组中。下列给定程序中函数 fun的功能是:删除数列中值为 x的元素,变量 n中存放数列中元素的个数。 请改正程序中的错误,使它能得出正
3、确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include #define N 20 fun(int*a, int n, int x) int p=0, i; an=x; while(x!=ap) p=p+1; *found* if(p=n) return一 1; else for(i=p; i #include #include #define N 5 double fun(int wN) void main() FILE*wf; int aNN=0, 1, 2, 7, 9, 1, 9, 7, 4, 5, 2, 3, 8, 3, 1, 4
4、, 5, 6, 8,2, 5, 9, 1, 4, 1; int i, j; double s; system(“CLS“); printf(“*The array* n“); for(i=0; idata(3)p一 next 【试题解析】 填空 1:将三个结点连接起来,即将 pa的指针域指向 pb, pb的指针域指向 pc。 填空 2:输出链表结点中的数据,表示为 p一 data。 填空 3:指针后移,指向下一个结点,即 p=p一 next。 二、简单应用题 2 【正确答案】 (1)if(p=n)return一 1; (2)ai=ai+1; 【试题解析】 (1)需要确定 if条件语句的条件表达
5、式,发现变量 p大写, C语言中变量是区别大小写的。 (2)删除数列中的元素,删除后,后面的元素依次前移一个位置,因此此处应为ai=ai+1;。 三、综合应用题 3 【正确答案】 double fun(int wN) int i, j, k=0; double sum=0 0; for(i=0; iN; i+) for(j=0; jN; j+) if(i=0 i=N一 1 j=0 j=N一 1) *只要下标中有一个为 0或 N一1,则它一定是周边元素 * sum=sum+wij; *将周边元素求和 * k+; return sum k; *求周边元素的平均值 * 【试题解析】 本题要求计算二维数组周边元素的平均值, for循环语句控制循环过程, if条件语句根据数组元素的下标判断该元素是否为二维数组的周边元素。 本题采用逐一判断的方式,周边元素的规律为下标中有一个是 0或 N 1,所以只要下标中有一个 为 0或 N一 1,那么它一定是周边元素。计算周边元素个数的方式是当给 sum累加一个值时, k也加 1。