【真题1】 函数fun 的功能是:统计长整数n 的各个位上出现数字1、2、3 的次 数,并通过外部(全局)变量c1、c2、c3返回主函数。例如,当n=123114350 时,结果应该为:c1=3 c2=1 c3=2。 #include < stdio.h >int c1,c2,c3; void fun(long n) { c1 = c2 = c3 = 0; while (n) { /**********found**********/ switch(___1___) { /**********found**********/ case 1: c1++;___2___; /**********found**********/ case 2: c2++;___3___; case 3: c3++; } n /= 10; } } main() { long n=123114350L; fun(n); printf("\nThe result :\n"); printf("n=%ld c1=%d c2=%d c3=%d\n",n,c1,c2,c3); } 解析: 本题的考核点是统计长整数n的各个位上出现数字1、2、3 的次数。 提示思路:通过while循环,检验长整数n 中的每一个字符,再使用switch分 支判断语句,累加计算出各个数字的个数。 答案:【1】n%10 【2】break 【3】break 【真题2】 给定程序modi.c 中,fun 函数的功能是:先从键盘上输入一个3 行3 列矩阵的各个元素的值,然后输出主对角线元素之积。 请改正程序中的错误,或在横线处填上适当的内容并把横线删除,使它能得出正确的 结果。 注意:不要改动main 函数, #include < stdio.h >int fun() { int a[3][3],sum; int i,j; /************found************/ _______; for (i=0;i< 3;i++) { for (j=0;j< 3;j++) /************found************/ scanf("%d" a[i][j]); } for (i=0;i< 3;i++) sum=sum*a[i][i]; printf("Sum=%d\n",sum); } main() { fun(); } (2011年2月) 解析: 本题的考核点是C语言的基本语句的使用。 由题意可知,程序中通过sum 变量累计对角线元素的积,在初始化时需先为 sum 赋初始值,所以应在横线处填入:"sum=1;"。 根据scanf语句的语法规则,格式控制与输入项地址表之间需用逗号分隔,所 以 "scanf("%d" a[i][j]);"应改为"scanf("%d,",&a[i][j]);"或相同作用的语 句。 【真题3】 请编写一个函数fun(),它的功能是:求出一个4×M整型二维数组中最 小元素的值,并将此值返回调用函数。 注意:部分源程序给出如下。 请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入所编 写的若干语句。 试题程序: #define M 4 #include < stdio.h >fun (int a[][M]) {……} main() {int arr[4][M]={11,3,9,35,42,-4,24,32,6,48,-32,7,23,34,12,-7}; printf("min=%d\n",fun(arr)); } (2011年2月) 解析: fun (int a[][M]) { int i,j,min=a[0][0]; for(i=0;i< 4;i++) for(j=0;j< M;j++) if(min >a[i][j]) min=a[i][j]; /*求出二维数组的最小值*/ return min; } 【解析】此类求最大值或最小值的C语言问题,我们可以采用逐个比较的方 式。要求数组中的所有元素走动一遍,并从中找出最大、最小值,要注意一开 始应使min存放数组中的第一个元素的值。可按逐行查找也可按逐列查找的方 式,本题采用的是逐行查找的方式。即行下标在外层循环,列下标在内层循 环,因为在循环的嵌套中越在内层循环,循环变化就越快。 |