江苏省高校计算机等级考试命题研究院 江苏省高校计算机等级考试辅导
2008秋江苏省计算机二级C语言上机试卷

2008秋季考试试卷分析:

上机试卷1

一:改错题:

[程序功能]

  NN列二维数组的每一行排序,偶数行(0当作偶数)由小到大排序,奇数行由大到小排序

[测试数据与运行结果]

测试数据:

3   4   2    1

8   7   5    6

12  10  11   9

15  14  16   13

运行结果:

1   2   3  4

8   7   6  5

9  10  11  12

16  15  14  13

含有错误的源程序:

#include

#define N 4

void swap(int *p1, int *p2)

{int p;

 p=p1;p1=p2;p2=p;

}

 

void sort(int a[N][N])

{int i,j,k;

 for(i=0;i

   for(j=0;j

      for(k=j+1;k

         if(i%2==0?a[i][j]a[i][k])

             swap(a[i]+j,a[i]+k);

}

 

void main()

{int a[N][N]={{3,4,2,1},{8,7,5,6},{12,10,11,9},{15,14,16,13}};

 int i,j;

 sort(a[N][N]);

 for(i=0;i

 {for(j=0;j

    printf(“=”,a[i][j]);

  printf(“\n”);

}

}

解析:做本改错题目的时候,首先将题目输入计算机中,然后运行,运行的时候一定会有错误出现,在改错题目中有两种错误:(1)语法错误(2)逻辑错误,在本题目中,运行后会出现3个警告,警告1指向swap函数的p变量,我们可以看到p是变量,p1p2是指针变量,两者不匹配,所以我们可以得到第一个错误,警告2指向sort(a[N][N]),我们知道在C语言中,调用函数的参数时,如果参数是数组,则只传递数组的名称,所以可以知道第二个错误sort(a[N][N])应改为sort(a),剩下的错误是逻辑错误,在考试中,一定要把a[N][N]数组中的具体数据代入函数sort,我们可以发现k是有问题的,应改为K这样才能每一个数组的值进行比较,否则就缺少最后一个没有被比较,在本题目中,swap函数作用是交换数值,sort函数的作用是比较每一行元素的值调用swap进行交换

错误1: p=p1;p1=p2;p2=p;    应改为: p=*p1;*p1=*p2;*p2=p;

错误2: for(k=j+1;k  应改为: for(k=j+1;k

错误3: i%2==0?a[i][j]a[i][k]  应改为: i%2==0?a[i][j]>a[i][k]:a[i][j]

错误4: sort(a[N][N]);        应改为: sort(a);

:编程题:

[程序功能]:

找出符合以下条件的Troitsky,将该数的首位数字移动到末位数字之后得到的数是原数的整数倍

例如:142857的首位数字1移动到末位之后得到的数是428571,428571=3*142857,因此142857Troitsky

编程要求:

1.       编写函数int Troitsky(long a[]),其功能是求出1 000 000以内的所有Troitsky,并将它们依次放入a指向的数组中,函数返回找到的Troitsky数的个数.

2.       编写main函数,调用Troitsky函数,将运行结果输出到屏幕及结果文件myf2.out中。

最后将考生的准考证号也保存到结果文件myf2.out.

[测试数据与运行结果]

142857     285714

1.将源文件取名为myf2c,输出结果文件取名为myf2out 

2.数据文件的打开、使用和关闭等操作均用C标准库中缓冲文件系统的文件操作函数实现。

3.源程序文件和运行结果文件均须保存在T:盘的根目录下供阅卷用。

4.不要将myf2objmyf2exe保存到T:盘中。

解析:本题目中主要考察的是如何将一个数转化为另一个数,因为判分标准是按照步骤给分,所以,对文件操作的一定要记住,从FILE *fp开始到结束的格式一定要背过

答案:

#include

int Troitsky(long a[])

{int count=0,i=0;

 long n,n1;

 for(n=1;n<=1000000;n++)

 {n1=(n0000)*10+n/100000;

  for(i=1;i<10;i++)

         if(i*n==n1&&n!=n1)

         {a[count++]=n;

       break;

         }

 }

 return count;

}

 

void main()

{long a[10],i;

 int k;

 FILE *fp;

 fp=fopen("myf2.out","w");

 if(fp==NULL) exit(0);

 k=Troitsky(a);

 for(i=0;i

 {printf("ld",a[i]);

  fprintf(fp,"ld",a[i]);

 }

 printf("\n");

 fprintf(fp,"\n");

 fprintf(fp,"\nmy exam number is:012345678\n");

 fclose(fp);

}