1、国家二级 C+机试(操作题)模拟试卷 159及答案与解析 一、基本操作题 1 给定程序中,函数 fun的功能是:用函数指针指向要调用的函数,并进行调用。规定在【 2】处使 f指向函数 n,在【 3】处使 f指向函数 f2。当调用正确时,程序输出: x1=5 000000, x2=3 000000, x1*x1+x1*x2=40 000000。 注意:部分源程序在文件 BLANKl C中。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include double f1(double x) return x*x; ) double f2(double x, double y) retu
2、rn 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(“ nx1= f, x2= f, x1*x1+x1*x2= f n“, x1, x2, r); 二、简单应用题 2 下列给定程序中,函数 fun的功能是:用下面的公式求 的近似值,直到最后一项的绝对值小于
3、指定的数 (参数 Bum)为止。 例如,程序运行后,输入 0 0001,则程序输出 3 1414。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include#include#includefloat fun(float num) int s; float n, t, pi; t=1; pi=0; n=1; s=1; *found* while(t=num) pi=pi+t; n=n+2; s=一 s; *found* t=s n; pi=pi*4; return pi; void main() float
4、n1, n2; system(“CLS“); printf(“Enter a float number: “); scarlf(“ f“, &n1); n2=fun(n1); printf(“ 6 4 f n“, n2); 三、综合应用题 3 请编写函数 fun,其功能是:将 M行 N列的二维数组中的字符数据,按列的顺序依次放到一个字符串中。 例如,若二维数组中的数据为 W W W W S S S S H H H H 则字符串中的内容应是: WSHWSHWSHWSH。 注意:部分源程序给出如下。 请勿改动 主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。
5、 试题程序: #include #define M 3 #define N 4 void fun(char(*s)N, char*b) void main() char a100, wMN= W, W, W, W、 S, S, S, S, H, H, H, H); int i, j; printf(“The matrix: n“); for(i=0; i=num) (2)t=s n; 【试题解析】 (1)函数 fun中 while语句的作用是,当新的一项大于给定参数时,循环累计计算 s的值。题目要求最后一项的绝对值小于给定参数,因此循环条件应当是 while(fabs(t)=num)。 (2)
6、变量 t用来存放最后一项的值,因为每一项均为 1或一 1除以一个数,所以此处应使用除法运算符 “ ”。 三、综合应用 题 3 【正确答案】 void fun(char(*s)N, char*b) int i, j, k=0; for(i=0; iN; i+) * 按列的顺序依次放到一个字符串中 * for(j=0; jM; j+) bk+=sji; bk= 0; 【试题解析】 看到程序后,很容易便能想到用循环嵌套的方法,本题中按列的顺序依次放到一个字符串中,所以列标变化慢,行标变化快。 注意:第 1个循环条件为 iN(即列 );第 2个 循环条件为 jM(即行 ),因为在循环的嵌套中越在内层,循环变化就越快。