国家二级C语言机试(操作题)模拟试卷856
程序填空题
1.使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun的功能是:用函数指针指向要调用的函数,并进行调用。规定在【2】处使f指向函数f1,在【3】处使f指向函数f2。当调用正确时,程序输出:
x1=5.000000,x2=3.000000,x1*x1+x1*x2=40.000000。
注意:部分源程序在文件BLANKl.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】;
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(\\
(1)double (2)f1 (3)f2
解析:填空1:(*f)()代表一个指向函数的指针变量,而本题所被调用的f1、f2两函数的返回值均为double型,因而此空应该填写double。
填空2:因为在给函数指针变量赋值时,只需给出函数名而不必给出参数,因而此空应该填写n。
填空3:同填空2,此空应该填写f2。
相关知识点:
(1)指向函数的指针变量的一般定义形式为:数据类型(*指针变量名)();
(2)函数的调用可以通过函数名调用,也可以通过函数指针调用。
(3)在给函数指针变量赋值时,只需给出函数名而不必给出参数。
程序修改题
2.使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。此程序建立了一个带头节点的单向链表,并用随机函数为各节点赋值。函数fun的功能是将单向链表节点(不包括头节点)数据域为偶数的值累加起来,并且作为函数值返回。
请改正函数fun中的错误,使它能得出正确的结果。
注意:部分源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
typedef struct aa
{ int data;
dtruct aa*next;
} NODE;
int fun(NODE*h)
{ int sum=0;
NODE*p;
p=h一>next;
/*********found*********/
while(P一>next)
{ if(P一>data%2==0)
sum+=p一>data;
/*********found*********/
p=h一>next;
}
return sum;
}
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;
}
outlink(NODE*h)
{ NODE*p;
p=h一>next;
printf(\\
(1)while(p!=NULL)
(2)p=p一>next;
解析:(1)判断当前指针p指向的节点是否存在,若存在则对该节点数据域进行判断操作。
(2)判断结束后指针指向下一个节点。
程序设计题
3.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,请编写函数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];
FILE*out;
char*test[]={\\
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(str[i]===str[n-1-i]);
/*相同,什么都不作//
else/*不同,直接跳出循环*/
{
fg=0;
break;
}
return fg;
}
解析:判断回文就是将第一个字符与最后一个字符比较,第二个字符与倒数第二个字符进行比较,依此类推,直到中间的字符,如果比较的结果都相同,那么这个字符串就是回文,否则不是。程序中循环语句用来遍历字符串,条件语句
本文档预览:3600字符,共3634字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载