【真题1】 给定程序的功能是:根据整型形参n,计算如下公式的值。 1 1 1 A1=1,A2=───,A3=───,……,An=──── 1+ A1 1+ A2 1+ An-1 例如,若n=10,则应输出:0.618056。 #include < stdio.h > float fun ( int n ) {/************found************/ float A=___1___ ; int i; /************found************/ for (i=1; i< = ___2___; i++) A = 1.0/(1+A); /************found************/ ___3___ ; } main( ) { int n ; printf("\nPlease enter n: ") ; scanf("%d", &n ) ; printf("A%d=%f\n", n, fun(n) ) ; } (2011年2月) 解析: 本题着重考察考生对C 语言中函数的定义、引用和参数传递、返回值的 掌握情况。 题中第一空填"1":此句是定义变量并为变量赋初值,根据题中的公式将变量A 定义为float型变量并赋值为1。 题中第二个空填"n":由题意可知,程序要求出An的值,循环的终止值应为 n,所以此循环语句应该为"for (i=2;i< =n;i++)"。 题中第三个空填"return A":通过return 语句将被调用函数中一个确定值带回 主调函数中去。 答案:【1】1 【2】n 【3】return A; 【真题2】 给定程序modi.c 中 fun 函数的功能是:求 s = aa … aa - … - aaa - aa - a(此处a 和n的值在1 至9 之间,aa… aa 表示n 个a) 例如 a = 3, n = 6, 则以上表达式为:s = 333333 - 33333 - 3333 - 333 - 33 - 3其和值是: 296298。a 和n 是fun 函数的形参,表达式的值作为函数值传回 main 函数。 请 改正 fun 函数中的错误,使它能计算出正确的结果。 注意:不要改动 main 函数, #include < conio.h > #include < stdio.h > long fun(int a,int n) { int j; /************found************/ long s=0,t=1; for(j=0;j< n;j++) t=t*10+a; s=t; for(j=1;j< n;j++) { /************found************/ t=t%10; s=s-t; } return(s); } main() { int a,n; clrscr(); printf("\nPlease enter a and n:"); scanf("%d%d",&a,&n); printf("The value of function is:%ld\n",fun(a,n)); } (2011年2月) 解析: 首先,我们必须先读懂题中程序的大致意思,这是发现并改正程序中错 误的重要前提。 程序中的重要思想如下: 1、题中函数fun()的目的是为了得到整数aa… aa - ... - aaa - aa - a的值; 2、函数的返回值有可能超出C 语言中整型的范围,所以返回值必须为长整型。 本题的第一个错误:函数fun()的赋值语句"long s=0,t=1"中,t的初值设 定,而第一个for 循环的目的是得到aa…aa的值,如果t的初值为1,遗漏掉 了a本身,所以,应当改为"long s=0,t=0;"; 本题的第二个错误:函数fun()的第二个for 循环的循环体中,错误的将除运算 变成了求余运算,所以应当改正为"t=t/10;"。 【真题3】 函数fun 的功能是:将两个两位数的正整数a、b 合并形成一个整数放在 c 中。合并的方式是:将a 数的十位和个位数依次放在c 数的百位和个位上, b 数的 十位和个位数依次放在c 数的十位和千位上。 例如,当a=45,b=12。调用该函 数后,c=2415。 注意: 部分源程序存在文件prog.c中。数据文件IN1.DAT 中的 数据不得修改。 请勿改动主函数main 和其它函数中的任何内容,仅在函数fun 的 花括号中填入你编写的若干语句。 #include < conio.h > #include < stdio.h > void fun(int a, int b, long *c) {……} main() { int a,b; long c; clrscr(); printf("Input a, b:"); scanf("%d%d", &a, &b); fun(a, b, &c); printf("The result is: %ld\n", c); } 解析: 本题的考核点是求取整数相应位上的数值的算法。 提示思路:可用整除 和求余的运算求取整数各位上的数值。方法是整除相应位上的位权值,再对其 求余,余数即为相应位上的数值。 void fun(int a, int b, long *c) { int a_up,a_low,b_up,b_low; a_up=a/10; /*求a 数的十位数*/ a_low=a%10; /*求a 数的个位数*/ b_up=b/10; /*求b 数的十位数*/ b_low=b%10; /*求b 数的个位数*/ *c=b_low*1000+a_up*100+b_up*10+a_low; /*将a 数的十位和 个位数依次放在c 数的百位和个位上, b 数的十位和个位数依次放在c 数的 十位和千位上*/ } |