计算机二级C语言上机真题(83)【附详解】
【真题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);
}
行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);
}