上海市高等学校计算机等级考试二级(C 程序设计)
03 年上海市高等学校计算机等级考试试卷
二级 (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; r1=0 r2=1
(2) 试写出下列算式的 C 语言表达式。
a
x
|
1
sin
3
log
−
75
°
y
2
|
exp(ln(a)/3)*sin(75.0/180*3.14)/fabs(x-ln(y)/ln(2))
(3) 执行下列语句后,i,j,k 的值是多少?
for (i=k=0,j=6; i
void main()
{ int *a[10],b,c;
a[0]=&b;
*a[0]=5;
c=(*a[0])++;
printf(“%d %d\n”,b,c);
}
b=6 c=5
(5) 设有如下程序:
#include
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!,请写出执行该程序后的输出结果。
2000 15 P4
上海市高等学校计算机等级考试二级(C 程序设计)
(6) 下列程序的输出结果是什么?
#include
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);
}
c1=2 c2=3 c3=7 c4=5
7 执行下列程序后,s 的值为多少?
#define sq(X) X*X
void main()
{ int s=15, a=2, b=1;
printf(“s=%d\n”,s=sq(a+b)/sq(a+b));
}
s=7
试题二(12 分,每小题 6 分)
阅读下列程序,把程序的输出结果写在答卷纸的对应栏内。
(1)【程序 2.1】
#define N 6
void main()
{ int i,j,a[N];
for ( i=1; i 1; j--)
a[j]+=a[j-1];
for ( j=1; j<=i; j++)
printf(“%4d”,a[j]);
printf(“\n”);
}
}
上海市高等学校计算机等级考试二级(C 程序设计)
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
(2)【程序 2.2】
#include
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]);
}
1
9
1
试题三(12 分,每小题 6 分)
改错。下列程序中都有三个错误,按原来程序的要求,纠正错误,并以“将#XX
行改为 YYYY”的形式进行解答,代码左边的“#01”、“#02”、…是附加的行号。
(1) 程序 3.1 功能是输入一个字符串,并将其中的字符’a’用字符串”shu”替代后输出。如输
入为”123abcaHello”,则输出为”123shubcshuHello”。
【程序 3.1】
#01 #include
#02 void main()
#03 { int i; char line[81];
#04 scanf(“%s”,&line);
#05 for (i=0; line[i]!=’\n’; i++)
#06 if (line[i]==’a’)
#07 printf(“shu”);
#08 else
#09 printf(“%s”,line[i]);
#10 }
将第 #04 行改为: scanf(“%s”,line);
将第 #05 行改为: for (i=0; line[i]!=’\0’;i++)
将第 #09 行改为: printf(“%c”,line[i]);
上海市高等学校计算机等级考试二级(C 程序设计)
(2) 程序 3.2 实现对输入的长度小于 100 的英文字母(空格表示结束)进行头尾相接,围成
一个环,输出按顺时针方向出现的相邻两个递增字母及其个数(如下图中的 HI,IJ,
ST,总共出现 3 次)。
H I
T J
T A
S T
V W
【程序 3.2】
#01 #include
#02 void main()
#03 { char s[100];
#04 int k,len,no;
#05 scanf(“%s”,s);
#06 len=strlen(s);
#07 s[len]=s[0];
#08 s[len++]=’\0’;
#09 for ( k=0; k上海市高等学校计算机等级考试二级(C 程序设计)
main()
{ int i=2,m;
scanf("%d",&m);
while (i<=m)
if (!(m%i))
{ printf("%3d",i);
m/=i;
}
else i++;
printf("\n");
}
(2) 设有一维数组说明 char T[5],存放’A’,’B’,’C’,’D’,’E’五个字母,请编写一个
程序段,按以下格式输出结果。
ABCDE
BCDEA
CDEAB
DEABC
EABCD
#include
#include
void fun(char a[],int n)
{ char k,j,b[20];
for (k=0; k上海市高等学校计算机等级考试二级(C 程序设计)
试题五(15 分,每空 3 分)
阅读下列问题描述和相应的 C 程序,把应填入其中 (n) 处的内容写
在答卷纸的对应栏内。
【问题描述】
程序 5 不断地从键盘输入字符,直到输入 EOF(Control+Z)为止。对于输入的小写字符,
先转换为相应的大写字符,其它字符不变,然后逐个输出到文件 text.txt 中,行结束符回车
(’\n’)也作为一个字符对待,最后统计文件中的字符个数和行数。
【程序 5】
#include
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 charcter_no=%d\n”,line,no);
fclose(fp);
}
(1) “w”
(2) c=c-32 或 c=c-‘a’+’A’
(3)
c
(4)
fgetc(fp)
(5)
c==’\n’
上海市高等学校计算机等级考试二级(C 程序设计)
试题六(15 分,每空 3 分)
阅读下列问题描述和相应的 C 程序,把应填入其中 (n) 处的内容写
在答卷纸的对应栏内。
【问题描述】
已知 X 和 Y 是两个整型数组,而且 X 中的数据按从小到大的顺序排列,Y 中的数据按从大
到小的顺序排列。程序 6 将 X 和 Y 中数归并,并按从小到大的顺序保存到整型数组 Z 中,
然后输出数组 Z 中的各个元素。例如,X 数组为{1,12,23,37},Y 数组为{123,78,36,
3},归并后生成的新数组 Z 为{1,3,12,23,36,37,78,123}。
【程序 6】
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
上海市高等学校计算机等级考试二级(C 程序设计)
(1) i=0
(2) merged[k]=up[i]
(3) down[j]
(4) down[j]
2004 年上海市高等学校计算机等级考试试卷
二级(C 程序设计)
(本试卷答卷时间为 120 分钟)
试题一(28 分),每小题 4 分)
解答下列各小题,把正确的解答写在答卷纸的对应栏内。
(1) 假设对 n(n>0)个学生按下列方法进行分班:每班 k(k>0)个学生,最后一个
班若不足 k 人也单独编成一个班,试用 C 语言中的条件表达式表示所编
班级个数。
n%k>0?n/k+1:n/k
(2) 设有变量定义:
struct rec {
int x;
int y;
}s[ ] = {{4,28},{9,36}},*p = s;
99
计算表达式(p->y/p->x*s[1].x+s[1].y)的值。
(3) 写出下列程序的输出结果。
#include
void main(){
char s[]=”2473”,c,i;
for(i=0;c=s[i];i++){
switch(c-‘0’){
case 2:
case 3: putchar(c+4);continue;
case 4: putchar(c+4);break;
case 5: putchar(c+3);
default: putchar(c+2);
}
putchar(‘\n’);
}