第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;
while (n<1)
{ for(i=0; i<n; i++ )
if( xa[i] ) 2;
if( i3){ 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。
第三处:当退出循环体还是进行判断,i和n的值是否相等,如果相等,则表示该随机整数不重复,可以存放到指定的数组中,所以应填:n。
给定程序MODI1.C中函数fun的功能是: 先从键盘上输入一个3行3列矩阵的各个元素的值, 然后输出主对角线元素之和。
请改正函数fun中的错误或在横线处填上适当的内容并把横线删除,使它能得出正确的结果。
注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!
给定源程序:
#include <stdio.h>
int fun()
{
int a[3][3],sum;
int i,j;
______;
for (i=0;i<3;i++)
{ for (j=0;j<3;j++)
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]);。
编写程序, 实现矩阵(3行3列)的转置(即行列互换)
例如, 输入下面的矩阵:
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] ;
}