全国计算机等级考试C语言程序设计上机考试习题集

  • 格式:doc
  • 大小:425.00 KB
  • 文档页数:140

全国计算机等级考试

C语言程序设计上机考试习题集

(2011年版)

南开上机100练

题目前带★号的是在2004年4月份上机考试中被考生们所确定了的上机题。

题目前带☆号的是在2004年9月份上机考试中被考生们所确定了的上机题。

题目中所提示的“无忧id xx”指的是2004年上半年版无忧模拟系统中的固定抽题序号

题目中所提示的“捷成id xx”指的是2004年上半年版捷成模拟系统中的固定抽题序号

*****************************************************************************************

题目1(无忧 id 14、id 27(提供isP()函数;捷成id 23题)

请编写一个函数jsValue(int m,int k,int xx[]),该函数的功能是:将大于整数m且紧靠m的k个素数存入数组xx传回。

最后调用函数writeDat()读取10组数据,分别得出结果且把结果输出到文件中。

部分源程序存在文件prog1.c中。

例如:若输入17 5 则应输出:19,23,29,31,37。

请勿改动主函数main()和写函数writeDat()的内容。

#include

#include

void readwriteDat();

int isP(int m)

{

int i;

for(i=2;i

if(m % i==0)return 0;

return 1;

}

void num(int m,int k,int xx[])

{ int s=0;

for(m=m+1;k>0;m++)

if(isP(m)) { xx[s++]=m; k--;}

}

main()

{

int m,n,xx[1000];

clrscr();

printf("\nPlease enter two integers:");

scanf("%d%d",&m,&n);

num(m,n,xx);

for(m=0;m

printf("%d ",xx[m]);

printf("\n");

readwriteDat();

}

void readwriteDat()

{

int m,n,xx[1000], i; FILE *rf,*wf;

rf=fopen("in.dat","r");

wf=fopen("","w");

for(i=0;i<10;i++){

fscanf(rf,"%d %d",&m,&n);

num(m,n,xx);

for(m=0;m

fprintf(wf,"\n");

}

fclose(rf);

fclose(wf);

}

无忧id 14题(无isP()函数)

#include

void jsValue(int m,int k,int xx[])

{ int i,j,s=0;

for(i=m+1;k>0;i++)

{ for(j=2;j

if(i%j==0) break;

if(i==j) { xx[s++]=i; k--;}

}

}

main()

{

int m,n,zz[100];

printf("\n请输入两个整数:");

scanf("%d%d",&m,&n);

jsValue(m,n,zz);

for(m=0;m

printf("\n");

writeDat();

}

writeDat()

{

int m,n,zz[100],i;

FILE *in,*out;

in=fopen("in.dat","r");

out=fopen("","w");

for(i=0;i<10;i++){

fscanf(in,"%d%d",&m,&n);

jsValue(m,n,zz);

for(m=0;m

fprintf(out,"\n"); }

fclose(in);

fclose(out);

}

另一解法:

void num(int m,int k,int xx[])

{

int n=0,data=m+1;

while(n

if(isP(data)) xx[n++]=data;

data++;}

}

*****************************************************************************************

★题目2(无忧 id 143 整数排序题)

已知数据文件IN.DAT中存有200个四位数,并已调用读函数readDat()把这些数存入数组a中,请考生编制一函数jsVal(),其功能是:如果四位数各位上的数字均是0或2或4或6或8,则统计出满足此条件的个数cnt,并把这些四位数按从大到小的顺序存入数组b中。最后main( )函数调用写函数writeDat()把结果cnt以及数组b中符合条件的四位数输出到文件中。

注意:部分源程序存在文件prog1.c中。

程序中已定义数组:a[200],b[200],已定义变量:cnt

请勿改动数据文件IN.DAT中的任何数据、主函数main()、读函数readDat()和写函数writeDat()的内容。

#include

#define MAX 200

int a[MAX], b[MAX], cnt = 0 ;

void jsVal()

{ int i,j,qw,bw,sw,gw;

for(i=0;i

{ qw=a[i]/1000; bw=a[i]/100%10;

sw=a[i]%100/10; gw=a[i]%10;

if(qw&&qw%2==0&&bw%2==0&&sw%2==0&&gw%2==0) b[cnt++]=a[i];

}

for(i=0;i

for(j=i+1;j

if(b[i]

}

void readDat()

{

int i ;

FILE *fp ;

fp = fopen("in.dat", "r") ;

for(i = 0 ; i < MAX ; i++) fscanf(fp, "%d", &a[i]) ;

fclose(fp) ;

}

void main()

{

int i ;

readDat() ;

jsVal() ;

printf("满足条件的数=%d\n", cnt) ;

for(i = 0 ; i < cnt ; i++) printf("%d ", b[i]) ;

printf("\n") ;

writeDat() ;

}

writeDat()

{

FILE *fp ;

int i ;

fp = fopen("", "w") ;

fprintf(fp, "%d\n", cnt) ;

for(i = 0 ; i < cnt ; i++) fprintf(fp, "%d\n", b[i]) ;

fclose(fp) ;

}

*****************************************************************************************

★☆题目3(无忧 id 133题;捷成id 59、99字符串位置倒置题)

函数ReadDat( )实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中;请编制函数StrOR( ),其函数的功能是:以行为单位依次把字符串中所有小写字母o左边的字符串内容移到该串的右边存放,然后把小写字母o删除,余下的字符串内容移到已处理字符串的左边存放,之后把已处理的字符串仍按行重新存入字符串数组xx中。最后main()函数调用函数WriteDat()把结果xx输出到文件中。

例如:原文:n any can create an index

you have the correct record.

结果:n any field. Yu can create an index

rd. yu have the crrect rec

原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。

注意:部分源程序存放在文件prog1.c中。

请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。

#include

#include

#include

char xx[50][80] ;

int maxline = 0 ; /* 文章的总行数 */

int ReadDat(void) ;

void WriteDat(void) ;

void StrOR(void)

{int i,righto,j,s,k;

char tem[80];

for(i=0;i