【真题1】 给定程序中,函数fun 的功能是:有N×N 矩阵,根据给定的m(m< =N)值,将每行元素中的值均右移m 个位置,左边置为0。例如,N=3,m=2, 有下列矩阵:1 2 3 4 5 6 7 8 9 程序执行结果为 0 0 1 0 0 4 0 0 7 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确结果。 #include < stdio.h >#define N 4 void fun(int (*t)[N], int m) { int i, j; /**********found**********/ for(i=0; i< N; ___1___ ) { for(j=N-1-m; j >=0; j--) /**********found**********/ t[i][j+___2___ ]=t[i][j]; /**********found**********/ for(j=0; j< ___3___; j++) t[i][j]=0; } } main() { int t[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10}, i, j, m; printf("\nThe original array:\n"); for(i=0; i< N; i++) { for(j=0; j< N; j++) printf("%2d ",t[i][j]); printf("\n"); } printf("Input m (m< =%d): ",N);scanf("%d",&m); fun(t,m); printf("\nThe result is:\n"); for(i=0; i< N; i++) { for(j=0; j< N; j++) printf("%2d ",t[i][j]); printf("\n"); } } (2011年2月) 解析: 本题的考核点是C语言中的循环嵌套语句的使用。 提示思路:使用嵌套循环,外循环是行循环,内循环是列循环,这样可以对整 个数组中的元素进行符合条件的运算。题目要求将每行元素中的值均右移m 个 位置,左边置为0,所以首先要使用for语句将每行元素中的值均右移m个位 置,再将左边置为0。 答案:【1】N 【2】M 【3】bb[i]/N 疑难解答 → http://www.51pass.org/kitzod 【真题2】 给定程序modi.c 中,函数fun 的功能是:从低位开始取出长整型变量s 中奇数位上的数,依次构成一个新数放在t 中。 例如,当s 中的数为:7654321 时,t 中的数为:7531。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动main 函数, #include < conio.h >#include < stdio.h >/************found************/ void fun(long s,long t) { long s1=10; *t=s%10; while (s >0) { s=s/100; *t=s%10*s1+*t; /************found************/ s1=s1*100; } } main() {long s,t; clrscr(); printf("\nPlease enter s:");scanf("%ld",&s); fun(s,&t); printf("The result is:%ld\n",t); } (2011年2月) 解析: 本题着重考察考生对C 语言中函数入口参数的用法以及一些简单算法的 掌握情况。 从主函数中可以看出,t是一个字串,因此在fun 函数的参数表中应将t改为字 符指针或字符数组,即把"void fun (long s, long t)"语句改为"void fun(long s,long *t)"或相同作用的语句。 根据题面要求从低位开始取出长整型变量s 中奇数位上的数来设计功能函数, 用*t = s % 10 取出长整型变量s中的第一个奇数位上的数字,并放在新串t 中。 然后利用while循环体依次取出长整型变量s中的其它奇数位,在这里, 语句sl = sl*100 应改为sl = sl*10 或等效语句,否则在原长整型变量s取出 的奇数位将在新的数字串中隔0排列! 【真题3】 请编写函数fun,它的功能是:计算并输出n(包括n)以内能被5 或9 整除的所有自然数的倒数之和。 例如,在主函数中从键盘给n 输入20 后,输出为:s=0.583333。 注意:要求n 的值不大于100。 部分源程序在文件prog.c 中。 请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入你编 写的若干语句。 #include < stdio.h >double fun(int n) {……} main() { int n; double s; printf("\nInput n: "); scanf("%d",&n); s=fun(n); printf("\n\ns=%f\n",s); } (2011年2月) 解析: 本题的考核点是求模运算和基本c 语句的使用。 解题思路:在给出的参考程序中,由于函数的返回值为双精度型,所以将sum 定义为双精度型变量,初值为0.0,再求出符合条件的n 中能被5或9 整除的 自然数,同时累加自然数的倒数之和,放入变量sum 中并返回。 #include < stdio.h > double fun(int n) {int i; double sum=0.0; /*将sum 定义为双精度型变量,并给其赋初值为0.0*/ if(n >0&&n< =100) {for (i=1;i< =n;i++) if(i%5==0||i%9==0) /*判断i是否能被5 或者9 整除*/ sum+=1.0/i; /*累加自然数的倒数之和,放入变量sum 中*/ } return sum; /*返回结果*/ } |