1、历届C语言上海市等级试题及参考答案上海市高等学校计算机等级考试试卷二级 (C程序设计)(本试卷答卷时间为120分钟)试题一(28分,每小题4分)解答下列各小题,把解答写在答卷纸的对应栏内。 (1) 试写出下列命题的C语言表达式。 当字符变量m取英文字母时表达式的值为真。(2) 执行下述语句后,a,b,m,n变量的值分别是什么?int a=1, b=2, c=3, d=4, m=5, n=6; a = ( m=ab ) & ( n =cd ) | +a = = b-;(3) 执行下列语句后的输出结果是什么?char s81= a_string, t81; strcpy(t,s); printf(
2、%d;%dn%sn, sizeof(s), strlen(s), t+2);(4) 写出下列C语句的功能。 #include do gets(s); while (strcmp(s,passwd) ;(5) 执行下列程序后的输出结果是什么?#define SQR(x) x*xvoid main( )int s=8, a=2, b=3;s=SQR(a+b)*4;printf(“s=%dn”, s); (6) 设有定义 struct date int day; char month; int year; dd, *pd = ⅆ 试写出引用结构变量dd的成员dd.day的其他两种描述形式。(7
3、) 设有如下程序段:int a4 = 0,4,5,13, *p; p = &a2; printf(+(*p)= %dn, +(*p);printf(*-p=%dn, *-p); printf(*p+=%dn, *p+); printf(%dn,a0); 试写出执行该程序段后的输出结果。试题二(12分,每小题6分)阅读下列程序, 把程序的输出结果写在答卷纸的对应栏内。(1)【程序2.1】#include void main( ) int k =65,30,3,123,831,54;int j, m1=32767, m2=0,n1, n2; for (j=0; jkj) m1=kj; n1=j;
4、else if (m2kj) m2=kj; n2=j; printf(m1=%d, n1=%dn , m1, n1);printf(m2=%d, n2=%dn , m2, n2); (2)【程序2.2】#include void func(int *x,int y)static k=3; y=*x+y; *x=y%k; k+; printf(*x=%d,y=%dn,*x,y);void main() int x=12,y=5; func(&x,y); printf(x1=%d,y1=%dn,x,y); func(&y,x); printf(x2=%d,y2=%dn,x,y);试题三 (12分,
5、每小题6分)下列程序中都有三个错误,按题中的计算要求,纠正错误,并以“将#XX”行改为“YYYY”的形式进行解答,把解答写在答卷纸的对应栏内。代码左边的1、2、是附加的行号。(1) 用冒泡排序法求出由21个整数组成的数组的中间值,并输出所有大于中间值的偶数。【程序3.1】#0 #include #1 void main()#2 #3 int i,j,temp;#4 int array21;#5 for (i=0;i21;i+) scanf(%d, arrayi);#6 for (i=0;i21;i+)#7 for(j=0;jarrayj+1)#9 #10 temp=arrayj;#11 arr
6、ayj=arrayj+1;#12 arrayj+1=temp;#13 #14 printf (%d, array10);#15 for (i=0;i10;i+)#16 if (arrayi/2=0) printf( %d ,arrayi);#17 (2) 用下面的方法可以计算y年m月d日是星期几(w):w= y-1 + (y-1)/4 (y-1)/100 +(y-1)/400 + y_d(y, m, d)%7其中,符号 / 表示计算整数商,% 表示计算余数,y_d(y, m, d)表示y年m月d日是从同年元旦算起到该日的总天数。【程序3.2】#1 int day_tab =0,31,28,31
7、,30,31,30,31,31,30,31,30,31;#2 int y_d(int y, int m, int d)#3 int i, all; #4 y= y%4= =0 & y%100 | y%400= =0 ;#5 for (i=0; i=m ; i+) all +=day_tabi; /* 统计某月份(m月)之前的天数 */#6 all+=y; /* 对闰年考虑2月份是29天 */#7 return all+d;#8 #9 void main( ) #10 int y=2005,m=7,d=11,w;#11 w= y-1 + (y-1)/4 (y-1)/100 +(y-1)/400
8、+ y_d(y, m, d) ;#12 w%=7;#13 printf(%d年%d月%d日是星期%dn,y, m, d, w);#14 试题四 (18分, 每小题9分)按指定的要求编写程序段, 把解答写在答卷纸的对应栏内。(1)输入无符号整型范围内的整数,求出它的位数以及各位数字之和。(2)将长度为 n 的字符串 s 分成两个子串,前 m(任意值)个字符生成子串s1,后 n-m个字符生成子串s2。约定:当mn时,s1等于原串,s2为空串;当m0时,s1为空串,s2等于原串。编写程序段时,可以使用库函数strcpy。试题五(15分,每个空格3分)阅读下列问题描述和相应的程序,把应填入其中 (n)
9、 处的内容写在答卷纸的对应栏内。【问题描述】 本程序运行时,从键盘不断接收用户输入的字符串并进行处理,直到用户输入的字符串为“end”时终止。对用户输入的每个字符串的处理是:将字符串内的每一个十进制数字字符置换成下列表格中右边所对应的一个字符串(所有其他字符不变),然后将转换的结果显示在屏幕上;并分别计算每个数字的置换次数。十进制数字字符置换成0(Zero)1(One)2(Two)3(Three)4(Four)5(Five)6(Six)7(Seven)8(Eight)9(Nine)例如,若用户输入的字符串为 Page112-Line3,则程序5的输出是: Page(One) (One) (Tw
10、o)-Line(Three)数字0到9的置换次数分别是 0 2 1 1 0 0 0 0 0 0【程序5】#include void main() char *table=(Zero), (One), (Two), (Three), (Four), (Five), (Six), (Seven), (Eight), (Nine) ; char str164,str2255,*p; int j,k,n,no10; for (;) printf(Input:); gets( (1) ); /*读入字符串*/for(k=0;k10;k+) nok=0; if(strcmp(str1,end)=0) (2
11、) _ ; /* 输入end时程序运行终止 */ for(j=k=0;str1j!=0;+j) /* 对输入字符串进行扫描 */ if ( (3) ) /*当前字符不是数字字符*/ str2k+=str1j; continue; /*当前字符是数字字符*/n=str1j-0; non+; for(p=tablen;*p!=0;+p) str2k+ = (4) ; /* 把要置换的字符串逐个连接到str2上 */ str2k = (5) ; /* 置字符串结束符于str2末尾 */ printf(%sn,str2); for(k=0;k10;k+) printf(no%d=%dt,k,nok);
12、 试题六 (15分,每个空格3分)阅读下列问题描述和相应的C程序,把应填入其中 (n) 处的内容写在答卷纸的对应栏内。【问题描述】建立一个带有头结点的单向链表,并将存储在字符串s中的字符依次转存到链表的各个结点中。然后,按相反顺序输出链表内容。【程序6】#include struct node char data;struct node *next; (1) create_list(char *s) /*函数定义首部,确定函数值的返回类型*/ struct node *head,*p,*q; head=(struct node *) malloc(sizeof(struct node); p=
13、q=head; while(*s!=0) p=(struct node *) malloc(sizeof(struct node) ; p-data= (2) ; /*字符串中的字符存到链表中*/ q-next=p; q= (3) ; /*工作指针q相应后移,为下一个字符转存作准备*/ s+; p-next = NULL ; return (4) ; /*返回所建立的链表*/void pr_in_reverse_order(struct node *p) /*采用递归算法定义*/ if(p!=NULL) pr_in_reverse_order(p-next); /*先按相反顺序输出除去第一个节点后的链表内容*/ printf (%2c, (5) ); /*输出第一个节点内容*/ void main() char str = link list; struct node *head; head = create_list(str); pr_in_reverse_order(head-next);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1