ImageVerifierCode 换一换
格式:DOCX , 页数:8 ,大小:19.97KB ,
资源ID:3379138      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3379138.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(历届C语言上海市等级试题及参考答案.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

历届C语言上海市等级试题及参考答案.docx

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