完整版C习题答案.docx
《完整版C习题答案.docx》由会员分享,可在线阅读,更多相关《完整版C习题答案.docx(158页珍藏版)》请在冰豆网上搜索。
![完整版C习题答案.docx](https://file1.bdocx.com/fileroot1/2023-2/4/6dcee6af-520c-4bd8-ad9b-bd2eed4aceba/6dcee6af-520c-4bd8-ad9b-bd2eed4aceba1.gif)
完整版C习题答案
4-2编写一个程序,要求从键盘上输入两个整数,并输出这两个数中的大数。
4-3编写一个程序,实现根据输入的x值,可求出y的值,并输出x和y的值。
计算y值的数学公式为:
y={1.5x+7.5x<=2.5
9.32x-34.2x>2.5
4-4设计一个程序,输入实行变量x和y的值。
若x>y,则输出x-y的值;否则输出y-x的值
4-5设计一个程序,求出下列一元二次方程的根:
ax^2+bx+c=0
系数a、b、c的值从键盘上输入。
求方程根的计算公式为:
s=(-b+根号(b^2-4ac))/2a
当平方根小于0时,输出“Nosolutons!
”;否则,输出x的两个根。
4-6设计一个程序,将从键盘上输入的百分制成绩转换成对应的五分制成绩并输出。
90分以上为A,80~89分为B,70~79为C,60~69为D,60分以下为E。
分别用条件语句和开关语句实现。
4-7从键盘输入10个实数,并求出这10个数之和及平均值。
用循环语句实现,写出完整的程序。
4-8从键盘输入一个整数n的值,按下式求出y的值,并输出n和y的值(y用实数表示):
y=1!
+2!
+3!
+.....n!
4-9设计一个程序,输出所有的水仙花数。
所谓水仙化数是一个三为数,其各位数字的立方和等于该数本身。
列如:
153=1^3+5^3+3^3
因此153是一个水仙化数。
4-10设计一个程序,求出100~200之间的所有素数。
4-11用循环语句实现输出如下的图形:
*****
*****
*****
4-12设计一个程序,按以下公式求出数列的20项并输出。
计算公式为:
y=0n=0;y=1n=1;y=2n=2;y=Y(n-1)+Y(n-2)+Y(n-3)n>2
4-13设计一个程序,输入一个四位数(整数,求出各位数之和。
4-14从键盘输入若干个实数,以输入0为结束。
设计一个程序,分别统计出正数的个数和负数的个数。
并求出正数之和、负数之和及总的平均值。
4-15设计一个程序,输入一个四位整数。
将各位数字分开,并按其反序输出。
列如:
输入1234,则输出4321,要求必须用循环语句实现。
4-16设计一个程序,求出满足以下条件的最小的n值和s值:
s=1+2+3+.....+n,且x>=600
4-17求pi/2的近似值的公式为:
pi/2=2/1*2/3*4/3*4/5*....*2n/(2n-1)*2n/(2n+1)....
其中,n=1、2、3....设计一个程序,求出当n=100是pi的值
4-18求出1~599中能被3整除,且至少有一位数字为5的所有整数。
如15、51、513均是满足条件的整数。
4-19求满足以下条件的三为数n,它除以11所得的商等于n的各位数字的平方和,且其中至少有两位数字相同。
列如,131除以11的商为11,各位数字的平方和为11,所以它是满足条件的三位数。
5-2设计一程序,计算组合数:
C(m,r)=m!
/(r!
*(m-r)!
),其中m,r为正整数,且m>r.分别求出C(4,2).C(6,4).C(8,7)的组合数。
求阶乘和组合数须用函数来实现。
5-3设计一个程序,输入一个十进制整数,输出相应的十六进制数。
设计一个函数实现数制转换。
5-4设计一个程序,求出5~100之间的所有素数,要求每行输出5个素数。
判断一个整数是否为素数用一个函数来实现。
5-5设计一个程序,输入两个整数,求出这两个整数的最小公倍数。
求两个数的最小公倍数用一个函数来实现。
5-6设计一个程序,输入两个整数,求出这两个整数的最大公约数。
求两个数的最大公约数用一个函数来实现。
5-7设计一个程序,通过重载求两个数中大数的函数max(x,y),分别实现求两个实数和两个整数的大数。
5-8设计一个程序,用内联函数实现求出三个实数中的最大数,并输出最大数。
5-9定义一个求n!
的函数,n的缺省值为10。
5-10设计一参数数目可变的函数,第一个参数n为参数的个数。
求出这n个实蚕之和并输出。
5-11设计一参数数目可变的函数,第一个参数n为参数的个数。
调用该函数时,若n=3,则求出后三个实参之积并返回该值;若n=则求出后四个实参的平均值并返回该值
5-12用递归函数实现Fibonnaci数列的前n项,n作为函数的参数
5-13当x>1时,Hermite多项式定义为:
H(x)={1n=0,2xn=1,……..,当输入实数x和整数n后,求出Hermite多项式的前n项的值。
分别用递归函数和非递归函数来实现。
5-14阿克曼函数定义如下:
………………..,其中m、n为正整数,设计一个程序,分别求出Acm(5,3)的值
5-15设计一个程序,要求输入一个整数,并能逐位正序和反序输出,如输入一个整数3456,则输出3456和6543,分别设计两个函数,一个实现正序输出,另一个实现反序输出
5-16设计一个程序,将求两个实数的最大值函数放在头文件mufun.h中,在源程序文件mypro.cpp中包含该头文件,并实现输入三个实数,求出最大值
5-17设计一个程序,定义带参数的宏MAX(A,B)和MIN(A,B),分别求出两个数中的大数和小数,在主函数中输入三个数,并求出这三个数中的最大数和最小数
5-18已知三角形的三条边a,b,c,则三角形的面积为:
area=sqrt[s(s-a)(s-b)(s-c)求出其中s=(a+b+c)/2。
编写程序,分别用带参数的宏和函数求三角形的的面积
5-19设计一个程序,使用条件编译输出调试信息
6-1读入一组整数到一维数组中,设计一程序,找出其中最大的偶数和最大的奇数(若设有奇数时,输出“没有奇数!
“)并输入
6-2输入一组非0整数(以输入0作为输入结束标志)到一维数组中,设计一程序,求出这一组数的平均数,并分别统计出这正数和负数的个数
6-3输入10个数到一维数组中,按升序排序后输出。
分别用3个函数实现数据的输入,排序和输出
6-4输入N个数到一维数组中,求均方差:
D=
其中M=
6-5设计一程序,求一个4*4距阵对角线元素和
6-6先输入一个4*4的距阵,转置后输出结果,
6-7用一个2维数组floatcla[50][2]来存放一个班级的2门课程(c++和计算机应用基础)的成绩
6-8用cin.getline()将一个字符串出入到字符数组S(charS[200])中,删除字符串中的所有空格后输出
6-9用cin.getline()将一个字符串出入到字符数组中,按反序输出
6-10设计一个函数intstrlen(chars[])。
求出字符串S中包含的字符个数,并作为函数的返回值
6-11设计一个函数voidstrcpy(chara[],charb[]),将b中的字符串拷贝到数组a中
6-12设计一个函数voidstrcat(chara[],charb[])。
将b中的字符串拼接到数组a中的字符串的后面,构成一个字符串
6-13用筛选法求出2到200之间的所有的素数
7-1定义描述一个人出生日期的结构体类型变量,包括年,月,日
7-2定义描述通讯录的结构体类型变量,包括姓名,地址,电话号码和邮编
7-5为全班同学建立一个通讯录(结构体数组),完成数据的输入和输出
7-6定义描述复数的结构体类型变量,并实现复数的输入和输出。
设计三个函数分别完成复数的加法,减法和乘法运算
7-7定义描述三维坐标点(x,y,z)的结构体类型变量,完成坐标点的输入/输出,并求两左边点之间的距离
7-8一个元素包括:
姓名,学号,C++成绩,英语成绩,数学成绩和这三门功课的平均成绩。
设计四个函数:
全班成绩的输入,求出每个同学的平均成绩,按平均成绩的升序排序,输出全班成绩表
7-9定义一个描述一周日程的枚举类型,完成这种枚举类型变量的输入和输出
7-10定义一个描述三种颜色的每举类型,输出这三种颜色的全排列结果
8-2用指针作为函数的参数,设计一个实现两个参数交换的函数.输入三个实数,按升序排列后输出.
8-3定义一个而维的字符串数组,输入若干个字符串,按升序排列后输出,要求设计一个通用的排列函数,输入参数作为字符串数组
和要排列的字符串的个数.
8-4设计一个通用的插入排列函数,参数为指向实数的指针(指向一个已经排好序的数组)和一个实数,将该实数插入到已经排好序的数组中.
主函数完成输入若干个实数,没输入一个实数,调用一次插入排序的函数完成数据的排序,最后输出已经排好的数据.
8-5设计一个函数,求字符串的长度(指向字符串的指针作为函数的参数).在主函数中输入一个字符串,并输出该字符串及其长度.
8-6设计一个函数,将一个字符串并接到一个字符串的尾部,并接后构成一个新的字符串,主函数完成输入该字符串,输出该字符串和并接后的
新的字符串的功能.
8-7设计一个函数,将一个字符串拷贝到另一个参数所指向的字符树组中.主函数完成输入一个字符串,输出拷贝后的字符串的功能.
8-8输入一个二维数组A[6][6].设计一个函数,用指向一维数组的指针变量和二维数组的行数作为函数的参数,求出平均值,最大元素值,和最小元素值,并输出.
8-9设计一个用矩形法求积分的通用函数,被积函数的指针,积分的上限,积分的下限和积分区间的等分数作为函数的参数.分别求出下列定积分的值;()
8-10定义一个指向字符串的指针数组,用一个函数完成N个不等长字符串的输入,-根据实际输入的字符串长度用NEW运算符分配存储空间,依次使指针数组中的元素指向每一个输入的字符串,设计一个完成N个字符串排序的函数,在主函数中实现将排序后的字符串输出.
8-11输入一个字符串,串内有数字和非数字字符.例如ABC2345345.......将其中连续的数字作为一个整数依次存放到另一个整数数组B中.....
8-12建立一个无序链表,没一个节点包括:
学号,姓名,年龄...由一个函数完成建立链表工作,另一个函数完成输出链表上各结点值......
8-14建立一个有序链表,每一个节点包括:
学号,姓名,...
求出总分最高和最低的同学并输出
8-15建立一条无序链表,用一个函数实现将这条链表构成一条新的逆序链表,即将链表头当链表尾,链表尾当链表头,输出这两条链表上各个节点的植
9-1定义一个描述复数的类,数据成员包括实部和虚部;成员函数包括:
输出复数,置实部,置虚部。
9-2定义一个描述学生基本情况的类,数据成员包括姓名,学号,数学,英语,物理和C++成绩,成员函数包括输出数据,置姓名和学号,置四们课的成绩和平均成绩。
9-4三维坐标中的一条直线的两端点的坐标(x1,y1,z1)和(x2,y2,z2)来描述。
定义一个类,实现坐标数据的设置,输出端点的坐标和直线的长度。
构成一个完整的程序,完成测试工作。
10-2定义一个描述复数的类,数据成员包括实部和虚部;成员函数包括输出复数以及构造函数完成数据的初始化。
10-3定义一个描述学生基本情况的类,数据成员包括姓名,学号,数学,英语,物理和C++成绩;成员函数包括输出数据,构造函数可完成所有数据的初始化,修改每一个数据成员的函数,求出总成绩和平均成绩的函数。
11-1把定义直角坐标系上的一个点的类作为基类,派生出描述一条直线的类,再派生出三角形类。
要求成员函数能求出两点间的距离、三角形的周长和面积等。
11-7设计一个大学的类系统,大学中有学生、教师、干部和工人。
学生的任务是学习;教师的任务是上课和科研;干部的任务是管理;工人的任务是定额生产产品。
提取共性作为基类,并派生出满足要求的各个类及每一个类上的必要操作。
11-8设计一个描述儿童、成人和老人的类系统,儿童分为学龄前和学龄期儿童,成人有工作,老人已经退休。
提取共性作为类基,并派生出满足要求的各个类及每一个类上的必要操作。
12-7建立一条双向无叙链表,节点数据包括:
姓名、地址和工资。
12-8建立一条双向有序链表,节点数据包括:
姓名、地址和工资。
按工资从小到大的顺序排列。
13-5定义一个复数类,通过重载运算符:
=、+=、-=、+、-、*、/、==、!
=,直接实现两个复数之间的各种运算。
编写一个完整的程序
13-6定义一个学生类,数据成员包括:
姓名,学号,C++、数学和物理的成绩。
重载运算符“<<”和“>>”,实现学生类对象的直接输入和输出。
增加转换函数,实现姓名和总成绩的转换设计一个程序,验证成员函数和重载运算符的正确性。
13-7定义描述平面上一个带内的类point,重载“++”和“--”运算符,并区分这种运算符的前置和后置运算。
构成一个完整的程序。
13-8定义一个指向字符串的指针数组,重载下标运算符,实现下标是否出界的检查。
13-9通过重载函数调用运算符,完成三维数组小标的合法性检查。
三维数组的类型可为整性或实型。
13-10完善字符串类,增加以下运算符的重载:
+=、-=、==、!
=。
在主函数中侧重检测重载运算符的正确性。
第4章
4-2
#include
voidmain(){
intx,y,t;
cout<<"请输入两个整数:
";
cin>>x;
cin>>y;
if(x>=y)t=x;
elset=y;
cout<}
4-3
#include
voidmain(){
floatx,y;
cout<<"请输入一个实数:
";
cin>>x;
if(x<=2.5)y=1.5*x+7.5;
elsey=9.32*x-34.2;
cout<}
4-4
#include
voidmain(){
floatx,y;
cout<<"请输入两个实数:
";
cin>>x;
cin>>y;
if(x>y)cout<elsecout<}
4-5
#include
#include
voidmain(){
floata,b,c,delta,x1,x2;
cout<<"请输入方程的三个系数a,b,c:
";
cin>>a;
cin>>b;
cin>>c;
delta=b*b-4*a*c;
if(delta>=0){
delta=sqrt(delta);
if(delta>0){
x1=(-b+delta)/2/a;
x2=(-b-delta)/2/a;
cout<<"方程有两个不等实根:
";
cout<<"x1="<}
else{
cout<<"方程有两个相等实根:
";
cout<<"x1=x2="<<(-b)/2/a<<'\n';
}
}
elsecout<<"Nosolutions!
\n";
}
4-6
#include
voidmain(){
ints;
while
(1){
cout<<"请输入百分制分数:
";
cin>>s;
if(s<=0)break;
elseif(s>=90)
cout<<"五分制分数为A\n";
elseif(s>=80)
cout<<"五分制分数为B\n";
elseif(s>=70)
cout<<"五分制分数为C\n";
elseif(s>=60)
cout<<"五分制分数为D\n";
elsecout<<"五分制分数为E\n";
}
}
用开关语句实现,程序如下:
#include
voidmain(){
ints;
while
(1){
cout<<"请输入百分制分数:
";
cin>>s;
if(s<=0)break;
switch(s/10){
case10:
case9:
cout<<"五分制分数为A\n";break;
case8:
cout<<"五分制分数为B\n";break;
case7:
cout<<"五分制分数为C\n";break;
case6:
cout<<"五分制分数为D\n";break;
default:
cout<<"五分制分数为E\n";break;
}
}
}
4-7
#include
voidmain(){
inti;
floata,avg,sum=0;
for(i=1;i<=10;++i){
cout<<"输入第"<
";
cin>>a;
cout<<'\n';
sum+=a;
}
cout<<"10个数的和sum="
<cout<<"10个数的平均avg="
<}
4-8
#include
voidmain(){
inti,n,y=0,k,j;
cout<<"请输入n的值:
";
cin>>n;
cout<<'\n';
for(i=1;i<=n;++i){
k=1;
for(j=1;j<=i;++j)
k*=j;
y+=k;
}
if(n==1)cout<<"1!
=1"<<'\n';
elseif(n==2)cout<<"1!
+2!
=3"<<'\n';
else{
cout<<"n为:
"<cout<<"1!
+2!
+…+"<="<}
}
4-9
#include
voidmain(){
inti,j,k;
for(i=1;i<=9;i++)
for(j=0;j<=9;j++)
for(k=0;k<=9;k++)
if(i*i*i+j*j*j+k*k*k==i*100+j*10+k)
cout<
}
4-10
#include
#include
voidmain(){
ints,i,j;
for(s=101;s<200;s+=2){
j=sqrt(s);
for(i=3;i<=j;i++)
if(s%i==0)break;
if(i>=j+1){
cout<
}
}
}
4-11
#include
#include
voidmain(){
inti,j;
for(i=1;i<=3;i++){
cout<for(j=1;j<=5;j++)
cout<cout<<'\n';
}
}
4-12
#include
voidmain(){
intn,y0,y1=0,y2=1,y3=2;
for(n=0;n<=3;n++){
switch(n){
case0:
cout<<"y1="<case1:
cout<<"y2="<case2:
cout<<"y3="<default:
for(;n<20;n++){
cout<<"y"<y0=y1;y1=y2;y2=y3;y3=y1+y2+y0;
}
}
}
}
4-13
#include
voidmain(){
inti,k,l,j,s=0;
cout<<"请输入一个四位整数:
";
cin>>k;
j=k;
for(i=1;i<=4;++i){
l=j%10;
j=j/10;
s+=l;
}
//cout<<"四位整数为:
"<<'\n';
cout<<'\n'<"<
}
4-14
#include
voidmain(void){
floata,s1=0,s2=0;
intm=0,n=0;
cin>>a;
while(a){
if(a>0){
m++;
s1+=a;
}
else{
n++;
s2+=a;
}
cin>>a;
}
cout<<"\n正数有"<cout<<"\n负数有"<cout<<"\n正数之和为:
"<cout<<"\n负数之和为:
"<cout<<"\n总的平均为:
"<<(s1+s2)/(m+n)<<'\n';
}
4-15
#include
voidmain(){
ints,i,j,n;
cout<<"请输入一个四位整数:
";
cin>>s;
i=1;
while(i<=4){
n=s%10;
cout<s=s/10;
++i;
}
cout<<'\n';
}
4-16
#include
voidmain(){
intn=1,s=0;
while(s<600){
s+=n;
++n;
}
cout<<"n="<}
4-17
#include
voidmain(){
doublepi=1;
inti=1;
while(i<=1000){
pi=pi*2*(2*i/(2*i-1));
++i;
}
cout.setf(ios:
:
scientific,ios:
:
floatfield);
cout<<"pi="<}
4-18
#include
#include
voidmain(){
inti=3,j,n,k,s=-1;
while(i<=599){
if(i%3==0){
k=i;
while(k){
n=k%10;
if(n==5){
s++;
if(s%5==0)cout<<'\n';
cout<break;
}
elsek=k/10;
}
}
++i;
}
cout<<'\n';
}
4-19
#include