1、国家二级 C语言机试(操作题)模拟试卷 299及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是:根据形参 i的值返回某个函数的值。当调用正确时,程序输出: x1=5 000000, x2=3 000000, x1*x1+x1*x2=40 000000。 注意:部分源程序在文件 BLANK1 C中。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h double f1(double x) return x*x; ) double f2(double x, double y) return x*y; ) *found* 【 1】 fun(in
2、t i, double x, double y) if(i=1) *found* return 【 2】 (x); else *found* return 【 3】 (x, y); main() double x1=5, x2=3, r; r=fun(1, x1, x2); r+=fun(2, x1, x2); printf(“ nx1= f, x2= f, x1*x1+x1*x2= f n n“, x1, x2, r); 二、程序修改题 2 下列给定程序中函数 Creatlink的功能是:创建带头结点的单向链表,并为各结点数据域赋 0到 m1的值。 请改正函数 Creatlink中指定部位的
3、错误,使它能得出正确的结果。 注意:部分源程序在文件 NODI1 C中,不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: 1 #include stdio h 2 #include stdlib h 3 typedef strucL aa 4 int data; 5 struct aa * next; 6 NODE; 7 NODE*Creatlink(int n, int m) 8 NODE*h=NULL, *p, *s; 9 int i; 10 *found* 11 P=(NODE)malloc(sizeof(NODE); 12 h=P; 13 p next=NU
4、LL; 14 for(i=1; i =n; i+) 15 s=(NODE*)malloc(sizeof (NODE), 16 s data=rand() m; 17 s next=p nexL, 18 p next=s; p=p next; 19 20 *found* 21 return p; 22 23 outlink(NODE*h) 24 NODE*p; 25 P=h next; 26 printf(“ n nTHE LIST: n nHEAD“); 27 while(P) 28 printf(“ d“, p data); 29 p=p next; 30 31 printf(“ n“);
5、32 33 main() 34 NODE*head; 35 head=Creatlink(8, 22); 36 outlink(head); 37 三、程序设计题 3 编写函数 fun,其功能是:将 s所指字符串中除了下标为奇数同时 ASCII码值也为奇数的字符之外,其余的所有字符全部删除,串中剩余字符所形成的一个新串放在 t所指的数组中。 例如,若 s所指字符串的内容为 “ABCDEFG12345”,其中字符 A的 ASCII码值为奇数,但所在元素的下标为偶数,因此需要删除;而字符 1的 ASCII码值为奇数,所在数组中的下标也为奇数,因此不应当删除,其他依此类推。最后 t所指数组中的内容应
6、为 “135”。 注意:部分源程序给出如下。 请勿改动主函数 main和其他函数中的任何内容,仅在函 数 fun的花括号中填入你编写的若干语句。 试题程序: #include conio h #include stdio h #include string h void fun(char *s, char t) main() char s100, t100; printf(“knPlease enter string s: “); scanf(“ s“, s); fun(s, t); printf(“knThe result is: s n“, t); 国家二级 C语言机试 (操作题)模拟试卷
7、 299答案与解析 一、程序填空题 1 【正确答案】 (1)double (2)f1 (3)f2 【试题解析】 填空 1:本空函数 fun的返回值,根据 return可知,不论返回的是f1还是 12,它们的返回值均为 double型的,故此空应该填写 double。 填空 2:因为函数 fun的功能是根据形参 i的值返回某个函数的值,当 i等于 1时,应该返回的是 f1。 填空 3:如果不满足 if的话,应该返回的是 f2。 二、程序修改题 2 【正确答案】 (1)p=(NODE*)malloc(sizeof(NODE); (2)return h; 【试题解析】 (1)由变量定义可知 p为指向
8、结点的指针。指向刚分配的结构指针,所以应改为 p=(NODE*)malloc(sizeof(NODE)。 (2)在动态分配内存的下一行语句是,使用临时结构指针变量 h保存 p指针的初始位置,最后返回不能使用 p,是因为 p的位置已经发生了变化,所以应改为 return h。 三、程序设计题 3 【正确答案】 void fun(char*s, char t) int i, j=0, n; n=strlen(s); for(i=0; i n; i+) if(i 2) (si 2) tj+=si; *将下标为奇数同时 ASCII码值为奇数的字符放入数组 t中 * tj= 0; *最后加上结束标识符 * 【试题解析】 本题要求除了下标为奇数同时 ASCII码值也为奇数的字符,其余的所有字符都删除,即要留下下标为奇数同时 ASCII码值也为奇数的字符。所以if的条件语句应为: if(i 2!=0&si 2!=0)。