2001年上海高等学校计算机等级考试试卷
二级(C语言)
(本试卷答卷时间为120分钟)
试题一(28分,每小题4分)
解答下列各小题,把正确的解答写在答卷纸的对应栏内。
(1)试写出下列数学表达式的C语言表达式
int a=2,b=5,c;
c=21%9/(float)a+4/b*b;
printf(“%d\n”,c);
试写出其输出结果。
(3)设有如下程序段:
int a=0,b=0,c=0,x;
x=(a=50)&&(b=0)&&(c=100);
printf(“%d,%d,%d,%d\n”,x,a,b,c);
试写出其输出结果。
(4)设有如下程序段:
int a=-1;
printf(“%d,%u,%x,%o\n”,a,a,a,a);
试写出其输出结果。
(5)试写出
printf(“\n%d\t%d”,(5^2),(5^2));
的输出结果。
(6)设有如下程序段:
int a[][5]={1,2,3,4,5,6,7,8,9,10};
int (*p)[5]=a;
printf(“%d\n”,*(p[1]+3));
试写出其输出结果。
(7)设有如下定义:
FILE *fp1,*fp2;
假定fp1和fp2已正确指向它们要操作的文本文件,试描述执行语句
fputc(fgetc(fp1),fp2);
的含义。
试题二(12分,每小题6分)
读程序。把程序的输出结果写在答卷纸的对应栏内。
(1)
[程序2.1]
#include “stdio.h”
main()
{
int a[]={0,10,20,30,40,50,60};
int x=5,*p;
p=a+2;
x+=*(p++); printf(“\nx=%d”,x);
x-=(*p)++; printf(“\nx=%d”,x);
x*=*(++p); printf(“\nx=%d”,x);
x/=++(*p); printf(“\nx=%d”,x);
}
(2)
[程序2.2]
#include “stdio.h”
main()
{
int test(int);
printf(“\ns=%d”,test(10));
printf(“\ns=%d”,test(10));
printf(“\ns=%d”,test(10));
}
int test(int n)
{
static int x=100;
int s,y=100;
x=2*x;
y=2*y;
s=n+x+y;
return s;
}
试题三(12分,每小题6分)
改错。下列程序中都有三个错误,按原来程序的要求,纠正错误,并以“将第?行改为XXX”的形式解答,代码左边的“#1”、“#2”、…是附加的行号。
[程序3.1]
#1 #include “stdio.h”
#2 #define M 3
#3 #define N 4
#4 main()
#5 { int a[M][N],max,i,j;
#6 int row,column;
#7 for(i=0;i<M;i++)
#8 for(j=0;j<N;j++)
#9 scanf(“%d”,a[i][j]);
#10 max=0;
#11 for(i=0;i<M;i++)
#12 for(j=0;j<N;j++)
#13 if(max<a[i][j])
#14 { max=a[i][j]; row=i; column=j; }
#15 printf(“\nmax=%d,row=%d,column=%d”,max,row,column);
#16 }
(2)程序3.2中的主函数main()调用aver()函数,用来统计某数组中值大于0和小于0的元素个数(等于0的元素个数不统计)。并求数组中所有元素的平均值。平均值通过函数返回,其余两个统计结果通过形式参数的方法返回。程序中三行有错,请纠正。
[程序3.2]
#1 #include “stdio.h”
#2 main()
#3 { double aver(int[],int,int*,int*);
#4 int c1,c2,x[]={0,12,33,-9,-5,27,80,0,54,-63};
#5 double av;
#6 av=aver(x,10,c1,c2);
#7 printf(“\nc1=%d,c2=%d,aver=%f”,c1,c2,av);
#8 }
#9 double aver(int a[],int n,int *p1,int *p2)
#10 { int i;
#11 double sum=0;
#12 *p1=*p2=0;
#13 for(i=0;i<n;i++)
#14 { sum=sum+a[i];
#15 if(a[i]>0)
#16 (*p1)++
#17 else
#18 (*p2)++;
#19 }
#20 return sum/n;
#21 }
试题四(18分,每小题6分)
按指定的要求编写函数或C程序,把解答写在答卷纸的对应栏内。
(1)编写函数,根据公式1公里=5/8英里,把英里数转换为公里数。
(2)编写函数,实现计算n个元素组成的整型数组中去掉一个最大值和一个最小值后的平均值(如有多个相同的最大值和最小值,只要去掉一个,且设n大于2)。
(3)设计函数,求整数n的阶乘,并在主函数中调用该函数(通过循环结构)计算下列多项
式:
y=1!+3!+5!+7!
试题五(15分)
阅读下列程序说明和它的代码,把应填入其中空格计算机二级哪个最容易过_______(n)________处的C代码写在答卷纸的对应栏内。
[程序5说明]
本程序的功能是把两个字符串合并且按升序排列。首先对字符串a按ASCII码值从小到大升序排列,然后把字符串b中的字符按升序规则插入到已排好序的字符串a中去。
[程序5]
#include “stdio.h”
#include “string.h”
main()
{ int i,j,k,n;
char a[80]=”zkcvbn”,b[80]=”askd”;
n=strlen(a);
for(________(1)________;i++)
for(________(2)________;j++)
if(a[j]<a[i])
k=a[i],a[i]=a[j],a[j]=k;
for(k=0;b[k];k++)
{ for(j=0;b[k]>a[j]&&a[j];j++);
for(i=n;i>=j;i--)
__________(3)__________;
___________(4)___________;
a[______(5)______]=‘\0’;
}
printf(“\nmerge string is %s”,a);
}
试题六(15分)
阅读下列程序说明和它的代码,把应填入其中空格_____(n)______处的C代码写在答卷纸的对应栏内。
发布评论