C语言02 - 08年春夏学期考试试卷及答案汇总 下载本文

#include

#define N 5 void main() { int i,j,a[N][N];

int left=0,right=N-1,up=0,down=N-1; int x=1,row=right,col=down,d=1,done; while(x<=N*N) {a[row][col]=x; x++; do

{switch(d) {case 1:col--;

if(col

if(row

if(col>right){col=right;d=4;continue;} else {done=1;break;} case 4:row++;

if(row==down)

{down--;left++;up++;right--; row=down;d=1;continue; }

else {done=1;break;} }/* end of switch */ }while(!done);

}/* end of while(x<=N*N)*/ for(i=0;i

四、程序填空题(每空2分,共40分)

1. 输入n(2≤n≤s,程序不需要对此范围进行判别),再输入n个整数保存到数组a中,通过循环

查找n个数中是否有重复的数,如果有则输出Yes,否则输出No.要求在循环过程中,任何两

个数的比较不得超过1次(比如对a[0]与a[1]比较后接下去又对a[1]与a[0]比较是不合要求的),并且要求一旦找到有数重复则立即结束循环。 # include void main() { int a[5],i,j,n;

scanf(“%d”,&n); for(i=0;i

scanf(\

for(i=0;i

{ for( (1) ;j<=n-1;j++) { if(a[i]==a[j])

(2) ; }

if( (3) ) break; }

if( (4) )puts(\else puts(\ }

2.hex()是一个递归函数,该函数的功能是通过递归调用把一个长整数转化成十六进制字符串并返回所得十六进制数的位数。main()输入长整数x,调用hex()对它进行转化(转化结果存放在字符数组a中),最后输出结果。例如:输入13,返回n=1输出D;输入100,则返回n=2输出64;输入65535,则返回n=4输出FFFF。 # include void main()

{char a[9]; int n;

unsigned long int x;; scanf(“%lu”,&x); n=hex(x,a); (5) ; pus(a) };

int hex( (6) )

{char t[]=\ int n; if(x<16) {a[0]=t[x]; return 1; }

n=hex(x/16,a);

a[n]= (7) ; return (8) ; }

3.设文件file1.txt中以如下格式存放一批学生的姓名及成绩: Tom 80 Jerry 90

姓名与成绩之间用至少一个空格分隔并且每个学生的姓名中不含空格.现通过编程读取file1.txt中的资料,找出其中成绩最高的那位学生(假定最高分唯一),并把该生的资料写入file2.txt中.

#include #include

typedef struct student { char name[10]; int score; }ST;

void main() { FILE *fp1,*fp2; ST a,max;

fp1=fopen(\ fp2=fopen(\ if( (9) ) {put(\ exit(0);

}

while( (10) ) {

(11) ; if(a.score>max.score) {

(12) ; max.score=a.score; }

}

fprintf(fp2,“%s %d\\n”,max.name,max.score); fclose(fp1); fclose(fp2);

}

4. rotate()函数的功能是把字符串s循环右移t次,所谓循环右移是指各个字符分别向右移动1个位置,原先最右边的字符移出后填到最左边的空位上。例如字符\右移1次就变成\字符串\右移2次就变成\。函数main()输入一行字符存放到字符数组a中,调用rotate()循环右移3次,最后用puts()输出结果。 # include #include void rotae(char *s,int t) {int i,j,n;

char c;

(13) ; for(i=0;i

{c=s[n-1];

for( (14) ) s[j]=s[j-1];

(15) ; } }

void main()

{char a[81];

gets(a);

(16) ; puts(); }

5. 输入一个英文句子保存到字符数组a中(句子中各个单词用一个或多个空格分隔,第一个单词前面可以有空格,最后一个单词后面也可以有空格),接下去对句子中构成一个单词的各个字符进行逆向变换,逆向后的单词重新存放到数组a中原先的位置,最后输出新的句子.例如,输入句子:

pots & pans I saw a reed 将输出

stop & snap I was a deer

注意:只要是非空格字符均构成一个单词.例如这里的&也算一个单词; #include ; void main() { char a[81],c; int I,j,n; gets(a); i=0;

while(a[i]!='\\0')

{ while(a[i]==' ') i++;

if( (17) ) break;

n=0;

while( (18) ) n++;

for(j=0;j

a[i+j]= (19) ;/*本行所空与下行同*/ (19) =c; /*本行所空与上行同*/ }

(20) ; }

puts(a); }