江苏二级上机(01-05 10年)

更新时间:2023-11-19 08:46:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

2010春江苏二级C上机试题 二级 C语言上机试卷

(本试卷完成时间为70分钟) 一、改错题(16分) 【程序功能】

验证3(n范围内的任意两个相邻素数的平方之间至少存在4个素数。例如,5和7是两个相邻素数,5^2(25)与7^2(49)之间存在6个素数:29 31 37 41 43 47。 【测试数据与运行结果】 显示:input n: 输入:10 输出:

3~5 k=5

11 13 17 19 23 5~7 k=6

29 31 37 41 43 47 【含有错误的源程序】 #include 样include int prime(int n) {int i,flag=1;

for(i=1;i<=sqrt(n);i++) if(n%i==0)flag=0; return flag; }

int fun(int a[],int n) { int i,k=0;

for(i=3;i<=n;i++) if(prime(i)) a[k++]=i; return k;

’ void fun1(int m,int n, int b[]) { int i,k=0;

if(m>n) return 0; for(i=m*m;i

void main()

{int a[50]={0},b[100]={0},i,m,k,j,n; printf(\:\ scanf(\ m=fun(a,n);

for(i=O;i

printf(\ k=%d\

if(k<4){printf(\ for(j=0;j

{if(j=O)prinff(\ printf(\ }

printf(\ }

getch();

}

【要求】

1.将上述程序录入到文件myf1.c中,根据题目要求及程序中语句之间的逻辑关系对程序中的错误进行修改。

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

3.改正后的源程序(文件名myf1.c)保存在T:盘根目录中供阅卷使用,否则不予评分。 二、编程题(24分) 【程序功能】

在给定范围内查找k使得用公式k^2+k+17生成的整数满足以下条件:该数的十进制表示中低3位数字相同,去掉低3位后的整数是回文数。例如,当k=461时用公式生成的整数 是212999,该数满足所给条件。 【编程要求】

1.编写函数int findnum(int n1,int n2,long a[][2])实现以下功能:k依次取n1~n2范围 内的每个整数,分别用每个k及公式k2+k+17生成整数y,若y满足给定条件,则将k值及y 值保存到a指向的数组中,函数返回a数组中k的个数。

2.编写函数main实现以下功能:声明二维数组a和变量n1、n2,输入两个整数并保存到 n1、n2中,用n1、n2及a数组作实参调用findnum函数,按所给格式输出a数组中的数据到屏幕及文件myf2.out中。最后将考生本人的准考证号输出到文件myf2.out中。

【测试数据与运行结果】

输入:n1=1,n2=10000 输出:k number 461 212999 586 343999 3839 14741777 【要求】

1.源程序文件名为myf2.c,输出结果文件名为myf2.out。

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

3.源程序文件和运行结果文件均需保存在T:盘根目录中供阅卷使用。 4.不要复制扩展名为obj和exe的文件到T:盘中。 参考答案

一、改错题

for(i=1;i<=sqrt(n);i++) 改为i=2 void fun1(int m,int n,int b[]) 改为int {k=fun1(a,a[i+1],b[0]); 改为b

{if(j=0)printf(\ 改为j==0 二、编程题

#include

int findnum(int n1,int n2,long a[][2]) { int i=0,j;

long x1,x2,x3,y,k; for(k=n1;k<=n2;k++) {y=k*k+k+17;

x1=x2=y/1000;x3=0; while(x1>0)

{x3=x3*10+x1;x1=x1/10;}

if(x2==x3&&y==y/10&&y==y/100) { a[0]=k;a[i++][1]=y; } }

return i; }

main()

{int i,j;long a[10][2],n1,n2; FILE *fp; fp=fopen(\ scanf(\ j=findnum(n1,n2,a); printf(\

for(i=0;i

for(i=0;i

2001年(春)C语言上机试卷

一、改错题 【题目】

本程序计算并输出二维数组a的每一列最小元素的值及其行号、列号,整个数组a中最小元素的值及其行号、列号。含有错误的源程序为: #include\

#define n 4 #define m 3 int a[n][m],s[m];

p(int j) {int k,i,x; x=a[0][j];i=0; for(k=1;k

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

main()

{int index[m],i,j,k; for(i=0;i

scanf(\ for(j=0,j

printf(\ }

i=s[1];k=0;

for(j=1;j

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

printf(\}

注:调试程序时,可以随意输入测试数据,最后运行本程序时,必须从键盘输入下列数据: 6 4 16 9 7 13 8 18 15 5 12 19 【要求】:

1.将上述程序录入到文件 myf1.c中,然后根据题目的要求以及程序中语句之间的逻辑关系对程序中的错误进行修改。

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

3.将改正后的源程序(文件名myf1.c)放在考试盘的根目录下,供阅卷用。 二、编程题

【题目】建立数组a[3][8],其中前两行元素产生方法是:

用初值x1=26及公式xi+1=(25*xi+357)24,产生一个数列:x1,x2,…,x16。其中x1~x8作为a的第一行元素;x9~x16作为a的第二行元素;第三行的元素值取前两行同列元素的最大公约数。最后把数组a的元素写到文件myf2.out中,每写完a的一行元素要换行。 【要求】

1.将源程序取名为myf2.c 输出结果文件取名为myf2.out。

2.数据文件的打开、使用、关闭均按TURBO C文件操作实现。

3.源程序文件和运行结果文件均需放在考试盘的根目录下,供阅卷用。 4.不要将myf2.obj和myf2.exe保存到考试盘上。

上机试题

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

#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

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

main()

{int index[m],i,j,k; for(i=0;i

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

printf(\ }

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

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

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

/*函数gcd实现求最大公约数的算法*/ gcd(int a,int b) {int c;

while(b!=0)

本文来源:https://www.bwwdw.com/article/hhxv.html

Top