C++ANSWERTHQ.docx

上传人:b****5 文档编号:11671501 上传时间:2023-03-30 格式:DOCX 页数:35 大小:26.83KB
下载 相关 举报
C++ANSWERTHQ.docx_第1页
第1页 / 共35页
C++ANSWERTHQ.docx_第2页
第2页 / 共35页
C++ANSWERTHQ.docx_第3页
第3页 / 共35页
C++ANSWERTHQ.docx_第4页
第4页 / 共35页
C++ANSWERTHQ.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

C++ANSWERTHQ.docx

《C++ANSWERTHQ.docx》由会员分享,可在线阅读,更多相关《C++ANSWERTHQ.docx(35页珍藏版)》请在冰豆网上搜索。

C++ANSWERTHQ.docx

C++ANSWERTHQ

高等院校计算机基础教育规划教材《C++程序设计》课后习题参考答案

                                              ――武汉大学出版社

 

习题1参考答案

一、选择题

1.C    2.C

二、填空题

1.面向过程,面向对象

2.编辑,编译,链接,运行

3.机器语言,汇编语言,高级语言。

4.数据,操作处理方法

5.'\0'

三、简答题

1.简述三代计算机语言各自的特点。

解答如下:

机器语言是用二进制指令表示的、计算机能够直接识别和执行的语言。

由于计算机可以直接执行机器语言,执行速度快是机器语言的主要优点。

在计算机发展初期,软件工程师使用机器语言来编写程序。

在计算机指令集不断增大的情况下,机器语言不易记忆,不便于学习,软件开发难度大、周期长、易出错,软件维护工作量大等缺点更加突出,机器语言已不能胜任编程工作。

汇编语言是用一些易读的助记符表示机器指令操作码,如ADD、CALL等。

使用汇编语言编写程序提高了编程速度,也比较容易编写出质量较高的程序,检查、维护也比较容易。

但汇编语言抽象层次低,程序员编写程序工作量大。

高级语言屏蔽了机器语言的细节,提高了语言抽象层次。

程序中采用了具有一定含义的数据命令和容易理解的执行语句。

高级语言不受计算机种类的限制,通用性强,易于理解、学习和掌握。

使用高级语言减少了大量的编程工作量。

目前使用比较广泛的高级语言有Basic、Fortran、Pascal和C语言。

C++是一种功能强大、应用更广泛的高级语言。

2.简述C语言程序实现的过程。

解答如下:

用C++语言编写好一个完整的程序后,第一步要上机运行编辑程序,输入源程序;第二步是对源程序进行编译生成目标代码文件,目标代码文件名与源程序文件名相同,而扩展名改为obj;第三步运行连接程序,将目标代码文件与C++的库文件相连接,生成可执行文件,可执行文件名与源程序文件名相同,而扩展名为exe;第四步运行可执行文件,实现程序所具有的功能。

 

习题2参考答案

一、选择题

1.C   2.B   3.B   4.D

二、填空题

1.?

2.4字节,1字节,4字节,8字节

3.15

4.6,60

5.26,25

6.256,22

7.3.96E2,3.96E5

三、简答题

1.C++基本数据类型有哪几种?

程序设计如下:

C++的基本数据类型有bool(布尔型,又称逻辑型)、char(字符型)、int(整型)、float(浮点型,表示实数)和double(双精度浮点型,简称双精度型)等5种。

2.定义符号变量与定义变量有何异同?

程序设计如下:

定义符号常量和定义变量都要指定数据类型,系统将为其分配一定的存储空间。

其不同之处在于:

定义符号常量必须给出常量值,且以后不能修改本常量的值;而变量可以在定义变量的同时赋初值,以后可以修改该变量。

3.什么叫常量?

什么是变量?

程序设计如下:

常量就是在程序的运行过程中该量是不可修改的量;变量在程序的运行过程中允许对该变量的值进行修改。

 

习题3参考答案

一、选择题

1.A   2.C   3.D   4.D   5.C

二、填空题

1.true   2.true   3.11   4.j<10和k%3   5.k<=x

三、编程题

1.编写找出a=18,b=35,c=21,d=96中最大值的程序。

程序设计如下:

#include

voidmain()

inta=18,b=35,c=21,d=96,max;

max=a>b?

a:

b;max=max>c?

max:

c;

max=max>d?

max:

d;cout<<"max="<

}

 

2.输入一个整数:

为65时,显示“A”;为66时,显示“B”,为67时,显示“C”,其它值显示“END”。

程序设计如下:

#include

voidmain()

{

intx;cinx;

switch(x)

{

case65:

cout<<"A\n";break;

case66:

cout<<"B\n";break;

case67:

cout<<"C\n";break;

default:

cout<<"END\n";

}

}

3.编写输入一个整数并且该数按小于10,10~99,100~999,1000以上分类并显示的C++程序,例如:

输入335时,显示“335is100to999”。

程序设计如下:

#include

voidmain()

inta;cina;

if(a>=100)

if(a>=1000)

cout<

else

cout<

}

else

if(a<10)

cout<

else

cout<

}

}

4.一个分数序列为:

2/1,3/2,5/3,8/5,13/8,21/23,…编写求该数列的前20项之和的程序。

程序设计如下:

#include 

voidmain()

floatx=1,y=2,p,k,s=0;

for(k=1;k<=20;k++)

s+=y/x;p=x+y;

x=y;y=p;

}

cout<<"2/1+3/2+5/3+8/5+…="<

}

5.编写程序,显示如下图形。

*

*  * *

*  *  *  * *

*  *  *  *  *  *  *

*  *  *  *  *

*  *  *

*

程序设计如下:

#include

voidmain()

{

inti,j,k;

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

for(k=4;k>=i;k--)

cout<<"";

for(j=1;j<=2*i-1;j++)

cout<<"*";

cout<

}

for(i=3;i>0;i--)

for(k=1;k<=4-i+1;k++)

cout<<"";

for(j=1,j<=2*i-1;j++)

cout<<"*";

cout<

}

}

 

习题4参考答案

一、选择题

1.C  2.C   3.D   4.B    5.D

二、填空题

1.递增的顺序连续

2.可不

3.4.0

4.i<7,j=i+7

5.Strlen(str)

三、编程题

1.将一个数组中的值按逆序存放,例如,原来是1,3,5,7,9,要求改为9,7,5,3,1。

程序设计如下:

#include

voidmain()

{

inta[5],t;

for(inti=0;i<5;i++)

cina[i];

for(i=0;i<5/2;i++)

{

t=a[i];

a[i]=a[4-i];

a[4-i]=t;

}

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

cout<

cout<

}

2.有一个3×3的矩阵,分别求出两条对角线元素之和。

程序设计如下:

#include

voidmain()

{

inta[3][3],i,j,suml=0,sum2=0;

cout<<"输入数组元素:

\n";

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

for(j=0;j<3:

j++)

cina[i][j];

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

{

sum1+=a[i][i];

sum2+=a[i][2-i];

}

cout<<"sum1="<

}

3.输入一个字符,统计单词个数,单词之间用空格分离。

程序设计如下:

#include

voidmain()

{

charstr[80],c1,c2=′′;

inti=0,num=0;

cin.getline(str,78);

while(str[i](='\o')

{

c1=str[i];

if(i==0)c2=();

elsec2=str[i-1];

if(c1!

=''&&c2=('')num++;

i++

}

cout<<"共有"<

}

4.用冒泡法对输入的15个整数按由小到大顺序排列。

程序设计如下:

#include

#include

voidmain()

{

inti,j,m,a[15];

for(i=0;i<15;i++)

cina[i];

for(j=1;j<14;j++)

for(i=0;i<15-j;i++)

if(a[i]>a[i+1])

{

m=a[i];a[i]=a[i+1];a[i+1]=m;

}

for(i=0;i<15;i++)

cout<

cout<

}

5.从键盘为1个N×N的整型数组a输入数据,并显示每一行的最大值。

程序设计如下:

#include 

#include 

voidmain()

{

constN=5;

inta[N][N],b[N],i,j;

cout<<"请为数组a:

输入数据:

"<

for(i=0;i

for(j=0;j

cina[i][j];//用双重循环为数组a顺序输入数据

for(i=0;i

{

b[i]=a[i][0];

for(j=1;j

j++)

if(b[i]

b[i]=a[i][j];//经比较将a数组第i行的最大值分别存入b[i]中

}

cout<<"输出每一行的最大值:

";

for(i=0;i

cout<

cout<

}

程序运行结果:

请为数组a:

输入数据:

5015341729

1825427735

2524172311

5998322862

541997848

输出每一行的最大值:

5077259878

 

习题5参考答案

一、选择题

1.B   2.D   3.B   4.A   5.D

二、填空题

1.地址

2.NULL或0

3.整形变量地址,一维数组元素的地址

4.

(1)int*p=&k;

(2)*p=6;

(3)int**p;

(4)pp=&p;

(5)**pp*=2orZ

5.t=p;p=q,q=t;

三、编程题

1.输入3个字符串,要求输出其中最大,最小字符串。

程序设计如下:

输入3

#include"iostream.h"

#include"string.h"

voidmain()

{

constintN=3;

chars[N][20],max[20],min[20];

for(inti=0;i

cin.getline(s[i],20);

strcpy(max,s[0]);

strcpy(min,s[0]);

for(i=0;i

{

if(strcmp(s[i],max)>0)

strcpy(max,s[i]);

if(strcmp(min,s[i])>0)

strcpy(min,s[i]);

}

cout<<"最大字符串是:

"<

cout<<"最小字符串是:

"<

}

2.用指针的方法将一个字符串“china”的单个字符依次输出。

程序设计如下:

#include"iostream.h"

voidmain()

{

char*p="china";

for(inti=0;p[i]!

='\0';i++)

cout<

}

3.使用指针数组编写一个程序,要求当用户输入1~12的月份数字时,程序能够输出该月的英文名。

输入不是1~12时,则退出程序。

程序设计如下:

#include"iostream.h"

voidmain()

{ //C++语言中续行符用"\"表示

char*monthname[]={"january","february","march","april","may","june","july","august","september","october","november","december"};

inti;

while

(1)

{

cout<<"请输入月份号:

"cini;

if(i<1‖i>12)

{

cont<<"错误的月份号"<

break;

}

cont<<"……>"<

}

}

4.编写程序将n个数按逆序输出,要求使用指针。

思考:

可以假设两个指针变量p和q,分别指向最后一个和第一个数组元素,而后互换*p和*q即可。

程序设计如下:

#include"iostream.h"

voidmain()

{

constintN=5;

inta[N],*p=a,*q,t;

for(inti=0;i

cin*p++;//输入数组元素

p--;//将p指向最后一个数组元素

for(q=a;q

{

t=*p;*p=*q;*q=t;

}

p=a;

for(i=0;i

cout<<*(p+i)<<"\t";

cout<

}

5.有n个人围成一个圈,顺序排号。

从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号。

程序设计如下:

#include"iostream.h"

voidmain()

{

inti,k,m,n,num[50],*p;

cout<<"inputnumberofperson:

n=";

cinn;p=num;

for(i=0;i

*(p+i)=i+l;//从1到n对每个人进行编号

i=0;//i为每次循环时的计数变量

k=0;//k为按1,2,3报数时的计数变量

m=0;//m为退出人数

while(m

{

if(*(p+i)!

=0)k++;

if(k==3)//对退出的人的编号置为0

{

*(p+i)=0;k=0;m++;

}

i++;

if(i==n)i=0;//报数到尾后,i恢复为0

}

while(*p=0)p++;

cout<

"<<*p;

}

运行结果为:

inputnumberofperson:

n=8

thelastoneisNO:

7

 

习题6参考答案

一、选择题

1.A   2.C   3.A

二、填空题

1.局部,全部

2.允许,不允许

3.main

4.inline

5.可以在同名部变量的作用域中访问全局变量

三、编程题

1.编写程序,计算1+2+3+…+n的值。

其中n是自然数。

分析:

n1为1,n2为100即可

程序设计如下:

#include

intGetSum(intn);

voidmain()

{

intnum;

intsum=0;

cout<<"Pleaseenteranumber:

";

cinnum;

sum=GetSum(num);

cout<

while

(1){}

return0;

}

intGetSum(intn)

{

ints=0;

for(inta=0;a<=n;a++)

s+=a;

returns;

}

 

2.编写一个函数,该函数返回给定字符串中大写字母字符的个数。

例如,字符串“ChineseComputerWorld”中,大写字母字符的个数为3个。

程序设计如下:

#include"iostream.h"

#include"math.h"

introot(float,float,float);

floatxl,x2;

voidmain()

{

floata,b,c;

cout<<"请输入a,b,c的值:

";

cinabc;

if(root(a,b,c))

cout<<"x1="<

}

root(floata,floatb,floatc)

{

floatt;

t=b*b-4*a*c;

if(t>=0&&a)

{

t=sqrt(t);

x1=(-b+t)/(2*a);x2=(-b-t)/(2*a);

return1;

}

return0;

}

 

3.编写一个函数,分别求出一维整型数组a[n]中所有值为奇数的元素个数和所有值为偶数的元素个数。

程序设计如下:

#include

intGetcount(char*p)

{

intcount=0;//记录大写字母字符个数的变量,设初值为0

while(*p!

=NULL)//如为大写字母,则总数加1

{

if(*p>='A'&&*p<='z')

count++;

p++;

}

returncount;

}

void Func(int a[],intn,int'&ox,int&ex)

{

inti=0;

ox=0;//参数引用,返回数组中值为奇数的元素个数

ex=0;//参数引用,返回数组中值为偶数的元素个数

while(i

{

if(a[i]%2==0)

ex++;

else

ox++;

i++;

}

}

 

4.编写一个函数,求输入的两个自然数的最大公约数。

程序设计如下:

intFunc(intMax,intMin)

{

intTemp,Num;

if(Max

{

Temp=Max;

Max=Min;

Min=Temp;

}

do{

Num=Max%Min;

Max=Min;

Min=Num;

}while(Num!

=0);

returnMax;

}

注释:

本题采用“辗转相除法”。

具体如下:

(1)Max变量存放较大的数作为被除数,Min变量存放较小的数作为除数。

(2)用Max除以Min后的余数存放在Num中。

(3)若Num!

=0,则Max←Min,Min←Num,继续相除得到的新的Num。

(4)重复步骤(3),最后的Max就是最大公约数。

 

5.有4个人,其中第4个人比第3个人大2岁,第3个人比第2个人大2岁,第2个人又比第1个人大2岁,如果第1个人30岁,那么第4个人多少岁?

用递归调用实现。

程序设计如下:

#include"iostream.h"

intyear(int);

voidmain()

{

intn;

cout<<"请输入:

第一个人的年龄(30):

";cinn;

cout<<"第四个人的年龄是:

"<

}

intyear(intn)

{

staticinty=n,m=0;

if(m==3)

returny;

else

{

m++;y=year(y)+2;

}

}

6.求一元二次方程的实根程序。

程序设计如下:

#include"iostream.h"

intfun(int,int);

voidmain()

{

intn1,n2;

cout<<"输入两个正整数且前者要小于后者:

"; cinn1n2;

cout<<"从"<

"<

}

intfun(intm,intn)

{

if(m=n)

returnn;

else

returnn+fun(m,n-1);

}

 

 

习题7参考答案

一、选择题

1.C   2.B

二、编程题

1.利用math.h头文件,编写一个C++程序,输入3个数,输出其中绝对值最大的数。

程序设计如下:

#include"iostream.h"

#include"math.h"

#definemax(x,y)x>y?

x:

y;

voidmain()

{

intx,y,z,absmax;

cinxyz;

absmax=max(abs(x),abs(y));

absmax=max(abs(absmax),abs(z));

cout<<"Theabsolutevalueofmaximalnumberis:

";

cout<

}

2.编写一个程序,利用宏定义一个常量N,然后生成、输出一个4*4({0123},{1234},{2345},{3456})的数据阵列。

程序设计如下:

#include

#defineN4

intmain()

{

int[N][N];

for(inti=0;i

for(intj=0;j

*(*(a+i)+j)=i+j;

for(i=0;i

{

for(intj=0;j

cout<<*(*(a+i)+j)<<"   ";

cout<

}

return0;

}

程序运行的结果:

0   1   2   3

1   2   3   4

2   3   4   5

3   4   5   6

3.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。

程序设计如下:

#include"stdio.h"

#defineMIN(m,n) m

m:

n//定义宏名MIN替换运算m

m:

n

voidmain()

{

floatt=36.712,u=18.645;//定义实型变量t,u

floatmin;

min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值

cout<

}

运算结果是:

18.645

 

习题8参考答案

一、选择题

1.C    2.C   3.D   4.D    5.D

二、填空题

1.可以

2.不允许

3.为0,加1

4.结构体变量名。

成员名,(*结构体指针变量名),成员名,结构体指针变量名成员名

5.一

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

当前位置:首页 > 工作范文 > 行政公文

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

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