2001年上海高等学校计算机等级考试试卷
二级 (C语言)
(本试卷答题时间为120分钟)
试题一(28分,每小题4分)
试写出下列数学表达式的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)# include
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)# include
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分)
求3×4矩阵中的最大元素及其所在行和列的位置。数组元素可能有大于0,等于0或小于0的值。程序中有三行错,请纠正。
# include
# define M 3
# define N 4
main()
{ int a[M][N],max,i,j;
int row,column;
for(i=0;i
for(j=0;j
scanf(“\d”,a[i][j]);
max=0;
for(i=0;i
for(j=0;j
if(max
{ max=a[i][j];row=i;column=j; }
printf(“\nmax=%d,row=%d,column=%d”,max,row,column);
}
本题主函数main()调用aver()函数用来统计某数组中值大于0和小于0的元素个数(等于0的元素个数不统计)。并求数组中所有元素的平均值。平均值通过函数返回,其余两个统计结果通过形式参数的方法返回。程序中三行有错,请纠正。
# include
main()
{ double aver(int [],int,int*,int*);
int c1,c2,x[ ]={0,12,33,-9,-5,27,80,0,54,-63};
double av;
av=aver(x,10,c1,c2);
printf(”\nc1=%d,c2=%d,aver=%f”,c1,c2,av);
}
double aver(int a[ ],int n,int *p1,int *p2)
{ int i;
double sum=0;
*p1=*p2=0;
for(i=0;i
{ sum=sum+a[i];
if(a[i]>0) (*p1)++