就业数据资源平台
当前位置:首页 > C语言程序设计
2014年计算机二级C语言上机模拟试题65

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

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


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


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


  给定源程序: 


  #include  


  #define N 20 


  void fun( int *a) 


  { int i, x, n=0; 


  x=rand() ; 


  while (n<__1__) 


  { for(i=0; i  if( x==a[i] ) __2__; 


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


  x=rand() ; 


  } 


  } 


  main() 


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


  fun( x ); 


  printf("The result : \n"); 


  for( i=0; i  { printf("M",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  


  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  


  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("}",array[i][j]); 


  printf("\n"); 


  } 


  fun(array); 


  printf("Converted array:\n"); 


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


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


  printf("}",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] ; 


  } 


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

就业数据资源平台