教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 综合文档 >

武汉大学计算机学院C语言历年试题1(6)

来源:网络收集 时间:2026-05-25
导读: 三、 程序填空(请在空白处填写合适内容以完成整个程序,共10分) 1.以下程序的功能是:列出100到1000之间各位数字之和可以被3整除的数。 #include void main() { int i,s,k; for(i=100;i s= ②0 ; k= ③ i ; whil

三、 程序填空(请在空白处填写合适内容以完成整个程序,共10分)

1.以下程序的功能是:列出100到1000之间各位数字之和可以被3整除的数。

#include

void main() {

int i,s,k;

for(i=100;i<= ①1000 ;i++) {

s= ②0 ;

k= ③ i ;

while ( ④ k!=0或者k或者k>0或者k>=1 )

{ s=s+k;

k= ⑤ k/10 ; }

if (s%3==0)

printf(“m”,i); }

}

2. 下面程序的功能是:把一个字符串中的所有大写字母改变为小写字母,

而小写字母改成大写字母,其他字符不变。例如对字符串”Prolog10”操作后结果为”pROLOG10”。 #include

void convert( ⑥ char s[]或者char *s ) { int i=0;

while( ⑦ s[i]!=’\\0’或者*(s+i)!=’\\0’或者s[i]!=0或者*(s+i)!=0或者s[i]或者*(s+i) )

{ if( ⑧s[i]>=’A’&&s[i]<=’Z’ ) s[i]=s[i]+32; else

if( ⑨ s[i]>=’a’&&s[i]<=’z’ ) s[i]=s[i]-32;

⑩ i++或者++i或者i=i+1或者i+=1 ; }

void main() {

char s[20]; int i; gets(s); convert(s); puts(s); }

评分要点:注意s[i]和*(s+i)是完全等价的形式。

四、 程序阅读与分析(共10分)

3. 分析以下程序执行流程,并写出下列程序的运行结果。

#include int x=2;

int fat(int n) { static int f=0; int x=0;

x+=2; f=f-n; return (f); }

void main(void) { int i,j;

for(i=3;i<=5;++i)

{ printf(“%d\\t”,fat(i)); printf(“%d\\n”,x); } }

答案: -3 2 -7 2 -12 2

评分要点:给出上述6个正确结果,给满分5分

结果完全不对,但是给出程序执行流程分析基本正确,最多给3分

4. 阅读以下递归函数,假设有如下定义:int a[6]={6,1,4,7,4,0},分析进行

printn(a)调用时程序运行过程;并写出该调用结束后数组a的内容是多少? #include void printn(int *x) { if(*x!=0) printn(x+1); *x+=2; }

答案:

该调用结束后数组a的内容是{8,3,6,9,6,0}

评分要点:如果结果完全不对,但是给出程序执行流程分析基本正确,最多给3分

五、

3.

子程序设计(每小题15分,共30分)

本题说明:完成函数设计时,请自行说明所有的形式参数的类型

设计一个函数tnum(s,n),函数tnum把十进制整数n转换为十六进制字符串,函数值为该十六进制字符串的长度,而转换后的十六进制字符串由s返回。

例如,有如下定义 char s[10]=,n=298,m;

则有函数调用m=tnum(s,n)后,m的值为3,s的为”12a”。 参考答案:

int tnum(char *s,int n) {

int k,m,i;

4.

char c; k=0;

while(n) {

m=n; n=n/16; switch(m) {

case 15: s[k]=’f’;break; case 14: s[k]=’e’;break; case 13: s[k]=’d’;break; case 12: s[k]=’c’;break; case 11: s[k]=’b’;break; case 10: s[k]=’a’;break; default:s[k]=m+’0’; } k++; }

s[k]=0;

for(i=0,m=k-1;i

c=s[i]; s[i]=s[m]; s[m]=c; }

return k; }

评分要点:

1 计算s的长度并正确返回

2 将十进制整数转换为十六进制字符串s的内容的求解算法正确 注意语法错误最多扣2分,重点在于程序的思路正确

设计一个函数rightarr(a, m, n),a为一维整数数组(数组元素的个数为m),该函数实现数组a的循环右移n位。 例如:

int a[5]={1,2,3,4,5};

则,rightarr(a,5,2)调用完成后,数组a的内容为{4,5,1,2,3}。 参考答案:

void rightarr(int a[],int m,int n) {

int x=0,y,t; while(x

t=a[m-1];

for(y=m-1;y>0;y--) a[y]=a[y-1];

a[0]=t; x++; } }

评分要点:

1 移位方向为右移

2 循环移位算法正确,重点注意a[0]移动正确

注意语法错误最多扣2分,重点在于程序的思路正确

六、

说明:

? ? ? ?

算法设计(选做一题15分)

仅需任意选做一题。多选者,以卷面先列出的为判分依据;

分析思路、重要数据类型的定义、模块的功能、形式参数、函数返回值说明; 用伪代码或其它方法描述子程序;

不必完整写出函数程序的代码,完整代码将不作为判分依据。

4. 函数link(h,n), 其中h 是一个由整数组成的从小到大排列的有序单链

表,n为整数。函数link实现把n从链表h中删除,函数返回值为1表示删除成功,返回0表示删除失败。 具体要求如下:

A)说明链表结点类型的C语言定义形式; B)给出函数link(h,n)的原型。 C)描述函数的算法。 参考答案:

评分要点:以算法可行,基本正确为主要评分指标 (4) 链表结点类型为结构类型

(5) 函数link(h,n)中参数h为二级指针,n为整型 (6) 删除算法:首先查找删除数据在链表中的位置,然后完成删除操作(注

意删除位置在链表头部和非头部的区别。

5. 任意输入一个年、月,编程输出该月月历。

具体要求如下:

D)说明如何表示一个日期数据,以及星期一到星期天; E)说明程序中划分多少模块?并给出每个模块的原型; F)描述每个模块的算法。 参考答案:

评分要点:以算法可行,基本正确为主要评分指标

(3) 日期可为结构类型或者整型,星期一到星期天可为枚举、字符串或者

整数等

(4) 算 法中主要功能:判断某年是否为闰年;给出一个基准日期的星期数

据为计算的初始数据;计算当月1日为该年第几天以及是星期几;。输出该月日历。

…… 此处隐藏:986字,全部文档内容请下载后查看。喜欢就下载吧 ……
武汉大学计算机学院C语言历年试题1(6).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/403482.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)