【真题1】 下列给定程序中,函数fun()的功能是:从3 个红球,5 个白球,6 个黑 球中任意取出8 个作为一组,进行输出。在每组中,可以没有黑球,但必须要有红球 和白球。组合数作为函数值返回。正确的组合数应该是15。程序中i的值代表红球 数,j 的值代表白球数,k 的值代表黑球数。 试题程序: #include < stdio.h > int fun() { int i,j,k,__1__; printf("\nThe result :\n\n "); for(__2__;i< =3;i++) { for (j=1;j< =5;j++) {k=8-i-j; if(__3__) { sum=sum+1; printf("red:%4d white:%4d black:%4d\n ",i,j,k); } } } return sum; } main() { int sum; sum=fun(); printf("sum=%4d\n\n ",sum); } (2011年2月) 解析: 填空1:仔细观察函数体中的各项数据,就会发现有一个变量sum 是没 有定义的,由题意知,函数中的变量全是整型变量,再看sum的用法,知道它 是用来求和的,因此其初值应是0。 填空2:红球数i 的总数为3,但最小值为1,循环条件中应该是i=1而不是i=0,切记循环的第一项赋值语句要根据情况使用,不能一成不变。 填空3:这里考查条件语句的选择,程序旨在说明题干中的"在每组中,可以没 有黑球,但必须要有红球和白球"这个信息,满足条件的语句应该是if((k >=1&&k< =6)&&(i!=0)&&(j!=0)||(k==0)) 。 答案:【1】sum=0 【2】i=1 【3】 (k >=1&&k< =6)&&(i!=0)&&(j!=0)||(k==0) 【真题2】 给定程序modi.c 中函数 fun 的功能是:计算n!。 例如,给n 输入5, 则输出120.000000。 请改正程序中的错误,使程序能输出正确的结果。 注意:不 要改动main 函数, #include < stdio.h > #include < conio.h > double fun ( int n ) { double result = 1.0 ; /************found************/ if n = = 0 return 1.0 ; while( n >1 && n < 170 ) /************found************/ result *= n-- return result ; } main ( ) { int n ; printf("Input N:") ; scanf("%d", &n) ; printf("\n\n%d! =%lf\n\n", n, fun(n)) ; } (2011年2月) 解析: 本题的考核点是C语言的运算符和语法。 解题思路:通过循环语句累积求整数n的阶积。本题的if语句中缺少括号且不 存在"= ="比较运算符,相等比较运算符应为"=="。C 语言中每条语句都以";" 结束,本题的第二个错误处的语句末缺少";"号,所以出现了语法错误。 【真题3】 请编一个函数fun(char *s),函数的功能是把字符串中的内容逆置。例 如:字符串中原有的内容为:abcdefg,则调用该函数后,串中的内容为: gfedcba。 注意: 部分源程序存在文件prog.c中。 请勿改动主函数main 和其它 函数中的任何内容,仅在函数fun 的花括号中填入你编写的若干语句。 #include < string.h > #include < conio.h > #include < stdio.h > #define N 81 fun(char *s) {……} main() { char a[N]; clrscr(); printf("Enter a string: ");gets(a); printf("The original string is: ");puts(a); fun(a); printf("\n"); printf("The string after modified: "); puts(a); } (2011年2月) 解析: 本题的考核点是C语言中的for 循环语句的使用。 提示思路:对于本 题,我们给出的参考函数采取的算法是:将第一个元素与最后一个元素互换, 第二个元素与倒数第二个互换…的方式进行倒排序。因为我们一次互换两个元 素,所以for循环语句执行length/2次(length 是字符串的长度)就可以把 全部元素互换一遍。 void fun ( char *s ) {int i ,length; char tmp; length = strlen( s ); /*统计字符串s 中字符的个数*/ for (i = 0;i < length / 2; i++) { /*以下三行即将s 中的第i 个字符与第length-i 个字符进行交互*/ tmp = s[i]; s[i] = s[length - i - 1]; s[length - i - 1] = tmp; } } |