知ing

最新计算机二级C语言上机试题汇编100套

NCRE研究组 编 / 高等教育出版社

゛Zirro、Y 上传

查看本书

67套: 

给定程序中,函数fun的功能是:调用随机函数产生20个互不相同的整数放在形参a所指数组中(此数组在主函数中已置0)。 

请在程序的下划线处填入正确的内容并把下划线删除使程序得出正确的结果。 

注意:源程序存放在考生文件夹下的BLANK1.C中。 

不得增行或删行,也不得更改程序的结构! 

给定源程序: 

#include <stdlib.h> 

#define N 20 

void fun( int *a) 

{ int i, x, n=0; 

x=rand()%20; 

/ **********found**********/ 

while (n<__1__) 

{ for(i=0; i<n; i++ ) 

/ **********found**********/ 

if( x==a[i] ) __2__; 

/ **********found**********/ 

if( i==__3__){ a[n]=x; n++; } 

x=rand()%20; 

main() 

{ int x[N]={0} ,i; 

fun( x ); 

printf("The result : \n"); 

for( i=0; i<N; i++ ) 

{ printf("%4d",x[i]); 

if((i+1)%5==0)printf("\n"); 

printf("\n\n"); 

解题思路: 

第一处:一共产生20个随机数,所以应填:N。 

第二处:要求产生不同的20个整数,所以采用for循环对已产生的随机数进行比较,是否有相同数,如果有相同,则退出循环体,所以应填:break。 

第三处:当退出循环体还是进行判断,in的值是否相等,如果相等,则表示该随机整数不重复,可以存放到指定的数组中,所以应填:n。 

*************************************************** 

给定程序MODI1.C中函数fun的功能是先从键盘上输入一个33列矩阵的各个元素的值然后输出主对角线元素之和。 

请改正函数fun中的错误或在横线处填上适当的内容并把横线删除,使它能得出正确的结果。 

注意:不要改动 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(); 

解题思路: 

第一处:变量sum进行初始化,由于计算累加和,所以应为:sum=0;。 

第二处:读入整型数,应使用地址读入,所以应为:scanf("%d",&a[i][j]);。 

*************************************************** 

编写程序实现矩阵(33列)的转置(即行列互换

例如输入下面的矩阵

100 200 300 

400 500 600 

700 800 900 

程序输出

100 400 700 

200 500 800 

300 600 900 

注意部分源程序在文件PROG1.C中。 

请勿改动主函数main和其它函数中的任何内容仅在函数fun的花括号中填入你编写的若干语句。 

给定源程序: 

#include <stdio.h> 

int fun(int array[3][3]) 

main() 

int i,j; 

int array[3][3]={{100,200,300}, 

{400,500,600}, 

{700,800,900}}; 

for (i=0;i<3;i++) 

{ for (j=0;j<3;j++) 

printf("%7d",array[i][j]); 

printf("\n"); 

fun(array); 

printf("Converted array:\n"); 

for (i=0;i<3;i++) 

{ for (j=0;j<3;j++) 

printf("%7d",array[i][j]); 

printf("\n"); 

NONO(); 

 

解题思路: 

本题是解决矩阵的转置问题。 

参考答案: 

int fun(int array[3][3]) 

int i,j,arr[3][3] ; 

memcpy(arr, array, 9*sizeof(int)) ; 

for(i = 0 ; i < 3 ; i++) 

for(j = 0 ; j < 3 ; j++) 

array[i][j] = arr[j][i] ; 

※※※※※※※※※※※※※※※※※※※※※※※※※ 


查看更多