上海市高等学校计算机等级考试二级(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’); 
}