模拟试题

3773考试网计算机等级考试模拟试题正文

2010年9月NCRE二级C语言上机模拟冲刺一

来源:fjzsksw.com 2010-9-14 13:32:04

 

 

第一套上机试题

  一、改错题

  【分析】:改错题的错误一般可分为两类,一类是语法错误,这类错误可通过调试程序改正,较容易;另一类是逻辑错误,这类错误程序能运行,但结果不正确,这类错误相对较难,修改前必须要看懂和理解程序。

  #include"stdio.h"

  #define n 4 #define m 3 /*语法错,#define m 3需另起一行*/

  int a[n][m],s[m];

  p(int j)/*此函数的功能为:找出a数组中第j列的最小元素的值及行号,函数成功运行后,i中即为j列的最小元素的行号,s[j]中即为j列的最小元素的值*/

  {int k,i,x;

  x=a[0][j];i=0; /*逻辑错,从函数的功能可知,a[0][j]也应赋值给s[j],所以x=a[0][j]应改为s[j]=x=a[0][j]*/

  for(k=1;k

  if(a[k][j]

  {i=k;s[j]=x=a[k][j];}

  return i;

  }

  main()

  {int index[m],i,j,k;

  for(i=0;i

  for(j=0;j

  scanf("%d",a[i][j]);/*语法错,但编译时不会报错,scanf语句的一般形式为scanf(格式控制,地址表列),所以a[i][j]应改为&a[i][j])*/

  for(j=0,j

  {index[j]=p[j];

  printf("a[%d,%d]=%d\n",index[j],j,s[j]);

  }

  i=s[1];k=0; /*逻辑错,数组s中存放的是a数组中每一列的最小值,比较时应从数组的第0个元素开始,而下面的for循环是从第1个元素开始的,所以i=s[1]应改为i=s[0]*/

  for(j=1;j

  if(s[j]

  {i=s[j];k=j;}

  printf("min=a[%d,%d]=%d",index[k],k,i); }

  二、编程题

  【分析】:本题的主要功能是建立一个3行8列的二维数组,并给其元素赋值,其中第1、2行的值可通过递推公式xi+1=(25*xi+357)%1024得到,第三行的值取前两行同列元素的最大公约数,所以编程时可用一个函数来实现求公约数的算法。

  #include

  #include

  #define n 8

  /*函数gcd实现求最大公约数的算法*/

  gcd(int a,int b)

  {int c;

  while(b!=0)

  {c=a%b;a=b;b=c;}

  return a;

  }

  main()

  {int i,j,x,a[3][n];

  FILE *f;

  if((f=fopen("d:\\temp\\1\\myf2.out","w"))= =NULL)

  {printf("Create File myf2.out Failed!\n");exit(0);}

  x=26;

  /*下面二重for循环实现给第1、2行数组元素赋值的功能*/

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

  for(j=0;j

  {a[i][j]=x;x=(25*x+357)%1024;}

  /*下面for循环通过调用gcd函数实现给第3行数组元素赋值的功能*/

  for(j=0;j

  a[2][j]=gcd(a[0][j],a[1][j]);

  /*下面for循环实现按题目所给格式输出二维数组的功能*/

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

  {for(j=0;j

  fprintf(f,"\n");

  }

  fclose(f); }

 

 

 

触屏版 电脑版
3773考试网 琼ICP备12003406号-1