《C++程序设计》课后习题参考答案Word下载.docx
- 文档编号:20404260
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:29
- 大小:23.73KB
《C++程序设计》课后习题参考答案Word下载.docx
《《C++程序设计》课后习题参考答案Word下载.docx》由会员分享,可在线阅读,更多相关《《C++程序设计》课后习题参考答案Word下载.docx(29页珍藏版)》请在冰豆网上搜索。
10)
islessthan10\n"
is10to99\n"
4.一个分数序列为:
2/1,3/2,5/3,8/5,13/8,21/23,…编写求该数列的前20项之和的程序。
floatx=1,y=2,p,k,s=0;
for(k=1;
k<
=20;
k++)
s+=y/x;
p=x+y;
x=y;
y=p;
2/1+3/2+5/3+8/5+…="
s<
endl;
5.编写程序,显示如下图形。
*
***
*****
*******
inti,j,k;
for(i=1;
i<
5;
i++)
for(k=4;
k>
=i;
k--)
for(j=1;
j<
=2*i-1;
j++)
*"
;
endl;
for(i=3;
i>
0;
i--)
=4-i+1;
for(j=1,j<
1.将一个数组中的值按逆序存放,例如,原来是1,3,5,7,9,要求改为9,7,5,3,1。
程序设计如下:
#include<
inta[5],t;
for(inti=0;
cina[i];
for(i=0;
5/2;
t=a[i];
a[i]=a[4-i];
a[4-i]=t;
a[i]<
\t"
2.有一个3×
3的矩阵,分别求出两条对角线元素之和。
inta[3][3],i,j,suml=0,sum2=0;
输入数组元素:
\n"
3;
for(j=0;
3:
cina[i][j];
sum1+=a[i][i];
sum2+=a[i][2-i];
sum1="
sum1<
sum2="
sum2<
3.输入一个字符,统计单词个数,单词之间用空格分离。
isotream.h>
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++
共有"
num<
个单词"
4.用冒泡法对输入的15个整数按由小到大顺序排列。
#include<
iomanip.h>
inti,j,m,a[15];
15;
cina[i];
for(j=1;
14;
15-j;
if(a[i]>
a[i+1])
m=a[i];
a[i]=a[i+1];
a[i+1]=m;
setw(4)<
a[i];
5.从键盘为1个N×
N的整型数组a输入数据,并显示每一行的最大值。
iomanip.h>
constN=5;
inta[N][N],b[N],i,j;
请为数组a:
输入数据:
N;
N;
cina[i][j];
//用双重循环为数组a顺序输入数据
b[i]=a[i][0];
N:
if(b[i]<
a[i][j])
b[i]=a[i][j];
//经比较将a数组第i行的最大值分别存入b[i]中
输出每一行的最大值:
b[i];
//经b[i]输出数组a每一行的最大值
程序运行结果:
5015341729
1825427735
2524172311
5998322862
541997848
输出每一行的最大值:
5077259878
1.输入3个字符串,要求输出其中最大,最小字符串。
输入3
#include"
iostream.h"
string.h"
constintN=3;
chars[N][20],max[20],min[20];
cin.getline(s[i],20);
strcpy(max,s[0]);
strcpy(min,s[0]);
if(strcmp(s[i],max)>
0)
strcpy(max,s[i]);
if(strcmp(min,s[i])>
strcpy(min,s[i]);
最大字符串是:
最小字符串是:
min<
2.用指针的方法将一个字符串“china”的单个字符依次输出。
iostream.h"
char*p="
china"
p[i]!
\0'
p[i]<
3.使用指针数组编写一个程序,要求当用户输入1~12的月份数字时,程序能够输出该月的英文名。
输入不是1~12时,则退出程序。
{//C++语言中续行符用"
\"
表示
char*monthname[]={"
january"
"
february"
,"
march"
april"
may"
june"
july"
august"
september"
october"
november"
december"
};
inti;
while
(1)
请输入月份号:
cini;
if(i<
1‖i>
12)
cont<
错误的月份号"
……>
monthname[i-1]<
end1;
4.编写程序将n个数按逆序输出,要求使用指针。
思考:
可以假设两个指针变量p和q,分别指向最后一个和第一个数组元素,而后互换*p和*q即可。
#include"
constintN=5;
inta[N],*p=a,*q,t;
cin*p++;
//输入数组元素
p--;
//将p指向最后一个数组元素
for(q=a;
q<
p;
p--,q++)
t=*p;
*p=*q;
*q=t;
p=a;
*(p+i)<
5.有n个人围成一个圈,顺序排号。
从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号。
#include"
inti,k,m,n,num[50],*p;
inputnumberofperson:
n="
cinn;
p=num;
n;
*(p+i)=i+l;
//从1到n对每个人进行编号
i=0;
//i为每次循环时的计数变量
k=0;
//k为按1,2,3报数时的计数变量
m=0;
//m为退出人数
while(m<
n-1)//当退出人数比n-1少时(即未退出人数大于1时)执行
if(*(p+i)!
=0)k++;
if(k==3)//对退出的人的编号置为0
*(p+i)=0;
m++;
i++;
if(i==n)i=0;
//报数到尾后,i恢复为0
while(*p=0)p++;
endl<
thelastoneisNO:
*p;
运行结果为:
inputnumberofperson:
n=8
7
1.编写程序,计算1+2+3+…+n的值。
其中n是自然数。
分析:
n1为1,n2为100即可
intGetSum(intn);
intnum;
intsum=0;
"
Pleaseenteranumber:
cinnum;
sum=GetSum(num);
sum<
while
(1){}
return0;
intGetSum(intn)
ints=0;
for(inta=0;
=n;
a++)
s+=a;
returns;
2.编写一个函数,该函数返回给定字符串中大写字母字符的个数。
例如,字符串“ChineseComputerWorld”中,大写字母字符的个数为3个。
math.h"
introot(float,float,float);
floatxl,x2;
floata,b,c;
请输入a,b,c的值:
cinabc;
if(root(a,b,c))
x1="
x1<
\tx2="
x2<
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]中所有值为奇数的元素个数和所有值为偶数的元素个数。
string.h>
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<
n)
if(a[i]%2==0)
ex++;
ox++;
4.编写一个函数,求输入的两个自然数的最大公约数。
intFunc(intMax,intMin)
intTemp,Num;
if(Max<
Min)
Temp=Max;
Max=Min;
Min=Temp;
do{
Num=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个人多少岁?
用递归调用实现。
intyear(int);
intn;
请输入:
第一个人的年龄(30):
第四个人的年龄是:
year(n)<
intyear(intn)
staticinty=n,m=0;
if(m==3)
returny;
y=year(y)+2;
6.求一元二次方程的实根程序。
intfun(int,int);
intn1,n2;
输入两个正整数且前者要小于后者:
cinn1n2;
从"
n1<
到"
n2<
的累加和为:
fun(n1,n2)<
intfun(intm,intn)
if(m=n)
returnn;
returnn+fun(m,n-1);
1.利用math.h头文件,编写一个C++程序,输入3个数,输出其中绝对值最大的数。
math.h"
#definemax(x,y)x>
y?
x:
y;
intx,y,z,absmax;
cinxyz;
absmax=max(abs(x),abs(y));
absmax=max(abs(absmax),abs(z));
Theabsolutevalueofmaximalnumberis:
absmax<
2.编写一个程序,利用宏定义一个常量N,然后生成、输出一个4*4({0123},{1234},{2345},{3456})的数据阵列。
#defineN4
intmain()
int[N][N];
for(intj=0;
*(*(a+i)+j)=i+j;
*(*(a+i)+j)<
程序运行的结果:
0123
1234
2345
3456
3.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。
stdio.h"
#defineMIN(m,n)m<
n?
m:
n//定义宏名MIN替换运算m<
m:
n
floatt=36.712,u=18.645;
//定义实型变量t,u
floatmin;
min=MIN(t,u);
//调用带参数的宏MIN,求t和u的最小值
运算结果是:
18.645
1.定义枚举类型months,用枚举常量代表一年的12个月份。
enummanths{JAN=1,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC};
2.利用结构体类型编制一程序,实现输入输出一个学生的学号、姓名和出生日期。
structdate
intyear;
intmonth;
intday;
};
structstudent
intnumber;
charname[10];
datebirth;
structstudentstu1;
cinstu1.numberstu1.name;
cinstu1.birth.yearstu1.birth.monthStu1.birth.day;
stu1.number<
stu1.name<
stu1.birth.year;
年"
stu1.birth.month<
月"
stu1.birth.day<
日"
3.利用结构体类型编制一程序,实现输入一个学生的数学期中和期末成绩,然后计算并输出其平均成绩。
structstudy
intmid;
intend;
intaverage;
}math;
cinmath.midmath.end;
math.average=(math.mid+math.end)/2;
setprecision
(2)<
math.average<
4.利用指向结构体的指针编制一程序,实现输入3个学生的学号,数学期中和期末成绩,然后计算其平均成绩并输出成绩表。
structstu
intmid:
intave;
}s[3];
structstu*p;
for(p=s;
p<
s+3;
p++)
cinp->
nump->
midp->
end;
p->
ave=(p->
mid+p->
end)/2;
'
\t'
mid<
end<
ave<
1.编写一个函数,统计一条英文句子中字母的个数,在主程序中实现输入、输出。
stdio.h>
intcount(char*str)
inti,num=0;
str[i];
if((str[i]>
a'
str[i]<
)||(str[i]>
))
num++;
returnnum;
chartext[100];
输入一个英语句子:
gets(text);
这个句子里有"
count(text)<
个字母"
2.设学生人数N=8,提示用户输入N个人的考试成绩,然后计算出平均成绩并且显示。
string.h>
#defineN8
floatgrades[N];
//存放成绩的数组
floattotal,average;
//提示输入成绩
Entergrade#"
(i+1)<
:
cingrades[i];
total=0;
total+=grades[i];
average=total/N;
\nAveragegrade:
average<
大学里有这样几类人员:
学生、教师、职员和兼职教书的教师。
给出这几类人员的类描述。
程序设计如下:
intGetSum(intn);
classPerson
public:
Person(constchar*n)
name=newchar[strlen(n)+1];
strcpy(n
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+程序设计 C+ 程序设计 课后 习题 参考答案