您好,欢迎来到爱站旅游。
搜索
您的当前位置:首页谭浩强c++程序设计课后习题答案

谭浩强c++程序设计课后习题答案

来源:爱站旅游


谭浩强c++程序设计课后答案

娄警卫

第一章

1.5题

#include using namespace std; int main() {

cout<<\"This\"<<\"is\"; cout<<\"a\"<<\"C++\"; cout<<\"program.\"; return 0; 1.6题

#include using namespace std; int main() {

int a,b,c; a=10; b=23; c=a+b;

cout<<\"a+b=\"; cout<1.7七题

#include using namespace std; int main() {

int a,b,c;

int f(int x,int y,int z); cin>>a>>b>>c; c=f(a,b,c);

cout<int f(int x,int y,int z) {

int m;

if (xreturn(m); }

1.8题

#include using namespace std; int main() {

int a,b,c; cin>>a>>b; c=a+b;

cout<<\"a+b=\"<1.9题

#include using namespace std; int main() {

int a,b,c;

int add(int x,int y); cin>>a>>b; c=add(a,b);

cout<<\"a+b=\"<int add(int x,int y) {int z; z=x+y; return(z); }

2 / 75

第二章

2.3题

#include using namespace std; int main()

{char c1='a',c2='b',c3='c',c4='\\101',c5='\\116'; cout<cout<<\"\\\b\"<2.4题

#include using namespace std; int main()

{char c1='C',c2='+',c3='+';

cout<<\"I say: \\\"\"<cout<<\"\\\"<<\"He says: \\\"C++ is very interesting!\\\"\"<< '\\n'; return 0; }

2.7题

#include using namespace std; int main() {int i,j,m,n; i=8; j=10;

m=++i+j++;

n=(++i)+(++j)+m;

cout<2.8题

#include using namespace std; int main()

{char c1='C', c2='h', c3='i', c4='n', c5='a'; c1+=4; c2+=4; c3+=4; c4+=4; c5+=4;

cout<<\"password

3 / 75

is:\"<第三章

3.2题

#include #include using namespace std; int main ( )

{float h,r,l,s,sq,vq,vz;

const float pi=3.1415926; cout<<\"please enter r,h:\"; cin>>r>>h; l=2*pi*r; s=r*r*pi; sq=4*pi*r*r;

vq=3.0/4.0*pi*r*r*r; vz=pi*r*r*h;

cout<cout<<\"l= \"<3.3题

#include using namespace std; int main () {float c,f;

cout<<\"请输入一个华氏温度:\"; cin>>f;

c=(5.0/9.0)*(f-32); //注意5和9要用实型表示,否则5/9值为0 cout<<\"摄氏温度为:\"<3.4题

#include using namespace std; int main ( ) {char c1,c2;

cout<<\"请输入两个字符c1,c2:\";

c1=getchar(); //将输入的第一个字符赋给c1

c2=getchar(); //将输入的第二个字符赋给c2

cout<<\"用putchar函数输出结果为:\"; putchar(c1); putchar(c2); cout<cout<<\"用cout语句输出结果为:\"; cout<3.4题另一解

#include using namespace std; int main ( ) {char c1,c2;

cout<<\"请输入两个字符c1,c2:\";

c1=getchar(); //将输入的第一个字符赋给c1

c2=getchar(); //将输入的第二个字符赋给c2

cout<<\"用putchar函数输出结果为:\"; putchar(c1); putchar(44); putchar(c2); cout<cout<<\"用cout语句输出结果为:\"; cout<3.5题

#include using namespace std; int main ( ) {char c1,c2;

int i1,i2; //定义为整型

4 / 75

cout<<\"请输入两个整数i1,i2:\"; cin>>i1>>i2; c1=i1; c2=i2;

cout<<\"按字符输出结果为:\"<3.8题

#include using namespace std; int main ( )

{ int a=3,b=4,c=5,x,y;

cout<<(a+b>c && b==c)<b) && !c||1)<cout<<(!(x=a) && (y=b) && 0)<3.9题

include using namespace std; int main ( ) {int a,b,c;

cout<<\"please enter three numbers:\";

cin>>a>>b>>c; if(acout<<\"max=\"<cout<<\"max=\"<cout<<\"max=\"<cout<<\"max=\"<3.9题另一解

integer

#include using namespace std; int main ( )

{int a,b,c,temp,max ;

cout<<\"please enter three integer numbers:\";

cin>>a>>b>>c;

temp=(a>b)?a:b; /* 将a和b中的大者存入temp中 */

max=(temp>c)?temp:c; /* 将a和b中的大者与c比较,最大者存入max */

cout<<\"max=\"<3.10题

#include using namespace std; int main ( ) {int x,y;

cout<<\"enter x:\"; cin>>x;

if (x<1) {y=x;

cout<<\"x=\"<else if (x<10) // 1≤x<10

{y=2*x-1;

cout<<\"x=\"<else // x≥10

{y=3*x-11;

cout<<\"x=\"<cout<3.11题

#include

5 / 75

using namespace std; int main () {float score; char grade;

cout<<\"please enter score of student:\"; cin>>score;

while (score>100||score<0)

{cout<<\"data error,enter data again.\"; cin>>score; }

switch(int(score/10)) {case 10:

case 9: grade='A';break; case 8: grade='B';break; case 7: grade='C';break; case 6: grade='D';break; default:grade='E'; }

cout<<\"score is \"<3.12题

#include using namespace std; int main () {long int num; int

indiv,ten,hundred,thousand,ten_thousand,place;

/*分别代表个位,十位,百位,千位,万位和位数 */

cout<<\"enter an integer(0~99999):\"; cin>>num; if (num>9999) place=5; else if (num>999) place=4; else if (num>99) place=3; else if (num>9) place=2; else place=1;

cout<<\"place=\"<//计算各位数字

ten_thousand=num/10000;

thousand=(int)(num-ten_thousand*10000)/1000;

hundred=(int)(num-ten_thousand*10000-thousand*1000)/100;

ten=(int)(num-ten_thousand*10000-thousand*1000-hundred*100)/10;

indiv=(int)(num-ten_thousand*10000-thousand*1000-hundred*100-ten*10); cout<<\"original order:\"; switch(place) {case

5:cout<cout<4:cout<cout<3:cout<case 2:cout<6 / 75

case 1:cout<cout<<\"reverse order:\"; cout<return 0; } 3.13题

#include using namespace std; int main ()

{ long i; //i为利润 float

bonus,bon1,bon2,bon4,bon6,bon10; bon1=100000*0.1; //利润为10万元时的奖金

bon2=bon1+100000*0.075; //利润为20万元时的奖金

bon4=bon2+100000*0.05; //利润为40万元时的奖金

bon6=bon4+100000*0.03; //利润为60万元时的奖金

bon10=bon6+400000*0.015; //利润为100万元时的奖金 cout<<\"enter i:\"; cin>>i;

if (i<=100000)

bonus=i*0.1; //利润在10万元以内按10%提成奖金 else if (i<=200000)

bonus=bon1+(i-100000)*0.075; //利润在10万元至20万时的奖金 else if (i<=400000)

bonus=bon2+(i-200000)*0.05; //利润在20万元至40万时的奖金 else if (i<=600000)

bonus=bon4+(i-400000)*0.03; //利润在40万元至60万时的奖金 else if (i<=1000000)

bonus=bon6+(i-600000)*0.015; //利润在60万元至100万时的奖金 else

bonus=bon10+(i-1000000)*0.01; //利润在100万元以上时的奖金

cout<<\"bonus=\"<3.13题另一解

#include using namespace std; int main () {long i;

float bonus,bon1,bon2,bon4,bon6,bon10; int c;

bon1=100000*0.1;

bon2=bon1+100000*0.075; bon4=bon2+200000*0.05; bon6=bon4+200000*0.03; bon10=bon6+400000*0.015; cout<<\"enter i:\"; cin>>i;

c=i/100000; if (c>10) c=10; switch(c)

{case 0: bonus=i*0.1; break;

case 1: bonus=bon1+(i-100000)*0.075; break; case 2: case3:

bonus=bon2+(i-200000)*0.05;break; case 4: case5:

bonus=bon4+(i-400000)*0.03;break; case 6: case 7: case 8:

case 9: bonus=bon6+(i-600000)*0.015; break;

case 10: bonus=bon10+(i-1000000)*0.01; }

cout<<\"bonus=\"<3.14题

#include using namespace std; int main () {int t,a,b,c,d;

7 / 75

cout<<\"enter four numbers:\"; cin>>a>>b>>c>>d; cout<<\"a=\"<b)

{t=a;a=b;b=t;} if (a>c)

{t=a; a=c; c=t;} if (a>d)

{t=a; a=d; d=t;} if (b>c)

{t=b; b=c; c=t;} if (b>d)

{t=b; b=d; d=t;} if (c>d)

{t=c; c=d; d=t;}

cout<<\"the sorted sequence:\"<cout<3.15题

#include using namespace std; int main ()

{int p,r,n,m,temp;

cout<<\"please enter two positive integer numbers n,m:\"; cin>>n>>m;

if (nm=temp; //把大数放在n中, 小数放在m中 }

p=n*m; //先将n和m的乘积保存在p中, 以便求最小公倍数时用

while (m!=0) //求n和m的最大公约数 {r=n%m; n=m; m=r; }

cout<<\"HCF=\"<cout<<\"LCD=\"<

3.16题

#include using namespace std; int main () {char c;

int letters=0,space=0,digit=0,other=0; cout<<\"enter one line::\"<{if (c>='a' && c<='z'||c>='A' && c<='Z') letters++; else if (c==' ') space++;

else if (c>='0' && c<='9') digit++; else other++; }

cout<<\"letter:\"<space:\"<#include using namespace std; int main ()

{int a,n,i=1,sn=0,tn=0; cout<<\"a,n=:\"; cin>>a>>n; while (i<=n)

{tn=tn+a; //赋值后的tn为i个a组成数的值

sn=sn+tn; //赋值后的sn为多项式前i项之和 a=a*10; ++i; }

8 / 75

cout<<\"a+aa+aaa+...=\"<#include using namespace std; int main () {float s=0,t=1; int n;

for (n=1;n<=20;n++) {

t=t*n; // 求n!

s=s+t; // 将各项累加 }

cout<<\"1!+2!+...+20!=\"<3.19题

#include using namespace std; int main () {int i,j,k,n;

cout<<\"narcissus numbers are:\"<if (n == i*i*i + j*j*j + k*k*k) cout<cout<#include using namespace std; int main()

{const int m=1000; // 定义寻找范围

int k1,k2,k3,k4,k5,k6,k7,k8,k9,k10; int i,a,n,s;

for (a=2;a<=m;a++) // a是2~1000之间的整数,检查它是否为完数

{n=0; // n用来累计a的因子的个数

s=a; // s用来存放尚未求出的因子之和,开始时等于a

for (i=1;iif (a%i==0) // 如果i是a的因子 {n++; // n加1,表示新找到一个因子 s=s-i; // s减去已找到的因子,s的新值是尚未求出的因子 之和 switch(n) // 将找到的因子赋给k1,...,k10 {case 1: k1=i; break; // 找出的笫1个因子赋给k1 case 2: k2=i; break; // 找出的笫2个因子赋给k2 case 3: k3=i; break; // 找出的笫3个因子赋给k3 case 4: k4=i; break; // 找出的笫4个因子赋给k4 case 5: k5=i; break; // 找出的笫5个因子赋给k5 case 6: k6=i; break; // 找出的笫6个因子赋给k6 case 7: k7=i; break; // 找出的笫7个因子赋给k7 case 8: k8=i; break; // 找出的笫8个因子赋给k8 case 9: k9=i; break; // 找出的笫9个因子赋给k9 case 10: k10=i; break; // 找出的笫

9 / 75

10个因子赋给k10

} }

if (s==0) // s=0表示全部因子都已找到了

{cout<if (n>1) cout<1表示a至少有2个因子

if (n>2) cout<<\// n>2表示至少有3个因子,故应再输出一个因子 if (n>3) cout<<\// n>3表示至少有4个因子,故应再输出一个因子 if (n>4) cout<<\ // 以下类似

if (n>5) cout<<\ if (n>6) cout<<\ if (n>7) cout<<\ if (n>8) cout<<\ if (n>9) cout<<\ cout<return 0; }

3.20题另一解

#include using namespace std; int main() {int m,s,i;

for (m=2;m<1000;m++) {s=0;

for (i=1;iif ((m%i)==0) s=s+i; if(s==m)

{cout<if (m%i==0) cout<return 0; }

3.20题另一解

#include using namespace std; int main() {int k[11]; int i,a,n,s;

for (a=2;a<=1000;a++) {n=0; s=a;

for (i=1;ik[n]=i; // 将找到的因子赋给k[1]┅k[10] } if (s==0)

{cout<return 0; }

3.21题

#include using namespace std; int main()

{int i,t,n=20;

double a=2,b=1,s=0; for (i=1;i<=n;i++) {s=s+a/b; t=a;

a=a+b; // 将前一项分子与分母之和作为下一项的分子

b=t; // 将前一项的分子作为下一项的分母 }

cout<<\"sum=\"<3.22题

#include using namespace std; int main()

{int day,x1,x2; day=9; x2=1;

while(day>0)

{x1=(x2+1)*2; // 第1天的桃子数是第2天桃子数加1后的2倍 x2=x1; day--; }

cout<<\"total=\"<3.23题

#include #include using namespace std; int main()

{float a,x0,x1;

cout<<\"enter a positive number:\"; cin>>a; // 输入a的值 x0=a/2;

x1=(x0+a/x0)/2; do

{x0=x1;

x1=(x0+a/x0)/2; }

while(fabs(x0-x1)>=1e-5);

cout<<\"The square root of \"<3.24题

#include using namespace std; int main() {int i,k;

for (i=0;i<=3;i++) // 输出上面

10 / 75

4行*号

{for (k=0;k<=2*i;k++)

cout<<\"*\"; // 输出*号 cout<for (i=0;i<=2;i++) // 输出下面3行*号

{for (k=0;k<=4-2*i;k++)

cout<<\"*\"; // 输出*号 cout<3.25题

#include using namespace std; int main()

{char i,j,k; /* i是a的对手;j是b的对手;k是c的对手*/ for (i='X';i<='Z';i++) for (j='X';j<='Z';j++) if (i!=j)

for (k='X';k<='Z';k++) if (i!=k && j!=k) if (i!='X' && k!='X' && k!='Z') cout<<\"A--\"<第四章

4.1题

#include using namespace std; int main()

{int hcf(int,int); int lcd(int,int,int); int u,v,h,l;

cin>>u>>v; h=hcf(u,v);

cout<<\"H.C.F=\"<cout<<\"L.C.D=\"<int hcf(int u,int v) {int t,r; if (v>u)

{t=u;u=v;v=t;}

while ((r=u%v)!=0) {u=v; v=r;} return(v); }

int lcd(int u,int v,int h) {return(u*v/h);

}

4.2题

#include #include using namespace std; float x1,x2,disc,p,q; int main()

{void greater_than_zero(float,float); void equal_to_zero(float,float); void smaller_than_zero(float,float); float a,b,c;

cout<<\"input a,b,c:\"; cin>>a>>b>>c; disc=b*b-4*a*c;

cout<<\"root:\"<0) {

greater_than_zero(a,b);

cout<<\"x1=\"<else if (disc==0)

{equal_to_zero(a,b);

11 / 75

cout<<\"x1=\"<{smaller_than_zero(a,b);

cout<<\"x1=\"<return 0; }

void greater_than_zero(float a,float b) /* 定义一个函数,用来求disc>0时方 程的根 */

{x1=(-b+sqrt(disc))/(2*a); x2=(-b-sqrt(disc))/(2*a); }

void equal_to_zero(float a,float b) /* 定义一个函数,用来求disc=0时方程 的根 */ {

x1=x2=(-b)/(2*a); }

void smaller_than_zero(float a,float b) /* 定义一个函数,用来求disc<0时方 程的根 */ {

p=-b/(2*a);

q=sqrt(-disc)/(2*a); }

4.3题

#include using namespace std; int main()

{int prime(int); /* 函数原型声明 */ int n;

cout<<\"input an integer:\"; cin>>n; if (prime(n))

cout<cout<int prime(int n) {int flag=1,i;

for (i=2;i4.4题

#include using namespace std; int main()

{int fac(int); int a,b,c,sum=0; cout<<\"enter a,b,c:\"; cin>>a>>b>>c;

sum=sum+fac(a)+fac(b)+fac(c);

cout<int fac(int n) {int f=1;

for (int i=1;i<=n;i++) f=f*i; return f; } 4.5题

#include #include using namespace std; int main()

{double e(double); double x,sinh; cout<<\"enter x:\"; cin>>x;

sinh=(e(x)+e(-x))/2;

12 / 75

cout<<\"sinh(\"<double e(double x) {return exp(x);}

4.6题

#include #include using namespace std; int main() {double

solut(double ,double ,double ,double ); double a,b,c,d;

cout<<\"input a,b,c,d:\"; cin>>a>>b>>c>>d;

cout<<\"x=\"<double solut(double a,double b,double c,double d)

{double x=1,x0,f,f1; do {x0=x;

f=((a*x0+b)*x0+c)*x0+d; f1=(3*a*x0+2*b)*x0+c; x=x0-f/f1; }

while(fabs(x-x0)>=1e-5); return(x); }

4.7题

#include #include using namespace std; int main()

{void godbaha(int); int n;

cout<<\"input n:\"; cin>>n;

godbaha(n); return 0; }

void godbaha(int n) {int prime(int); int a,b;

for(a=3;a<=n/2;a=a+2) {if(prime(a)) {b=n-a;

if (prime(b))

cout<int prime(int m) {int i,k=sqrt(m); for(i=2;i<=k;i++) if(m%i==0) break; if (i>k) return 1; else return 0; }

4.8题

#include using namespace std; int main() {int x,n;

float p(int,int);

cout<<\"input n & x:\"; cin>>n>>x;

cout<<\"n=\"<float p(int n,int x) {if (n==0) return(1); else if (n==1) return(x); else

13 / 75

return(((2*n-1)*x*p((n-1),x)-(n-1)*p((n-2),x))/n); }

4.9题

#include using namespace std; int main()

{void hanoi(int n,char one,char two,char three); int m;

cout<<\"input the number of diskes:\"; cin>>m;

cout<<\"The steps of moving \"<hanoi(m,'A','B','C'); return 0; }

void hanoi(int n,char one,char two,char three) //将n个盘从one座借助two座,移到three座

{void move(char x,char y); if(n==1) move(one,three); else

{hanoi(n-1,one,three,two); move(one,three);

hanoi(n-1,two,one,three); } }

void move(char x,char y) {cout<\"<#include using namespace std; int main()

{void convert(int n); int number;

cout<<\"input an integer:\"; cin>>number;

cout<<\"output:\"<number=-number; }

convert(number); cout<void convert(int n) {int i; char c;

if ((i=n/10)!=0) convert(i); c=n%10+'0'; cout<<\" \"<4.11题

#include using namespace std; int main() {int f(int); int n,s;

cout<<\"input the number n:\"; cin>>n; s=f(n);

cout<<\"The result is \"<int f(int n) {;

if (n==1) return 1; else

return (n*n+f(n-1)); }

4.12题

#include #include using namespace std;

#define S(a,b,c) (a+b+c)/2

14 / 75

#define AREA(a,b,c) sqrt(S(a,b,c)*(S(a,b,c)-a)*(S(a,b,c)-b)*(S(a,b,c)-c))

int main() {float a,b,c;

cout<<\"input a,b,c:\"; cin>>a>>b>>c;

if (a+b>c && a+c>b && b+c>a)

cout<<\"area=\"<cout<<\"It is not a triangle!\"<4.14题

#include using namespace std;

//#define LETTER 1 int main() {char c; cin>>c;

#if LETTER if(c>='a' && c<='z') c=c-32;

#else if(c>='A' && c<='Z') c=c+32; #endif

cout<4.15题

#include using namespace std; #define CHANGE 1 int main() {char ch[40];

cout<<\"input text:\"<{for (int i=0;i<40;i++) {if (ch[i]!='\\0')

if (ch[i]>='a'&& ch[i]<'z'||ch[i]>'A'&&

ch[i]<'Z')

ch[i]+=1;

else if (ch[i]=='z'||ch[i]=='Z') ch[i]-=25; } } #endif

cout<<\"output:\"<4.16题file

#include using namespace std; int a; int main()

{extern int power(int); int b=3,c,d,m;

cout<<\"enter an integer a and its power m:\"<>a>>m; c=a*b;

cout<cout<4.16题file extern int a; int power(int n) {int i,y=1;

for(i=1;i<=n;i++) y*=a; return y; }

第五章

5.1题

#include #include using namespace std; #include int main()

15 / 75

{int i,j,n,a[101]; for (i=1;i<=100;i++) a[i]=i; a[1]=0;

for (i=2;ifor (i=1,n=0;i<=100;i++) {if (a[i]!=0)

{cout<{cout<5.2题

#include using namespace std; //#include int main()

{int i,j,min,temp,a[11];

cout<<\"enter data:\"<cin>>a[i]; //输入10个数 }

cout<cout<cout<for (i=1;i<=9;i++) //以下8行是对10个数排序 {min=i;

for (j=i+1;j<=10;j++)

if (a[min]>a[j]) min=j;

temp=a[i]; //以下3行将a[i+1]~a[10]中最小者与a[i] 对换 a[i]=a[min]; a[min]=temp; }

cout<for (i=1;i<=10;i++) // 输出已排好序的10个数 cout<#include using namespace std; int main()

{int a[3][3],sum=0; int i,j;

cout<<\"enter data:\"<>a[i][j]; for (i=0;i<3;i++) sum=sum+a[i][i];

cout<<\"sum=\"<5.4题

#include using namespace std; int main()

{int a[11]={1,4,6,9,13,16,19,28,40,100}; int num,i,j;

cout<<\"array a:\"<cout<<\"insert data:\"; cin>>num; if (num>a[9]) a[10]=num;

16 / 75

else

{for (i=0;i<10;i++) {if (a[i]>num)

{for (j=9;j>=i;j--) a[j+1]=a[j]; a[i]=num; break; } } }

cout<<\"Now, array a:\"<5.5题

#include using namespace std; int main()

{ const int n=5; int a[n],i,temp;

cout<<\"enter array a:\"<>a[i];

cout<<\"array a:\"<for (i=0;icout<5.6题

#include #include

using namespace std; int main()

{const int n=11; int i,j,a[n][n]; for (i=1;ifor (i=3;ifor (j=2;j<=i-1;j++)

a[i][j]=a[i-1][j-1]+a[i-1][j]; for (i=1;icout<cout<5.7题

#include using namespace std; int main()

{ const int n=4,m=5; //假设数组为4行5列

int i,j,a[n][m],max,maxj; bool flag;

for (i=0;i>a[i][j];

for (i=0;ifor (j=0;jmax) {max=a[i][j]; //将本行的最大数存放在max中 maxj=j; //将最大数所在的列号存放在maxj中 }

flag=true; //先假设是鞍点,以flag为真代表

for (int k=0;ka[k][maxj]) //将最大数和其

17 / 75

同列元素相比 {flag=false; //如果max不是同列最小,表示不是鞍点令flag1为 假 continue;} if(flag) //如果flag1为真表示是鞍点 {cout<<\"a[\"<//输出鞍点的值和所在行列号 break; } }

if(!flag) //如果flag为假表示鞍点不存在

cout<<\"It does not exist!\"<5.8题

#include using namespace std; int main()

{ const int n=7;

int i,number,top,bott,mid,loca,a[n]; bool flag=true,sign; char c;

cout<<\"enter data:\"<>a[0]; i=1;

while(i>a[i];

if (a[i]>=a[i-1]) i++; else

cout<<\"enter this data again:\"; }

cout<{cout<<\"input number to look for:\";

cin>>number; sign=false;

top=0; //top是查找区间的起始位置

bott=n-1; //bott是查找区间的最末位置

if ((numbera[n-1])) //要查的数不在查找区间内

loca=-1; // 表示找不到 while ((!sign) && (top<=bott)) {mid=(bott+top)/2; if (number==a[mid]) {loca=mid;

cout<<\"Find \"<else if (numbertop=mid+1; }

if(!sign||loca==-1) cout<cout<<\"continu or not(Y/N)?\"; cin>>c;

if (c=='N'||c=='n') flag=false; }

return 0; }

5.9题

#include using namespace std; int main()

{int sum_day(int,int); int leap(int year);

int year,month,day,days=0;

cout<<\"input date(year,month,day):\"; cin>>year>>month>>day;

cout<days=sum_day(month,day); /* 调用函数一

18 / 75

*/ else if (text[i][j]>='a' && if(leap(year) && month>=3) text[i][j]<='z')

lower++; /* 调用函数二

*/ else if (text[i][j]>='0' && days=days+1; text[i][j]<='9') cout<<\" is the \"<cout<<\"upper case:\"<{int i; cout<<\"lower case:\"< using namespace std; int leap(int year) //int main()

{ char a[5]={'*','*','*','*','*'}; 判断是否为闰年

{int leap; int i,j,k; char space=' '; leap=year%4==0&&year%100!=0||year%400 for (i=0;i<5;i++) // 输出5==0; 行 return(leap); { cout< for (j=1;j<=i;j++) using namespace std; cout<='A'&& text[i][j]<='Z') 5.11题另一解 upper++; #include

19 / 75

#include 5.12题另一解 using namespace std; #include int main()

using namespace std; { string stars=\"*****\"; int main() int i,j;

{int j,n;

for (i=0;i<5;i++) // 输出5 char ch[80];

cout<<\"input cipher code:\"; { cout<<\" \"; // 每行 gets(ch);

前面留4个空格 cout<<\"cipher code:\"<j=0;

cout<<\" \"; // 每行 while (ch[j]!='\\0')

再插入i个空格

{ if ((ch[j]>='A') && (ch[j]<='Z')) cout<个*号 else if ((ch[j]>='a') && (ch[j]<='z')) } ch[j]=219-ch[j]; return 0; else

}

ch[j]=ch[j]; 5.12题

j++; #include } using namespace std; n=j;

int main() cout<<\"original text:\"; {int j,n;

for (j=0;jputchar(ch[j]); cout<<\"input cipher code:\"; cout<return 0; cout<<\"cipher code:\"<while (ch[j]!='\\0')

{ if ((ch[j]>='A') && (ch[j]<='Z')) 5.12另一解 tran[j]=155-ch[j];

#include else if ((ch[j]>='a') && (ch[j]<='z')) #include tran[j]=219-ch[j]; using namespace std; else

int main() tran[j]=ch[j]; {int j;

j++; string ch=\"I will visit China } week.\ n=j;

tran=ch;

cout<<\"original text:\"; cout<<\"cipher code:\"<putchar(tran[j]); while (j<=ch.size())

cout<='A') && (ch[j]<='Z')) return 0; tran[j]=155-ch[j];

} else if ((ch[j]>='a') && (ch[j]<='z'))

tran[j]=219-ch[j];

20 / 75

next

else tran[j]=ch[j]; j++; }

cout<<\"original text:\"; cout<5.12另一解 #include #include using namespace std; int main() {int j;

string ch=\"I will visit China next week.\"; cout<<\"cipher code:\"<while (j<=ch.size())

{ if ((ch[j]>='A') && (ch[j]<='Z')) ch[j]=155-ch[j];

else if ((ch[j]>='a') && (ch[j]<='z')) ch[j]=219-ch[j]; j++; }

cout<<\"original text:\"; cout< #include using namespace std; int main() {int j;

string ch=\"I will visit China next week.\"; cout<<\"cipher code:\"<while (j<=ch.size())

{ if ((ch[j]>='A') && (ch[j]<='Z')) ch[j]=155-ch[j];

else if ((ch[j]>='a') && (ch[j]<='z'))

ch[j]=219-ch[j]; j++; }

cout<<\"original text:\"; cout<5.13题

#include #include using namespace std; int main()

{char s1[80],s2[40]; int i=0,j=0;

cout<<\"input string1:\"; cin>>s1;

cout<<\"input string2:\"; cin>>s2;

while (s1[i]!='\\0') i++;

while(s2[j]!='\\0') s1[i++]=s2[j++]; s1[i]='\\0';

cout<<\"The new string is:\"<5.13另一解

#include using namespace std; int main()

{char s1[80],s2[40];

cout<<\"input string1:\"; cin>>s1;

cout<<\"input string2:\"; cin>>s2; strcat(s1,s2);

cout<<\"The new string is:\"<5.13另一解

#include

21 / 75

#include using namespace std; int main()

{ string s1=\"week\ cout<<\"s1=\"<cout<<\"The new string is:\"<5.14题

#include #include using namespace std; int main()

{ const int n=5; int i,j;

string str[n],temp;

cout<<\"please input strings:\"<>str[i]; for(i=0;istr[j+1])

{temp=str[j];str[j]=str[j+1];str[j+1]=temp;} cout<5.15题

#include #include using namespace std; int main()

{ const int n=5; string str;

for(int i=0;i{cout<<\"please input string:\";

cin>>str; if(str[0]=='A') cout<5.16题

#include using namespace std; int main() { const n=10; int i;

char a[n],temp;

cout<<\"please input a string:\"; for(i=0;i>a[i]; for(i=0;i{temp=a[i];a[i]=a[n-i-1];a[n-i-1]=temp;} for(i=0;i5.16题另一解 #include #include using namespace std; int main() { string a; int i,n; char temp;

cout<<\"please input a string:\"; cin>>a; n=a.size();

for(i=0;i{temp=a[i];a[i]=a[n-i-1];a[n-i-1]=temp;} cout<22 / 75

5.17题

#include #include using namespace std; const int n=10; string name[n]; int num[n],score[n]; int main() {int i;

void input_data(); input_data();

cout<cout<void input_data() {int i;

for (i=0;i{cout<<\"input name,number and score of student \"<cin>>name[i]>>num[i]>>score[i];} }

input_data();

cout<cout<void input_data() {int i;

for (i=0;i{cout<<\"input name,number and score of student \"<cin>>name[i]>>num[i]>>score[i];} }

6.2题

#include #include using namespace std; int main()

{void swap(char *,char *);

char str1[20],str2[20],str3[20]; cout<<\"input three line:\"<if(strcmp(str1,str2)>0) swap(str1,str2); if(strcmp(str1,str3)>0) swap(str1,str3); if(strcmp(str2,str3)>0) swap(str2,str3); cout<cout<void swap(char *p1,char *p2) /* 交换两个字符串 */ {char p[20];

strcpy(p,p1);strcpy(p1,p2);strcpy(p2,p); }

6.2题另一解

#include

第六章

6.1题

#include #include using namespace std; const int n=10; string name[n]; int num[n],score[n]; int main() {int i;

void input_data();

23 / 75

#include void input(int *number) using namespace std; // 输入10个数的函数 int main() {int i; {void change(string &,string &); cout<<\"input 10 numbers:\"; string str1=\" \ for (i=0;i<10;i++) str2=\" \ cin>>number[i]; str3=\" \"; } char *p1=&str1[0],*p2=&str2[0],*p3=&str3[0]; void max_min_value(int *number) cout<<\"input three line:\"<str2)change(str1,str2); if (*p>*max) max=p; if(str1>str3)change(str1,str3); // 将大数地址赋给 max if(str2>str3)change(str2,str3); else if (*p<*min) min=p; cout<void change(string &st1,string &st2) temp=number[9];number[9]=*max;*max=te /* 交换两个字符串 */ {string st;

st=st1;st1=st2;st2=st; }

mp; // 将最小数与第一数交换 } void output(int *number) // 输出函数 {int *p; 6.3题

#include cout<<\"now,they are: \"; using namespace std; for (p=number;pinput(number); #include

using namespace std; // 调用输入10个数的函数

max_min_value(number); int main()

{void move(int *array,int n,int m); // 调用交换函数

output(number); int number[20],n,m,i;

cout<<\"how many numbers?\"; // 调用输出函数

return 0; // 询问共有多少个数 } cin>>n; cout<<\"input \"<24 / 75

// 要求输入n个数 for (i=0;i>number[i];

cout<<\"how many places do you want while (m{if (*(p+i)!=0) k++;

move?\"; // 询问后移多少个位置 if (k==3) // 将退出的人的 cin>>m; 编号置为0 move(number,n,m); {*(p+i)=0;

k=0; //调用move 函数

cout<<\"Now,they are:\"<void move(int *array,int n,int m) cout<<\"The last one is NO.\"<<*p<return 0; //使循环后移一次的函数

{int *p,array_end; } array_end=*(array+n-1); 6.6题 for (p=array+n-1;p>array;p--) #include *p=*(p-1); using namespace std; *array=array_end; int main() m--; {int length(char *p);

int len; if (m>0) move(array,n,m); //递归调用,当循

char str[20]; 环次数m减至为0时,停止调用

} cout<<\"input string:\"; cin>>str;

len=length(str); 6.5题

#include cout<<\"The length of string is using namespace std; \"<>n; 长度的函数 p=num; {int n; for (i=0;iwhile (*p!='\\0') *(p+i)=i+1; // 以1至n为序

{n++; 给每个人编号

p++; i=0; // i为每次循环

} 时计数变量

return(n); k=0; // k为按1,2,3

} 报数时的计数变量

m=0; // m为退出人

数 6.7题

25 / 75

#include while ((s[i]=getchar())!='\\n') i++; using namespace std; p=&s[0]; int main() while (*p!='\\n') {void copystr(char *,char *,int); {if (('A'<=*p) && (*p<='Z')) int m; ++upper; char str1[20],str2[20]; else if (('a'<=*p) && (*p<='z')) cout<<\"input string:\"; ++lower; gets(str1); else if (*p==' ') cout<<\"which character do you want begin ++space; to copy?\"; else if ((*p<='9') && (*p>='0')) cin>>m; ++digit; if (strlen(str1)//字符串部分复制函数*/

{int n; 6.9题 n=0; #include while (n>a[i][0]>>a[i][1]>>a[i][2]; p2++; p=&a[0][0]; } move(p); *p2='\\0'; cout<<\"Now,matrix:\"<cout<#include \"<26 / 75

for (j=i;j<3;j++) temp=*(p+12); //将最大 {t=*(pointer+3*i+j); 值与中心元素互换 *(pointer+3*i+j)=*(pointer+3*j+i); *(p+12)=*pmax; *(pointer+3*j+i)=t; *pmax=temp; } } temp=*p; //将最小值 与左上角元素互换

*p=*pmin; 6.10题

#include *pmin=temp; using namespace std; int main() pmin=p+1; {void change(int *p); //将a[0][1]的地址赋给pmin,从该位置 int a[5][5],*p,i,j; 开始找最小的元素 cout<<\"input matrix:\"<for (j=0;j<5;j++) //输入矩阵

for (j=0;j<5;j++) if (((p+5*i+j)!=p) && (*pmin > cin>>a[i][j]; *(p+5*i+j))) pmin=p+5*i+j;

p=&a[0][0]; temp=*pmin; //将第二最//使p指向0行0列元素 小值与右上角元素互换 change(p); *pmin=*(p+4);

*(p+4)=temp; //调用函数,实现交换

cout<<\"Now,matrix:\"<cout<return 0; }

void change(int *p) //交换函数 {int i,j,temp;

int *pmax,*pmin; pmax=p; pmin=p;

for (i=0;i<5;i++) //找最大值和最小值的地址,并赋给 pmax,pmin for (j=i;j<5;j++)

{if (*pmax<*(p+5*i+j)) pmax=p+5*i+j; if (*pmin>*(p+5*i+j)) pmin=p+5*i+j; }

for (i=0;i<5;i++) //找第三最小值的地址赋给pmin for (j=0;j<5;j++)

if(((p+5*i+j)!=(p+4)) && ((p+5*i+j)!=p) &&(*pmin>*(p+5*i+j))) pmin=p +5*i+j;

temp=*pmin; // 将第三最小值与左下角元素互换 *pmin=*(p+20); *(p+20)=temp;

pmin=p+1;

for (i=0;i<5;i++) // 找第四最小值的地址赋给pmin */ for (j=0;j<5;j++)

if (((p+5*i+j)!=p) &&((p+5*i+j)!=(p+4)) && ((p+5*i+j)!=(p+20)) && (*pmin>*(p+5*i+j))) pmin=p+5*i+j;

temp=*pmin; //将第四最小

27 / 75

值与右下角元素互换 *pmin=*(p+24); *(p+24)=temp; }

6.10题另一解

#include using namespace std; int main()

{void change(int *p); int a[5][5],*p,i,j;

cout<<\"input matrix:\"<*(p+12)=*pmax; *pmax=temp;

temp=*p; //将最小值与左上角元素互换 *p=*pmin; *pmin=temp;

pmin=p+1;

//将a[0][1]的地址赋给pmin,从该位置开始找最小的元素

for (i=0;i<5;i++) //找第二最小值

(i=0;i<5;i++) 的地址赋给 pmin

for (j=0;j<5;j++) //输入矩阵

for (j=0;j<5;j++) {if(i==0 && j==0) continue; cin>>a[i][j]; if (*pmin > *(p+5*i+j)) pmin=p+5*i+j; p=&a[0][0]; } //使p指向0行0列元素

change(p); //调用函数,实现交换

cout<<\"Now,matrix:\"<for (i=0;i<5;i++) //输出已交换的矩阵 {for (j=0;j<5;j++)

cout<return 0; }

void change(int *p) //交换函数 {int i,j,temp;

int *pmax,*pmin; pmax=p; pmin=p;

for (i=0;i<5;i++) //找最大值和最小值的地址,并赋给 pmax,pmin for (j=i;j<5;j++)

{if (*pmax<*(p+5*i+j)) pmax=p+5*i+j; if (*pmin>*(p+5*i+j)) pmin=p+5*i+j; }

temp=*(p+12); //将最大值与中心元素互换

temp=*pmin; //将第二最小值与右上角元素互换 *pmin=*(p+4); *(p+4)=temp;

pmin=p+1;

for (i=0;i<5;i++) //找第三最小值的地址赋给pmin for (j=0;j<5;j++) {if((i==0 && j==0) ||(i==0 && j==4)) continue; if(*pmin>*(p+5*i+j)) pmin=p+5*i+j; } temp=*pmin; // 将第三最小值与左下角元素互换 *pmin=*(p+20); *(p+20)=temp;

pmin=p+1;

for (i=0;i<5;i++) // 找第四最小值的地址赋给pmin for (j=0;j<5;j++) {if ((i==0 && j==0) ||(i==0 && j==4)||(i==4 && j==0)) continue; if (*pmin>*(p+5*i+j)) pmin=p+5*i+j; }

temp=*pmin; //将第四最小

28 / 75

值与右下角元素互换 *pmin=*(p+24); *(p+24)=temp; }

6.11题

#include using namespace std; int main()

{void sort(char s[][6]); int i;

char str[10][6];

cout<<\"input 10 strings:\"<>str[i]; sort(str);

cout<<\"Now,the sequence is:\"<cout<void sort(char s[][6]) {int i,j;

char *p,temp[10]; p=temp;

for (i=0;i<9;i++) for (j=0;j<9-i;j++)

if (strcmp(s[j],s[j+1])>0) {strcpy(p,s[j]);

strcpy(s[j],s[+j+1]); strcpy(s[j+1],p); } }

6.11题另一解

#include using namespace std; int main()

{void sort(char (*p)[6]); int i;

char str[10][6]; char (*p)[6];

cout<<\"input 10 strings:\"<>str[i];

p=str; sort(p);

cout<<\"Now,the sequence is:\"<void sort(char (*s)[6]) {int i,j;

char temp[6],*t=temp; for (i=0;i<9;i++) for (j=0;j<9-i;j++)

if (strcmp(s[j],s[j+1])>0) {strcpy(t,s[j]);

strcpy(s[j],s[+j+1]); strcpy(s[j+1],t); } }

6.11题另一解

#include #include using namespace std; int main()

{void sort(string *); int i;

string str[10],*p=str;

cout<<\"input 10 strings:\"<>str[i]; sort(p);

cout<<\"Now,the sequence is:\"<void sort(string *s) {int i,j;

string temp; for (i=0;i<9;i++) for (j=0;j<9-i;j++) if (s[j]>s[j+1]) {temp=s[j];

29 / 75

s[j]=s[+j+1]; s[j+1]=temp; } }

6.12题

#include using namespace std; int main()

{void sort(char *[]); int i;

char *p[10],str[10][20]; for (i=0;i<10;i++)

p[i]=str[i]; //将第i个字符串的首地址赋予指针数组p的第i个元素 cout<<\"input 10 strings:\"<>p[i]; sort(p);

cout<<\"Now,the sequence is:\"<void sort(char *s[]) {int i,j;

char *temp; for (i=0;i<9;i++) for (j=0;j<9-i;j++)

if (strcmp(*(s+j),*(s+j+1))>0) {temp=*(s+j); *(s+j)=*(s+j+1); *(s+j+1)=temp; } }

6.13题

#include #include using namespace std; int main()

{float integral(float (*p)(float),float a,float b,int n);

float a1,b1,a2,b2,a3,b3,c,(*p)(float);

float fsin(float); // 对fsin

函数作声明

float fcos(float); // 对fcos函数作声明

float fexp(float); // 对fexp函数作声明 int n=20;

cout<<\"input a1,b1:\"; //输入求sin(x) 定积分的下限和上限 cin>>a1>>b1;

cout<<\"input a2,b2:\"; // 输入求cos(x) 定积分的下限和上限 cin>>a2>>b2;

cout<<\"input a3,b3:\"; // 输入求#include cin>>a3>>b3; p=fsin;

c=integral(p,a1,b1,n); // 求出sin(x)的定积分

cout<<\"The integral of sin(x) is :\"<c=integral(p,a2,b2,n); // 求出cos(x)的 定积分

cout<<\"The integral of cos(x) is :\"<c=integral(p,a3,b3,n); // 求出 的定积分

cout<<\"The integral of exp(x) is :\"<float integral(float (*p)(float),float a,float b,int n)

//用矩形法求定积分的通用函数 {int i;

float x,h,s; h=(b-a)/n; x=a; s=0;

for (i=1;i<=n;i++) {x=x+h;

s=s+(*p)(x)*h; }

return(s);

30 / 75

}

float fsin(float x) // 计算sin(x) 的函数 {return sin(x);}

float fcos(float x) // 计算cos(x) 的函数 {return cos(x);}

float fexp(float x) // 计算exp(x)的函数 {return exp(x);}

6.13题

#include #include using namespace std; int main()

{float integral(float (*p)(float),float a,float b,int n);

float a1,b1,a2,b2,a3,b3,c,(*p)(float);

float fsin(float); // 对fsin函数作声明

float fcos(float); // 对fcos函数作声明

float fexp(float); // 对fexp函数作声明 int n=20;

cout<<\"input a1,b1:\"; //输入求sin(x) 定积分的下限和上限 cin>>a1>>b1;

cout<<\"input a2,b2:\"; // 输入求cos(x) 定积分的下限和上限 cin>>a2>>b2;

cout<<\"input a3,b3:\"; // 输入求#include cin>>a3>>b3; p=fsin;

c=integral(p,a1,b1,n); // 求出sin(x)的定积分

cout<<\"The integral of sin(x) is :\"<c=integral(p,a2,b2,n); // 求出cos(x)的 定积分

cout<<\"The integral of cos(x) is :\"<c=integral(p,a3,b3,n); // 求出 的定积分

cout<<\"The integral of exp(x) is :\"<float integral(float (*p)(float),float a,float b,int n)

//用矩形法求定积分的通用函数 {int i;

float x,h,s; h=(b-a)/n; x=a; s=0;

for (i=1;i<=n;i++) {x=x+h;

s=s+(*p)(x)*h; }

return(s); }

float fsin(float x) // 计算sin(x) 的函数 {return sin(x);}

float fcos(float x) // 计算cos(x) 的函数 {return cos(x);}

float fexp(float x) // 计算exp(x)的函数 {return exp(x);}

6.14题

#include using namespace std; int main()

{ void sort (char *p,int m); int i,n;

char *p,num[20]; cout<<\"input n:\";

31 / 75

cin>>n;

cout<<\"please input these numbers:\"<>num[i]; p=&num[0]; sort(p,n);

cout<<\"Now,the sequence is:\"<cout<void sort (char *p,int m) // 将n个数逆序排列函数 {int i;

char temp, *p1,*p2; for (i=0;ip2=p+(m-1-i); temp=*p1; *p1=*p2; *p2=temp; } } 6.15题

#include using namespace std; int main()

{void avsco(float *,float *);

void avcour1(char (*)[10],float *);

void fali2(char course[5][10],int num[],float *pscore,float aver[4]); void good(char course[5][10],int num[4],float *pscore,float aver[4]); int i,j,*pnum,num[4];

float score[4][5],aver[4],*pscore,*paver; char course[5][10],(*pcourse)[10]; cout<<\"input course:\"<>course[i];

cout<<\"input NO. and scores:\"<cout<<\ cout<pscore=&score[0][0]; pnum=&num[0]; for (i=0;i<4;i++) {cin>>*(pnum+i); for (j=0;j<5;j++)

cin>>*(pscore+5*i+j); }

paver=&aver[0];

cout<avsco(pscore,paver); // 求出每个学生的平均成绩

avcour1(pcourse,pscore); // 求出第一门课的平均成绩 cout<fali2(pcourse,pnum,pscore,paver); // 找出两门课不及格的学生 cout<good(pcourse,pnum,pscore,paver); // 找出成绩好的学生 return 0; }

void avsco(float *pscore,float *paver) // 求每个学生的平均成绩的函数 {int i,j;

float sum,average; for (i=0;i<4;i++) {sum=0.0;

for (j=0;j<5;j++)

sum=sum+(*(pscore+5*i+j)); //累计每个学生的各科成绩

average=sum/5; //计算平均成绩

*(paver+i)=average; } } void avcour1(char (*pcourse)[10],float *pscore) // 求第一课程的平均成

32 / 75

绩的函数 {int i;

float sum,average1; sum=0.0;

for (i=0;i<4;i++)

sum=sum+(*(pscore+5*i)); //累计每个学生的得分

average1=sum/4; //计算平均成绩

cout<<\"course 1: \"<<*pcourse<<\score:\"<void fail2(char course[5][10],int num[],float *pscore,float aver[4])

// 找两门以上课程不及格的学生的函数 {int i,j,k,labe1;

cout<<\" ==========Student who failed in two courses ======= \"<cout<for (j=0;j<5;j++)

if (*(pscore+5*i+j)<60.0) labe1++; if (labe1>=2)

{cout<cout<<*(pscore+5*i+k)<<\" \"; cout<<\" \"<void good(char course[5][10],int num[4],float *pscore,float aver[4])

// 找成绩优秀学生(全部课程成绩在85分以上或平均成绩在90分以上)的函数 {int i,j,k,n;

cout<<\" ======Students whose score is good======\"<cout<<\"NO. \"; for (i=0;i<5;i++)

cout<for (j=0;j<5;j++)

if (*(pscore+5*i+j)>85.0) n++; if ((n==5)||(aver[i]>=90)) {cout<cout<<*(pscore+5*i+k)<<\" \"; cout<<\" \"<#include using namespace std; int main()

{char str[50],*pstr;

int i,j,k,m,e10,digit,ndigit,a[10],*pa; cout<<\"input a string:\"<pstr=&str[0]; //字符指针pstr指向数组str首元素

pa=&a[0]; //指针pa指向a数组首元素

ndigit=0; //ndigit代表有多少个整数

i=0; //i代表字符串中的第几个字符/

j=0; //j代表连续数字的位数 while(*(pstr+i)!='\\0')

{if((*(pstr+i)>='0') && (*(pstr+i)<='9')) j++; else {if (j>0)

{digit=*(pstr+i-1)-48; //将个数位赋予digit k=1;

33 / 75

while (kfor (m=1;m<=k;m++)

e10=e10*10; //e10代表该位数所应乘的因子

digit=digit+(*(pstr+i-1-k)-48)*e10; //将该位数的数值累加于digit

k++; //位数k自增 }

*pa=digit; //将数值放在数组a中 ndigit++;

pa++; //指针pa指向a数组下一元素 j=0; } } i++; }

if (j>0) //以数字结尾字符串的最后一个数据

{digit=*(pstr+i-1)-48; //将个数位赋予digit k=1;

while (kfor (m=1;m<=k;m++)

e10=e10*10; //e10代表位数所应乘的因子

digit=digit+(*(pstr+i-1-k)-48)*e10; //将该位数的数值累加于digit k++; /*位数K自增*/ }

*pa=digit; //将数值放到数组a中 ndigit++; j=0; }

printf(\"There are %d numbers in this line. They are:\\n\ j=0;

pa=&a[0];

for (j=0;jcout<<*(pa+j)<6.17题

#include using namespace std; int main()

{int strcmp(char *p1,char *p2); int m;

char str1[20],str2[20],*p1,*p2; cout<<\"input two strings:\"<>str1; cin>>str2; p1=&str1[0]; p2=&str2[0];

m=strcmp(p1,p2);

cout<<\"result:\"<int strcmp(char *p1,char *p2) //自已定义字符串比较函数 {int i; i=0;

while(*(p1+i)==*(p2+i))

if (*(p1+i++)=='\\0') return(0); //全部字符相同时返回结果0

return(*(p1+i)-*(p2+i)); //不相同时返回结果为第一对不相同字符的ASCII码 的差值 }

6.18题

#include using namespace std; int main()

{char *month_name[13]={\"illegal

month\,

34 / 75

\"May\October\

\"November\int n;

cout<<\"input month:\"<>n;

if ((n<=12) && (n>=1))

cout<<\"It is \"<<*(month_name+n)<cout<<\"It is wrong\"<6.19题

#include using namespace std; int main()

{void sort(char **p);

const int m=20; //定义字符串的最大长度 int i;

char **p,*pstr[5],str[5][m]; for (i=0;i<5;i++)

pstr[i]=str[i]; /*将第i个字符串的首地址赋予指针数组 pstr 的第i个元素*/ cout<<\"input 5 strings:\"<>pstr[i]; p=pstr; sort(p);

cout<<\"strings sorted:\"<cout<void sort(char **p) //冒泡法对5个字符串排序函数 {int i,j;

char *temp; for (i=0;i<5;i++) {for (j=i+1;j<5;j++)

{if (strcmp(*(p+i),*(p+j))>0) //比较后交换字符串地址 {temp=*(p+i); *(p+i)=*(p+j); *(p+j)=temp; } } } }

6.20题

#include using namespace std; int main()

{void sort(int **p,int n);

int i,n,data[10],**p,*pstr[10]; cout<<\"input n:\"; cin>>n;

for (i=0;ipstr[i]=&data[i]; /*将第i个整数的地址赋予指针数组 pstr 的第i个元素*/ cout<<\"input \"<>*pstr[i]; p=pstr; sort(p,n);

cout<<\"Now,the sequence is:\"<cout<<*pstr[i]<<\" \"; cout<void sort(int **p,int n) {int i,j,*temp;

for (i=0;i{if (**(p+i)>**(p+j)) //比较后交换整数地址

{temp=*(p+i); *(p+i)=*(p+j); *(p+j)=temp; } 7.1题

35 / 75

#include using namespace std; struct

{ int year; int month; int day; }date; int main() {int days;

cout<<\"input year,month,day:\";

cin>>date.year>>date.month>>date.day; switch(date.month)

{ case 1: days=date.day; break; case 2: days=date.day+31; break; case 3: days=date.day+59; break; case 4: days=date.day+90; break; case 5: days=date.day+120; break; case 6: days=date.day+151; break; case 7: days=date.day+181; break; case 8: days=date.day+212; break; case 9: days=date.day+243; break; case 10: days=date.day+273; break; case 11: days=date.day+304; break; case 12: days=date.day+334; break; }

if ((date.year %4== 0 && date.year % 100 != 0

||date.year % 400 == 0) && date.month >=3) days+=1;

cout<第七章

7.1题另一解

#include using namespace std; struct

{int year;

int month; int day; }date; int main() {int i,days; int

day_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};

cout<<\"input year,month,day:\";

cin>>date.year>>date.month>>date.day; days=0;

for (i=1;i=3) days+=1;

cout<7.2题

#include using namespace std; struct y_m_d {int year; int month; int day; }; int main() {y_m_d date; int days(int,int,int); /* 对days函数的声明 */ int day_sum;

cout<<\"input year,month,day:\";

cin>>date.year>>date.month>>date.day;

day_sum=days(date.year,date.month,date.day);

36 / 75

cout<>stu[i].score[j]; the \"</* 定义days函数 */

{int day_sum,i; void print(student stu[6]) int {int i,j; day_tab[13]={0,31,28,31,30,31,30,31,31,30,3 cout<<\" NO. name score1 1,30,31}; score2 score3\"<=3) \"; day_sum+=1; cout<#include #include using namespace std; const int n=5; struct student { char num[6]; char name[8]; int score[4]; }stu[n]; int main()

{void print(student stu[6]); int i,j;

for (i=0;i>stu[i].num; cout<<\"name: \"; cin>>stu[i].name; for (j=0;j<3;j++)

{cout<<\"score \"<student

7.4题

#include #include using namespace std; const int n=5; struct student { char num[6]; char name[8]; int score[4]; }stu[n]; int main()

{void input(student stu[]); void print(student stu[]); input(stu); print(stu); return 0; }

void input(student stu[]) {int i,j;

for (i=0;iof student

37 / 75

\"<>stu[i].num; cout<<\"name: \"; cin>>stu[i].name; for (j=0;j<3;j++)

{cout<<\"score \"<>stu[i].score[j]; } } }

void print(student stu[]) {int i,j;

cout<<\" NO. name score1 score2 score3\"<{cout<\"<cout<cout<7.5题

#include #include using namespace std; const int n=10; struct student { char num[6]; char name[8]; int score[4]; float avr; } stu[n];

int main()

{ int i,j,max,maxi,sum; float average; for (i=0;i{cout<<\"input scores \"<cout<<\"NO.:\";

of student

cin>>stu[i].num; cout<<\"name:\"; cin>>stu[i].name; for (j=0;j<3;j++)

{cout<<\"score \"<>stu[i].score[j]; } cout<average=0; max=0; maxi=0;

for (i=0;ifor (j=0;j<3;j++)

sum+=stu[i].score[j]; stu[i].avr=sum/3.0; average+=stu[i].avr; if (sum>max) {max=sum; maxi=i; } }

average/=n;

cout<<\" NO. name score1 score2 score3 average\"<{cout<cout<cout<cout<<\"average=\"<7.6题

#include

38 / 75

using namespace std; #define NULL 0 struct student {long num; float score;

struct student *next; };

int main()

{student a,b,c,*head,*p;

a.num=10001; a.score=89.5; b.num=10003; b.score=90;

c.num=10007; c.score=85; //为结点的num和score成员赋值

head=&a; //将结点a的起始地址赋给头指针head

a.next=&b; //将结点b的起始地址赋给a结点的next成员 b.next=&c; //将结点c的起始地址赋给b结点的next成员 c.next=NULL; //c结点的next成员不存放其他结点地址

p=head; //使p指针指向a结点 do

{cout<num<<\" \"<score<student *creat(void) //定义函数。此函数带回一个指向链表头的指针 {student *head; student *p1,*p2; int n=0;

p1=p2=new student; //开辟一个新单元,并使p1,p2指向它 cin>>p1->num>>p1->score; head=NULL;

while(p1->num!=0) {n=n+1;

if(n==1) head=p1; else p2->next=p1; p2=p1;

p1=new student;

cin>>p1->num>>p1->score; }

p2->next=NULL; return(head); }

7.7题

#include using namespace std; #define NULL 0 //输出p指向的结点的数据

p=p->next; struct student

{long num; //使p指向下一结点

}while(p!=NULL); float score;

student *next; //输出完c结点后p的值为NULL

return 0; }; } int n; void print(student *head)

{student *p; 7.6题另一解

#include cout<<\"Now,These \"<num<<\" \"<score<next; }; }while(p!=NULL); //定义n为全局变量,}

本文件模块中各函数均可使用它

39 / 75

7.7题另一解

#include using namespace std; #define NULL 0 struct student {long num; float score; student *next; }; int n;

student *del(student *head,long num) {student *p1,*p2;

if (head==NULL) //是空表

{cout<<\"list null!\"<student *next; };

int n;

student *del(student *head,long num) {student *p1,*p2;

if (head==NULL) //是空表

{cout<<\"list null!\"<p1=head;

//使p1指向第一个结点 while(num!=p1->num && p1->next!=NULL) //p1指向的不是所要找的结点且后面 还有结点 {p2=p1; p1=p1->next;} //p1后移一个结点

if(num==p1->num)

使p1指向第一个结点

while(num!=p1->num && p1->next!=NULL) //找到了 //p1指向的不是所要找的结点且后面还有 {if(p1==head) head=p1->next; //若p1指向结点 的是首结点,把第二个结点地址赋予 {p2=p1; p1=p1->next;} head //p1后移一个结点 else p2->next=p1->next; //否则将下一 if(num==p1->num) 结点地址赋给前一结点地址

cout<<\"delete:\"<n=n-1; {if(p1==head) head=p1->next; //若p1指

} 向的是首结点,把第二个结点地址赋予

head else cout<<\"cannot find \"<next=p1->next; //否则将下一到该结点

return(head); 结点地址赋给前一结点地址

cout<<\"delete:\"<#include else cout<<\"cannot find \"<using namespace std; 不到该结点

return(head); #define NULL 0 } struct student {long num;

float score; 7.8题

#include student*next; using namespace std; }; #define NULL 0 int n; struct student {long num; student *insert(student *head,student *stud) float score; {student *p0,*p1,*p2;

40 / 75

p1=head; //使p1指向第一个结点

p0=stud; //指向要插入的结点

if(head==NULL) //原来的链表是空表

{head=p0;p0->next=NULL;} //使p0指向的结点作为头结点 else

{while((p0->num>p1->num) && (p1->next!=NULL))

{p2=p1; //使p2指向刚才p1指向的结点

p1=p1->next;} //p1后移一个结点

if(p0->num<=p1->num)

{if(head==p1) head=p0; //插到原来第一个结点之前

else p2->next=p0; //插到p2指向的结点之后 p0->next=p1;} else

{p1->next=p0; p0->next=NULL;}} //插到最后的结点之后

n=n+1; //结点数加1 return (head); }

7.10题

#include using namespace std; #define NULL 0 struct student {long num; float score; student *next; }; int n;

int main()

{ student *creat(void);

student *del(student *,long);

student *insert(student *,student *);

void print(student *); student *head,stu; long del_num;

cout<<\"input records:\"<head=creat(); //返回头指针

print(head); //输出全部结点

cout<>del_num; //输入要删除的学号

head=del(head,del_num); //删除后链表的头地址

print(head); //输出全部结点

cout<cin>>stu.num>>stu.score;

head=insert(head,&stu); //返回地址

print(head); //输出全部结点

cout<cin>>stu.num>>stu.score;

head=insert(head,&stu); //返回地址

print(head); return 0; }

student *creat(void) //建立链表的函数

{student *head; student *p1,*p2; n=0;

p1=p2=new student; //开辟一个新单元,并使p1,p2指向它 cin>>p1->num>>p1->score; head=NULL;

while(p1->num!=0) {n=n+1;

if(n==1) head=p1; else p2->next=p1;

41 / 75

p2=p1;

p1=new student;

cin>>p1->num>>p1->score; }

p2->next=NULL; return(head); }

student *del(student *head,long num) //删除结的函数 {student *p1,*p2;

if (head==NULL) //是空表

{cout<<\"list null!\"<while(num!=p1->num && p1->next!=NULL) 来的链表是空表

{head=p0;p0->next=NULL;} //使p0指向的结点作为头结点 else

{while((p0->num>p1->num) && (p1->next!=NULL))

{p2=p1; //使p2指向刚才p1指向的结点

p1=p1->next;} //p1后移一个结点

if(p0->num<=p1->num)

{if(head==p1) head=p0; //插到原来第一个结点之前

else p2->next=p0; //插到p2指向的结点之后*/ p0->next=p1;} else

//p1指向的不是所要找的结点且后面还有 {p1->next=p0; p0->next=NULL;}} //插到结点 最后的结点之后 {p2=p1; p1=p1->next;} n=n+1; //结//p1后移一个结点 点数加1

if(num==p1->num) return (head);

} //找到了

{if(p1==head) head=p1->next; //若p1指向的是首结点,把第二个结点地址赋予

head

else p2->next=p1->next; //否则将下一结点地址赋给前一结点地址 cout<<\"delete:\"<else cout<<\"cannot find \"<student *insert(student *head,student *stud) //插入结点的函数 {student *p0,*p1,*p2;

p1=head; //使p1指向第一个结点

p0=stud; //指向要插入的结点

if(head==NULL) //原

void print(student *head) //输出链表的函数 {student *p;

cout<<\"Now,These \"<if(head!=NULL) do

{cout<num<<\" \"<score<next; }while(p!=NULL); }

7.10题另一解

#include using namespace std; #define NULL 0 struct student {long num; float score;

42 / 75

student *next; }; int n;

int main()

{ student *creat(void);

student *del(student *,long);

student *insert(student *,student *); void print(student *); student *head,*stu; long del_num;

cout<<\"input records:\"<head=creat();

student *creat(void) //建立链表的函数

{student *head; student *p1,*p2; n=0;

p1=p2=new student; //开辟一个新单元,并使p1,p2指向它 cin>>p1->num>>p1->score; head=NULL;

while(p1->num!=0) {n=n+1;

if(n==1) head=p1; else p2->next=p1; //返回头指针

print(head); p2=p1;

p1=new student; //输出全部结点

cout<>p1->num>>p1->score; cin>>del_num; }

p2->next=NULL; //输入要删除的学号

while(del_num!=0) return(head); {head=del(head,del_num); }

//删除后链表的头地址

print(head); student *del(student *head,long num) ////输出全部结点 删除结点的函数 cout<<\"input the deleted number:\"; {student *p1,*p2; cin>>del_num; if (head==NULL) // } 是空表

cout<p1=head; ////输入要插入的结点

stu=new student; 使 p1 指向第一个结点

while(num!=p1->num && p1->next!=NULL) //开辟一个新结点

cin>>stu->num>>stu->score; //p1指向的不是所要找的结点且后面还有 while(stu->num!=0) 结点 {head=insert(head,stu); // {p2=p1; p1=p1->next;} 返回地址 //p1后移一个结点 print(head); if(num==p1->num) //输出全部结点 //找到了

cout<next; //若p1指//输入要插入的结点 向的是首结点,把第二个结点地址赋予 stu=new student; head cin>>stu->num>>stu->score; else p2->next=p1->next; //否则将下一 } 结点地址赋给前一结点地址 return 0; cout<<\"delete:\"<43 / 75

}

else cout<<\"cannot find \"<student *insert(student *head,student *stud) //插入结点的函数 {student *p0,*p1,*p2;

p1=head; //使p1指向第一个结点

p0=stud; //指向要插入的结点

if(head==NULL) //原来的链表是空表

{head=p0;p0->next=NULL;} //使p0指向的结点作为头结点 else

{while((p0->num>p1->num) && (p1->next!=NULL))

{p2=p1; //使p2指向刚才p1指向的结点

p1=p1->next;} //p1后移一个结点

if(p0->num<=p1->num)

{if(head==p1) head=p0; //插到原来第一个结点之前

else p2->next=p0; //插到p2指向的结点之后 p0->next=p1;} else

{p1->next=p0; p0->next=NULL;}} //插到最后的结点之后

n=n+1; //结点数加1

return (head); }

void print(student *head) //输出链表的函数 {student *p;

cout<<\"Now,These \"<if(head!=NULL) do

{cout<num<<\" \"<score<next; }while(p!=NULL); }

第八章

8.1题

#include using namespace std; class Time

{public: //成员改为公用的

int hour; int minute; int sec; }; Time t;

void set_time(void) //在main函数之前定义 {

cin>>t.hour; cin>>t.minute; cin>>t.sec; }

void show_time(void) //在main函数之前定义 {

cout<int main() {set_time(); show_time(); return 0; }

44 / 75

8.2题

#include using namespace std; class Time }

void Time::show_time(void)

{cout<void set_time(void) Time t; {cin>>hour; int main() cin>>minute; { t.set_time(); cin>>sec; t.show_time(); }

return 0; void show_time(void) }

{cout<//xt8-4.h(student.h) private: int hour; class Student int minute; { public:

int sec; void display( ); }; void set_value();

private: Time t; int num;

int main() char name[20]; {

char sex ; t.set_time(); }; t.show_time();

return 0; 8.4题

} //xt8-4-1.cpp(main.cpp)

#include 8.3题

using namespace std; #include #include \"xt8-4.h\" using namespace std; int main() class Time {Student stud; {public:

stud.set_value(); void set_time(void); stud.display(); void show_time(void); return 0; private: }

int hour; 8.4题另一解

int minute; //xt8-4-2.cpp(即student.cpp) int sec; #include }; //在此文件中进行函数的定义

#include void Time::set_time(void) using namespace {cin>>hour; //不要漏写此行

cin>>minute; void Student::display( ) cin>>sec;

{ cout<<\"num:\"<45 / 75

\"xt8-4.h\" std; cout<<\"name:\"<void Student::set_value() { cin>>num; cin>>name; cin>>sex; }

8.5题

//xt8-5.h(arraymax.h) class Array_max {public:

void set_value(); void max_value(); void show_value(); private:

int array[10]; int max; };

8.5题

//xt8-5-1.cpp(file1.cpp) #include #include \"xt8-5.h\" int main()

{Array_max arrmax; arrmax.set_value(); arrmax.max_value(); arrmax.show_value(); return 0; } 8.5题

//xt8-5-2.cpp(arraymax.cpp) #include using namespace std; #include \"xt8-5.h\"

void Array_max::set_value() { int i;

for (i=0;i<10;i++) cin>>array[i]; }

void Array_max::max_value() {int i;

max=array[0]; for (i=1;i<10;i++)

if(array[i]>max) max=array[i]; }

void Array_max::show_value() {cout<<\"max=\"<8.6题

#include using namespace std; class Box {public:

void get_value(); float volume(); void display(); public:

float lengh; float width; float height; };

void Box::get_value()

{ cout<<\"please input lengh, width,height:\"; cin>>lengh; cin>>width; cin>>height; }

float Box::volume()

{ return(lengh*width*height);}

void Box::display()

{ cout<int main()

{Box box1,box2,box3; box1.get_value();

cout<<\"volmue of bax1 is \"; box1.display(); box2.get_value();

46 / 75

cout<<\"volmue of bax2 is \"; box2.display(); box3.get_value();

cout<<\"volmue of bax3 is \"; box3.display(); return 0; }

8.6题另一解

#include using namespace std; class Box {public:

void get_value(); void volume(); void display(); public:

float lengh; float width; float height; float vol; };

void Box::get_value()

{ cout<<\"please input lengh, width,height:\"; cin>>lengh; cin>>width; cin>>height; }

void Box::volume()

{ vol=lengh*width*height;}

void Box::display() { cout<int main()

{Box box1,box2,box3; box1.get_value(); box1.volume();

cout<<\"volmue of bax1 is \"; box1.display(); box2.get_value(); box2.volume();

cout<<\"volmue of bax2 is \"; box2.display(); box3.get_value(); box3.volume();

cout<<\"volmue of bax3 is \"; box3.display(); return 0; }

第九章

9.2题

#include using namespace std; class Date {public:

Date(int,int,int); Date(int,int); Date(int); Date();

void display(); private: int month; int day; int year; };

Date::Date(int m,int d,int y):month(m),day(d),year(y) { }

Date::Date(int m,int d):month(m),day(d) {year=2005;}

Date::Date(int m):month(m) {day=1;

year=2005; }

Date::Date() {month=1; day=1; year=2005;

47 / 75

}

void Date::display()

{cout<int main() {

Date d1(10,13,2005); Date d2(12,30); Date d3(10); Date d4; d1.display(); d2.display(); d3.display(); d4.display(); return 0; }

9.3题

#include using namespace std; class Date {public:

Date(int=1,int=1,int=2005); void display(); private: int month; int day; int year; };

Date::Date(int m,int d,int y):month(m),day(d),year(y) { }

void Date::display()

{cout<int main() {

Date d1(10,13,2005); Date d2(12,30);

Date d3(10); Date d4; d1.display(); d2.display(); d3.display(); d4.display(); return 0; }

9.4题

#include using namespace std; class Student {public:

Student(int n,float s):num(n),score(s){} void display(); private: int num; float score; };

void Student::display()

{cout<int main()

{Student stud[5]={

Student(101,78.5),Student(102,85.5),Student(103,98.5),

Student(104,100.0),Student(105,95.5)}; Student *p=stud;

for(int i=0;i<=2;p=p+2,i++) p->display(); return 0; }

9.5题

#include using namespace std; class Student {public:

Student(int n,float s):num(n),score(s){}

48 / 75

int num; float score; };

void main()

{Student stud[5]={

Student(101,78.5),Student(102,85.5),Student(103,98.5),

Student(104,100.0),Student(105,95.5)}; void max(Student* ); Student *p=&stud[0]; max(p); }

void max(Student *arr)

{float max_score=arr[0].score; int k=0;

for(int i=1;i<5;i++)

if(arr[i].score>max_score) {max_score=arr[i].score;k=i;}

cout<9.6题

#include using namespace std; class Student {public:

Student(int n,float s):num(n),score(s){} void change(int n,float s) {num=n;score=s;} void display(){cout<int main()

{Student stud(101,78.5); stud.display();

stud.change(101,80.5); stud.display();

return 0; }

9.7题

#include using namespace std; class Student {public:

Student(int n,float s):num(n),score(s){} void change(int n,float s) {num=n;score=s;} void display() {cout<//可改为:void display() const {cout<int main()

{const Student stud(101,78.5); stud.display();

//stud.change(101,80.5); stud.display(); return 0; }

9.7题另一解

#include using namespace std; class Student {public:

Student(int n,float s):num(n),score(s){}

void change(int n,float s) const {num=n;score=s;}

void display() const {cout<mutable int num; mutable float score; };

int main()

49 / 75

{const Student stud(101,78.5); stud.display();

stud.change(101,80.5); stud.display(); return 0; }

9.7题另一解

#include using namespace std; class Student {public:

Student(int n,float s):num(n),score(s){} void change(int n,float s) {num=n;score=s;} void display() {cout<int main()

{Student stud(101,78.5); Student *p=&stud; p->display();

p->change(101,80.5); p->display(); return 0; }

9.7题另一解A #include using namespace std; class Student {public:

Student(int n,float s):num(n),score(s){} void change(int n,float s) {num=n;score=s;} void display() {cout<mutable int num; mutable float score; };

int main()

{Student stud(101,78.5); const Student *p=&stud; p->display();

p->change(101,80.5); p->display(); return 0; }

9.7题另一解B #include using namespace std; class Student {public:

Student(int n,float s):num(n),score(s){} void change(int n,float s) {num=n;score=s;} void display() const{cout<int main()

{Student stud(101,78.5); const Student *p=&stud; p->display();

stud.change(101,80.5); p->display(); return 0; }

9.7题另一解

#include using namespace std; class Student {public:

Student(int n,float s):num(n),score(s){} void change(int n,float s) {num=n;score=s;} void display() {cout<50 / 75

private: int num; float score; };

int main()

{Student stud(101,78.5); Student * const p=&stud; p->display();

p->change(101,80.5); p->display(); return 0; }

9.8题

#include using namespace std; class Student {public:

Student(int n,float s):num(n),score(s){} void change(int n,float s) {num=n;score=s;} void display() {cout<int main()

{Student stud(101,78.5); void fun(Student&); fun(stud); return 0; }

void fun(Student &stu) {stu.display();

stu.change(101,80.5); stu.display(); } 9.9题

#include

using namespace std; class Product {public:

Product(int n,int q,float p):num(n),quantity(q),price(p){}; void total();

static float average(); static void display();

private: int num; int quantity; float price;

static float discount; static float sum; static int n; };

void Product::total() {float rate=1.0;

if(quantity>10) rate=0.98*rate;

sum=sum+quantity*price*rate*(1-discount); n=n+quantity; }

void Product::display() {cout<cout<float Product::average() {return(sum/n);}

float Product::discount=0.05; float Product::sum=0; int Product::n=0;

int main() {

Product Prod[3]={

Product(101,5,23.5),Product(102,12,24.56),Pr

51 / 75

oduct(103,100,21.5) };

for(int i=0;i<3;i++) Prod[i].total(); Product::display(); return 0; }

9.10题

}

void display(const Date &d,const Time &t) {

cout<cout< ndl; using namespace std; } class Date; class Time

{public:

int main() Time(int,int,int);

{

friend void display(const Date &,const Time t1(10,13,56); Time &); Date d1(12,25,2004); private: display(d1,t1); int hour; return 0; int minute; } int sec; };

9.11题

Time::Time(int h,int m,int s) #include {hour=h; using namespace std; minute=m; class Time; sec=s; class Date } {public:

Date(int,int,int); class Date friend Time; {public:

private: Date(int,int,int);

int month; friend void display(const Date &,const int day; Time &); int year; private: }; int month;

int day; Date::Date(int m,int int year; y):month(m),day(d),year(y){ } };

class Time Date::Date(int m,int d,int y) {public:

{month=m; Time(int,int,int);

day=d; void display(const Date &); year=y;

private:

52 / 75

d,int

int hour; int minute; int sec; };

Time::Time(int h,int m,int s):hour(h),minute(m),sec(s){ }

void Time::display(const Date &d) {

cout<cout<int main() {

Time t1(10,13,56); Date d1(12,25,2004); t1.display(d1); return 0; }

9.12题

#include using namespace std; template class Compare {public:

Compare(numtype a,numtype b); numtype max(); numtype min(); private:

numtype x,y; };

template

Compare::Compare(numtype a,numtype b) {x=a;y=b;}

template

numtype Compare::max() {return (x>y)?x:y;}

template

numtype Compare::min() {return (xint main()

{Compare cmp1(3,7);

cout<cout< cmp2(45.78,93.6);

cout<cout< cmp3('a','A');

cout<cout<of of

of of

of of

第十章

10.1题

#include using namespace std; class Complex {public:

Complex(){real=0;imag=0;}

Complex(double r,double i){real=r;imag=i;} double get_real(); double get_imag(); void display(); private:

double real; double imag; };

double Complex::get_real()

53 / 75

{return real;}

double Complex::get_imag() {return imag;}

void Complex::display()

{cout<<\"(\"<Complex operator + (Complex &c1,Complex &c2) {

return

Complex(c1.get_real()+c2.get_real(),c1.get_imag()+c2.get_imag()); }

int main()

{Complex c1(3,4),c2(5,-10),c3; c3=c1+c2; cout<<\"c3=\"; c3.display(); return 0; }

10.2题

#include using namespace std; class Complex {public:

Complex(){real=0;imag=0;}

Complex(double r,double i){real=r;imag=i;} Complex operator+(Complex &c2); Complex operator-(Complex &c2); Complex operator*(Complex &c2); Complex operator/(Complex &c2); void display(); private:

double real; double imag; };

Complex Complex::operator+(Complex &c2) {Complex c;

c.real=real+c2.real;

c.imag=imag+c2.imag; return c;}

Complex Complex::operator-(Complex &c2) {Complex c;

c.real=real-c2.real; c.imag=imag-c2.imag; return c;}

Complex Complex::operator*(Complex &c2) {Complex c;

c.real=real*c2.real-imag*c2.imag; c.imag=imag*c2.real+real*c2.imag; return c;}

Complex Complex::operator/(Complex &c2) {Complex c;

c.real=(real*c2.real+imag*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag);

c.imag=(imag*c2.real-real*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag); return c;}

void Complex::display()

{cout<<\"(\"<int main()

{Complex c1(3,4),c2(5,-10),c3; c3=c1+c2;

cout<<\"c1+c2=\"; c3.display(); c3=c1-c2;

cout<<\"c1-c2=\"; c3.display(); c3=c1*c2;

cout<<\"c1*c2=\"; c3.display(); c3=c1/c2;

cout<<\"c1/c2=\"; c3.display(); return 0; }

54 / 75

10.3题

#include //用VC++时改为∶ #include

using namespace std; //用VC++时为取消此行

class Complex {public:

Complex(){real=0;imag=0;}

Complex(double r,double i){real=r;imag=i;} Complex operator+(Complex &c2); Complex operator+(int &i);

friend Complex operator+(int&,Complex &);

void display(); private:

double real; double imag; };

Complex Complex::operator+(Complex &c) {return Complex(real+c.real,imag+c.imag);}

Complex Complex::operator+(int &i) {return Complex(real+i,imag);}

void Complex::display()

{cout<<\"(\"<Complex operator+(int &i,Complex &c) {return Complex(i+c.real,c.imag);}

int main()

{Complex c1(3,4),c2(5,-10),c3; int i=5; c3=c1+c2;

cout<<\"c1+c2=\"; c3.display(); c3=i+c1;

cout<<\"i+c1=\"; c3.display(); c3=c1+i;

cout<<\"c1+i=\"; c3.display();

return 0; }

10.4题

#include using namespace std; class Matrix //定义Matrix类 {public:

Matrix(); //默认构造函数

friend Matrix operator+(Matrix &,Matrix &); //重载运算符“+” void //输入数据函数 void

input();

display();

//输出数据函数 private:

int mat[2][3]; };

Matrix::Matrix()

//定义构造函数 {for(int i=0;i<2;i++) for(int j=0;j<3;j++) mat[i][j]=0; }

Matrix operator+(Matrix &a,Matrix &b) //定义重载运算符“+” 函数 {Matrix c;

for(int i=0;i<2;i++) for(int j=0;j<3;j++)

{c.mat[i][j]=a.mat[i][j]+b.mat[i][j];} return c; } void Matrix::input() //定义输入数据函数

{cout<<\"input value of matrix:\"<>mat[i][j]; }

55 / 75

for(int j=0;j<3;j++) void Matrix::display() mat[i][j]=0;

} //定义输出数据函数

{for (int i=0;i<2;i++) {for(int j=0;j<3;j++) Matrix operator+(Matrix &a,Matrix &b) {cout<>(istream &in,Matrix &m) a.display(); {cout<<\"input value of matrix:\"<>m.mat[i][j];

return in; //用重载运算符“+”实现两个

} 矩阵相加

cout<out<#include return out; //using namespace std; } class Matrix {public: int main() Matrix(); { Matrix a,b,c; friend Matrix operator+(Matrix &,Matrix cin>>a; &); cin>>b; friend ostream& cout<>(istream&,Matrix&); cout<

56 / 75

using namespace std; class Complex {public:

Complex(){real=0;imag=0;}

Complex(double r){real=r;imag=0;}

Complex(double r,double i){real=r;imag=i;} operator double(){return real;} void display(); private:

double real; double imag; };

void Complex::display()

{cout<<\"(\"<int main()

{Complex c1(3,4),c2; double d1; d1=2.5+c1;

cout<<\"d1=\"<10.7题

#include using namespace std; class Student {public:

Student(int,char[],char,float); int get_num(){return num;}

char * get_name(){return name;} char get_sex(){return sex;} void display()

{cout<<\"num:\"<char name[20];

char sex; float score; };

Student::Student(int n,char nam[],char s,float so)

{num=n;

strcpy(name,nam); sex=s; score=so; }

class Teacher {public: Teacher(){}

Teacher(Student&);

Teacher(int n,char nam[],char sex,float pay);

void display(); private: int num;

char name[20]; char sex; float pay; };

Teacher::Teacher(int n,char nam[],char s,float p)

{num=n;

strcpy(name,nam); sex=s; pay=p; }

Teacher::Teacher(Student& stud) {num=stud.get_num();

strcpy(name,stud.get_name()); sex=stud.get_sex(); pay=1500;}

void Teacher::display()

{cout<<\"num:\"<57 / 75

int main() {Teacher

teacher1(10001,\"Li\ Student student1(20010,\"Wang\ cout<<\"student1:\"<teacher2=Teacher(student1); cout<<\"teacher2:\"<int age;

char addr[30]; };

int main()

{Student1 stud1;

stud1.get_value_1(); stud1.display(); stud1.display_1(); return 0; }

11.2题

#include using namespace std; class Student {public: 11.1题

#include void get_value() using namespace std; {cin>>num>>name>>sex;} class Student void display( ) {public: {cout<<\"num: \"<>num>>name>>sex;} cout<<\"sex: \"<>age>>addr;} {public: void display_1() void get_value_1() {display(); {get_value(); cout<<\"age: \"<>age>>addr;} //引用派生类的私有成员,正确。 void display_1() cout<<\"address: \"<private: //引用派生类的私有成员,正确。

cout<<\"address: \"<char addr[30]; //引用派生类的私有成员,正确。

private: };

第十一章

58 / 75

int main()

{Student1 stud1;

stud1.get_value_1(); stud1.display_1(); return 0; }

11.3题

#include using namespace std;

class Student 声明基类

{public: 基类公用成员 void get_value(); void display( );

protected : 基类保护成员 int num;

char name[10]; char sex; }; void Student::get_value() {cin>>num>>name>>sex;} void Student::display( ) {cout<<\"num: \"<{public: void get_value_1(); void display1( ); private: int age; char addr[30]; }; void Student1::get_value_1()

{get_value();

cin>>age>>addr; }

void Student1::display1( )

{cout<<\"num: \"<引用基类的保护成员

cout<<\"name: \"<cout<<\"sex: \"<cout<<\"age: \"<cout<<\"address: \"<用派生类的私有成员 }

int main( ) // {Student1 stud1; //stud1是派生类student1类的对象

stud1.get_value_1(); //

调用派生类对象stud1的公用成员函数 stud1.display1( ); //调用派生类对象stud1的公用成员函数 return 0; } 11.4题 #include using namespace std; class Student //声明基类 {public: //基类公用成员 Student void get_value();

void display( ); protected : //基类保护成员 int num; char name[10]; char sex; }; void Student::get_value() {cin>>num>>name>>sex;}

59 / 75

void Student::display( )

{cout<<\"num: \"<11.4另一题#include

using namespace std;

class Student //

声明基类

{public: // 基类公用成员

class Student1: public

Student void get_value();

//声明一个公用派生类 void display( );

{public:

protected : void get_value_1(); 基类保护成员 void display1( ); int num;

private:

char name[10]; int age; char sex; char addr[30]; }; };

void Student::get_value() void Student1::get_value_1() {cin>>num>>name>>sex;} {get_value();

cin>>age>>addr; void Student::display( )

}

{cout<<\"num: \"<cout<<\"name:\"<} cout<<\"name: \"<引用基类的保护成员,合法

class Student1: protected cout<<\"sex: \"<用基类的保护成员,合法

{public: cout<<\"age: \"<引用派生类的私有成员,合法

void display1( ); cout<<\"address: \"<private: 用派生类的私有成员,合法

int age; } char addr[30]; }; int main( ) {Student1 stud1; void Student1::get_value_1()

//stud1是派生类student1类的对象

{cin>>age>>addr;} stud1.get_value_1(); //

调用派生类对象stud1的公用成员函数

void Student1::display1( ) get_value_1 {cout<<\"age:\"<调用派生类对象stud1的公用成员函数

} display1 return 0; int main( )

60 / 75

//

Student {Student1

//stud1是派生类student1类的对象 stud1.get_value(); stud1.get_value_1(); stud1.display( );

stud1; {A a1; //a1是基

类A的对象

B b1; //b1是派生类B的对象

C c1; //c1是派生类C的对象 return 0; stud1.display1(); //合法。display1是派生类中的公用成员函 数

return 0; }

11.5题

class A {public: void f1( ); int i; protected: void f2(); int j; private: int k; };

class B: public A 派生类 {public: void f3( ); protected: int m; private: int n; };

class C: public B 用派生类 {public: void f4(); private: int p; };

int main()

}

11.6题

#include using namespace std; class A {public: //A为基类 void f1( ); protected: void f2(); private: int i; };

class B: public A {public: void f3( ); int k; //B为A的公用 private: int m; };

class C: protected B {public: void f4(); protected: int n; private: //C为B的公 int p; };

class D: private C {public: void f5(); protected: int q; private:

61 / 75

int r; };

int main() {A a1; B b1; C c1; D d1; return 0; }

11.7题

#include using namespace std; class A {

public:

A(){a=0;b=0;} A(int i){a=i;b=0;} A(int i,int j){a=i;b=j;}

void display(){cout<<\"a=\"<class B : public A {

public: B(){c=0;}

B(int i):A(i){c=0;}

B(int i,int j):A(i,j){c=0;} B(int i,int j,int k):A(i,j){c=k;} void display1() {display();

cout<<\" c=\"<private: int c; };

int main() { B b1; B b2(1);

B b3(1,3); B b4(1,3,5); b1.display1(); b2.display1(); b3.display1(); b4.display1(); return 0; }

11.8题

#include using namespace std; class A {

public:

A(){cout<<\"constructing A \"<class B : public A {

public:

B(){cout<<\"constructing B \"<class C : public B {

public:

C(){cout<<\"constructing C \"<int main() { C c1;

return 0; }

11.9题

#include #include using namespace std; class Teacher {public:

Teacher(string nam,int a,char s,string

62 / 75

tit,string ad,string t); void display(); protected: string name; int age; char sex; string title; string addr; string tel; };

Teacher::Teacher(string nam,int a,char s,string tit,string ad,string t):

name(nam),age(a),sex(s),title(tit),addr(ad),tel(t){ }

void Teacher::display()

{cout<<\"name:\"<class Cadre {public:

Cadre(string nam,int a,char s,string p,string ad,string t); void display(); protected: string name; int age; char sex; string post; string addr; string tel; };

Cadre::Cadre(string nam,int a,char s,string p,string ad,string t):

name(nam),age(a),sex(s),post(p),addr(ad),tel(t){}

void Cadre::display()

{cout<<\"name:\"<class Teacher_Cadre:public Teacher,public Cadre {public:

Teacher_Cadre(string nam,int a,char s,string tit,string p,string ad,string t,float w); void show( ); private:

float wage; };

Teacher_Cadre::Teacher_Cadre(string nam,int a,char s,string t,string p,string ad,string tel,float w):

Teacher(nam,a,s,t,ad,tel),Cadre(nam,a,s,p,ad,tel),wage(w) {}

void Teacher_Cadre::show( ) {Teacher::display();

cout<<\"post:\"<int main( )

{Teacher_Cadre

te_ca(\"Wang-li\Beijing

Road,Shanghai\ te_ca.show( ); return 0; }

11.10题

#include

63 / 75

#include using namespace std; class //教师类 {public:

Teacher(int,char //声明构造函数 void

BirthDate::BirthDate(int y,int m,int d)

//定义构造函数

Teacher {year=y;

month=m; day=d;

[],char); }

display(); void BirthDate::display()

//定义输出函数

{cout<<\"birthday:\"<void BirthDate::change(int y,int m,int d)

//声明输出函数 private: int num;

char name[20]; char sex; };

Teacher::Teacher(int n,char nam[],char s)

//定义修改函数 {year=y; month=m; //定义构造函数

{num=n; day=d; strcpy(name,nam); } sex=s; } class Professor:public Teacher //教授类 void Teacher::display() {public:

Professor(int,char [],char,int,int,int,float); //定义输出函数

{cout<<\"num:\"<float area; //生日类

{public: BirthDate birthday; BirthDate(int,int,int); //定义BirthDate类的对 //声明构造函数 象作为数据成员 void display(); };

//声明输出函数

void change(int,int,int); Professor::Professor(int n,char nam[20],char

s,int y,int m,int d,float a): //声明修改函数

private: Teacher(n,nam,s),birthday(y,m,d),area(a){ } int year; //定义构造函数 int month; int day; void Professor::display() }; //定义输出函数 {Teacher::display();

64 / 75

birthday.display(); cout<<\"area:\"<<{birthday.change(y,m,d); return output; } } int main() //习题12.1中的circle.h文件 {Professor //CIRCLE.H prof1(3012,\"Zhang\ //#include \"point.h\"

class Circle:public Point 定义Professor对象

prof1 {public: cout<float getRadius() const; //调用prof1对象的

float area () const; display函数

cout<protected: //调用prof1对象的

float radius; change函数

prof1.display(); };

//调用prof1对象的

display函数

return 0; }

//习题12.1中的circle.cpp文件 //CIRCLE.CPP

//#include Circle::Circle(float a,float b,float r):Point(a,b),radius(r){}

void Circle::setRadius(float r) {radius=r;}

float Circle::getRadius() const {return radius;}

float Circle::area() const

{return 3.14159*radius*radius;}

//习题12.1中的cylinder.cpp文件 //CYLINDER.CPP

Cylinder::Cylinder(float a,float b,float r,float h) :Circle(a,b,r),height(h){}

void Cylinder::setHeight(float h){height=h;}

float Cylinder::getHeight() const {return height;}

float Cylinder::area() const { return 2*Circle::area()+2*3.14159*radius*height;}

float Cylinder::volume() const {return Circle::area()*height;}

ostream &operator<<(ostream &output,const Cylinder& cy)

{output<<\"Center=[\"<65 / 75

r=\"<//习题12.1中的cylinder.h头文件 //CYLINDER.H #include \"circle.h\"

class Cylinder:public Circle {public:

Cylinder (float x=0,float y=0,float r=0,float h=0);

void setHeight(float); float getHeight() const; float area() const; float volume() const; friend ostream& operator<<(ostream&,const Cylinder&); protected: float height; };

//习题12.1中的point.cpp文件 //POINT.CPP

Point::Point(float a,float b) {x=a;y=b;}

void Point::setPoint(float a,float b) {x=a;y=b;} ostream & operator<<(ostream &output,const Point &p)

{output<<\"[\"<//习题12.1中的point.h头文件 //POINT.H class Point {public:

Point(float=0,float=0); void setPoint(float,float); float getX() const {return x;} float getY() const {return y;}

friend ostream & operator<<(ostream

&,const Point &); protected: float x,y; };

第十二章

12.1题

#include //如用VC++应改为∶#include

using namespace std; //如用VC++应取消此行

#include \"cylinder.h\" #include \"point.cpp\" #include \"circle.cpp\" #include \"cylinder.cpp\" int main()

{Cylinder cy1(3.5,6.4,5.2,10); cout<<\"\\noriginal

cylinder:\\nx=\"<h=\"<cout<<\"\\nnew cylinder:\\n\"<cout<<\"\\npRef as a point:\"<cout<<\"\\ncRef as a Circle:\"<12.3题

#include using namespace std; class Point {public:

Point(float a,float b):x(a),y(b){} ~Point(){cout<<\"executing Point destructor\"<66 / 75

private: float x; float y; };

class Circle:public Point {public: Circle(float a,float b,float r):Point(a,b),radius(r){}

~Circle(){cout<<\"executing Circle destructor\"<float radus; };

int main()

{Point *p=new Circle(2.5,1.8,4.5); delete p; return 0; }

12.3题另一解

#include using namespace std; class Point {public:

Point(float a,float b):x(a),y(b){} ~Point(){cout<<\"executing Point destructor\"<class Circle:public Point {public:

Circle(int a,int b,int r):Point(a,b),radius(r){} ~Circle(){cout<<\"executing Circle destructor\"<float radus; };

int main()

{Point *p=new Circle(2.5,1.8,4.5); Circle *pt=new Circle(2.5,1.8,4.5); delete pt; return 0; }

12.3题另一解

#include using namespace std; class Point {public:

Point(float a,float b):x(a),y(b){}

virtual ~Point(){cout<<\"executing Point destructor\"<class Circle:public Point {public: Circle(float a,float b,float r):Point(a,b),radius(r){}

virtual ~Circle(){cout<<\"executing Circle destructor\"<void main()

{Point *p=new Circle(2.5,1.8,4.5); delete p; }

12.4题

#include using namespace std; //定义抽象基类Shape class Shape {public: virtual double area() //纯虚函数

const =0;

67 / 75

}; void printArea(const Shape &s) {cout<{ //结构函数

virtual double area() const {return Circle circle(12.6); 3.14159*radius*radius;}; //定义虚函 //建立 数 Circle类对象circle protected: cout<<\"area of circle =\"; double radius; printArea(circle); //半径 };

//定义Rectangle类

class Rectangle:public Shape {public:

Rectangle(double w,double h):width(w),height(h){} //结构函数

virtual double area() const {return

//输出

circle的面积 Rectangle rectangle(4.5,8.4); //建立

Rectangle类对象rectangle

cout<<\"area of rectangle =\"; printArea(rectangle); //输出

rectangle的面积 Triangle triangle(4.5,8.4);

width*height;} //定义虚函 //建立

数 Triangle类对象 protected: cout<<\"area of triangle =\"; double width,height; printArea(triangle); // 输 出 //宽与高 triangle的面积 }; return 0; } class Triangle:public Shape {public: 12.5题 Triangle(double w,double #include h):width(w),height(h){} //using namespace std; 结构函 //定义抽象基类Shape

class Shape 数

virtual double area() const {return {public:

virtual double area() const =0; 0.5*width*height;} //定义虚

函数 //纯虚函数 protected: }; double width,height; //宽与高 //定义Circle(圆形)类 }; class Circle:public Shape {public:

Circle(double r):radius(r){} //输出面积的函数

68 / 75

//结构函数 虚函数 virtual double area() const {return protected:

double top,bottom,height; 3.14159*radius*radius;}; //定义虚函

数 //上底 protected: 、下底与高 double radius; };

//半径

}; //定义Triangle(三角形)类 class Triangle:public Shape

{public: //定义Square(正方形)类

class Square:public Shape Triangle(double w,double {public: h):width(w),height(h){} // Square(double s):side(s){} 结构函 //结构函数

virtual double area() const {return side*side;} //定义虚函 数

protected: double side; };

//定义Rectangle(矩形)类 class Rectangle:public Shape {public:

Rectangle(double w,double //建立 h):width(w),height(h){} //结Circle类对象circle

Square square(3.5); 构函数

virtual double area() const {return //建立 width*height;} //定义虚函 Square类对象square

Rectangle rectangle(4.5,8.4); 数

protected: //建立 double width,height; Rectangle 类对象 rectangle

Trapezoid trapezoid(2.0,4.5,3.2); //宽与高

}; //建立 Trapezoid类对象trapezoid

Triangle triangle(4.5,8.4); //定义Trapezoid(梯形)类

class Trapezoid:public Shape //建立 {public: Triangle类对象 Trapezoid(double t,double b,double Shape

*pt[5]={&circle,&square,&rectangle,&trapezoih):top(t),bottom(t),height(h){} //结构

d,&triangle}; 函数

virtual double area() const {return 0.5*(top+bottom)*height;} //定义 //定义基类指针数组pt,使它每

69 / 75

virtual double area() const {return 0.5*width*height;} //定义虚 函数

protected: double width,height; //宽与高 };

int main() {

Circle circle(12.6);

void area(double a,double b,double c) 一个元素指向一个派生类对象

double areas=0.0; {double s,area;

if (a+b<=c) //areas为

cerr<<\"a+b<=c,error!\"<for(int i=0;i<5;i++) else if(b+c<=a) {areas=areas+pt[i]->area();} cerr<<\"b+c<=a,error!\"<//输出总面积

return 0; } 13.1题

#include #include using namespace std; int main() {double a,b,c,s,area; cout<<\"please input a,b,c:\"; cin>>a>>b>>c; if (a+b<=c) cerr<<\"a+b<=c,error!\"<13.1题另一解

#include #include using namespace std; void input(double a,double b,double c) {cout<<\"please input a,b,c:\"; cin>>a>>b>>c; }

cerr<<\"c+a<=b,error!\"<cout<<\"area=\"< #include using namespace std; int main() {float a[5]; cout<<\"input data:\"; for(int i=0;i<5;i++) cin>>a[i]; cout<cout< using namespace std; int main() {float a[5]; int i; cout<<\"input data:\";

70 / 75

for(i=0;i<5;i++) cin>>a[i];

cout.setf(ios::fixed); cout.precision(2); for(i=0;i<5;i++) {cout.width(10); cout<}

cout<<\"enter 10 integer numbers:\"<>a[i];

outfile1<cout<<\"enter 10 integer numbers:\"<>a[i];

outfile2<#include outfile1.close(); //关闭#include f1.dat文件 using namespace std; outfile2.close(); //关闭int main() f2.dat文件 { } for(int n=1;n<8;n++) cout<{cerr<<\"open f1.dat error!\"<#include exit(1); #include } using namespace std; ofstream outfile(\"f2.dat\ //VC++ 6.0要此行

//fun1函数从键盘输入20个整数,分别存放在两个磁盘文件中

void fun1() {int a[10];

ofstream outfile1(\"f1.dat\"),outfile2(\"f2.dat\"); //分别定义两个文件流对象

if(!outfile1) //检查打开f1.dat是否成功

{cerr<<\"open f1.dat error!\"<if(!outfile2) //检查打开f2.dat是否成功

{cerr<<\"open f2.dat error!\"<//f2.dat作为输出文件,文件指针指向文件尾,向它写入的数据放在原来数据的后面 if(!outfile)

{cerr<<\"open f2.dat error!\"<for(int i=0;i<10;i++)

{infile>>a; //磁盘文件f2.dat读入一个整数

outfile<infile.close(); outfile.close(); }

71 / 75

//从f2.dat中读入20个整数,将它们按从小到大的顺序存放到f2.dat void fun3()

{ifstream infile(\"f2.dat\"); //定义输入文件流infile,以输入方式打开f2.dat if(!infile)

{cerr<<\"open f2.dat error!\"<int a[20]; int i,j,t;

for(i=0;i<20;i++)

infile>>a[i]; //从磁盘文件f2.dat读入20个数放在数组a中

for(i=0;i<19;i++) //用起泡法对20个数排序

for(j=0;j<19-i;j++) if(a[j]>a[j+1])

{t=a[j];a[j]=a[j+1];a[j+1]=t;}

infile.close(); //关闭输入文件f2.dat

ofstream outfile(\"f2.dat\// f2.dat作为输出文件,文件中原有内容删除

if(!outfile)

{cerr<<\"open f2.dat error!\"<cout<<\"data in f2.dat:\"<{outfile<cout<int main()

{fun1(); //分别调用3个函数 fun2(); fun3(); return 0; }

13.5题

#include #include using namespace std; struct staff {int num;

char name[20]; int age;

double pay; };

int main() {staff

staf[7]={2101,\"Li\74.5,2108,\"Fun\

3006,\"Xue\af1;

fstream

iofile(\"staff.dat\ if(!iofile)

{cerr<<\"open error!\"<int i,m,num;

cout<<\"Five staff :\"<{cout<iofile.write((char *)&staf[i],sizeof(staf[i]));}

cout<<\"please input data you want insert:\"<{cin>>staf1.num>>staf1.name>>staf1.age>>staf1.pay;

iofile.seekp(0,ios::end);

iofile.write((char *)&staf1,sizeof(staf1));} iofile.seekg(0,ios::beg); for(i=0;i<7;i++)

{iofile.read((char *)&staf[i],sizeof(staf[i])); cout<72 / 75

\"<bool find;

cout<<\"enter number you want search,enter 0 to stop.\"; cin>>num; while(num) {find=false;

iofile.seekg(0,ios::beg); for(i=0;i<7;i++)

{iofile.read((char *)&staf[i],sizeof(staf[i])); if(num==staf[i].num) {m=iofile.tellg(); cout<\"<if(!find)

cout<<\"can't find \"<>num; }

iofile.close(); return 0; }

13.6题

#include #include using namespace std;

struct student {int num;

char name[20]; double score; };

int main() {student

stud[3]={1001,\"Li\,\"Fun\ char c[50]; int i;

ostrstream strout(c,50); for(i=0;i<3;i++)

strout<cout<<\"array c:\"<strin>>stud1[i].num>>stud1[i].name>>stud1[i].score;

cout<<\"data from array c to array stud1:\"<cout<\"<13.6题另一题

#include #include using namespace std; struct student {int num;

char name[20]; double score; };

int main() {int i; student

stud[3]={1001,\"Li\,\"Fun\ char c[50];

strstream strio(c,50,ios::in|ios::out); for(i=0;i<3;i++)

strio<73 / 75

\"<cout<<\"array c:\"<strio>>stud1[i].num>>stud1[i].name>>stud1[i].score;

cout<<\"data from array c to array stud1:\"<cout<\"<disc=b*b-4*a*c;

if (disc<0) throw disc; return sqrt(disc)/(2*a); }

14.2题

#include #include using namespace std; class Student {public:

Student(int n,string nam)

{cout<<\"constructor-\"<~Student(){cout<<\"destructor-\"<void get_data(); private: int num; string name; };

void Student::get_data() {if(num==0) throw num;

else cout<void fun()

{Student stud1(1101,\"tan\"); stud1.get_data(); try

{Student stud2(0,\"Li\"); stud2.get_data(); }

catch(int n)

{cout<<\"num=\"<int main()

{cout<<\"main begin\"<cout<<\"main end\"<第十四章

14.1题

#include #include using namespace std;

double q(double,double,double); void main()

{double a,b,c,p,x1,x2;

cout<<\"please enter a,b,c:\"; cin>>a>>b>>c; p=-b/(2*a); try

{x1=p+q(a,b,c); x2=p-q(a,b,c);

cout<<\"x1=\"<catch(double d)

{cout<<\"a=\"<double q(double a,double b,double c) {double disc;

74 / 75

}

14.3题 //main file

#include using namespace std; #include \"xt14-3-h1.h\" #include \"xt14-3-h2.h\" using namespace std;

using namespace student1;

int main()

{Student stud1(1001,\"Wang\Road,Shanghua\"); stud1.show_data();

student2::Student stud2(1102,\"Li\ stud2.show_data(); return 0; }

14.3题H1 //header1.h

#include namespace student1 {class Student {public:

Student(int n,string nam,int a,string addr)

{num=n;name=nam;age=a;address=addr;} void show_data(); private: int num; string name; int age;

string address; };

void Student::show_data() {cout<<\"num:\"<<<\" address:\"<}

14.3题H2 //header2.h

#include namespace student2 {class Student {public:

Student(int n,string nam,char s,float sco)

{num=n;name=nam;sex=s;score=sco;} void show_data(); private: int num; string name; char sex; float score; };

void Student::show_data() {cout<<\"num:\"<<<\" score:\"<75 / 75

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- azee.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务