C语言程序设计C语言历年试题文档格式.docx
- 文档编号:21046807
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:15
- 大小:24.33KB
C语言程序设计C语言历年试题文档格式.docx
《C语言程序设计C语言历年试题文档格式.docx》由会员分享,可在线阅读,更多相关《C语言程序设计C语言历年试题文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
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>
y<
=’Z’)_
评分要点:
少写“=”给1分
(2)x和y中至少一个是数字__(x>
=’0’&
=’9’)||(y>
=’9’)____________
5.假设a=3,b=7,c=5,则表达式a<
b<
c的结果等于______1___________。
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<
stdio.h>
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++]>
⑩填continue算正确
四.程序阅读与分析(共10分)
1.分析以下程序执行流程,并写出下列程序的运行结果。
intx=0;
intfat(intn)
{staticintf=0;
x+=2;
f=f+n;
return(f);
{inti,j;
for(i=3;
=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)调用时程序运行过程;
并写出该调用产生的运行结果。
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。
参考答案
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;
case‘A’:
case’B’:
case’D’:
case‘C’:
case’E’:
case’F’:
sum=sum*16+s[i]-‘A’+10;
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<
n)
t=a[0];
for(y=0;
m-1;
y++)
a[y]=a[y+1];
a[m-1]=t;
x++;
1移位方向为左移
2循环移位算法正确,重点注意a[0]移动正确
六.算法设计(选做一题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卷
姓名:
学号:
专业:
未经主考教师同意,考试试卷、答题纸、草稿纸均不得带离,否则视为违规。
答案请全部写在答题纸上,写在试卷上无效。
一、单项选择题:
()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
则执行表达式(m--<
0)&
(n++<
的值为___A___。
E.-1和0
F.-1和1
G.0和0
H.0和1
()5.以下关于C语言中预处理的叙述中不正确的是B。
E.C源程序中凡是以"
#"
号开始的控制行都是预处理命令行。
F.预处理命令行必须位于源程序的开始部位。
G.一条有效的预处理命令行必须单独占据一行。
H.预处理命令是在正式编译之前先行被处理的
()6.若有说明语句:
inta[][3]={1,2,3,4,5,6,7,8};
则数组的行数为__C。
E.1
F.2
G.3
H.缺少数据,不能确定
则表达式(*(p+1))[0]等价于__D___。
E.&
a[0][1];
F.a[0][1];
G.&
H.a[1][0]
()8.正常执行关闭文件函数fclose()后,该函数返回值为___B_____。
E.EOF
F.0
G.-1
H.随机值
()9.设有如下定义,若要使px指向rec中的x域,则下面四个选项中D是
正确的赋值语句。
structaa
intx;
floaty;
}rec,*px;
E.*px=rec.x;
F.px=&
rec.x;
G.px=(structaa*)rec.x;
H.px=(structaa*)&
()10.表达式(int)(6.8+(-7)%2)的结果是______A。
B.5
B.6
C.7
二、文字填空(共15分)
9.continue语句出现在循环语句中的作用是___退出本次循环,转下次循环___________。
10.如果unsignedint类型数据在内存中占据2个字节,则int类型数据取值范围为从__0_______到____65535______。
11.在C语言中,局部变量定义时在数据类型前面增加前缀static,则表示该变量在___整个程序执行_______过程中占据固定的内存单元。
12.设x、y为char类型变量,请写出以下命题:
(1)x为数字并且y不是数字____(x>
=’9’)&
_(y<
’0’||y>
’9’)____
或者isdigit(x)&
!
isdigit(y)________________________
(2)x和y中至少一个不是数字_
________(x<
’0’||x>
’9’_)||(y<
’9’)_
或者!
isdigit(x)||!
isdigit(y)______________
13.假设a=8,则表达式3<
=a<
=6的结果等于_________1______________。
14.设有如下定义longa[10];
int*p,*q;
p=(int*)a;
q=(int*)(a+8),则表达式q-p的结果等于_____16或者32个字节_______。
15.库函数free(p)的作用是_释放p指向的内存_________。
16.表达式10|9的结果等于___11________。
三、程序填空(请在空白处填写合适内容以完成整个程序,共10分)
1.以下程序的功能是:
列出100到1000之间各位数字之和可以被3整除的数。
{
inti,s,k;
=①1000;
s=②0;
k=③i;
while(④k!
k=⑤k/10;
if(s%3==0)
printf(“%6d”,i);
1.下面程序的功能是:
把一个字符串中的所有大写字母改变为小写字母,而小写字母改成大写字母,其他字符不变。
例如对字符串”Prolog10”操作后结果为”pROLOG10”。
#include<
voidconvert(⑥chars[]或者char*s)
{inti=0;
while(⑦s[i]!
=’\0’或者*(s+i)!
=0或者*(s+i)!
=0或者s[i]或者*(s+i))
{if(⑧s[i]>
s[i]<
=’Z’)
s[i]=s[i]+32;
if(⑨s[i]>
=’a’&
=’z’)
s[i]=s[i]-32;
⑩i++或者++i或者i=i+1或者i+=1;
chars[20];
inti;
gets(s);
convert(s);
puts(s);
评分要点:
注意s[i]和*(s+i)是完全等价的形式。
四、程序阅读与分析(共10分)
3.分析以下程序执行流程,并写出下列程序的运行结果。
intx=2;
intx=0;
f=f-n;
答案:
-32
-72
-122
4.阅读以下递归函数,假设有如下定义:
inta[6]={6,1,4,7,4,0},分析进行printn(a)调用时程序运行过程;
并写出该调用结束后数组a的内容是多少?
*x+=2;
该调用结束后数组a的内容是{8,3,6,9,6,0}
如果结果完全不对,但是给出程序执行流程分析基本正确,最多给3分
五、子程序设计(每小题15分,共30分)
3.设计一个函数tnum(s,n),函数tnum把十进制整数n转换为十六进制字符串,函数值为该十六进制字符串的长度,而转换后的十六进制字符串由s返回。
例如,有如下定义
chars[10]=,n=298,m;
则有函数调用m=tnum(s,n)后,m的值为3,s的为”12a”。
inttnum(char*s,intn)
intk,m,i;
charc;
k=0;
while(n)
m=n%16;
n=n/16;
switch(m)
case15:
s[k]=’f’;
case14:
s[k]=’e’;
case13:
s[k]=’d’;
case12:
s[k]=’c’;
case11:
s[k]=’b’;
case10:
s[k]=’a’;
default:
s[k]=m+’0’;
k++;
s[k]=0;
for(i=0,m=k-1;
m;
i++,m--)
c=s[i];
s[i]=s[m];
s[m]=c;
returnk;
2将十进制整数转换为十六进制字符串s的内容的求解算法正确
4.设计一个函数rightarr(a,m,n),a为一维整数数组(数组元素的个数为m),该函数实现数组a的循环右移n位。
inta[5]={1,2,3,4,5};
则,rightarr(a,5,2)调用完成后,数组a的内容为{4,5,1,2,3}。
t=a[m-1];
for(y=m-1;
y>
0;
y--)
a[y]=a[y-1];
a[0]=t;
1移位方向为右移
注意语法错误最多扣2分,重点在于程序的思路正确
六、算法设计(选做一题15分)
3.函数link(h,n),其中h是一个由整数组成的从小到大排列的有序单链表,n为整数。
函数link实现把n从链表h中删除,函数返回值为1表示删除成功,返回0表示删除失败。
(4)链表结点类型为结构类型
(5)函数link(h,n)中参数h为二级指针,n为整型
(6)删除算法:
首先查找删除数据在链表中的位置,然后完成删除操作(注意删除位置在链表头部和非头部的区别。
4.任意输入一个年、月,编程输出该月月历。
(3)日期可为结构类型或者整型,星期一到星期天可为枚举、字符串或者整数等
(4)算法中主要功能:
计算当月1日为该年第几天以及是星期几;
。
输出该月日历。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 语言 历年试题