1、国家二级 C语言机试(操作题)模拟试卷 537及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是: 用函数指针指向要调用的函数,并进行调用。规定在 【 2】 处使 f指向函数f1,在 【 3】 处使 f指向函数 f2。 当调用正确时,程序输出: x1=5 000000, x2=3 000000, x1*x1+x1*x2=40 000000。 注意:部分源程序在文件 BIANK1 C中。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h double f1(double x) return x*xj) double f2(double x,
2、double y) return x*y; double fun(double a, double b) *found* 【 1】 (, Ic f)(); double r1, r2; *found* f=【 2】 ; r1=f(a); *found* f=【 3】 ; r2=(*f)(a, b); return r1+r2; main() (double x1=5, x2=3, r; r=fun(x1, x2); printf(“ nx1= f, x2= f, x1*x1+x1*x2= f n“, x1, x2, r); 二、程序修改题 2 下列给定程序是建立一个带头结点的单向链表,并用随机
3、函数为各结点赋值。函数 fun的功能是将单向链表结点 (不包括头结点 )数据域为偶数的值累加起来,并且作为函数值返回。 请改正函数 fun中的错误,使它能 得出正确的结果。 注意:部分源程序在文件 MODl1 C中,不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h #include conio h #include stdlib h typedef struct aa int data; struct aa*next; NODE; int fun(NODE, * h) int sum=0; NODE*P; p=h一 next; *f
4、ound* while(P一 next) if(P一 data 2=0) sum+=P一 data; *found* p=h一 next; Eeturn sHm; ) NODE*creatlink(int n) NODE *h, *p, *s; int i; h=p=(NODE *)malloc(sizeof (NODE); for(i=1 ; i n; i+) s=(NODE*)malloc(sizeof (NODE); s一 data=rand() 16; s一 next=P一 next; p一 next=s; p=p一 next; p一 next=NULL; return h; outl
5、ink(NODE*h) NODE*p; P=h一 next; printf (“n n The LIST: n n HEAD“); while(p) printf(“一 d“, p一 data); p=p一 next; ) printf(“ n“); void main() NODE* head; int sum; system(“CLS“); head=creatlink(10); outlink(head); sum=fun(head); printf(“ nSUN= d“, sum); 三、程序设计题 3 请编写函数 fun,该函数的功能是:判断字符串是否为回文,若是,则函数返回1,主函
6、数中输出 “YES“,否则返回 0,主函数中输出 “NO“。回文是指顺读和倒读都一样的字符串。 例如,字符串 LEVEL是回文,而字符串 123312就不是回文。 注意:部分源程序在文件 PROG1 C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include stdio h #define N 80 int fun(char, * str) main() char sN; FTLE*out; char * test=“1234321“, “123421“, “123321“, “abcdCBA“, int i; pri
7、ntf(“Enter a string: “); gets(s); printf(“ n n“); puts(s); if(fun(s) printf(“YES n“); else printf(“NO n“); * out=fopen(“out dat“, “w“), for(i=0; i 4; i+) if(fun(testi) fprintf(out, “YES n“); else fprintf(out, “NO n“); fclose(out); * 国家二级 C语言机试(操作题)模拟试卷 537答案与解析 一、程序填空题 1 【正确答案】 (1)double (2)f1 (3)f2
8、 【试题解析】 填空 1:( *f) ()代表一个指向函数的指针变量,而本题所被调用的 f1、 f2两函数的返回值均为 double型,因而此空应该填写 double。 填空 2:因为在给函数指针变量赋值时,只需给出函数名而不必给出参数,因而此空应该填写 f1。 填空 3:同填空 2,此空应该填写 f2。 相关知识点: (1)指向函数的指针变量的一般定义形式为:数据类型( *指针变量名) (); (2)函数的调用可以通过函数名调用,也可以通过函数指针调用。 (3)在给函数指针变量赋值时,只需给出函数名而不必给出参 数。 二、程序修改题 2 【正确答案】 (1)while (p!=NULL) (
9、2)p =p 一 next; 【试题解析】 (1)判断当前指针 p指向的结点是否存在,若存在则对该结点数据域进行判断操作。 (2)判断结束后指针指向下一个结点。 三、程序设计题 3 【正确答案】 int fun( char*str) int i, n =0, fg =1; char *p=str; while( *p) *将指针 p置位到 字符串末尾,并统计字符数 * n+; p+; for(i=0; i n 2 ; i+) *循环比较字符 * if(stri=strn-1-1); *相同,什么都不作 */ else *不同,直接跳出循环 * fg =0; break; return fg; 【试题解析】 判断回文就是将第一个字符与最后一个字符比较,第二个字符与倒数第二个字符进行比较,依此类推,直到中间的字符,如果比较的结果都相同,那么这个字符串就是回文,否则不是。程序中循环语句用来遍历字符串,条件语句用来判断当前字符与对应位置的字符是否相同。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1