C++课后答案(上)

温柔似野鬼°
768次浏览
2020年07月31日 08:05
最佳经验
本文由作者推荐

heary-无赖是什么意思

第1章习题
10、定义一个长方形类,其功能是输出长方形的周长与面积。
#include
class rectangle
{
private:
int height;
int width;
public :
rectangle(int h,int w)
{
height = h;
width = w;
}
int perimeter()
{
return (height+width)*2;
}
int area()
{
return height*width;
}
};
void main()
{
int a = 3;
int b = 4;
rectangle r(a,b);
cout<<"长方形的周长是"<cout<<"长方形的面积是"<<()<}
第2章习题
1.新建两个文件,其文件名分别为ex2-1.h、,其中文件定义一个main函数,定义一个梯形类的对象,从键盘输入三个整数,作为梯形的长、宽、高,输出梯形的周长与面积。在ex2-1.h中定义了梯形类及成员函数。
程序功能:定义梯形类,有三个整型数据成员,分别表示梯形的长、宽、高,有三个成员函数rec、areas、show分别用于对象的初始化、计算长方形面积和输出。(这个梯形怎么会是用长、宽、高呢?)
//----------------------------ex2-1.h--------------------------------
class trap
{
private:
int lenght;
int width;
int height;
public:
void rec(int l,int w,int h)
{
lenght = l;
width = w;
height = h;
}
int areas()
{
return (lenght+width)*height/2;
}
void show()
{
cout<<"该梯形的面积为"<}
};
//------------------------------------------------------------
#include
#include "ex2-1.h"
void main()
{
trap t;
int l;
int h;
int w;
cout<<"请输入上底长度:"<cin>>l;
cout<<"请输入下底长度:"<cin>>w;
cout<<"请输入高:"<cin>>h;
(l,w,h);
();
}
2.新建三个文件,其文件名分别为ex2-2.h、、,其中文件定义一个main函数,定义一个类对象,从键盘输入数据,作为对象的参数。在ex2-2.h中定义了对象的类,在(应该是吧??)中定义类中所有的成员函数。
程序功能:
(1).定义三角形类,可计算三角形周长与面积。
(2).定义一个学生类,描述两门课的成绩,可求得两门课的总分。
(3).定义一个棱形类,输入棱形的两条对角线,类中可求得棱形的周长与面积。
(4)定义一个三角形类,从键盘输入三角形的三条边,求三角形的三个角与三角形的面积。
//----------------------------ex2-2.h----------------------------
//三角形类1
class triangle1
{
private:
float base;
float height;
public:
triangle1(float ,float );
float area();
};

//学生类
class student
{
private:
float s1;
float s2;
public:
student(float ,float);
float sum();
};

//棱形类
class prism
{
private:
float l1;
float l2;
public:
prism(float ,float);
float area();
float peri();
};

//三角
形类2
class triangle2
{
private:
float a;
float b;
float c;
public:
triangle2(float ,float ,float );
float area();
void angle();
};
//--------------------------------------------------------
#include
#include "ex2-2.h"
void main()
{
float a,b,c;
cout<<"请输入三角形的底和高"<cin>>a>>b;
triangle1 t1(a,b);
cout<<"三角形的面积为"<<()<
cout<<"请输入学生两门成绩"<cin>>a>>b;
student s(a,b);
cout<<"学生总成绩为:"<<()<
cout<<"请输入菱形的对角线:"<cin>>a>>b;
prism p(a,b);
cout<<"菱形的面积为:"<<()<cout<<"菱形的周长为:"<<()<
cout<<"请输入三角形的三边a,b,c:"<cin>>a>>b>>c;
triangle2 t2(a,b,c);
cout<<"三角形的面积为"<<()<();
}
//--------------------------------------------------------
#include
#include
#include "ex2-2.h"
//三角形类1成员函数
triangle1::triangle1(float a,float h)
{
base = a;
height = h;
}
float triangle1::area()
{
return base*height/2;
}
//学生类成员函数
student::student(float a,float b)
{
s1 = a;
s2 = b;
}
float student::sum()
{
return s1+s2;
}
//棱形类成员函数
prism::prism(float a,float b)
{
l1 = a;
l2 = b;
}
float prism::area()
{
return (l1*l2)/2;
}
float prism::peri()
{
return sqrt(l1*l1+l2*l2);
}
//三角形类2成员函数


triangle2::triangle2(float la,float lb,float lc)
{
a = la;
b = lb;
c = lc;
}
float triangle2::area()
{
return (float)(a+b+c)/2;
}
void triangle2::angle()
{
static float P = 180/3.1415926;
float cosA=acos((c*c+b*b-a*a)/(2*b*c));
double cosB=acos((c*c+a*a-b*b)/(2*a*c));
double cosC=acos((a*a+b*b-c*c)/(2*a*b));
ion(4);
cout<<"A角度数为:"<<(P*cosA)<cout<<"B角度数为:"<<(P*cosB)<cout<<"C角度数为:"<<(P*cosC)<}
第3章习题
下列程序有什么功能?
#include
const SIZE=100;
void main()
{
int i,j,data[120],temp;
int min_a;
cout<<"
Please input "<for(i=0;icin>>data[i];
for(i=0;i{
min_a=i;
for(j=i;jif(data[j]min_a=j;
temp=data[min_a];
data[min_a]=data[i];
data[i]=temp;
}
cout<<"
After sorted:";
for(i=0;icout<<" "<}
将数组中的数据从小到大排序。
习题:
1.请改正下列程序的错误,改正后的程序写在右边的空白处,并上机调试检验。
(1)
#include
void main( )
{
int i,s;
i=1;
while(i<=100);
s=s+i;
i++;
cout<<“1+2+3+….+99+100=”<}
更正如下:
#include
void main( )
{
int i,s=0;
i=1;
while(i<=100)
{
s=s+i;
i++;
}
cout<<"1+2+3+….+99+100="<}
(2)
#include
void main
( )
{
int i,s;
i=1;
s=0;
while(i<=100)
s=s+i;
i++;
cout<<“1+2+3+….+99+100=”<}
更正如下:
#include
void main( )
{
int i,s;
i=1;
s=0;
while(i<=100)
{
s=s+i;
i++;
}
cout<<"1+2+3+….+99+100="<}
(3)
#include
void main( )
{
int i,s;
for(i=1;s=0;i<=100;i++)
{
s=s+i;
i++;
}
cout<<“1+2+3+….+99+100=”<}
更正如下:
#include
void main( )
{
int i,s;
for(i=1,s=0;i<=100;)
{
s=s+i;
i++;
}
cout<<"1+2+3+….+99+100="<}
2.定义一个类,类的功能是计算一个整数的阶乘,整数从应用程序(main)中输入。
#include
void main( )
{
int a;
cin>>a;
long s = a;
cout<while(a>1)
{
a--;
s *=a;
}
cout<}
3.应用习题2中的阶乘类,在应用程序中输入一个5~10之间的整数n,求1!+2!+3!+…+n!。例如输入5,输出为:1!+2!+3!+…+5!=153
#include
void main( )
{
int a,b,sum=0;
cin>>a;
long s;
while(a>0)
{
s = a;
b= a--;
while(b>1)
{
b--;
s *= b;
}
sum +=s;
}
cout<}
4.编写一个类,类的功能是一个十进制数转换成二进制数。
#include
class change
{
private:
int num;
public:
change(int a)
{
num = a;
}
void turn()
{
int elem[1000];
for(int i=0;i<1000;i++)
{
elem[i]=(num%2);
num=int(num/2);
if(num<1)
{
break;
}
else continue;
}
for(int j=i;j>=0;j--)
{
cout<}
cout<}
};
void main( )
{
int s;
cin>>s;
change c(s);
();
}
5.编写一个程序,对给定的一维整型数组a,数组元素个数为20个,现要求把数组中的最大元素和a[0]进行交换,其他位置的都元素不动。
#include
void main( )
{
int score[20],s,temp=0;
for(int i = 0;i<20;i++)
{
cin>>score[i];
if(score[i]>temp)
{
temp=score[i];
s=i;
}
}
score[s+1]=score[0];
score[0]=temp;
for(int j=0;j<20;j++)
{
cout<}
}
6、定义一个类,类的功能是求二维整型数组中元素的最小值。二维数组的元素在应用程序中从键盘输入,输出数组中的最小值。
#include
void main( )
{
int score[20][20],s,temp=10<<10;
cout<for(int i = 0;i<20;i++)
{
for(int j=0;j<20;j++)
{
cin>>score[i][j];
if(score[i][j]{
temp=score[i][j];
}
}
}
cout<}
7.假如班级里有15个同学,请将这15个同学的成绩输入数组,然后统计不及格人数。
#include
void main( )
{
int score[15],sum=0;
for(int i = 0;i<15;i++)
{
cin>>score[i];
if(score[i]<60)
sum++;
}
cout<<"不及格的人数为:"<}
8.在屏幕上输出以下内容
1
12
123
1234
12345
123456
1234567
12345678
123456789
#include
void main( )
{
for(int i = 1;i<10;i++)
{
for(int j=1;j<=i;j++)
cout<cout<}
}
9.输入一个自然数,输出它的因子。如输入12,输出2,3; 输入7,输出7。
#include
void main()
{
int n,k=1,z;
cin>>n;
while(k<=n)
{
z=k++;
if (n % z==0)
cout<}
}
10.猜数字游戏,编写一个程序,随机产生一个正整数,让人猜这个数字,每猜1次,计算机会告诉他是大了还是小了。当猜对了,计算机将祝贺他,并告诉他一共猜了多少次。
提示:程序中num将产生随机产生一个正整数。
#include
#include
#include
int main(void)
{
int num;
clrscr();
srand((unsigned) time(NULL));
num=rand();
……
#include
#include
#include
#include
int main(void)
{
int num,count=0;
srand((unsigned) time(NULL));
num=rand()%100;
cout<<"********猜数游戏********"<while(true)
{
int guess;
cout<<"请输入一个数(0-100)"<cin>>guess;
if(guess>num)
cout<<"你猜大了"<if(guesscout<<"你猜小了"<if(guess==num)
break;
count++;
}
cout<<"恭喜你猜对了!!"<<"你一共用了"<}

第4章习题
1.定义一个求绝对值的类,类中有一个私有数据a,三个成员函数(构造函数、求绝对值的函数、输出函数),在main函数中输入一批数,输出这些数的绝对值,当输入0时结束。
#include
class abso
{
private:
double a;
public:
abso(int i)
{
a = i;
}
void change()
{
if(a<0)
a = -a;
}
show()
{
change();
cout<}
};
void main()
{
double a;
while(cin>>a&&a!=0)
{
abso ab(a);
();
}
}
2.定义一个类,类的功能是求比相邻数大的数据个数。类中有三个私有数据a、b、c,二个成员函数(构造函数、求比相邻数大的数并输出的函数),在main函数中定义一个对象,输入一批数,类对象用循环的方法调用类的成员函数,输出结果,当输入0时结束。
#include
class compare
{
private:
int a,b,c;
int count;
public:
compare(int x,int y,int z)
{
a=x;
b=y;
c=z;
}
void compa()
{
count=0;
if(a==b&&b==c)
return;
if(a==b||b==c)
count++;
else
count = 2;
}
void show()
{
compa();
cout<<"比相邻数大的数据个数:"<}
};
void main()
{
int a,b,c;
while(cin>>a>>b>>c&&a!=0)
{
compare com(a,b,c);
();
}
}
3.定义一个把大写字符转换成小写字符的类,类中有一个字符型的私有数据ch,三个成员函数(构造函数、转换函数、输出函数),在main函数中输入一字符串,输出转换后的字符,当输
入回车时结束。
#include
#include
class change
{
private:
char ch[100];
public:
change(char c[])
{
strcpy(ch,c);
}
void compare()
{
for(int i=0;i{
if(ch[i]>64&&ch[i]<91)
ch[i] +=32;
}
}
void show()
{
compare();
cout<}
};
void main()
{
char a[100];
while(cin>>a)
{
change cha(a);
();
}
}
4.输入一批字符,按回车时结束,统计小写字符、大写字符、数字字符、或其它字符的个数。
#include
#include
class count
{
private:
char ch[100];
int x,d,n,o;
public:
count(char c[])
{
strcpy(ch,c);
}
void compare()
{
x=d=n=o=0;
for(int i=0;i{
if(ch[i]>64&&ch[i]<91)
d++;
else
if(ch[i]>96&&ch[i]<123)
x++;
else
if(ch[i]>47&&ch[i]<58)
n++;
else
o++;
}
}
void show()
{
compare();
cout<<"有大写字母:"<}
};
void main()
{
char a[100];
while(cin>>a)
{
count cha(a);
();
}
}
5.编写一个程序,根据输入的百分制按五分制的成绩输出,百分制与五分制之间的关系见下表。
百分制t五分制
90 ~ 100t5
80 ~ 89t4
70 ~ 79t3
60 ~ 69t2
<60t1
#include
void main()
{
int num;
while(cin>>num)
{
switch(num/10)
{
case 10:
case 9:cout<<5<case 8:cout<<4<case 7:cout<<3<case 6:cout<<2<default:cout<<1<}
}
}
6.定义一个求百分制与五分制转换的类,此类还有计算绩点的功能,因而类中有二个私有数据a、b,三个成员函数(构造函数、转换函数、输出函数),在main函数中输入一批用百分数表示的学生成绩,输出这些成绩所对应的五分制成绩与绩点,当输入0时结束。
#include
class account
{
private:
int a;
int b;
public:
account(int x,int y)
{
a = x;
b = y;
}
int calcNum(int x)
{
switch(a/10)
{
case 10:
case 9:return 5;
case 8:return 4;
case 7:return 3;
case 6:return 2;
default:return 1;
}
}
void show()
{
//ion(4);
cout<<"五分制成绩:"<}
};
void main()
{
int num1,num;
while(cin>>num>>num1)
{
account c(num,num1);
();
}
}
7.定义一个选择函数的类,类中有二个私有数据a、flag,a表示函数的自变量,flag表示函数的选择标志(1,则计算sin(a);2,则计算cos(a),3,则计算tan(a)),二个成员函数(构造函数及输出函数),在main函数中输入一批数,输出这些数的函数值,当输入0时结束。
#include
#include
class anqle
{
private:
float a;
int b;
public:
anqle(in
t x,float y)
{
a = y;
b = x;
}
double calcNum(int x)
{
switch(b)
{
case 1:return sin(a);break;
case 2:return cos(a);break;
case 3:return tan(a);break;
default:return 0;
}
}
void show()
{
ion(4);
cout<<"值为:"<}
};
void main()
{
int num1,num;
cout<<"1,则计算sin(a);2,则计算cos(a),3,则计算tan(a)"<cin>>num;
cout<<"请输入a:"<cin>>num1;
anqle c(num,num1);
();
}

第5章习题:
一、程序阅读题
1.写出以下程序的执行结果。
#include
int x;
void fun( )
{
Cout<}
void main( )
{
int x=1;
if(x==1)
{
int x=2;
cout<}
{
extern int x;
cout<<++x<}
fun( );
}
2
1
1
2.写出以下程序的执行结果。
#include
int kk( )
{ int x = 4
static int y
y = 5
x*= 2
y*= 2;
return(x+y);
}
void main()
{ int j , s = 0
for(j=0;j<2;j++ )
s=kk( );
cout<<"s="<}
S=18
3.写出以下程序的执行结果。
#include
float aver(int a[])
{
int k,sum=0;
float ave;
for(k=0;k<10;k++) sum+=*(a+k);//==sum +=a[k];
ave=(float)sum/10;
return (ave);
}
void main( )
{
float ave;
static b[]={78,89,98,76,78,45,88,81,92,85};
ave=aver(b);
cout<<"ave="<}
avs=81;
4.阅读程序,写出程序的执行结果。
#include
void p(int x,int *y)
{
*y=x++;
}
void main( )
{
int x=0,y=0;
p(10,&y);
cout<p(y,&x);
cout<}
0 10
10 10
5.阅读程序,写出程序的执行结果。
void sort(int b[],int n,int x)
{
int k;
for(k=n-1;k>=0;k--)
if(b[k]b[k+1]=b[k];
else
break;
b[k+1]=x;
}
void main( )
{
int i,j;
static int a[5]={8,5,4,1,6};
int b[8];
b[0]=a[0];
for(i=1;i<5;i++)
{sort(b,i,a[i]);
for(j=0;j<=i;j++)
cout<cout<}
}
5 5
4 4 4
1 1 1 1
1 1 1 1 1
6.写出以下程序的执行结果。
#include
int fun(int x)
{ int p;
if(x==0||x==1)
return 3;
else
p=x-fun(x-2);
return p;
}

void main( )
{
cout<cout<}
7
7.写出以下程序的执行结果,并说明其作用是什么?
void main( )
{
void f(int);
f(1234);
}
void f(int n)
{
if(n>=6)
f(n/6);
cout<}
5454
8.写出以下程序的执行结果。
#include
int sum( int n)
{
int c = 0
do
{ c += n % 10
n /= 10
} while (n );
return c
}

void main( )
{
cout<<"sum(123)="<}
sum(123)=6
9.写出以下程序的执行结果。
#include
int fun( int n )
{
if ( n > 0 )
return( n+fun(n - 2));
return 0;
}
void main( )
{
int n=10
cout<}
30
10.写出以下程序的执行结果。
#include
void fun( char *s)
{
if(! *s) return;
fun(s+1);
putchar(*s);
}
void main( )
{
char *s="3726785";
fun(s);
}
5876273
二、编程题
1.编写一个函数,计算x的n次的平方。
int function(int x, int n)
{
int sum=x;
for(int i=1;i{
sum *=x;
}
return sum;
}
2.编写一个函数,计算对角线上元素之和。
int add(int (*a)[MAX],int n) // MAX数值上=n
{
int i,sum = 0;
for (i = 0; i < n; i++)
sum = sum + a[i][i] + a[i][n-1-i];
if (n%2) sum -= a[n/2][n/2];
return sum;
}
3.编写一个函数void invert(char str[ ]),将一个字符串的内容颠倒过来。
void invert(char *str)
{
char temp;
int len = strlen(str);
int len2 = len-1;
for(int i=0;i{
temp=*(str+i);
*(str+i)=*(str+len2-i);
*(str+len2-i)=temp;
}
}
4.编写一个C++函数,交换数组a和数组b中的对应元素。
void invert(int *str1,int *str2,int l)
{
int temp;
int len = l;
cout<for(int i=0;i{
temp=*(str1+i);
*(str1+i)=*(str2+i);
*(str2+i)=temp;
}
}
5.输入一行文字,找出其中大写字母、小写字母、空格、数字以及其他字符各有多少。
#include
#include
class count
{
private:
char ch[100];
int x,d,n,o;
public:
count(char c[])
{
strcpy(ch,c);
}
void compare()
{
x=d=n=o=0;
for(int i=0;i{
if(ch[i]>64&&ch[i]<91)
d++;
else
if(ch[i]>96&&ch[i]<123)
x++;
else
if(ch[i]>47&&ch[i]<58)
n++;
else
o++;
}
}
void show()
{
compare();
cout<<"有大写字母:"<}
};
void main()
{
char a[100];
while(cin>>a)
{
count cha(a);
();
}
}

6.编写函数,把一个字符串复制到另一存储单元中。调用的函数能进行字符串的复制
void copy(char *s1,char *s2)
{
for(int i=0;i*(s1+i)=*(s2+i);
}
7.编写一个函数,输入一个字符串,内有数字和非数字字符,将其中连续的数字作为一个整数,依次存放到数组a中,并统计有多少个整数。
void function(char *s)
{
int a[20];
int count=0;
for(int i=0;i{
int j=i;
while(*(s+j)>47&&*(s+j)<58)
{
j++;
a[count]*=10*(j-1);
a[count]+=*(s+j)-47;
}
i+=j;
count++;
}
cout<}
8.编写函数,删除字符串中,从指定位置m开始的n个字符。删除成功,函数返回被删除字符串;否则返回空的值。
string Del(string s,int n,int m)
{
int a[20];
string c;
if(()>(n+m))
{
for(int i=n;i{
c+=s[i];
}
return c;
}
else
return "";
}
9.编写函数strmcpy(s,t,m),将字符串t中从第m个字符开始的
全部字符复制到字符串s中去。
void comp(string &s,string &t,int m)
{
int a[20];
for(int i=m;i{
s+=t[i];
}
}
10.编一个程序,测试字符串s1中第一次出现在字符串s2中的字符的位置。要求定义一个函数,返回出现这个字符的位置;若s1中不含有s2的字符,则返回-1。
int search(char *s1,char *s2)
{
int len1=strlen(s1);
int len2=strlen(s2);
if(len1{
for(int i=0;i<=(len2-len1);i++)
{
int j=0;
while(*(s1+j)==*(s2+j+i))
{
if(j==len1-1)
{
return i;
break;
}
j++;
}
}
}
else
return -1;
}
11.编写一个能从键盘输入的字符串,从中删去非数字字符,且转换成数值。
int search(char *s)
{
int len1=strlen(s);
int sum=0;
for(int i=0;i{
if(*(s+i)>47&&*(s+i)<58)
{
sum *=10;
sum +=(*(s+i)-48);
}
}
return sum;
}
12.输人10个学生5门课的成绩,分别用函数求:(1)每个学生的平均成绩;(2)最高分所对应的学生和课程。
int x[3];
void aver(int s[3][5])
{
for(int i=0;i<3;i++)
{
x[i]=0;
for(int j=0;j<5;j++)
{
x[i] += s[i][j];
}
x[i] /=5;
}
}
void sum(int s[3][5])
{
int p,sum;
int temp;
for(int i=0;i<3;i++)
{
sum = 0;
for(int j=0;j<5;j++)
{
sum +=s[i][j];
}
if(temp{
temp = sum;
p=i;
}
}
for(int j=0;j<5;j++)
{
cout<}
}
13.用递归的方法编写一个函数sum(int n),求1至n的累加和。
int add(int a)
{
if(a>1)
{
a += add(a-1);
}
return a;
}
14.用递归的方法编写一个函数,求:

15.用递归的方法编写一个函数,求:

double search(float a,int x)
{
if(x>1)
{
a = sqrt(a);
a = search(a,x-1);
}
return a;
}



中国数学家排名-一纳


爱国书读后感-适值的意思


痴的成语-弹冠振衣


分散拼音-委婉的意思


柳公权简介-明堂是什么意思


氧化锌化学式-路条


mathplayer-咏雪的意思


道生一一生二二生三三生万物-利令智昏的意思