【真题1】 给定程序的功能是根据形参m(2≤m≤9),在二维数组中存放一张m 行m 列的表格,由main()函数输出。 例如,若输入2 | 若输入4 则输出: | 则输出: 1 2 | 1 2 3 4 2 4 | 2 4 6 8 | 3 6 9 12 | 4 8 12 16 #include < stdio.h >#define M 10 int a[M][M] = {0} ; fun(int a[][M], int m) { int j, k ; for (j = 0 ; j < m ; j++ ) for (k = 0 ; k < m ; k++ ) /**************found**************/ ___1___ = (k+1)*(j+1); } main ( ) { int i, j, n ; printf ( " Enter n : " ) ; scanf ("%d", &n ) ; /**************found**************/ fun ( ___2___ ) ; for ( i = 0 ; i < n ; i++) { for (j = 0 ; j < n ; j++) /**************found**************/ printf ( "%4d", ___3___ ) ; printf ( "\n" ) ; } } (2011年2月) 解析: 首先,我们必须先读懂题中程序的大致意思,这是填空的重要前提。 程序中的重要思想如下: 1、通过函数fun()建立多维数组,具体数组的维数由用户输入的参数n (2≤n≤9)来决定; 2、观察题意,多维数组在列方向是由1开始的自然数,在行方向上是行首第一 个数的n 倍数。 题中第一个空填"a[j][k]":根据题意,在函数fun()中的嵌套循环中,循环体 的内容是为了给m 维的多维数组赋值,这个多维数组在列方向是由1 开始的自 然数,在行方向上是行首第一数的n 倍数,。 题中第二个空填"a,n":此句是调用fun()函数,括弧中是其实际参数。 题中第三个空填"a[i][j]":利用嵌套循环语句输出多维数组的值。 答案:【1】a[j][k] 【2】a,n 【3】a[i][j] 【真题2】 给定程序modi.c 的功能是:读入一个整数m(5≤m≤20),函数 getarr 调用函数rnd 获得m 个随机整数,函数sortpb 将这m个随机整数从小到大 排序。 例如,若输入整数7,则应输出:3 10 17 28 32 36 47。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动main 函数, #include "conio.h" #include "stdio.h" sortpb ( int n, int *a ) {/************found************/ Int i, j, p, t for ( j = 0; j < n-1 ; j++ ) { p = j; /************found************/ for ( i = j + 1; i < n ; i ++ ) If ( a[p] > a[i] ) p = i; if ( p != j ) { t = a[j]; a[j] = a[p]; a[p] = t; } } } double rnd ( ) { static t = 29, c = 217, m = 1024, r = 0; r =( r*t + c )%m; return( ( double )r/m ); } getarr( int n, int *x ) { int i; for( i = 1; i < = n; i++, x++ ) *x = ( int )( 50*rnd() ); } putarr( int n, int *z ) { int i; for( i = 1; i < = n; i++, z++ ) { printf( "%4d", *z ); if ( !( i%10 ) ) printf( "\n" ); } printf("\n"); } main() { int aa[20], n; clrscr(); printf( "\nPlease enter an integer number between 5 and 20: " ); scanf( "%d", &n ); getarr( n, aa ); printf( "\n\nBefore sorting %d numbers:\n", n ); putarr( n, aa ); sortpb( n, aa ); printf( "\nAfter sorting %d numbers:\n", n ); putarr( n, aa ); } (2011年2月) 解析: 本题的考核点是C语言的一些基本用法。 C 语言规定:每个语句和数据定义的最后必须有一个分号,因此,"int i,j,p,t " 应改为"int i,j,p,t; "或相同作用的语句。 C 语言区分大小写,所以,"If( a[p] >a[i] ) p=i ; "应改为"if ( a[p] >a[i] ) p=i; "或相同作用的语句。 【真题3】 编写函数fun,它的功能是:计算正整数n 的所有因子(1 和n除外) 之和作为函数值返回。 例如:n=120 时,函数值为239。 注意:部分源程序存在文件prog.c 中。 请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入你编 写的若干语句。 #include < conio.h >#include < stdio.h >int fun(int n) {……} main() /*主函数*/ { clrscr(); printf("%d\n",fun(120)); } (2011年2月) 解析: 本题的考核点是计算n 所有因子的算法。 解题思路:判断因子的方法是:能被n整除的数。由于题意中指明需将1和n 除外,所以循环的范围应从2至n-1。 本评析仅供参考。 int fun(int n) { int i,s=0; /*能整除n的自然数即称为因子*/ for (i=2;i< n;i++) if (n%i==0) s=s+i; return (s); } |