当前位置:文档之家› 上海计算机二级c试题含解析

上海计算机二级c试题含解析

2003年上海市高等学校计算机等级考试试卷二级 (C 程序设计)(120分钟)试题一(28分,每小题4分)(1) 设有变量说明:int a=5, b=4, c=3, r1, r2;请写出执行下列语句後r1和r2的值。

r1=a>b>c;r2=a<b&&b>c;(2) 试写出下列算式的C 语言表达式。

yx a 2031log 75sin(3) 执行下列语句後,i, j, k 的值是多少?for(i=k=0, j=6; i<j; i++, j-- ) k+=4*i-5*j;(4) 执行下列程序後,b 和c 的值各为多少?#include <stdio.h>void main(){int *a[10], b, c;a[0]=&b;*a[0]=5;c=(*a[0])++;printf(“%d %d\n ”, b, c);}(5) 设有如下程序:#include <stdio.h>void main(){int clock; float f; char cpu[20];scanf(“%4d%f%s ”, &clock, &f, cpu);printf(“%d %.0f %s\n ”, clock, f, cpu);}假设输入数据流为200015.0 P4 is GOOD!,请写出执行该程序後的输出结果。

(6)下列程序的输出结果是什么?#include <stdio.h>main(){int c1=0, c2=0, c3=0, c4=0;char *p=”12395632123378”;while(*p) {switch(*p) {case ‘1’: c1++; break;case ‘2’: c2++;case ‘3’: c3++; break;default: c4++;}p++;}printf(“c1=%d c2=%d c3=%d c4=%d\n”, c1, c2, c3, c4);}(7)执行下列程序後,s的值为多少?#define sq(X) X*Xvoid main(){int s=15, a=2, b=1;printf(“s=%d\n”, sq(a+b)/sq(a+b));}试题二(12分,每小题6分)阅读下列程序,写输出结果。

(1)#define N 6void main(){int i, j, a[N];for(i=1; i<N; i++){a[i]=1;for(j=i-1; j>1; j--)a[j]+=a[j-1];for(j=1; j<=i; j++)printf(“%4d”, a[j]);printf(“\n”);}}(2)#include <stdio.h>void fun(char *s){ while(*s){*s=(*s-‘0’+3)%10+’0’;++s;}}void main(){char a[]=”314762985”; int i;fun(a+3);for(i=0; i<3; ++i)printf(“%c\n”, a[3*i+1]);}试题三(12分,每小题6分)改错。

下列程序各有三个错误,请纠正。

(1)以下程序的功能是输入一个字符串,并将其中的字符’a’用字符串’shu’替代後输出。

如输入为“123abcaHello”,则输出为“123shubcshuHello”。

#01 #include <stdio.h>#02 void main()#03 {#04 int i; char line[81];#05 scanf(“%s”, &line);#06 for(i=0; line[i]!=’\n’; i++)#07 if(line[i]==’a’)#08 printf(“shu”);#09 else#10 printf(“%s”, line[i]);#11 }(2)以下程序实现对输入的长度小于100的英文字母串(空格表示结束)进行头尾相接,围成一个环,输出按顺时针方向出现的相邻两个递增字母及其个数(如下图中的HI, IJ, ST, 总共出现3次)。

#01 #include <string.h>#02 void main()#03 {#04 char s[100];#05 int k, len, no;#06 scanf(“%s ”, s);#07 len=strlen(s);#08 s[len]=s[0];#09 s[len++]=’\0’;#10 for(k=0; k<len; k++)#11 if(s[k-1]+1==s[k]) {#12 printf(“%c %c\n ”, s[k-1], s[k]);#13 no++;#14 }#15 printf(“%d\n ”, no);#16 }试题四(18分, 每小题6分)按要求编程序段。

(1)求出任意一个数m(设4<=m<=1000)的所有素因子。

例如,37的素因子是37;420的素因子是2,2,3,5,7。

(2)设有一维数组说明char T[5],存放五个字母’A ’,’B ’,’C ’,’D ’,’E ’,编程按以下格式输出结果。

A B C D EB C D E AC D E A BD E A B CE A B C D(3)输入正偶数,计算以下级数值和并输出结果(显示结果保留小数点後5位)。

2)1(...1639241+--+-=n n s 试题五(15分,每空3分)填空。

【问题描述】以下程序不断地从键盘输入字符,直到输入EOF(control+z)为止。

对于输入的小写字符,先转换为相应的大写字符,其它字符不变,然后逐个输出到文件text.txt 中,行结束符回车(‘\n ’)也作为一个字符对待,最后统计文件中的字符个数和行数。

#include <stdio.h>main(){FILE *fp;char c, str[256];int i=0, no=0, line=0;if((fp=fopen(“text.txt”, (1) ))==NULL){printf(“can`t open this file.\n”);exit(0);}printf(“please input a string.\n”);while((c=getchar())!=EOF){if(c>=’a’&&c<=’z’) (2) ;fputc( (3) , fp);}fclose(fp);if((fp=fopen(“text.txt”, “r”))==NULL){printf(“can`t open this file.\n”)exit(0);}while(!feof(fp)){c= (4) ;no++;if( (5) ) line++;}printf(“line=%d character_no=%d\n”, line, no);fclose(fp);}试题六(15分,每空3分)填空。

【问题描述】已知X和Y是两个整型数组,而且X中的数据按从小到大的顺序排列,Y中的数据按从达到小的顺序排列。

以下程序将X和Y中的数归并,并按从小到大的顺序保存到整型数组Z 中,然后输出数组Z中的各个元素。

例如,X数组为{1, 12, 23, 37},Y数组为{123, 78, 36, 3},归并後生成的新数组Z为{1, 3, 12, 23, 36, 37, 78, 123}。

void sorted(int up[], int down[], int merged[], int n){int i, j, k, m;i=k=0; j=n-1;while( (1) )if(up[i]<=down[j]){(2) ;i++;k++;}else{merged[k]== (3) ;j--;k++;}if(i==n&&j>=0)for( ; j>=0; j--)merged[k++]= (4) ;if(j==0&&i<n)for( ; i<n; i++)merged[k++]= (5) ;}void main(){int pu[]={1, 12, 23, 37}, down[]={123, 78, 36, 3}, merged[8], k;sorted(up, down, merged, 4);for(k=0; k<8; k++)printf(“%5d”, merged[k]);printf(“\n”);}。

相关主题