知ing

最新计算机二级C语言上机试题汇编100套

NCRE研究组 编 / 高等教育出版社

゛Zirro、Y 上传

查看本书

14: 

给定程序中函数fun的功能是用函数指针指向要调用的函数,并进行调用。 

规定在__2__处使f指向函数f1,在__3__处使f指向函数f2。当调用正确时,程序输出

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; } 

double fun(double a, double b) 

/ **********found**********/ 

__1__ (*f)(); 

double r1, r2; 

/ **********found**********/ 

f = __2__ ; / * point fountion f1 */ 

r1 = f(a); 

/ **********found**********/ 

f = __3__ ; / * point fountion f2 */ 

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); 

解题思路: 

本题主要是考察用函数指针指向要调用的函数。程序中共有三处要填上适当的内容,使程序能运行出正确的结果。 

第一处:定义函数指针的类型,所以应填:double。 

第二处:使f指向函数f1,所以应填:f1。 

第三处:使f指向函数f2,所以应填:f2。 

*************************************************** 

给定程序MODI1.C是建立一个带头结点的单向链表,并用随机函数为各结点赋值。函数fun的功能是将单向链表结点 (不包括头结点)数据域为偶数的值累加起来并且作为函数值返回。 

请改正函数fun中指定部位的错误使它能得出正确的结果。 

注意不要改动main函数不得增行或删行也不得更改程序的结构

给定源程序: 

#include <stdio.h> 

#include <stdlib.h> 

typedef struct aa 

{ int data; struct aa *next; }NODE; 

int fun(NODE *h) 

{ int sum = 0 ; 

NODE *p; 

/ ***********found**********/ 

p=h; 

while(p) 

{ if(p->data%2==0) 

sum +=p->data; 

/ ***********found**********/ 

p=h->next; 

return sum; 

NODE *creatlink(int n) 

{ NODE *h, *p, *s, *q; 

int i, x; 

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; 

outlink(NODE *h, FILE *pf) 

{ NODE *p; 

p = h->next; 

fprintf(pf ,"\n\nTHE LIST :\n\n HEAD " ); 

while(p) 

{ fprintf(pf ,"->%d ",p->data ); p=p->next; } 

fprintf (pf,"\n"); 

outresult(int s, FILE *pf) 

{ fprintf(pf,"\nThe sum of even numbers : %d\n",s);} 

main() 

{ NODE *head; int even; 

 

head=creatlink(12); 

head->data=9000; 

outlink(head , stdout); 

even=fun(head); 

printf("\nThe result :\n"); outresult(even, stdout); 

解题思路: 

本题是考察如何使用单向链表把数据域的值按条件进行累加。 

第一处:试题要求不计算头结点,所以应改为:p=h->next; 

第二处:指向p的下一个结点来实现循环,所以应改为:p=p->next; 

*************************************************** 

请编写函数fun, 函数的功能是判断字符串是否为回文?若是函数返回1,主函数中输出: YES, 否则返回0, 主函数中输出NO。回文是指顺读和倒读都一样的字符串。 

例如字符串LEVEL是回文而字符串123312就不是回文。 

注意:部分源程序在文件PROG1.C中。 

请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 

给定源程序: 

#include <stdio.h> 

#define N 80 

int fun(char *str) 

main() 

{ char s[N] ; 

printf("Enter a string: ") ; gets(s) ; 

printf("\n\n") ; puts(s) ; 

if(fun(s)) printf(" YES\n") ; 

else printf(" NO\n") ; 

NONO() ; 

解题思路: 

本题是考察如何判断一个字符串是回文字符串,回文是指顺读和倒读都一样的字符串。可以利用for循环语句来判断,如果前后不一致,则不是回文字符串。 

参考答案: 

int fun(char *str) 

int i, j = strlen(str) ; 

for(i = 0 ; i < j / 2 ; i++) 

if(str[i] != str[j - i - 1]) return 0 ; 

return 1 ; 

main() 

{ char s[N] ; 

printf("Enter a string: ") ; gets(s) ; 

printf("\n\n") ; puts(s) ; 

if(fun(s)) printf(" YES\n") ; 

else printf(" NO\n") ; 

NONO() ; 

※※※※※※※※※※※※※※※※※※※※※※※※※ 


查看更多