2007年(春)上机试卷(03)

  • 格式:doc
  • 大小:24.00 KB
  • 文档页数:2

2007年(春)上机试卷(03)
(本试卷上机时间为70分钟)
一,改错题(18分)
[程序功能]
验证:在7~2000之间的所有素数中存在这样的两个素数,它们的差恰好是1898。

算法提示:main函数先将7~2000之间的所有素数放入a数组中,然后调用fun 函数验证命题。

若命题成立,则fun函数将找到的两个素数所在的数组元素下标保存到x和y指向的两个变量中,fun函数返回1,否则返回0。

main函数根据fun函数的返回值,输出满足条件的这两个素数,或输出"not found!"。

[测试数据与运行结果]
运行结果为:1951-53=1898
[含有错误的源程序]
#include"stdio.h"
#include "conio.h"
int prime(int n)
{ int i;
for(i=2;i<=n/2;i++)
if(n%i==0) return 0;
else return 1;
}
int fun(int a[],int n,int *x,int *y)
{ int i,j;
for(i=0;i<N-1;I++)
for(j=1;j<N;J++)
if(a[j]-a[i]==1898)
{ x=i,y=j; return 1; }
return 0;
}
main()
{ int a[1000]=0;int i,k=0,flag,m,n;
for(i=7;i<2000;i+=2)
if(prime(i)) a[k++]=i;
flag=fun(a,k,m,n);
if(flag) printf("%d-%d=%d\n",a[n],a[m],a[n]-a[m]);
else printf("not found!\n");
getch();
}
[要求]
1.将上述程序录入到文件myf1. c中,根据题目要求及程序中语句之间的逻辑关系对程序中的错误进行修改。

2.改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译预处理命令,但不能增加其它语句,也不能删去整条语句。

3.改正后的源程序myf1.c保存在考试软盘的根目录中供阅卷使用,否则不予评分。

二,编程题(22分)
[程序功能]
以矩阵的行作为排序的交换单位,使得排序后的矩阵按指定列的元素值递减有序。

[编程要求]
1.编写函数void sort(int x[][4],int n,int col)。

函数功能:对x指向的二维数组(该数组中保存了一个n×4矩阵)以行作为交换单位,按照下标为col的列元素值做递减排序。

2.编写main函数。

函数功能:声明一个3行4列二维数组并用测试数据初始化该数组,调用sort 函数对该数组中保存的矩阵按第3列(列下标为2)排序,将排序后二维数组中的矩阵输出到屏幕并用写文件函数保存到结果文件myf2.out中。

最后将考生本人的准考证号字符串也保存到结果文件myf2.out中。

[测试数据与运行结果]
测试数据:
101 80 60 90
102 70 90 50
103 60 70 80
运行结果(按第3列排序后):
102 70 90 50
103 60 70 80
101 80 60 90
My exam number is:考生本人准考证号字符串
[要求]
1.源程序文件名必须取为myf
2.c,输出结果文件名必须取为myf2.out。

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

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

4 .不要复制扩展名为OBJ和EXE的文件到考试盘上。