当前位置:文档之家› C++与数据结构基础简明教程课后习题答案

C++与数据结构基础简明教程课后习题答案

C++与数据结构基础简明教程课后习题答案1-7-1//输出一个数的10倍#include <iostream>using namespace std;int main(){cout<<"Please input an interger:\n";int a;cin>>a;cout<<"result="<<a*10<<endl;return 0;}1-7-2//输出两个数中的较小的#include <iostream>using namespace std;int main(){double x,y,min;cout<<"please input two numbers"<<endl;cin>>x>>y;min=(x>y?y:x);cout<<"the smaller is"<<' '<<min<<endl;return 0;}1-7-3//输入半径计算周长和面积#include <iostream>using namespace std;int main(){cout<<"请输入半径\n";double rad;cin>>rad;double c,s;c=2*3.14*rad;s=3.14*rad*rad;cout<<"周长是"<<c<<endl;cout<<"面积是"<<s<<endl;return 0;}1-7-4//将10000秒化成小时分钟秒#include <iostream>using namespace std;int main(){int hour,min,second;hour=10000/3600;min=(10000%3600)/60;second=10000-hour*3600-60*min;cout<<hour<<"hours"<<min<<"minutes"<<second<<"seconds"<<endl;return 0;}1-7-5//将一个三位数倒叙输出#include <iostream>using namespace std;int main(){int num,num_bai,num_shi,num_ge;cout<<"请输入一个三位数";cin>>num;num_bai=num/100;num_shi=(num-num_bai*100)/10;num_ge=num-num_bai*100-num_shi*10; cout<<num_ge<<endl;cout<<num_shi<<endl;cout<<num_bai<<endl;return 0;}2-3//简单的输入输出#include <iostream>using namespace std;int main(){double y,n;cout<<"please input a number\n";cin>>n;if (n>0) y=n+1;if (n<0) y=n*n;if (n==0) y=0;cout<<"the result is:"<<' '<<y;return 0;}2-4//输出学生学号和对应的成绩等级#include <iostream>using namespace std;int main(){double fenshu;int xuehao;char dengji;int i;for (i=1;i<=10;i++){onerror:cout<<"please input student score\n";cin>>fenshu;if (fenshu>=90&&fenshu<=100) dengji='A';if (fenshu>=80&&fenshu<90) dengji='B';if (fenshu>=600&&fenshu<80) dengji='C';if (fenshu>=0&&fenshu<60) dengji='D';if (fenshu<0){cout<<"error";goto onerror;}if (fenshu>100)cout<<"error";goto onerror;}cout<<"the id is"<<i<<endl;cout<<"the score is"<<dengji<<endl;}return 0;}2-5//判断输入字符类别#include <iostream>using namespace std;int main(){char zifu;int ascii;cout<<"please input a characteristic\n";cin>>zifu;ascii=zifu;if (ascii>=48&&ascii<=57){cout<<"数字\n";goto end;}if (ascii>=97&&ascii<=122){cout<<"小写字母\n";}if (ascii>=65&&ascii<=90){cout<<"大写字母\n";goto end;}cout<<"其他字符";cout<<endl;end:return 0;}2-6//求圆周率的近似值#include <iostream>#include <iomanip>using namespace std;int main(){int xishu=-1;double danshu=1.0;int i=1;double sifenzhipi=0;do{xishu=xishu*(-1);danshu=1.0/(2*i-1);sifenzhipi=sifenzhipi+xishu*danshu;i++;}while(danshu>=0.000001);cout<<setprecision(15)<<sifenzhipi*4<<endl; return 0;}2-7//输出斐波那契数列前40个数,以8*5的格式输出#include <iostream>#include <iomanip>using namespace std;int main(){int b=2;int feibo1=0;int feibo2=1;cout<<setw(9)<<'0'<<setw(9)<<'1';for(int i=1;i<=38;i++){int a=feibo2;feibo2=feibo1+feibo2;feibo1=a;cout<<setw(9)<<feibo2;b=b+1;if(b%8==0) cout<<endl;}return 0;}2-8//统计输入的元音字母个数#include <iostream>using namespace std;int main(){char zimu;int a,e,i,o,u;a=e=u=i=o=0;begin:cin>>zimu;switch(zimu){case 'a' :a++;break;case 'e' :e++;break;case 'i' :i++;break;case 'o' :o++;break;case 'u' :u++;break;case '#' :goto end;}goto begin;end:cout<<a<<endl<<e<<endl<<i<<endl<<o<<endl<<u<<endl<<a+e+i+o+u;return 0;}2-10//计算5!+6!+7!#include <iostream>using namespace std;int main(){int i,j;int sum=0;for (i=5;i<=7;i++){int jiecheng=1;for (j=1;j<=i;j++) jiecheng=jiecheng*j;sum=sum+jiecheng;}cout<<sum;return 0;}2-11//从2开始100个素数#include <iostream>using namespace std;int main(){int num=1;int sushu=0;start:;num++;for (int i=2;i<=num;i++){if(num%i==0) break;}if (i==num){cout<<num<<endl;sushu+=1;}if(sushu!=100) goto start;return 0;}2-12//百钱买百鸡问题#include <iostream>using namespace std;int main(){int x,y,z;for(x=0;x<=100;x++){for(y=0;y<=100;y++){for(z=0;z<=100;z++)if (x+y+z==100&&5*x+3*y+z/3==100&&z%3==0) cout<< x<<'\t'<<y<<'\t'<<z<<endl;}}return 0;}2-13#include <iostream>using namespace std;int main(){int a,b,c,d,e;c=0;cin>>a;cout<<"输入"<<a<<endl<<"该数的三次方是"<<a<<"个连续奇数";b=1;e=a*a*a;while (c!=e){d=b;c=0;for (int i=1;i<=a;i++){c=c+d;d=d+2;}b=b+2;}//cout<<b-2;int f=b-4;for (int j=1;j<=a;j++){f=f+2;cout<<f<<' ';}cout<<"的和\n";return 0;}2-14//输出四方*形状#include <iostream>using namespace std;int main(){int i,j;for (i=1;i<=9;i++){j=1;for(j=1;j<=9;j++){if(i+j>=6&&i+j<=14&&j-i<=4&&i-j<=4) cout<<'*';else cout<<' ';}cout<<endl;}return 0;}3-1-1//向数组a中输入10个整数,求其中的最大值,最小值和10个数的算术平均值#include <iostream>using namespace std;int main(){int a[10];for(int i=0;i<=9;i++)cin>>a[i];int max=a[0],min=a[0],sum=a[0];for(int j=0;j<=9;j++){sum=sum+a[j];max=(max>a[j]?max:a[j]);min=(min<a[j]?min:a[j]);}double ave=sum/10.00;cout<<max<<endl<<min<<endl<<ave<<endl;return 0;}3-1-2#include <iostream>using namespace std;int main(){int score[10];int sum=0,a=0,b=0;for(int i=0;i<=9;i++){cin>>score[i];sum=sum+score[i];}double ave=sum/10.0;for(int j=0;j<=9;j++){if(score[j]>ave) a++;if(score[j]<60) b++;}cout<<"成绩大于平均值的人数是"<<a<<endl<<"成绩小于60的人数"<<b<<end l;return 0;}3-3-1#include <iostream>using namespace std;int main(){int a[10],sum=0,min,max;double ave;int *ptoa=a;for (int i=0;i<=9;i++){cin>>*(a+i);sum+=*(a+i);}min=*(a);max=*(a);for (int j=1;j<=9;j++){min=(min<*(a+j)?min:*(a+j));max=(max>*(a+j)?max:*(a+j));}cout<<max<<endl<<min<<endl;ave=sum/10.0;cout<<ave<<endl;return 0;}3-3-2#include <iostream>using namespace std;int main(){int a[10],sum=0,j=0,c=0; //定义数组a,sum是各学生成绩之和,j是小于60的个数,c是大于平均值的个数double ave=0; //定义平均值int *ptoa=a; //使用指针for (int i=0;i<=9;i++) //输入并算和,统计小于60的{cin>>*(ptoa+i);sum+=*(ptoa+i);if (*(ptoa+i)<60){j++;}}ave=sum/10.0; //计算平均值//cout<<ave<<endl; //可以输出平均值for (int k=0;k<=9;k++) //计算大于平均值的if (*(ptoa+k)>ave){c++;}}cout<<c<<endl<<j;return 0;}3-3-3#include <iostream>using namespace std;int main(){char string[100];cin>>string;int i=0,an=0,in=0;cout<<"您输入的字符串";while (string[i]!='\0'){if(string[i]=='a') an++;if(string[i]=='i') in++;cout<<string[i];i++;}cout<<endl<<an<<endl<<in<<endl;return 0;}#include <iostream>using namespace std;int main(){char a[100]; //定义存放字符串的数组char *ptoa=a; //使用指针int i=0,an=0,in=0; //an,in分别为a,i的个数cin>>a;while (*(ptoa+i)!='\0') //a【i】{cout<<*(ptoa+i);switch (*(ptoa+i)) //判断{case 'a' : an++;break;case 'i' : in++;break;}i++;}cout<<endl<<an<<endl<<in;return 0;}3-3-4#include <iostream>using namespace std;int main(){int a[3][3];for (int i=0;i<=2;i++){for(int j=0;j<=2;j++){cin>>*(*(a+i)+j);}}cout<<*(*(a+0)+0)+*(*(a+1)+1)+*(*(a+2)+2)<<endl;cout<<*(*(a+0)+2)+*(*(a+1)+1)+*(*(a+2)+0)<<endl;return 0;}3-3-5v1#include <iostream>using namespace std;int main(){int a[11]={2,4,5,8,12,14,16,18,20,30,0},b,i,m,j;cin>>b;a[10]=b;if (b<2){m=0;goto end;}if (b>30){goto end2;}for(i=0;i<=9;i++){if (a[i+1]>b){m=i+1;goto end;}}end:;for (j=10;j>=m+1;j--){a[j]=a[j-1];}a[m]=b;end2:;for (int k=0;k<=10;k++)cout<<a[k]<<endl;return 0;}3-3-5v2#include <iostream>using namespace std;int main(){int i,j,temp;int a[11]={2,4,5,8,12,14,16,18,20,30};cin>>a[10];for (i=0;i<=10;i++){for(j=0;j<=10-i-1;j++){if(a[j]>a[j+1]){temp=a[j+1];a[j+1]=a[j];a[j]=temp;}}}for (int k=0;k<=10;k++) cout<<a[k]<<' ';cout<<'\n';return 0;}3-3-5v3#include <iostream>using namespace std;int main(){int a[11]={2,4,5,8,12,14,16,18,20,30},num,i,j;cout<<"请输入一个整数";cin>>num;if (num>a[9]){a[10]=num;}else{for (i=0;i<=11;i++){if(a[i]>num){for(j=9;j>=i;j--){a[j+1]=a[j];}a[i]=num;break;}}}for (i=0;i<=10;i++){cout<<a[i]<<' ';}return 0;}3-3-5final#include<iostream.h>void main(){int a[11]={2,4,5,8,12,14,16,18,20,30},b,i=0,j=10;cin>>b;while(a[i]<b&&i<=9)i++;while(j>i){a[j]=a[j-1];j--;}a[i]=b;cout<<"输入插入后的结果:";for(i=0;i<11;i++)cout<<a[i]<<" ";cout<<endl;}3-3-6#include <iostream>using namespace std;int main(){int a[5][3],s[5]={0,0,0,0,0},temp;for (int i=0;i<=4;i++){cout<<"请输入第"<<i+1<<"行的数据"<<endl;for (int j=0;j<=2;j++){cin>>*(*(a+i)+j);*(s+i)+=*(*(a+i)+j);}}/*//注释掉的部分可以输出每行数据之和for (int k=0;k<=4;k++){cout<<*(s+k)<<endl;}*/for (int m=0;m<=4;m++){for (int n=0;n<=4-m-1;n++)if (*(s+n)>*(s+n+1)){ temp=*(s+n+1);*(s+n+1)=*(s+n);*(s+n)=temp;}}for (int l=0;l<=4;l++){cout<<endl<<*(s+l);}cout<<endl;system("pause");return 0;}4-3#include <iostream>using namespace std;int fun1(int x,int y);int fun2(int x,int y);int fun3(int x,int y);int fun4(int x,int y);int main(){int a,b;cout<<"输入两个数";cin>>a>>b;cout<<"两个数的和的平方是"<<fun1(a,b)<<endl;cout<<"两个数的平方和是"<<fun2(a,b)<<endl;cout<<"两个数的差的平方是"<<fun3(a,b)<<endl;cout<<"两个数平方的差是"<<fun4(a,b)<<endl;return 0;}int fun1(int x,int y){int z=(x+y)*(x+y);return z;}int fun2(int x,int y){int z=x*x+y*y;return z;}int fun3(int x,int y){int z=(x-y)*(x-y);return z;}int fun4(int x,int y){int z=x*x-y*y;return z;}4-4#include <iostream>using namespace std;double jc(int x);int sm(int x);int main(){int m,n,s2;double s1;cin>>m>>n;s1=jc(m)/(jc(n)*jc(m-n));s2=sm(m)-sm(n);cout<<s1<<endl<<s2;return 0;}double jc(int x){double s=1;for (int i=1;i<=x;i++) s*=i;return s;}int sm(int x){int s=0;for (int i=1;i<=x;i++) s+=i;return s;}4-6#include <iostream>#include <cmath>using namespace std;double jxf(int n);double txf(int n);double f(double x);//const pi=3.1415927;int main(){int n;double y1,y2;cin>>n;y1=jxf(n);y2=txf(n);cout<<y1<<endl<<y2;return 0;}double jxf(int n){double sum=0,s;for (int i=0;i<=n-1;i++){s=(i*3.14)/n;sum+=(3.14/n)*f(s);}return sum;}double txf(int n){double sum=0,s1,s2;for (int i=0;i<=n-1;i++){s1=i*3.14/n;s2=(i+1)*3.14/n;sum+=3.14/n*(f(s1)+f(s2));}sum/=2.0;return sum;}double f(double x){double y;y=sin(x)+cos(x);return y;}4-6v1#include <iostream>#include <cmath>using namespace std;double jxf(int n);double txf(int n);double f(double x);const pi=3.1415927;int main(){int n;double y1,y2;cin>>n;y1=jxf(n);y2=txf(n);if (abs(y1-2)>abs(y2-2)) cout<<"矩形法";else cout<<"梯形法";return 0;}double jxf(int n){double sum=0;for (int i=0;i<=n-1;i++) sum+=pi/n*f(i*pi/n);return sum;}double txf(int n){double sum=0;for (int i=0;i<=n-1;i++) sum+=pi/n*(f(i*pi/n)+f((i+1)*pi/n));sum/=2;return sum;}double f(double x){double y;y=sin(x)+cos(x);return y;}4-6v2error#include <iostream>#include <cmath>using namespace std;double jxf(int n);double txf(int n);double f(double x);const pi=3.1415927;int main(){int n;double y1,y2;cin>>n;y1=jxf(n);y2=txf(n);if (abs(y1-2)>abs(y2-2)) cout<<"矩形法";else cout<<"梯形法";return 0;}double jxf(int n){double sum=0;for (int i=0;i<=n-1;i++) sum+=pi/n*f(i*pi/n);return sum;}double txf(int n){double sum=0;for (int i=0;i<=n-1;i++) sum+=pi/n*(f(i*pi/n)+f((i+1)*pi/n));sum/=2;return sum;}double f(double x){double y;y=sin(x)+cos(x);return y;}4-7#include <iostream>using namespace std;int my(int x,int y);int mb(int x,int y);int main(){int a,b,max,min;cin>>a>>b;max=my(a,b);cout<<max<<endl<<min<<endl;system("pause");return 0;}int my(int x,int y){for (int i=(x>y?y:x);i>=1;i--)if (x%i==0&&y%i==0) return i; }int mb(int x,int y){for (int i=(x>y?x:y);i>=1;i++)if (i%x==0&&i%y==0) return i; }4-11#include <iostream>using namespace std;void delchar(char *s1,char s2);int main(){char s1[100];char s2;cin>>s1>>s2;return 0;}void delchar(char *s1,char s2){for (int i=1;*(s1+i)!='\0';i++){if (*(s1+i)==s2){for (int j=0;*(s1+i+j)!='\0';j++){*(s1+i+j)=*(s1+i+j+1);}}}cout<<s1;}4-12#include <iostream>#include <cmath>using namespace std;int check(int a,int b,int c);double s(double a,double b,double c);int main(){double a,b,c;cin>>a>>b>>c;if (check(a,b,c)) cout<<s(a,b,c);else cout<<"error";system("pause");return 0;}int check(int a,int b,int c){if (a+b>c&&abs(a-b)<c) return 1;else return 0;}double s(double a,double b,double c){double p=(a+b+c)/2;double area=sqrt(p*(p-a)*(p-b)*(p-c));return area;}4-13#include <iostream>#include <cmath>using namespace std;fun (int n,int k);pow10 (int x);int main(){int n,k;cin>>n>>k;cout<<fun(n,k)<<endl;system("pause");return 0;}int fun (int n,int k){if (k>n||k<1) return 0;else{int s;s=n/pow10(k-1);s=s%10;return s;}}int pow10 (int x){int s=1;for (int i=1;i<=x;i++) s*=10;return s;}4-14#include<iostream>using namespace std;double ave(int p[][4],int i);int main(){int a[5][4];for (int i=0;i<=4;i++)for (int j=0;j<=3;j++)cin>>a[i][j];for (i=0;i<=4;i++)cout<<ave(a,i)<<endl;system("pause");return 0;}double ave(int p[][4],int i){double sum=0;for(int j=0;j<=3;j++)sum+=p[i][j];sum/=4;return sum;}4-15#include <iostream>using namespace std;int find(char str[],char a);int main(){char str[100],a;cin>>str>>a;cout<<find(str,a)+1;system("pause");return 0;}int find(char str[],char a){for (int i=0;str[i]!='\0';i++){if (str[i]==a){return i;break;}}if (str[i]=='\0') return -1; }4-16//4_16#include<iostream>using namespace std;int change (int n,int R,int *a);int main(){cout<<"Please input n and R(2<=R<=16)"<<endl;int n,R,a[10];cin>>n>>R;int i=change(n,R,a);for (int j=i-1;j>=0;j--){switch (a[j]){case 11:cout<<'A';break;case 12:cout<<'B';break;case 13:cout<<'C';break;case 14:cout<<'D';break;case 15:cout<<'E';break;default: cout<<a[j];}}system("pause");return 0;}int change (int n,int R,int *a) {int i=0;while (n!=0){*(a+i)=n%R;n/=R;i++;}return i;}4-17#include <iostream>using namespace std;const int N=5;int init(int a[][N]);void fun1(int a[][N]);void fun2(int a[][N]);void fun3(int a[][N],int sum); void fun4(int a[][N]);int main(){int sum=0;int a[2][N];sum=init(a);cout<<"(1)"<<endl;fun1(a);cout<<"(2)"<<endl;fun2(a);cout<<"(3)"<<endl;fun3(a,sum);cout<<"(4)"<<endl;fun4(a);return 0;}int init(int a[][N]){int sum=0;for (int i=0;i<=N-1;i++){a[0][i]=i+1;cin>>a[1][i];sum+=a[1][i];}return sum;}void fun1(int a[][N]){for (int i=0;i<=N-1;i++)if (a[1][i]>85){cout<<a[0][i]<<' '<<a[1][i]<<endl;}}void fun2(int a[][N]){for (int i=0;i<=N-1;i++)if (a[1][i]<60){cout<<a[0][i]<<' '<<a[1][i]<<endl;}}void fun3(int a[][N],int sum){int aveplus=0;double ave=sum/N;for (int i=0;i<=N-1;i++)if (a[1][i]>=ave)aveplus++;cout<<aveplus<<endl;}void fun4(int a[][N]){for (int i=0;i<=N-1;i++)for (int j=0;j<=N-1;j++){if (a[1][j]>a[1][j+1]){int temp1=a[1][j+1];a[1][j+1]=a[1][j];a[1][j]=temp1;int temp2=a[0][j+1];a[0][j+1]=a[0][j];a[0][j]=temp2;}}for (i=0;i<=N-1;i++){cout<<a[0][i]<<' '<<a[1][i]<<endl;}}5-5//计算当前日期是一年之中的第几天#include <iostream>using namespace std;//定义日期类class Dateprivate://y年m月d天nod一年中的第几天ly是否是闰年int y,m,d,nod,ly;public:Date (int ioy=2009,int iom=5,int iod=1){y=ioy;m=iom;d=iod;}int checkdate();int Issleapyear();void Print();int NumberOfDays();};//是否是闰年int Date::Issleapyear(){return ly=(y%400==0)||(y%4==0&&y%100!=0); }//计算一年之中的第几天int Date::NumberOfDays (){int a[2][13]={{0,31,29,31,30,31,30,31,31,30,31,30,31},{0,31,28,31,30,31,30,31, 31,30,31,30,31}};nod=0;for (int i=0;i<=m-1;i++)nod+=a[Issleapyear()][i];nod+=d;return nod;}//判断日期是否合法int Date::checkdate (){return (m>0&&m<13)&&(d>0&&d<=31);}//输出void Date::Print (){cout<<y<<"年"<<m<<"月"<<d<<"日"<<"是该年的第"<<NumberOfDays ()<<"天"<<endl;}//主函数int main(){Date d1;Date d2(1991,5,2);int y,m,d;cout<<"请依次输入年月日";cin>>y>>m>>d;Date d3(y,m,d);d1.Print();d2.Print();if(d3.checkdate()){d3.Print();}else{cout<<"Error";}system("pause");system("cls");system("pause");return 0;}5-6//判断15,31是否偶数,素数#include <iostream>using namespace std;//定义整数类class Interger{private:int d;public:int GetD();void SetD(int iod=0){d=iod;}int IsOdd();int IsPrime();};//返回D的值int Interger::GetD(){return d;}//判断是否偶数int Interger::IsOdd(){return 1-d%2;}//判断是否素数int Interger::IsPrime(){for (int i=2;i<=d;i++)if (d%i==0) break;if (i==d) return 0;else return 1;}//主函数int main(){Interger num[2];num[0].SetD(31);num[1].SetD(15);for (int i=0;i<=1;i++){cout<<num[i].GetD();if (num[i].IsOdd()) cout<<"是偶数";else cout<<"不是偶数";if (num[i].IsPrime()) cout<<"不是素数";else cout<<"是素数";cout<<endl;}system("pause");return 0;}5-7//编写一个求n!的类,并在main()中分别输出2-9的阶乘#include<iostream>using namespace std;//定义阶乘类(汗)class jc{private:int a,j;public://传值void set(int ioa){a=ioa;}//计算阶乘int fun(){j=1;for (int i=1;i<=a;i++)j*=i;return j;}};//主函数int main(){jc num[8];for (int i=0;i<=7;i++){num[i].set(i+2);cout<<i+2<<"!="<<num[i].fun()<<endl;}return 0;}5-8#include <iostream>using namespace std;//定义线类class Line{private:double A,B,C;public://IO函数Line(double ioA,double ioB,double ioC){A=ioA;B=ioB;C=ioC;}//定义友元函数friend void judge(Line &,Line &);};//判断两线是否相交void judge(Line &l1,Line&l2){if (l1.A*l2.B==l2.A*l1.B) cout<<"平行(或重合)"<<endl;else{cout<<"相交,相交点是:("<<(l1.C*l2.B-l1.B*l2.C)/(l2.A*l1.B-l1.A*l2.B);cout<<","<<(l2.A*l1.C-l1.A*l2.C)/(l1.A*l2.B-l1.B*l2.A)<<")"<<endl;}}//主函数int main(){//定义两条直线,l1,l2,系数分别为a,b,c,d,e,fint a,b,c,d,e,f;system("color 79");cout<<"请输入直线1的三个系数";cin>>a>>b>>c;cout<<"请输入直线2的三个系数";cin>>d>>e>>f;system("color 07");Line l1(a,b,c),l2(d,e,f);judge(l1,l2);system("pause");。

相关主题