C语言程序设计C语言历年试题.docx

上传人:b****6 文档编号:7912209 上传时间:2023-01-27 格式:DOCX 页数:15 大小:24.33KB
下载 相关 举报
C语言程序设计C语言历年试题.docx_第1页
第1页 / 共15页
C语言程序设计C语言历年试题.docx_第2页
第2页 / 共15页
C语言程序设计C语言历年试题.docx_第3页
第3页 / 共15页
C语言程序设计C语言历年试题.docx_第4页
第4页 / 共15页
C语言程序设计C语言历年试题.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

C语言程序设计C语言历年试题.docx

《C语言程序设计C语言历年试题.docx》由会员分享,可在线阅读,更多相关《C语言程序设计C语言历年试题.docx(15页珍藏版)》请在冰豆网上搜索。

C语言程序设计C语言历年试题.docx

C语言程序设计C语言历年试题

一.选择题:

(选择最合适的答案填空,每小题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

()4.设有变量定义:

intm=0,n=0;则执行表达式(m--<0)&&(n++<0)后,m,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.缺少数据,不能确定

()7.设inta[3][4],(*p)[4];p=a;则表达式(*(p+1))[0]等价于__D___。

E.&a[0][1];

F.a[0][1];

G.&a[1][0]

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*)&rec.x;

()10.表达式(int)(6.8+(-7)%2)的结果是______A。

B.5

B.6

C.7

D.8

二、文字填空(共15分)

9.continue语句出现在循环语句中的作用是___退出本次循环,转下次循环___________。

10.如果unsignedint类型数据在内存中占据2个字节,则int类型数据取值范围为从__0_______到____65535______。

11.在C语言中,局部变量定义时在数据类型前面增加前缀static,则表示该变量在___整个程序执行_______过程中占据固定的内存单元。

12.设x、y为char类型变量,请写出以下命题:

(1)x为数字并且y不是数字____(x>=’0’&&x<=’9’)&&_(y<’0’||y>’9’)____

或者isdigit(x)&&!

isdigit(y)________________________

(2)x和y中至少一个不是数字_

________(x<’0’||x>’9’_)||(y<’0’||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整除的数。

#include

voidmain()

{

inti,s,k;

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%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)!

=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;

}

voidmain()

{

chars[20];

inti;

gets(s);

convert(s);

puts(s);

}

评分要点:

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

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

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

#include

intx=2;

intfat(intn)

{staticintf=0;

intx=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

-72

-122

评分要点:

给出上述6个正确结果,给满分5分

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

4.阅读以下递归函数,假设有如下定义:

inta[6]={6,1,4,7,4,0},分析进行printn(a)调用时程序运行过程;并写出该调用结束后数组a的内容是多少?

#include

voidprintn(int*x)

{if(*x!

=0)

printn(x+1);

*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’;break;

case14:

s[k]=’e’;break;

case13:

s[k]=’d’;break;

case12:

s[k]=’c’;break;

case11:

s[k]=’b’;break;

case10:

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;

}

returnk;

}

评分要点:

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

2将十进制整数转换为十六进制字符串s的内容的求解算法正确

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

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}。

参考答案:

voidrightarr(inta[],intm,intn)

{

intx=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分)

说明:

●仅需任意选做一题。

多选者,以卷面先列出的为判分依据;

●分析思路、重要数据类型的定义、模块的功能、形式参数、函数返回值说明;

●用伪代码或其它方法描述子程序;

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

3.函数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)删除算法:

首先查找删除数据在链表中的位置,然后完成删除操作(注意删除位置在链表头部和非头部的区别。

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

具体要求如下:

D)说明如何表示一个日期数据,以及星期一到星期天;

E)说明程序中划分多少模块?

并给出每个模块的原型;

F)描述每个模块的算法。

参考答案:

评分要点:

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

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

(4)算法中主要功能:

判断某年是否为闰年;给出一个基准日期的星期数据为计算的初始数据;计算当月1日为该年第几天以及是星期几;。

输出该月日历。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1