C++期中复习题.docx

上传人:b****2 文档编号:2373483 上传时间:2023-05-03 格式:DOCX 页数:22 大小:150.63KB
下载 相关 举报
C++期中复习题.docx_第1页
第1页 / 共22页
C++期中复习题.docx_第2页
第2页 / 共22页
C++期中复习题.docx_第3页
第3页 / 共22页
C++期中复习题.docx_第4页
第4页 / 共22页
C++期中复习题.docx_第5页
第5页 / 共22页
C++期中复习题.docx_第6页
第6页 / 共22页
C++期中复习题.docx_第7页
第7页 / 共22页
C++期中复习题.docx_第8页
第8页 / 共22页
C++期中复习题.docx_第9页
第9页 / 共22页
C++期中复习题.docx_第10页
第10页 / 共22页
C++期中复习题.docx_第11页
第11页 / 共22页
C++期中复习题.docx_第12页
第12页 / 共22页
C++期中复习题.docx_第13页
第13页 / 共22页
C++期中复习题.docx_第14页
第14页 / 共22页
C++期中复习题.docx_第15页
第15页 / 共22页
C++期中复习题.docx_第16页
第16页 / 共22页
C++期中复习题.docx_第17页
第17页 / 共22页
C++期中复习题.docx_第18页
第18页 / 共22页
C++期中复习题.docx_第19页
第19页 / 共22页
C++期中复习题.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C++期中复习题.docx

《C++期中复习题.docx》由会员分享,可在线阅读,更多相关《C++期中复习题.docx(22页珍藏版)》请在冰点文库上搜索。

C++期中复习题.docx

C++期中复习题

一、选择填空:

1.已知各变量的类型说明如下:

inta=1;

doublex=1.42;

charch;

则以下不符合C++语言语法的表达式是C

A、a+=0x123fdB、x=12e-8C、ch=“x”D、ch=‘\a’

2.下面D是死循环。

A、for(i=0;i<10;i++)cout<

B、for(i=10;i>=1;i--)cout<

C、i=10;do{cout<0);

D、i=0;while(i<=10);cout<<++i<<"";

3.C++语言的跳转语句中,对于break和continue说法正确的是C:

A、break语句只应用于循环体中  

B、continue语句用于跳出循环语句  

C、continue语句用于跳出当前的循环周期  

D、break语句用于跳出当前的循环周期

4.有如下定义语句:

inta[]={1,2,3,4,5};,则对语句int*p=a;正确的描述是B。

A、语句int*p=a;定义不正确

B、语句int*p=a;初始化变量p,使其指向数组对象a的首元素

C、语句int*p=a;是把数组a的值赋给变量p

D、语句int*p=a;是把a[0]的值赋给变量p

5在C++语言中,自定义的标识符_______D_________。

A.能使用关键字并且不区分大小写B.能使用关键字并且区分大小写

C.不能使用关键字并且不区分大小写D.不能使用关键字并且区分大小写

6若有以下定义和语句,则不能合法表示a数组元素的是:

(D)

chara[]=”abcdefg”;

int*p=a;

Ap[7]Ba[p-a]C*aDa[8]

7下列程序中错误的语句是C

intmain()

{char*pt1="1234";

charpt2[]="12";

char*pt3="34";

pt3=pt2;//A

strcpy(pt3,pt2);//B

pt2=pt1;//C

strcpy(pt2,pt3);//D

cout<

return0;

}

8下列语句正确的是A

Achara[2]={’a’};Bchar3a=’\0’;Cchara[]='abc';Dchara="\0";

9、ch为char类型,判断ch为小写字符的表达式是C。

A、’a’<=ch<=’z’B、(ch>=’a’)&(ch<=’z’)

C、(ch>=’a’)&&(ch<=’z’)D、(ch>=’a’)||(ch<=’z’)

10.链表结点的结构类型为structlinkRec{intdata;linkRec*next;},如果指针rear指向尾结点,将节点p链入表尾,并将p作为新的表尾可用语句B

 

A、rear->next=p->next;rear=p;B、rear->next=p;rear=p;

C、rear->next=rear;p->next=p;D、(*rear).next=rear;(*p).next=p;

11.函数:

voidf(void)

{

inti=12,j;

for(j=0;j<20;j++)

i++;

}

当f执行完退出后,i的值为____D______

(A)12(B)32(C)29(D)无定义

12.假定在C++程序中有如下说明:

doubleimage[10][20];

那么,下列C表达式会得到image数组的最后一个元素的地址?

(A)image[10][19](B)image[10][20](C)&image[9][19](D)&image[10][19]

13.已知函数定义的形式如下:

structdata*f(void)

{……}

则函数f:

C

(A)没有参数,返回值是一个结构

(B)有一个参数void,返回值是一个结构

(C)没有参数,返回值是一个结构指针

(D)有一个参数void,返回值是一个结构指针

14.设inta=9,b=8,c=7,x=1;则执行语句

if(a>7)if(b>8)if(c>9)x=2;elsex=3;后x的值是B

(A)0(B)1(C)2(D)3

15.下述对C++语言字符数组的描述中错误的是C

(A)字符数组可以存放字符串(B)字符数组中的字符串可以整体输入、输出

(C)可以在赋值语句中通过赋值运算符"="对字符数组整体赋值

(D)不可以用关系运算符对字符数组中的字符串进行比较

 

二、简答题

1.写出完成下列任务的表达式:

a.取出整型变量n的个位数

b.取出整型变量n的十位以上的数字

c.将整型变量a和b相除后的商存于变量c,余数存于变量d

d.将字符变量ch中保存的小写字母转换成大写字符

e.将double型的变量d中保存的数字按四舍五入的规则转换成整数

f判断指针p是否为空指针

n%10

n/10

c=a/b,d=a%b

ch–‘a’+‘A’

int(d+0.5)

p==NULL

 

2.重写代码:

a.用一个switch语句重写下列代码

if(ch==‘E’||ch==’e’)

++countE;

elseif(ch==’A’||ch==’a’)

++countA;

elseif(ch==’I’||ch==’I’)

++countI;

else

cout<<“error”;

Switch(ch){

Case‘e’:

case‘E’:

++countE;break;

Case‘a’:

case‘A’:

++countA;break;

Case‘I’:

case‘i’:

++countI;break;

Default:

cout<<“error”

}

 

if(ch==‘E’)cout<<++c<

b.用一个if语句重写下列代码

if(ch==’E’)++c;

if(ch==’E’)cout<

3.当遇到下列情况时,你将怎样编写for语句的控制行。

(5分)

For(k=1;k<=100;++k)

For(k=2;k<=100;k+=2)

For(k=0;k<100;k+=7)

For(k=100;k>=0;--k)

For(ch=’a’;ch<=’z’;++ch)

a.从1计数到100。

b.从2,4,6,8,…计数到100。

c.从0开始,每次计数加7,直到成为三位数。

d.从100开始,反向计数,99,98,97,…直到0。

e.从’a’变到’z’。

三、程序理解:

(每题3分,共30分)

1.写出下面程序的执行结果

intmain()

AC

BC

C

D

E

FF

{for(charch=‘A’;ch<‘G’;++ch)

switch(ch){

case‘A’:

case‘B’:

cout<

case‘C’:

cout<<‘C’<

case‘D’:

case‘E’:

cout<

case‘F’:

cout<

default:

cout<

}

return0;

}

2.请写出下列程序段的输出结果

22

21

20

for(k=0;k<2;++k);

for(m=k;m>=0;--m)

cout<

3.写出以下程序的输出结果。

intmain()

{chara[10]={'a’,'b','c','d','e','f','7','8','9',0};

char*p;

789

inti=8;

p=a+i;

cout<<(p-2);

return0 ;

}

4.已知华氏温度到摄氏温度的转换公式为

某同学编写了一个将华氏温度转换成摄氏温度的程序:

intmain()

{intc,f;

cout<< “请输入华氏温度:

“ ;

cin>>f ;

c=5/9*(f–32) ;

cout<<“对应的摄氏温度为:

”<

return0;

}

但无论输入什么值,程序的输出都是0.请你帮他找一找哪里出问题了。

表达式5/9的结果是0,0乘以任何数都为0

 

5写出运行结果

intmain()

{inta[3]={1,2,3},*p;

inti,b[6];

122133

p=a;

b[0]=*p;

p++;b[1]=*p;

b[2]=*p;

b[3]=*(p–1);

b[4]=(*p)+1;

b[5]=*(p+1);

for(i=0;i<6;i++)cout<

}

6写出运行结果:

voidfoo(int&c){

statica=1;

c+=a++;

}

intmain()

{

11

14

inta;

int&b=a;

a=10;

foo(a);

cout<

foo(++b);

cout<

return0;

}

7写出运行结果

template

Tavg(Tx[],intn);

intmain()

{inta[]={4,5,2,8,9,3};

doubleb[]={3.5,6.7,2,5.2,9.2};

cout<<"averageofA:

"<

cout<<"averageofB:

"<

return0;

}

averageofA:

9

averageofB:

9.2

template

Tavg(Tx[],intn)

{inti;

Tmaxv=x[0];

for(i=1;i

if(maxv

returnmaxv;

}

8.写出运行结果

intf(intn)

{intp;

if(n==0||n==1)return1;

else

17

{p=2*f(n-1)+f(n-2);

returnp;

}

}

intmain()

{

cout<

cout<

return0;

}

9.请写出下列程序的功能,以及当输入为“12345”时的输出结果。

intmain()

12345

{intnum=0,i;

charch[10];

cin>>ch;

for(i=0;ch[i]!

='\0';++i)num=num*10+ch[i]-'0';

cout<

return0;

}

10.下面是解决汉诺塔问题的函数,假如每搬动一次盘子需要1秒钟,请问完成64个盘子的汉诺塔问题需要多少秒?

voidHanoi(intn,charstart,charfinish,chartemp)

{if(n==1)cout<"<

else{Hanoi(n-1,start,temp,finish);

cout<"<

Hanoi(n-1,temp,finish,start);

}

}

11.写出输入为第一个输入为5,第2个输入为2的程序运行结果

#include

usingnamespacestd;

voidDrawTriangle(intheight,intlocation);

voidDrawRevTriangle(intheight,intlocation);

voidDrawDiamond(intheight,intlocatio);

intmain()

{

intheight,location;

while

(1){

cout<<"Pleaseinputanoddnumber):

\n";

cin>>height;

if(height%2!

=0)

break;

}

cout<<"Pleaseinputlocation:

\n";

cin>>location;

DrawDiamond(height,location);

return0;

}

voidDrawDiamond(intheight,intlocation)

{

DrawTriangle((height+1)/2,location);

DrawRevTriangle((height-1)/2,location+1);

}

voidDrawTriangle(intheight,intlocation)

{

inti,j,k;

for(i=0;i

for(j=-location;j

cout<<'';

for(k=0;k

cout<<'*';

cout<

}

}

voidDrawRevTriangle(intheight,intlocation)

{

inti,j,k;

for(i=0;i

for(j=-location;j

cout<<'';

for(k=0;k<2*(height-i)-1;k++)

cout<<'*';

cout<

}

}

*

***

*****

***

*

12.请写出以下程序的作用

Typedefstruct{

intx[10];

longy;

charz[20];

}MYTYPE;

main()

{

MYTYPEthem ;

cout<

}

答案:

定义结构体类型MYTYPE,并输出该结构体所占字节数

13.voidfunction(intb[],intsize)

{if(size>0)

{function(&b[1],size-1);cout<

}

main()

{staticinta[5]={10,20,30,40,50};

function(a,5);

}

运行结果是:

50

40

30

20

10

三。

程序填空(每空2分,共24分)

1.下面程序计算任意多个数的平均数,数据作为命令行的参数传入。

intmain(intargc,char*argv[])

{char*tmp;

intsum=0,value;

for(inti=1;i<=argc;++i){

value=0;

tmp=argv[i];

while(*tmp){

value=value*10+*tmp–‘0’;

++tmp;

}

sum+=value;

}

cout<

return0;

}

2.7.以下是选择排序法的递归实现,其中array是要排序的数组,n是要排序的元素个数。

请填空。

voidsort(intarray[],intn)

{inti,min,tmp;

if(n>1)

{min=0;

for(i=0;i

if(a[i]

if(min!

=0)

{tmp=array[0];

array[0]=array[min];

array[min]=tmp;

}

sort(a+1,n-1);

}

}

3.Conj函数的功能是将两个字符串s和t连接起来,连接后的串存放在动态内存分配区,返回指向连接后的串的指针

char*conj(char*s,char*t)

{char*p,*q;

p=q=newchar[strlen(s)+strlen(t)+1];

while(*s)*(q++)=*(s++);

while(*t)

{*q=*t;

q++;t++;

}

*q=‘\0’;

returnp;

}

4.所谓的回文,就是正读和反读都一样的字符串,如”abcba”。

以下是判断一个字符串是否为回文的函数的实现,请填空。

boolf(char*s,intn)

{

if(n<=1)

{

____returntrue__________;

}

else

{

if(s[0]==s[n-1])

{

__return_f(s+1,n-2)________;

}

else

{

__returnfalse____________;

}

}

}

5.如下是数字旋转方阵的递归实现。

函数fill有三个参数:

填入数字的初值、起始位置、矩阵规模。

如要填写下列矩阵,可调用fill(1,0,6)。

请填空

1

20

19

18

17

16

2

21

32

31

30

15

3

22

33

36

29

14

4

23

34

35

28

13

5

24

25

26

27

12

6

7

8

9

10

11

voidfill(intnumber,intbegin,intsize)

{inti,row=begin,col=begin;

if(size==0)return;

if(size==1){p[begin][begin]=number;return;}

p[row][col]=number;++number;

for(i=0;i

{++row;p[row][col]=number;++number;}

for(i=0;i

{++col;p[row][col]=number;++number;}

for(i=0;i

{--row;p[row][col]=number;++number;}

for(i=0;i

{--col;p[row][col]=number;++number;}

fill(number,begin+1.size–2);

}

四.编程题

我们知道,计算机在进行所有的实数运算时都是有误差的。

因此,用计算机解题要考虑的因素往往比数学课上的更为复杂。

例如求解一个一元二次方程(ax^2+bx+c=0),数学书上给出了非常明确的答案x=(-b+/-SQRT(b^2–4ac))/2a。

但如果我们用计算机来编写这样一个程序时,我们发现尽管我们的程序准确无误的实现了上面的算法,但当我们把求出的解代回方程时,我们发现结果并不等于零(甚至并不接近零)。

这就是计算误差造成的。

在这种情况下,我们可以通过迭代来逐步逼近方程的真解(使代回原方程的误差足够小,例如小于0.000001)。

编写一个求解一元二次方程根(ax^2+bx+c=0)的程序。

要求具备以下功能:

1.要求用户输入(a,b,c)三个实数。

2.根据不同的输入数据,确定不同的求解方法;同时对输入数据的合法性进行检验,并进行适当的错误处理。

(要求检查所有不同的非法可能)

3.验证你的结论是否正确,如果正确,输出你的结果;否则

4.按下面的方法进行迭代,直到你发现问题的真解

a)如果x是方程真根x*的一个近似值,则有

b)x*=x+∆x

c)令误差y=ax*^2+bx*+c

=a(x+∆x)^2+b(x+∆x)+c

=(ax^2+bx+c)+(2ax+b)∆x+∆x^2

略去高次项∆x^2后,令y=ax*^2+bx*+c=0则近似有

∆x=-(ax^2+bx+c)/(2ax+b)

d)将x=x+∆x再代回计算误差y,如果y<0.000001,x是真解,否则继续迭代。

要求:

1.对应下面给出的部分程序,实现一元二次方程的求解函数SolveQuadratic()和逼近真根的迭代函数Approach2RealRoot()。

你不可以修改下面给定的说明和程序逻辑。

答案:

2.设计一个函数,功能是合并二个升序链表为一个升序链表:

structlk

{intdata;

structlk*next;

}

structlk*merge(a,b)

structlk*a,*b;

{structlk*c,*p;

if(a->datadata){c=a;a=a->next;}

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

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2