当前位置:首页 > 07上海市计算机二级考试C语言
2007年上海市高等学校计算机等级考试试卷
二级 (C程序设计)
(本试卷答卷时间为120分钟)
试题一(28分,每小题4分)
解答下列各小题,把解答写在答卷纸的对应栏内。
⑴ 设有int x=3,y=2,z=1;分别写出下面表达式求值后变量x和y的值。 (注:对每小题求值时,变量的初值都为x=3,y=2,z=1) ① y=(y=3,2*x++) ② (x=5)||(y=6*x)
⑵ 写出下列程序的输出结果。 #include
{ int n; float x=2.7181; n=100*x;
x=(int)(x*100+0.5)/100.0; printf(“n=%d\\n”,n); printf(“x=%f\\n”,x); }
⑶ 写出变量x的绝对值小于20为真的C语言表达式。
⑷ 描述学生信息的结构变量定义为: struct student
{ int no; /* 学号 */ char *name; /* 姓名 */ char sex; /* 性别 */
struct /* 出生年月 */ { int year; int month; int day; } birthdate; };
struct student s;
写出能完成结构体变量s的部分成员赋值,使姓名为”Li_ping”,出生年份为1985的C语句。
⑸ 在C语言中,函数random (int num) 的功能是生成一个0到(num-1)之间的随机整数,经过下列赋值语句的执行后,m和x的取值范围是多少? int m; float x;
m=50 + random(50);
x= m + random(100)/100.0;
⑹ 用文字描述以下程序所完成的功能: #include
{ FILE *in, *out; char ch;
in=fopen(“a.c”,”r”); out=fopen(“b.c”,”w”);
while(!eof(in)) /* 函数ferof()用来检测是否到达文件尾 */
/* 如到达文件尾返回非0,否则返回0 */
{ ch=fgetc(in); Fputc(ch); }
fclose(in); fclose(out); }
⑺ 假定建立了以下链表结构,如下图所示:指针p、q分别指向如图所示的结点,写出将q所指结点从链表中删除并释放该结点的C程序段。
data next
head …… 3 8 4 p
q
试题二(12分,每小题6分)
阅读下列程序,把程序的输出结果写在答卷纸的对应栏内。 ⑴ 【程序2.1】
#include
int x=0, y=0, z; while(y<6) x+=++y;
printf(“output1:%d %d\\n”,x,y); for(y=1;y<6;y++) x=y;
printf(“output2:%d %d\\n”,x,y); for(y=1;y<6;) { x=y++;
z=++y; }
printf(\ }
⑵ 【程序2.2】
#include
int i, r;
r=1;
for(i=0; i void main() { int x, a[]={1,2,3,4,5,6,7,8,9}; x=f(a,3); printf(“x=%d\\n”,x); x=f(a+1,3); printf(“x=%d\\n”,x); } 试题三(12分,每小题6分) 改错。下列程序中都有三个错误,按题中的功能要求,纠正错误,并以“将#XX行改为YYYY”的形式进行解答,把解答写在答卷纸的对应栏内。代码左边的#01、#02、……是附加的行号。 【程序3.1】下面程序的功能是统计一个字符串中各字母出现的次数,该字符串从键盘输入,统计时不区分大小写。对数字、空格及其他字符都不予统计。最后在屏幕上显示统计结果。 例如字符串“abcdefgh23ABCDEF abc”的统计结果与输出格式为: a b c d e f g h i j k l m n o p q r s t u v w x y z 出现的次数为: 3 3 3 2 2 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 #01 #include #05 int i, a[26]; #06 char ch, str[80], *p=str; #07 gets(&str); #08 for(i=0; i<26; i++) a[i]=0; #09 while(*p) { #10 ch=(*p)++; #11 ch=ch>=?A?&&ch<=?Z??ch+?a?-?A?:ch; #12 if(?a?<=ch<=?z?) a[ch-?a?]++; #13 } #14 for(i=0; i<26; i++) printf(“,”, ?a?+i); #15 printf(“出现的次数为:\\n”); #16 for(i=0; i<26; i++) printf(“-”, a[i]); #17 printf(“\\n”); #18 } 【程序3.2】以下程序求e=1 + 1/1! + 1/2! + ? + 1/n! + ? 的值,直到最后一项的值不超过10为止。 #01 #include #08 a*=i; #09 e+=a; #10 i=i+1; { #11 } while(a<=1e-6); #12 printf(“%f\\n”,e); #13 } -6 试题四(18分, 每小题9分) 按指定的要求编写程序段。把解答写在答卷纸的对应栏内。 ⑴ 编写函数f (int n)用来统计正整数n的位数(例如,n=123时函数返回3)。 ⑵ 写出一个函数 int lower_ave (float s[], int n, float *aver),它能从存放学生分数的一维数组s中求出其平 均分和低于平均分的学生人数;其中数组s[]存放学生分数,参数n为学生人数,参数aver是指向平均分的指针变量。 (要求平均分通过指针参数传递,人数通过函数值返回。) 试题五(15分,每个空格3分) 阅读下列问题描述和相应的程序,把应填入其中 (n) 处的内容写在答卷纸的对应栏内。 【问题描述】以下程序输入10行字符串,要求按字典顺序从小到大排序。 【程序5】 #include int biggerthan(char *str1, char *str2) /* 若字符串str1大于字符串str2时,则返回1 */ { for(; *str1||*str2; (1) ) { if(*str1>*str2)
共分享92篇相关文档