国家二级C语言机试(操作题)模拟试卷701
程序填空题
1.给定程序中,函数fun的功能是用函数指针指向要调用的函数,并进行调用。规定在_2__处使fa指向函数f1,在__3__处使fb指向函数f2。当调用正确时,程序输出:
x1=5.000000,x2=3.000000,x1*x1+x1*x2=40.000000
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
1 #include<stdio.h>
2 double f1(double x)
3 { return x*x;}
4 double f2(double x,double y)
5 { return x*y;}
6 double fun(double a,double b)
7 {
8 /**********found**********/
9 __1__ (*f)();
10 double r1,r2;
11 /**********found**********/
12 f=__2___;/*point fountion f1*/
13 r1=f(a);
14 /**********found**********/
15 f=__3__;/*point fountion f2 */
16 r2=(*f)(a,b);
17 return r1+r2;
18 }
19 main()
20 {double x1=5,x2=3,r;
21 r=fun(x1,x2);
22 printf(’’\nx1=%f,x2=%f,x1*x1+x1*x2=%f\n’’,x1,x2,r);
23 }
(1)double
(2)f1
(3)f2
解析:本题中函数fun的功能是用函数指针指向要调用的函数,并进行调用,主要考察函数的指针的使用。存放函数的入口地址的指针是指向函数的指针,简称函数的指针。
第一空:由“f=___2___;/*point fountionf1*/”和“r1=f(a);”可知f是一个函数的指针,且f指向的函数的返回值为double型,函数的指针的定义方式是:类型标识符(*指针变量名)(),故第一空处的函数的指针的定义为“double”。
第二空:“f=__2__:/*point fountion f1*/”和“r1=f(a);”可知f指向的函数只有一个参数a,因此,f指向f1函数,即第二空处为“f1”。第三空:“f=__3__;/*point fountion f2*/”和“r2=(*f)(a,b1);”,f指向的函数有两个参数,因此,f是指向f2函数,故第三空处应为“f2”。
程序修改题
2.给定程序MODI1.C是建立一个带头结点的单向链表,并用随机函数为各结点赋值。函数fun的功能是将单向链表结点(不包括头结点)数据域为偶数的值累加起来,并且作为函数值返回。
请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动mam函数,不得增行或删行,也不得更改程序的结构!
1 #include<stdio.h>
2 #include<stdlib.h>
3 typedef struct aa
4 {int data;struct aa*next;}NODE;
5 int fun(NODE *h)
6 { int sum=0;
7 NODE *p;
8 /**********found**********/
9 p=h;
10 while(P)
11 { if(p->data%2==0)
12 sum+=p->data;
13 /**********found**********/
14 p=h->next;
15 }
16 return sum;
17 }
18 NODE *creatlink (int n)
19 {NODE *h,*p,*s;
20 int i;
21 h=p=(NODE *)malloc(sizeof(NODE));
22 for(i=1;i<=n;i++)
23 {s=(NODE *)malloc(sizeof(NODE));
24 s->data=rand()%16;
25 s->next=p->next;
26 p->next=s;
27 p=p->next;
28 }
29 p->next=NULL;
30 return h;
31 }
32 outlink(NODE *h,FTLE *pf)
33 {NODE *p;
34 p=h->next;;
35 fprintf(pf,’’\n\nTHE LIST:\n\nHEAD’’);
36 while(p)
37 { fprintf(pf,’’->%d’’,p->data);p=p->next;}
38 fprintf(pf,’’\n’’);
39 }
40 outresult(int s,FTLE *pf)
41 { fprintf(pf,’’\nThe sum of even numbers:%d\n’’,s);}
42 main()
43 {NODE *head;int even;
44 head=creatlink(12);
45 head->data=9000;
46 outlink(head,stdout);
47 even=fun(head);
48 printf(’’\nThe result:\n’’);outresult(even,stdout;);
49 }
(1)p=h->next;
(2)p=p->next;
解析:(1)该题中函数功能是单向链表结点(不包括头结点)数据域为偶数的值累加起来,并且作为函数值返回。对单向链表进行遍历,并在遍历过程查找数据域为偶数的结点,并将数据域为偶数的元素累加起来。
(2)从已给定源程序的main主函数开始入手,“head=creatlink(12);”语句生成随机数的链表,“outlink(head,stdout);”输出该链表,“even=fun(head);”语句调用函数fun求得链表中的数据域为偶数的值的累加和。
(1)根据题干中求得除了头结点之外的结点数据域中的数据值,头指针h,工作指针p指向头结点的下一个结点,所以第一个标识下的“p=h;”指向头结点应该改为指向下一个结点“p=h->next;”。
(2)工作指针p,利用p实现对链表的遍历,p表示指向链表的当前结点,所以指向下一个结点应该是“p=p->next;”。
程序设计题
3.请编写函数fun,函数的功能是
本文档预览:3600字符,共5348字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载