VisualC++面向对象编程教程第2版王育坚清华大学出版社课后答案_第1页
VisualC++面向对象编程教程第2版王育坚清华大学出版社课后答案_第2页
VisualC++面向对象编程教程第2版王育坚清华大学出版社课后答案_第3页
VisualC++面向对象编程教程第2版王育坚清华大学出版社课后答案_第4页
VisualC++面向对象编程教程第2版王育坚清华大学出版社课后答案_第5页
已阅读5页,还剩99页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2-45编写一个程序,输入三角形的三条边的边长,求三角形的面积。2-45#include<iostream.h>#include<math.h>int main()int a,b,c;int s,S;cin>>a>>b>>c;s=(a+b+c)/2;S=powl(s*(s-a)*(s-b)*(s-c),0.5);if(S=0)cout<<"此三边不能构成三角形!"<<endl;elsecout<<"面积:"<<endl;cout<<S&

2、lt;<endl;return 0; 2-46从键盘输入一个大写字母,然后改用小写字母在屏幕输出。2-46#include<iostream.h>int main()char ch;int a;cout<<"输入一个大写字母:"<<endl;cin>>ch;if(ch>=65 && ch<=91)ch=ch+32;/a=(int)ch;cout<<ch<<endl;else cout<<"该字母不是字母或不是字母大写!"<<e

3、ndl;return 0;2-47用户输入两个整数,编程输出稍大于第一个整数而又是第2个整数的倍数的数。计算公式是:valuel+value2-value1%value2.2-47#include<iostream.h>int main()int value1,value2;int result;cin>>value1>>value2;result=value1+value2-value1%value2; cout<<"该整数为:"<<result<<endl;return 0;2-48华氏温度转换为摄

4、氏温度的公式是:C=(F-32)*5/9.。编写一个程序,输入一个华氏温度,程序输出相应的摄氏温度。请将32和5/9用const型变量表示。2-48#include<iostream.h>int main()const float i=32.0;const float j=5.0/9.0;float degFahr;float degCel;cin>>degFahr;/for(degFahr=0;degFahr<=300;degFahr+=10)/degCel=j*(degFahr-i);cout<<"华氏温度:"<<d

5、egFahr<<endl;cout<<"摄氏温度:"<<degCel<<endl;/return 0;2-49 从键盘输入20个整数,检查100是否存在于这些整数中,若是的话,求出他是第几个被输入的。2-49#include<iostream.h>int main()int Array20;int i,count=0,c=0;for(i=0;i<20;i+)cin>>Arrayi;for(i=0;i<20;i+)if(Arrayi=100 && count=0)cout<

6、;<"100存在该数组中!"<<endl;count+;if(Arrayi!=100)c+;if(c=19)cout<<"100不存在该数组中!"<<endl;for(i=0;i<20;i+)if(Arrayi=100)cout<<"它是第"<<i+1<<"个被输入的!"<<endl;return 0;2-50 从键盘输入一个N X N的整型数组,并将每一行的最大值显示输出。2-50#include<iostrea

7、m.h>int main()int Array100100=0;int n,temp;cin>>n;for(int i=0;i<n;i+)for(int j=0;j<n;j+)cin>>Arrayij;for(int x=0;x<n;x+)for(int y=x+1;y<n;y+)if(Arrayix<Arrayiy)temp=Arrayix;Arrayix=Arrayiy;Arrayiy=temp;cout<<"每一行的最大值:"<<endl;for(i=0;i<n;i+)cout&

8、lt;<Arrayi0<<" "cout<<endl;2-51 输入三个整数,采用指针方法将三个数按从大到小的顺序输出。2-51#include<iostream.h>#include<math.h>int main()int Array3;int *pA=Array;int *a=Array;int i;int temp;for(i=0;i<3;i+)cin>>Arrayi;for(i=0;i<3;i+)a+;if(*pA<*a)temp=*pA;*pA=*a;*a=temp;a+;pA+

9、;a=&Array0;for(i=0;i<3;i+)cout<<Arrayi<<" "return 0;2-52 采用指针方法将一个数组中的所有元素颠倒顺序,结果仍然存放在原来的数组中,要求使用最少的辅助存储单元2-52#include<iostream.h>int main()int n;cout<<"输入数组的长度(小于100):"<<endl;cin>>n;cout<<"输入"<<n<<"个数:&q

10、uot;<<endl;int Array100;int *pA=Array;int i;for(i=0;i<n;i+)cin>>Arrayi;pA+;for(i=0;i<n;i+)pA-;cout<<*pA<<" "return 0;2-53输入两个字符串,如果两个字符串的字符和长度都相同(认为它们相等),在屏幕上输出“Equal”,否则在屏幕上输出“Unequal”。要求使用字符指针。2-53#include<iostream.h>int main()char * pstr="Enter a

11、 string:"char str1100,str2100;cout<<pstr<<endl;cin.get(str1,100);cin.get();cin.get(str2,100);int len1=0,len2=0;while(str1len1!='0')len1+;while(str2len2!='0')len2+;if(len1!=len2)cout<<"Unequal"<<endl;else if(len1=len2)int i=0;for(i=0;i<len1;i+

12、)if(str1i=str2i)&&i<len1)continue;if(i=len1-1)cout<<"Equal"<<endl;else cout<<"Unequal"<<endl;return 0;2-54 编程将一个整数转换成对应的数字串,例如将值1234转换为数字串“1234”。2-54#include<iostream.h>int main()int number;int Array100;int i,j;cin>>number;for(i=0;nu

13、mber!=0;i+)Arrayi=number%10;number=number/10;j=i;for(i=j;i>=0;i-)cout<<Arrayi-1<<" "cout<<endl;return 0;2-55 编程求两个复数的和。2-55#include<iostream.h>int main()float a2,b2,c2;int i;for(i=0;i<2;i+)cin>>ai;for(i=0;i<2;i+)cin>>bi;for(i=0;i<2;i+)ci=ai+b

14、i;cout<<c0<<" "<<c1<<endl;return 0;2-56 使用结构变量表示每个学生的信息:姓名、学号和三门课的成绩。从键盘输入10个学生的数据,然后输出每个学生的姓名和三门课的平均成绩。2-56#include<stdio.h>struct studentchar num10;char name20;float grade3;float average;int main()student stu10;int i,j;float sum=0;for(i=0;i<=9;i+)printf(&

15、quot;Enter num:n");scanf("%s",&stui.num);printf("Enter name:n");scanf("%s",&);printf("Enter three grades:n");for(j=0;j<3;j+)scanf("%f",&stui.gradej);sum+=stui.gradej;stui.average=sum/3;printf("%f %sn",stui.avera

16、ge,);return 0;2-57 用结构数组建立并初始化一个工资表,然后输入一个人的姓名,查询其工资情况,并在屏幕上输出。2-572-58用枚举值MON、TUE、WED、THU、FRI、SAT和SUN表示一个星期中的7天。从键盘输入一个06之间的整数,根据输入的整数输出对应的英文缩写。2-582-59 编写一个求解一元二次方程的根的程序,方程的系数由用户输入。2-59#include<iostream.h>#include<math.h>int main()int a,b,c;int R;float p;float x1,x2;cin>>

17、;a>>b>>c;R=b*b-4*a*c;if(R>=0)p=sqrt(R);x1=(-b+p)/(2*a);x2=(-b-p)/(2*a);if(x1=x2)cout<<"仅且只有一个根"<<x1<<endl;elsecout<<"有两个不同的根"<<x1<<x2<<endl;else if(R<0) cout<<"无根"<<endl;return 0;2-60 从键盘输入一个字符,判断输入

18、的字符是m、a、n或其他字符。如果是m则输出“Good morning!”;如果是a则输出“Good afternoon!”;如果是n则输出“Good night!”;如果是其他字符则输出“I cant undersrand!”。2-60 2-61 编程实现两个整数的加、减、乘、除四则运算,运算式形如“32+120”。2-612-62编写一个程序,利用swith语句将百分制的学生成绩转换为优、良、中、及格和不及格5分制成绩。2-622-63从键盘输入一个字符,判断输入的字符是数字、空格还是其他字符,并给出相应的提示信息。2-63#include<iostream.h>int mai

19、n()char ch;cout<<"请输入一个字符:"cin.get(ch);if(ch=' ')cout<<"这是一个空格!"<<endl;else if(ch>='0')&&(ch<='9')cout<<"这是一个数字!"<<endl;else cout<<"这是一个其他字符!"<<endl;return 0;2-64 从键盘输入一个字符序列,编程统计其

20、中的数字个数和英文字母个数。输入的字符序列以“#”作为结束符。2-64#include<iostream.h>int main()char symbol100;int i,end,j=0,k=0;cin>>symbol;for(i=0;i<100;i+)if(symboli='#')end=i;break;for(i=0;i<end;i+)if(symboli>='0') && (symboli<='9')j+;else k+;cout<<"digit:&quo

21、t;<<j<<endl;cout<<"letter:"<<k<<endl;return 0;2-65 输入一个由若干单词组成的文本串,每个单词之间用一些空格分隔,统计此文本串单词的个数。2-65#include<iostream.h>int main()char str1000;int count=1;cin.get(str,1000);/while(!str0)/for(int i=0;stri!=0;i+)if(stri=' ' && stri+1!=' &#

22、39;)count+;/cout<<"the count is:"<<count<<endl;return 0;2-67 编程求值,使用如下公式:/4=1-1/3+1/5-1/7+,直到最后一项的绝对值小于10-6为止。2-67(1)#include<iostream.h>#include<math.h>int main()int i,n=1,j=1;double s=0;for(i=0;(2*i+1)<pow(10,6);i+)/*cout<<i<<endl;cout<<

23、"*"cout<<2*i+1<<endl;cout<<"*"cout<<pow(2*i+1),-1)<<endl;cout<<"*"*/s+=pow(2*i+1),-1)*n;/j=2*i+1;n=n*(-1);cout<<i<<endl;cout<<4*s<<endl;return 0;2-67(2)#include<iostream.h>#include<math.h>int main()

24、float i=0;double s=0;for(i=0;2*i+1<pow(10,6);i+)s+=pow(-1,i)*(1/(2*i+1);cout<<s*4<<endl;return 0;2-68 把100150之间不能被3整除的数输出,要求一行输出10个数。2-68 2-69 编程输出一个九九乘法表。2-69#include<iostream.h>int main()char table99;int i,j,X,Y;for(i=0;i<9;i+)for(j=0;j<9;j+)X=i+1;Y=j+1;if(X>=Y)cout&l

25、t;<X*Y<<' 'cout<<endl;return 0;2-70编程计算整型数各位数字之和,例如数2007各位数字之和为2+0+0+7=9.2-70#include<iostream.h>int main()int num;int sum=0,i;cin>>num;for(i=0;num!=0;i+)sum+=num%10;num=num/10;cout<<"sum="<<sum<<endl;return 0;2-71 输入n个整数,利用冒泡排序法将它们从小到大排

26、列,并在屏幕上输出。2-71#include<iostream.h>int main()int n;int i,j,temp;int num100;cin>>n;for(i=0;i<n;i+)cin>>numi;for(i=0;i<n;i+)for(j=i+1;j<n;j+)if(numi<numj)temp=numi;numi=numj;numj=temp;for(i=0;i<n;i+)cout<<numi<<' 'cout<<endl;return 0;2-72 编程求出从

27、键盘输入的10个数之和,遇到负数时终止输入求和。2-72#include<iostream.h>int main()int Array10;int sum=0;for(int i=0;i<10;i+)cin>>Arrayi;if(Arrayi>0)sum+=Arrayi;else break;cout<<sum<<endl;return 0;2-73 编程求出从键盘输入的10个数中所有正数之和,负数不参加求和。2-73#include<iostream.h>int main()int num10;int i,sum=0;f

28、or(i=0;i<=9;i+)cin>>numi;if(numi>0)sum+=numi;cout<<"sum is "<<sum<<endl;return 0;2-74 设计函数prime(),它只带一个整型参数,当这个参数的值是素数时,该函数返回非0,否则返回0.利用这个函数编写一个程序来验证哥德巴赫猜想:任何一个大于2的偶数都可以表示成两个素数之和。2-74#include<iostream.h>int prime(int x)int i;for(i=2;i<x/2;i+)if(x%i=0)

29、return 0; return x;int main()int a,b,c,d;int j=2,k;cin>>a;if(a>2 && a%2=0)for(j=2;j<a;j+)b=prime(j);if(b=j)c=a-b;d=prime(c);if(d=c)cout<<"该定理成立!"<<endl;else cout<<"此数不是大于2的偶数!"<<endl;return 0;2-75 编制如下函数原型的函数:int index(const char *str ,

30、char c),这个函数返回字符串str中第一次出现字符c的位置。2-75#include<iostream.h>int index(const char *str,char c)int count=1;int Ccount=0;for(int i=0;stri!='0'i+)if(stri=c && Ccount=0)Ccount+;break;count+;return count;int main()char string100;char C;int V=0;int result;cin>>string;cin>>C;w

31、hile(stringV!='0')V+;result=index(string,C);if(V+1)=result)cout<<"此字符不在字符串中!"<<endl;elsecout<<result<<endl;return 0;2-76 首先编写以下函数声明的函数:void swap(float* px,float*py),该函数用于交换两个实型变量的值,然后编写一个主函数验证函数swap()的功能。2-76#include<iostream.h>void swap(float *px,floa

32、t *py)float temp;temp=*px;*px=*py;*py=temp;int main()float X,Y;cin>>X>>Y;swap(&X,&Y);cout<<"使用swap函数的值"cout<<X<<' '<<Y<<endl;/*float temp;temp=X;X=Y;Y=temp;*/cout<<"验证值: "<<X<<' '<<Y<<

33、endl;return 0;2-77 定义将一个字符串反转的函数,例如将字符串“abcd”反转为“dcba”。2-77#include<iostream.h>#include<string.h>int Array(char *s)int j,n;char string100;strcpy(string,s);for(j=0;j<100;j+)if(stringj='0')n=j;return n;int main()char str100;int i,z;cin>>str;z=Array(str);/cout<<z;for(

34、i=z;i>=0;i-)cout<<stri;cout<<endl;return 0;2-78 首先编写一个冒泡排序函数,然后在主函数中调用排序函数对10个整数从小到达进行排序。提示:采用数组名作为函数参数。2-782-79将习题2-76中的swap()函数改为内联函数,并实现相同的程序功能。2-79#include<iostream.h>inline void swap(float *px,float *py)float temp;temp=*px;*px=*py;*py=temp;int main()float X,Y;cin>>X&g

35、t;>Y;swap(&X,&Y);cout<<"使用swap函数的值"cout<<X<<' '<<Y<<endl;/*float temp;temp=X;X=Y;Y=temp;*/cout<<"验证值: "<<X<<' '<<Y<<endl;return 0;2-80 编写一个函数 maxmin(),该函数有两个实型参数,执行函数后,第一个参数为两个参数中值较大者,第二个参数为较小者

36、。要求使用引用作为函数参数,并编写主函数验证函数功能。2-80#include<iostream.h>void maxmin(int &A,int &B)int temp;if(A<B)temp=A;A=B;B=temp;int main()int X,Y;cin>>X>>Y;maxmin(X,Y);cout<<X<<' '<<Y<<endl;return 0;2-81 编写一个函数 swapstruct(),实现交换两个结构变量的功能。编写主函数验证函数swapstruc

37、t()的功能,要求使用引用传递参数。2-81#include<iostream.h>#include<string.h>struct studentchar name20;int score;void swapstruct(student &s1,student &s2)int temp;char s20;strcpy(s,);strcpy(,);strcpy(,s);temp=s1.score;s1.score=s2.score;s2.score=temp;int main()student st

38、u1="zhangsan",90;student stu2="lisi",85;cout<<"stu1:"<<<<' '<<stu1.score<<endl;cout<<"stu2:"<<<<' '<<stu2.score<<endl;swapstruct(stu1,stu2);cout<<"stu1:&qu

39、ot;<<<<' '<<stu1.score<<endl;cout<<"stu2:"<<<<' '<<stu2.score<<endl;return 0;2-82 编写一个程序,在主函数main()的外部和内部分别声明两个同名的整型变量并赋值,然后在主函数main()中分别访问两个变量。2-82#include<iostream.h>int i=3;int main()cout<&l

40、t;i<<endl;int i=5;cout<<i<<endl;return 0;2-83 一个程序由两个C+源文件组成,在一个源文件中定义主函数main()并声明一个外部整型变量n,在另一个源文件中定义一个不带参数的函数factorial(void),该函数用于计算变量n的阶乘。编程在主函数main()中输入一个整数并求它的阶乘。2-83#include<iostream.h>int factorial(int x)int y,pro=1;for(y=x;y>0;y-)pro*=y;return (pro);void main()int

41、n,R;cout<<"The number is:"cin>>n;R=factorial(n);cout<<"The product is:"<<R<<endl;2-84 采用外部函数的方式使用习题2-75中的函数index(),即在一个源文件中定义该函数,然后在另一个源文件中调用该函数。2-842-85 编写一段程序,利用new运算动态分配float型、long型和char型三个内存单元,将它们的首地址分别赋给指针pf、pl和pc。给这些存储但愿赋值,并在屏幕上显示它们的值。最后利用delet

42、e运算释放所有动态分配的内存单元。2-85#include<iostream.h>int main()float *pf=new float;*pf=3.14;long *pl=new long;*pl=2135567889;char *pc=new char;*pc='A'cout<<*pf<<endl;cout<<*pl<<endl;cout<<*pc<<endl;delete pf;delete pl;delete pc;return 0;2-86 编写一个程序,用new运算为一个整型数组

43、动态分配内存空间,对其进行赋值,并在屏幕上输出。2-86#include<iostream.h>int main()int size;int num;cin>>size;int *f=new intsize;for(int i=0;i<size;i+)cin>>num;fi=num;for(i=0;i<size;i+)cout<<fi<<' 'delete f;return 0;2-87 采用动态内存分配方法设计一个学生成绩处理程序,要求输入任何数量学生的学号、姓名和四门课的成绩,并按平均成绩的高低输出每个

44、学生的高低输出每个学生的姓名和成绩。2-87#include<iostream.h>#include<string.h>struct studentint ID;char name20;int grade4;float average;int main()int num;int i,j,k,temp;float sum=0;char s20;cin>>num;student *stu=new studentnum;for(i=0;i<num;i+)cout<<"输入第"<<i+1<<"人

45、的信息"<<endl;cout<<"ID:"cin>>stui.ID;cout<<"name:"cin>>;cout<<"grade:"for(j=0;j<4;j+)cin>>stui.gradej;sum+=stui.gradej;stui.average=sum/4;sum=0;cout<<"average:"<<stui.average<<endl;for(

46、i=0;i<num;i+) /排序for(j=i+1;j<num;j+)if(stui.average<stuj.average)strcpy(s,);strcpy(,);strcpy(,s);for(k=0;k<4;k+)temp=stui.gradek;stui.gradek=stuj.gradek;stuj.gradek=temp;cout<<"成绩排名:"<<endl;cout<<"name"<<&quo

47、t; "<<"grade"<<endl;for(i=0;i<num;i+)cout<<<<" "for(j=0;j<4;j+)cout<<stui.gradej<<' 'cout<<endl;return 0;2-88输入一行字符,建立一个链表,链表的每一个结点含有一个输入的字符,通过访问链表中的每个结点计算链表中结点的总个数。2-882-89 使用带参数的宏定义计算两个实数之和,并编写主函数验证宏的功能。2-89#

48、include<iostream.h>#define sum(a,b) (a+b)int main()int x,y;cin>>x>>y;cout<<"主函数计算结果: "<<x+y<<endl;cout<<"宏定义函数结果: "<<sum(x,y)<<endl;return 0;2-90 定义一个带参数的宏,求出三个数中最大的一个数,并进行验证。2-90#include<iostream.h>#define MAX(a,b) (a)&

49、gt;(b)?(a):(b)void main()int x,y,z;cin>>x>>y>>z;cout<<"宏定义参数结果 "cout<<MAX(MAX(x,y),z)<<endl;if(x>y)if(x>z)cout<<"验证结果为 "<<x<<endl;else cout<<"验证结果为 "<<z<<endl;elseif(y>z)cout<<"验

50、证结果为 "<<y<<endl;else cout<<"验证结果为 "<<z<<endl;2-91 输入一个字符串,根据需要设置条件编译,使之能将输入的字符串以大写字母的形式或小写字母的形式输出。2-91#include<iostream.h>int main()char str100;char X;int i;cin>>str;cout<<"是否输出大写形式?(Y or N)"<<endl;cin>>X;if(X='

51、Y')for(i=0;stri!='0'i+)stri=stri-32;cout<<stri;else if(X='N')for(i=0;stri!='0'i+)cout<<stri;cout<<endl;return 0;2-92 修改习题2-61中的求和程序,在程序中定义一个调试宏,利用条件编译指令编译不同的代码段,使得在调试程序时能够输出一些调试信息。2-922-93 假设有三个文件:test13.h、test2.h和test.cpp,在test1.h中定义了一个宏PI,test2.h文件包含了t

52、est1.h文件,而test.cpp文件又包含了test1.h文件和test2.h文件。请问编译时会出现什么错误?如何解决?提示:宏的重复定义。2-933-44 一个名为CPerson 的类有如下属性:姓名、身份证号、性别和年龄,请用 C+语言定义这个类,并为上述属性定义相应的方法。#include<iostream.h>#include<string.h>class CPersonprivate: char Name10; char ID20; char Sex4; int Age;public: CPerson(char *na,char *id,char *se,

53、int ag); void Show();CPerson:CPerson(char *na,char *id,char *se,int ag)strcpy(Name,na);strcpy(ID,id);strcpy(Sex,se);Age=ag;void CPerson:Show() cout<<"姓名:"<<Name<<endl; cout<<"身份证:"<<ID<<endl; cout<<"性别:"<<Sex<<endl;

54、cout<<"年龄:"<<Age<<endl;void main() CPerson person("王三","quot;,"男",21); person.Show();3-45 设计一个日期类 Date,该类用于表示日期值(年、月、日)。要求除了能够通过相应得成员函数设置和获取日期外,还能够实现将日期加一天的操作。#include<iostream.h>class date int year; int month; int day; bo

55、ol flag;public: date() year=0; month=0; day=0; date(int yr,int mo,int da);void setdate();int getyear();int getmonth();int getday();void addday();void show();date:date(int yr,int mo,int da) flag=false; if(mo>=1&&mo<=12&&da>=1&&da<=31) year=yr; month=mo; day=da; els

56、e flag=true; void date:setdate() cout<<"请输入年分"<<endl; cin>>year; cout<<"请输入月份(1-12)"<<endl; cin>>month; while(month<1|month>12) cout<<"输入有误,请重新输入月份(1-12)"<<endl; cin>>month; cout<<"请输入日期(1-31)"&

57、lt;<endl; cin>>day; while(day<1|day>31) cout<<"输入有误,请重新输入日期(1-31)"<<endl; cin>>day; flag=false;void date:show() if(!flag) cout<<year<<'/'<<month<<'/'<<day<<endl; else cout<<"日期设置有误,不能输出"<

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论