《C++程序设计》课后习题参考答案.docx

上传人:b****8 文档编号:29867943 上传时间:2023-08-03 格式:DOCX 页数:36 大小:25.50KB
下载 相关 举报
《C++程序设计》课后习题参考答案.docx_第1页
第1页 / 共36页
《C++程序设计》课后习题参考答案.docx_第2页
第2页 / 共36页
《C++程序设计》课后习题参考答案.docx_第3页
第3页 / 共36页
《C++程序设计》课后习题参考答案.docx_第4页
第4页 / 共36页
《C++程序设计》课后习题参考答案.docx_第5页
第5页 / 共36页
点击查看更多>>
下载资源
资源描述

《C++程序设计》课后习题参考答案.docx

《《C++程序设计》课后习题参考答案.docx》由会员分享,可在线阅读,更多相关《《C++程序设计》课后习题参考答案.docx(36页珍藏版)》请在冰豆网上搜索。

《C++程序设计》课后习题参考答案.docx

《C++程序设计》课后习题参考答案

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

――武汉大学出版社

习题1参考答案

三、简答题

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

解答如下:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

解答如下:

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

习题2参考答案

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

程序设计如下:

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

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

程序设计如下:

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

其不同之处在于:

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

3.什么叫常量?

什么是变量?

程序设计如下:

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

习题3参考答案

一、编程题

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.将一个数组中的值按逆序存放,例如,原来是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:

输入数据:

 

541997848

输出每一行的最大值:

习题5参考答案

三、编程题

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.编写程序,计算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;

}

voidFunc(inta[],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.利用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;

}

程序运行的结果:

0123

1234

2345

3456

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.定义枚举类型months,用枚举常量代表一年的12个月份。

程序设计如下:

enummanths{JAN=1,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC};

2.利用结构体类型编制一程序,实现输入输出一个学生的学号、姓名和出生日期。

程序设计如下:

#include

structdate

{

intyear;

intmonth;

intday;

};

structstudent

{

intnumber;

charname[10];

datebirth;

};

voidmain()

{

structstudentstu1;

cinstu1.numberstu1.name;

cinstu1.birth.yearstu1.birth.monthStu1.birth.day;

cout<

cout<<"年"<

}

3.利用结构体类型编制一程序,实现输入一个学生的数学期中和期末成绩,然后计算并输出其平均成绩。

程序设计如下:

#include

#include

voidmain()

{

structstudy

{

intmid;

intend;

intaverage;

}math;

cinmath.midmath.end;

math.average=(math.mid+math.end)/2;

cout<

(2)<

}

4.利用指向结构体的指针编制一程序,实现输入3个学生的学号,数学期中和期末成绩,然后计算其平均成绩并输出成绩表。

程序设计如下:

#include

structstu

{

intnum;intmid:

intend;intave;

}s[3];

voidmain()

{

inti;

structstu*p;

for(p=s;p

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

当前位置:首页 > 人文社科 > 法律资料

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

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