【真题1】 下列给定程序中,函数fun()的功能是:根据输入的3 个边长(整型值), 判断能否构成三角形:若能构成等边三角形,则返回3,若是等腰三角形,则返回 2,若能构成三角形则返回1,若不能,则返回0。 试题程序: #include < math.h > #include < stdio.h > ___1___fun(int a,int b,int c) { if(___2___) {if(a==b&&b==c) return 3; else if(a==b||b==c||a==c) return 2; else return 1; } ___3___ return 0; } main() { int a,b,c,shape; printf("\nInput a,b,c: "); scanf("%d%d%d",&a,&b,&c); printf("\na=%d, b=%d, c=%d\n",a,b,c); shape=fun(a,b,c); printf("\n\nThe shape :%d\n",shape); } (2011年2月) 解析: 填空1:这里要问的是函数的类型,由主程序main()可知这个函数是 int型的,也可由其多个返回值语句来判断其类型。 填空2:很显然,这个条件判断语句是判断输入的三个边长是否可以构成三角形 的,由数学知识我们可以知道这个关系应该是a+b >c&&b+c >a&&a+c >b。 填空3:这是一道语法题,因为表面上看函数有多个返回值语句,好象不缺什 么,但你运行一下就会发现这个返回语句不会被调用,因其缺少了关键字 else,该题只要理解了if语句中的条件,并能读懂题目定义就可轻松解决。 答案:【1】int 【2】a+b >c&&b+c >a&&a+c >b 【3】else 【真题2】 文件modi.c 中程序的功能是:读入整数m(0≤m≤99),按下面的公式 计算并输出数列的第m 项。 ┌ 2, m = 1; │ 3, m = 2; FFF( m ) = ┤ 5, m = 3; └ FFF(m - 3) + FFF(m - 1), m > 3; 例如,若输入整数 9,则应输出:47。 请改正程序中的错误,使它能计算出正确的结果。 注意: #include < conio.h > #include < stdio.h > int FFF( int n ) { int i, f1 = 2, f2 = 3, f3 = 5, ff; if( n == 1 ) ff = f1; else if( n == 2 ) ff = f2; else if( n == 3 ) ff = f3; else /************found**********/ for( i = 4; i < n; i++ ) { ff = f1 + f3; f1 = f2; f2 = f3; f3 = ff; } return( ff ); } main() { int m; clrscr(); printf( "\nPlease enter a number:\n" ); scanf( "%d", &m ); /************found**********/ printf( "\nThe term %d is &d\n" m, FFF( m ) ); } (2011年2月) 解析: 本题的考核点是c 语言中的分支程序设计及for 循环语句的使用。 原程序中,for 循环语句里的"f1 = f2;f2 = f3;f3 = ff;"实际上就相当于 "f1 = FFF(i - 2);f2 = FFF(i - 1);f3 = ff;",所以无论n 有多大,f1 始终是 FFF(i - 2),f3 始终是ff,把"ff = f1 + f3"放在循环的开始,则for 循环和 FFF(i) = FFF(i -3)+ FFF(i - 1)的作用是完全相同的。 原程序中,for 循环的上界为n - 1,因此FFF函数返回的不是FFF(m)而是 FFF(m-1),如果想求FFF(9)却会返回FFF(8),所以应该把"for(i=4;i< n;i++)"改成"for(i=4;i< =n;i++)"或相同作用的语句。这是原程序中的第一 个错误。 另外,printf函数各参数之间应用逗号隔开,格式字符串的前缀是%而不是&。 所以应该把原程序中的"printf( "\nThe term %d is &d\n" m, FFF( m ) );" 改成"printf("\nThe term %d is %d\n",m,FFF(m) );"或相同作用的语句。 【真题3】 函数fun 的功能是:将两个两位数的正整数a、b 合并形成一个整数放在 c 中。合并的方式是:将a 数的十位和个位数依次放在c 数的千位和十位上,b 数的 十位和个位数依次放在c 数的百位和个位上。 例如,当a=45,b=12。调用该函数 后,c=4152。 注意:部分源程序存在文件prog.c 中。 请勿改动主函数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); } (2011年2月) 解析: 本题的考核点是求取整数相应位上的数值的算法。 提示思路:可用整除 和求余的运算求取整数各位上的数值。方法是整除相应位上的位权值,再对其 求余,余数即为相应位上的数值。 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=a_up*1000+b_up*100+a_low*10+b_low; /*将a 数的十位和 个位数依次放在c 数的千位和十位上,b 数的十位和个位数依次放在c 数的 百位和个位上*/ } |