武汉大学计算机学院C语言部分年份试题.docx
- 文档编号:9285260
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:26
- 大小:30.13KB
武汉大学计算机学院C语言部分年份试题.docx
《武汉大学计算机学院C语言部分年份试题.docx》由会员分享,可在线阅读,更多相关《武汉大学计算机学院C语言部分年份试题.docx(26页珍藏版)》请在冰豆网上搜索。
武汉大学计算机学院C语言部分年份试题
武汉大学计算机学院
2004-2005学年度第2学期2004级
《高级语言程序设计》期末考试试卷A卷
答案及评分标准
一. 单项选择题:
(选择最合适的答案填空,每小题2分,共20分)
()1.不正确的常量是____B__。
A. ‘\t’
B. 084
C. 1.2e4
D. 0x8fL
()2.表达式-8%3+13/2的结果为______D。
A. 4.5
B. 8
C. 8.5
D. 4
()3.设变量inta=1,b=2;则执行表达式a+=3,b-2,++b,a*=b后变量a和b的
值为______C。
A. 2和2
B. 3和3
C. 12和3
D. 12和2
()4.表达式0xad86|0xff的值为____A__。
A. 0xadff
B. 0x86
C. 0xad86
D. 0xff
()5.设有如下宏定义#defineprice(x)5+x
则执行赋值语句v=price(4)*price(15);/*v为int型变量*/后,v的值为
C。
A. 180
B. 85
C. 40
D. 60
()6.在定义指针变量时,void*类型表明指针____A。
A. 指向对象类型未知
B. 不指向任何对象
C. 指向整型的对象
D. 指向char类型对象
()7.设inta[3][4],*p[3];则以下___C____赋值语句是正确的。
A. p=a[0];
B. p[1]=a;
C. p[1]=a[2];
D. p=a;
()8.创建一个新的文本文件,可对该文件进行读写操作,则____A____打开方式是正确的。
A. “w+”
B. “wb”
C. “r+”
D. “rb+”
()9.表达式4&&5结果为______B。
A. 0
B. 1
C. 4
D. 5
()10. 正确的标识符是______A。
A. _a123
B. 3z
C. “next”
D. ‘A’
二. 文字填空(共15分)
1. 一个合理的算法应该具有“有穷性”,“有穷性”指的是_____经过有限个步骤的处理以后,算法应该结束_________。
2. %作为运算符表示________取余数____________。
3. 在C语言中,____全局变量____变量和_____静态(局部静态)__变量在程序一开始执行就被分配内存空间,直到整个程序执行结束其内存空间才被释放。
4. 设x、y为int类型变量,请写出以下命题:
(1)x和y都为偶数_____(x%2==0)&&(y%2==0)或者
(!
(x%2)&&!
(y%2))________________
(2)x和y中至少一个能被3整除________(x%3==0)||(y%3==0)或者
_(!
(x%3)||!
(y%3))______
5. 编译预处理命令#include的作用是_______文件包含_____________。
6. 设有如下定义int(*ptr)[5];则表示定义的ptr是__指向一维数组的指针____或者数组_____________变量。
7. 完成字符串连接的库函数是____strcat()_____。
8. typedefintA[12];的作用是__定义类型名A,表示类型int[12]__。
三.程序填空(请在空白处填写合适内容以完成整个程序,共10分)
1.以下程序实现从键盘输入一个整数,然后以相反的顺序输出每位数字。
例如:
输入1234,则输出4321。
#include
voidmain()
{
intnumber,right;
printf(“enteryournumber:
\n”);
scanf(“%d”,&number);
do
{right=number%10;
printf(“%d”,right);
number=number/10;
}while(number!
=0);
printf(“\n”);
}
a) 下面程序将若干字符串按照字典顺序排列并输出
#include
#include
voidsort(char*s[],intn)
{inti,j;
char*t;
for(i=0;i for(j=i+1;j if(strcmp(s[i],s[j])>0) {t=s[i]; s[i]=s[j]; s[j]=t; } } voidmain() { char*s[5]={“Pascal’,”Clanguage”,”Prolog”,”fortran”,”VisualC++”}; inti; sort(s,5); for(i=0;i<5;i++) puts(s[i]); } 四.程序阅读与分析(共10分) 1. 分析以下程序执行流程,并写出下列程序的运行结果。 #include voidmain() {intj; for(j=1;j<=5;++j) switch(j%2) {case0: j++;printf(“#”);break; case1: j+=2;printf(“*”); default: printf(“\n”); } } 解答: 运行结果为: * # (注意: 评分时如果试卷中给出结果不正确或者没有给出运行结果,但分析程序执行流程基本正确给分不超过2分。 ) 2. 阅读以下递归函数,分析进行k=fib(7)调用时程序运行过程;调用完成后变量k的值为多少? #include longfib(intg) {switch(g) {case0: return0; case1: case2: return1; } return(fib(g-1)+fib(g-2)); } 解答: 调用完成后k的值为13 (注意: 评分时如果试卷中给出k的值不正确或者没有给出k的值,但分析程序执行流程基本正确给分不超过3分。 ) 五.子程序设计(每小题15分,共30分) 本题说明: 完成函数设计时,请自行说明所有的形式参数的类型 1. 设计一个函数strcpy(s1,s2),将字符串s1复制到字符串s2中,且函数strcpy()返回值为实际复制到s2中字符个数。 例如: 函数调用strcpy(“asdfgh”,s2)完成后,字符串s2中内容为”asdfgh”,函数返回值为6。 解答: intstrcpy(char*s1,char*s2)/*函数原型3分*/ {intn=0;/*2分*/ while((*s1=*s2)! =0)/*3分*/ {s1++;/*1分*/ s2++;/*1分*/ n++;/*1分*/ } returnn;/*2分*/ }/*语法2分*/ 2. 设计一个函数delarr(a,m,n),a为一个已经按照从小到大排列的一维整数数组(数组元素的个数为m),从数组a中删除所有等于n的元素,且函数返回值为删除n以后数组a余下的元素个数。 例如: inta[5]={1,2,2,3,4}; 则,delarr(a,5,2)调用完成后,数组a的内容为{1,3,4,0,0},函数返回值为3。 解答: intdelarr(int*a,intm,intn)/*函数原型3分*/ {inti,j,k=m;/*1分*/ for(i=0;i if(a[i]==n)/*1分*/ {for(j=i+1;j a[j-1]=a[j]; a[m-1]=0;/*1分*/ k--;/*1分*/ } returnk;/*2分*/ }/*语法2分*/ 六.算法设计(选做一题15分) 说明: ● 仅需任意选做一题。 多选者,以卷面先列出的为判分依据; ● 分析思路、重要数据类型的定义、模块的功能、形式参数、函数返回值说明; ● 用伪代码或其它方法描述子程序; ● 不必完整写出函数程序的代码,完整代码将不作为判分依据。 1. 函数link(h1,h2,h),将两个由整数组成的单链表h1和h2组合成一个有序链表h。 实在参数h应该指向创建后有序链表的头结点,函数返回值为有序链表中结点个数。 具体要求如下: A)说明链表结点类型的C语言定义形式;(4分) 解答: structnode{ intdata; structnode*next}; B)给出函数link(h1,h2,h)的原型。 (3分) 解答: intlink(structnode*h1,structnode*h2,structnode**h); C)描述函数的算法。 (8分) 2. 编程实现将一个整型数据转换成二进制数据。 具体要求如下: D)说明如何表示一个“二进制进制数”,最好用图示方法说明,并给出“二进制数据”的C语言定义形式;(4分) 解答: 数组或者堆栈 E)说明程序中划分多少模块? 并给出每个模块的原型;(3分) F)描述每个模块的算法。 (8分) 武汉大学计算机学院 2005-2006学年度第2学期2005级 《高级语言程序设计》期末考试试卷A卷答案 一.单项选择题: (选择最合适的答案填空,每小题2分,共20分) ()1.下面的文字中___C___是不正确的变量名。 A.Case B._12 C.else D.eve ()2.下面的四个选项中,正确的字符型常量是_____B_。 A.‘\68’ B.‘\t’ C.“\n” D.‘\xdh’ ()3.表达式sizeof(float)的结果为______C类型。 A.单精度 B.双精度 C.整型 D.不合法的 ()4.设有变量定义: intm=0,n=0;则执行表达式(m-->=0)||(n++<0)后,m,n 的值为_____A_。 A.-1和0 B.-1和1 C.0和0 D.0和1 ()5.C语言的编译系统对宏命令是D。 A.在程序执行时处理的 B.在程序连接时处理的 C.和源程序其他语句一起编译 D.在对源程序中其它成分正式编译之前进行处理的 ()6.以下正确的程序语句段为____D。 A.chars1[]=”123456”,s2[]=”abcdef”;strcat(s1,s2); B.char*s1=”1234”,*s2=”abcde”;strcpy(s1,s2); C.char*s1,*s2=”1234”;strcpy(s1,s2); D.chars1[10]=””,s2[5]=”1234”;strcat(s1,s2); ()7.设inta[3][4],(*p)[4];p=a;则表达式*(p+1)等价于__C___。 A.&a[0][1] B.a+1 C.&a[1][0] D.a[1][0] ()8.如果执行打开文件函数fopen()时发生错误,该函数返回值为___B_____。 A.EOF B.NULL C.-1 D.随机值 ()9.若有以下说明和语句,则下面四个选项中对ttd中lab域的正确引用方式是 _A_。 structexample{ charlab; intnum; }ttd,*p; p=&ttd; A.(*p).lab B.p->ttd.lab C.(*p).ttd.lab D.p.ttd.lab ()10.表达式(int)(6.8+7/2)的结果是____B_。 A.10 B.9 C.11 D.8 二.文字填空(共15分) 1.break语句出现在循环语句中的作用是__终止整个循环的执行____________。 2.如果int类型数据在内存中占据2个字节,则int类型数据取值范围为从___-32768______到___32767________。 3.在C语言中,全局变量定义时在数据类型前面增加前缀static,则表示该变量仅在____本文件内或者定义它的文件中或者整个程序______内有效。 4.设x、y为char类型变量,请写出以下命题: (1)x和y都为大写字母_______(x>=’A’&&x<=’Z’)&&(y>=’A’&&y<=’Z’)_ 评分要点: 少写“=”给1分 (2)x和y中至少一个是数字__(x>=’0’&&x<=’9’)||(y>=’0’&&y<=’9’)____________ 评分要点: 少写“=”给1分 5.假设a=3,b=7,c=5,则表达式a 6.设有如下定义inta[10];long*p,*q;p=(long*)a;q=(long*)(a+8),则表达式q-p的结果等于_____4___答16个字节也算正确____。 7.库函数malloc(sizeof(long))的作用是_动态申请存放一个long类型数据内存_________。 评分要点: 写明动态申请内存即算正确 8.表达式10&12的结果等于__8__________。 三.程序填空(请在空白处填写合适内容以正确完成整个程序,共10分) 1.以下程序的功能是: 统计100到1000之间各位数字之和为8的数据个数。 #include voidmain() {inti,s,k,count=0; for(i=100;i<=1000;i++) { s=①0; k=②i; while(③k! =0或者k或者k>0或者k>=1) {s=s+k%10; k=④k/10; } if(s! =8)⑤break; count++; } printf("%d",count); } 2.下面程序的功能是: 从一个字符串中删除指定字符,例如,从字符串”Prolog”中删除字符’o’,则结果为”Prlg”。 #include voiddeletechar(⑥char*s或者chars[],charc) {inti=0,j; while(⑦s[i]! =’\0’或者s[i]! =0或者s[i]或者s[i]>0) if(s[i]==c) {j=⑧i; while(⑨s[j]! =’\0’或者s[j]! =0或者s[j]或者s[j]>0) {s[j]=s[j+1]; j++; } } else ⑩i++或者++i或者i=i+1或者i+=1; } voidmain(void) {chars[20],c; gets(s); getchar(c); deletechar(s,c); puts(s); } ⑦填s[i++]! =’\0’或者s[i++]! =0或者s[i++]或者s[i++]>0 ⑩填continue算正确 四.程序阅读与分析(共10分) 1.分析以下程序执行流程,并写出下列程序的运行结果。 #include intx=0; intfat(intn) {staticintf=0; x+=2; f=f+n; return(f); } voidmain(void) {inti,j; for(i=3;i<=5;++i) {printf(“%d\t”,fat(i)); printf(“%d\n”,x); } } 答案: 32 74 126 评分要点: 给出上述6个正确结果,给满分5分 结果完全不对,但是给出程序执行流程分析基本正确,最多给3分 2.阅读以下递归函数,假设有如下定义: inta[6]={6,1,4,7,4,0};分析进行printn(a)调用时程序运行过程;并写出该调用产生的运行结果。 #include voidprintn(int*x) {if(*x! =0) printn(x+1); if(*x%2)printf(“%d,”,*x*2); elseprintf(“%d,”,*x); } 答案: 0,4,14,4,2,6 评分要点: 给出答案6,2,4,,14,4,0给4分,如果结果完全不对,但是给出程序执行流程分析基本正确,最多给3分 五.子程序设计(每小题15分,共30分) 本题说明: 完成函数设计时,请自行说明所有的形式参数的类型 1.设计一个函数getnum(s,&n),字符串s是十六进制字符串,函数getnum统计s的字符个数并作为函数值返回,另外n返回s对应的十进制整数数据值。 例如,有如下定义,chars[]=”12a”;intn,m; 则有函数调用m=getnum(s,&n)后,m的值为3,n的值为298即等于1×162+2×16+10=298。 参考答案 #include intgetnum(chars[],int*m) {intn,sum=0; n=0; while(s[n]! =’\0’) {switch(s[n]) { case‘0’: case’1’: case’2’: case‘3’: case’4’: case‘5’: case’6’: case’7’: case‘8’: case’9’: sum=s*16+s[n]-‘0’;break; case‘a’: case’b’: case’c’: case‘d’: case’e’: case’f’: sum=sum*16+s[i]-‘a’+10;break; case‘A’: case’B’: case’D’: case‘C’: case’E’: case’F’: sum=sum*16+s[i]-‘A’+10;break; } n++; } *m=sum; returnn; } 评分要点: 1计算s的长度并正确返回 2将字符串s的内容转换为十进制整数的求解算法正确 注意语法错误最多扣2分,重点在于程序的思路正确 2.设计一个函数rightarr(a,m,n),a为一维整数数组(数组元素的个数为m),该函数实现数组a的循环左移n位。 例如: 有如下定义,inta[5]={1,2,3,4,5}; 则,rightarr(a,5,2)调用完成后,数组a的内容为{3,4,5,1,2}。 参考答案: voidrightarr(inta[],intm,intn) { intx=0,y,t; while(x { t=a[0]; for(y=0;y a[y]=a[y+1]; a[m-1]=t; x++; } } 评分要点: 1移位方向为左移 2循环移位算法正确,重点注意a[0]移动正确 注意语法错误最多扣2分,重点在于程序的思路正确 六.算法设计(选做一题15分) 说明: ●仅需任意选做一题。 多选者,以卷面先列出的为判分依据; ●分析思路、重要数据类型的定义、模块的功能、形式参数、函数返回值说明; ●用伪代码或其它方法描述子程序; ●不必完整写出函数程序的代码,完整代码将不作为判分依据。 1.函数link(h,n),其中h是一个由整数组成的从小到大排列的有序单链表,n为整数。 函数link实现把n按照顺序插入到链表h中,函数返回值为完成插入n之后的有序链表中结点个数。 具体要求如下: A)说明链表结点类型的C语言定义形式; B)给出函数link(h,n)的原型。 C)描述函数的算法。 参考答案: 评分要点: 以算法可行,基本正确为主要评分指标 (1)链表结点类型为结构类型 (2)函数link(h,n)中参数h为二级指针,n为整型 (3)插入算法: 首先查找插入位置,然后完成插入操作(注意插入在链表头部和非头部的区别。 2.任意输入一个年、月、日,编程实现判断该日期是星期几。 具体要求如下: D)说明如何表示一个日期数据,以及星期一到星期天; E)说明程序中划分多少模块? 并给出每个模块的原型; F)描述每个模块的算法。 参考答案: 评分要点: 以算法可行,基本正确为主要评分指标 (1)日期可为结构类型或者整型,星期一到星期天可为枚举、字符串或者整数等 (2)算法中主要功能: 判断某年是否为闰年;给出一个基准日期的星期数据为计算的初始数据;计算该天为多年第几天;计算星期几。 武汉大学计算机学院 2005-2006学年度第2学期2005级 《高级语言程序设计》期末考试试卷B卷 姓名: 学号: 专业: 说明: 未经主考教师同意,考试试卷、答题纸、草稿纸均不得带离,否则视为违规。 答案请全部写在答题纸上,写在试卷上无效。 一、单项选择题: (选择最合适的答案填空,每小题2分,共20分) ()1.下面四个选项中D是合法的标识符。 E.‘t’ F.A#12 G.sum.5 H.eve ()2.下面四个选项中,不正确的浮点型常量为____B__。 E.-234. F..23E1.2 G..84e+2 H..174 ()3.若有以下类型说明语句: chara;intb;floatc;doubled;则 表达式a*b+d-c的运算结果的类型为_____C_。 E.char F.float G.double H.int
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 武汉大学 计算机 学院 语言 部分 年份 试题
![提示](https://static.bdocx.com/images/bang_tan.gif)