VisualC++面向对象编程教程第2版王育坚清华大学出版社课后答案.docx
《VisualC++面向对象编程教程第2版王育坚清华大学出版社课后答案.docx》由会员分享,可在线阅读,更多相关《VisualC++面向对象编程教程第2版王育坚清华大学出版社课后答案.docx(157页珍藏版)》请在冰豆网上搜索。
VisualC++面向对象编程教程第2版王育坚清华大学出版社课后答案
2-45编写一个程序,输入三角形的三条边的边长,求三角形的面积。
2-45
#include
#include
intmain()
{
inta,b,c;
ints,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<<"此三边不能构成三角形!
"<else
{
cout<<"面积:
"<cout<
}
return0;
}
2-46从键盘输入一个大写字母,然后改用小写字母在屏幕输出。
2-46
#include
intmain()
{
charch;
inta;
cout<<"输入一个大写字母:
"<cin>>ch;
if(ch>=65&&ch<=91)
{
ch=ch+32;
//a=(int)ch;
cout<}
elsecout<<"该字母不是字母或不是字母大写!
"<return0;
}
2-47用户输入两个整数,编程输出稍大于第一个整数而又是第2个整数的倍数的数。
计算公式是:
valuel+value2-value1%value2.
2-47
#include
intmain()
{
intvalue1,value2;
intresult;
cin>>value1>>value2;
result=value1+value2-value1%value2;
cout<<"该整数为:
"<return0;
}
2-48华氏温度转换为摄氏温度的公式是:
C=(F-32)*5/9.。
编写一个程序,输入一个华氏温度,程序输出相应的摄氏温度。
请将32和5/9用const型变量表示。
2-48
#include
intmain()
{
constfloati=32.0;
constfloatj=5.0/9.0;
floatdegFahr;
floatdegCel;
cin>>degFahr;
//for(degFahr=0;degFahr<=300;degFahr+=10)
//{
degCel=j*(degFahr-i);
cout<<"华氏温度:
"<cout<<"摄氏温度:
"<//}
return0;
}
2-49从键盘输入20个整数,检查100是否存在于这些整数中,若是的话,求出他是第几个被输入的。
2-49
#include
intmain()
{
intArray[20];
inti,count=0,c=0;
for(i=0;i<20;i++)
cin>>Array[i];
for(i=0;i<20;i++)
{
if(Array[i]==100&&count==0)
{
cout<<"100存在该数组中!
"<count++;
}
if(Array[i]!
=100)
{
c++;
if(c==19)
cout<<"100不存在该数组中!
"<}
}
for(i=0;i<20;i++)
{
if(Array[i]==100)
cout<<"它是第"<
"<}
return0;
}
2-50从键盘输入一个NXN的整型数组,并将每一行的最大值显示输出。
2-50
#include
intmain()
{
intArray[100][100]={0};
intn,temp;
cin>>n;
for(inti=0;i{
for(intj=0;jcin>>Array[i][j];
for(intx=0;xfor(inty=x+1;yif(Array[i][x]{
temp=Array[i][x];
Array[i][x]=Array[i][y];
Array[i][y]=temp;
}
}
cout<<"每一行的最大值:
"<for(i=0;icout<cout<}
2-51输入三个整数,采用指针方法将三个数按从大到小的顺序输出。
2-51
#include
#include
intmain()
{
intArray[3];
int*pA=Array;
int*a=Array;
inti;
inttemp;
for(i=0;i<3;i++)
cin>>Array[i];
for(i=0;i<3;i++)
{
a++;
if(*pA<*a)
{
temp=*pA;
*pA=*a;
*a=temp;
a++;
pA++;
}
a=&Array[0];
}
for(i=0;i<3;i++)
cout<return0;
}
2-52采用指针方法将一个数组中的所有元素颠倒顺序,结果仍然存放在原来的数组中,要求使用最少的辅助存储单元
2-52
#include
intmain()
{
intn;
cout<<"输入数组的长度(小于100):
"<cin>>n;
cout<<"输入"<"<intArray[100];
int*pA=Array;
inti;
for(i=0;i{
cin>>Array[i];
pA++;
}
for(i=0;i{
pA--;
cout<<*pA<<"";
}
return0;
}
2-53输入两个字符串,如果两个字符串的字符和长度都相同(认为它们相等),在屏幕上输出“Equal”,否则在屏幕上输出“Unequal”。
要求使用字符指针。
2-53
#include
intmain()
{
char*pstr="Enterastring:
";
charstr1[100],str2[100];
cout<cin.get(str1,100);
cin.get();
cin.get(str2,100);
intlen1=0,len2=0;
while(str1[len1]!
='\0')
len1++;
while(str2[len2]!
='\0')
len2++;
if(len1!
=len2)
cout<<"Unequal"<elseif(len1==len2)
{
inti=0;
for(i=0;iif((str1[i]==str2[i])&&icontinue;
if(i=len1-1)
cout<<"Equal"<elsecout<<"Unequal"<}
return0;
}
2-54编程将一个整数转换成对应的数字串,例如将值1234转换为数字串“1234”。
2-54
#include
intmain()
{
intnumber;
intArray[100];
inti,j;
cin>>number;
for(i=0;number!
=0;i++)
{
Array[i]=number%10;
number=number/10;
}
j=i;
for(i=j;i>=0;i--)
cout<cout<return0;
}
2-55编程求两个复数的和。
2-55
#include
intmain()
{
floata[2],b[2],c[2];
inti;
for(i=0;i<2;i++)
cin>>a[i];
for(i=0;i<2;i++)
cin>>b[i];
for(i=0;i<2;i++)
c[i]=a[i]+b[i];
cout<return0;
}
2-56使用结构变量表示每个学生的信息:
姓名、学号和三门课的成绩。
从键盘输入10个学生的数据,然后输出每个学生的姓名和三门课的平均成绩。
2-56
#include
structstudent
{
charnum[10];
charname[20];
floatgrade[3];
floataverage;
};
intmain()
{
studentstu[10];
inti,j;
floatsum=0;
for(i=0;i<=9;i++)
{
printf("Enternum:
\n");
scanf("%s",&stu[i].num);
printf("Entername:
\n");
scanf("%s",&stu[i].name);
printf("Enterthreegrades:
\n");
for(j=0;j<3;j++)
{
scanf("%f",&stu[i].grade[j]);
sum+=stu[i].grade[j];
}stu[i].average=sum/3;
printf("%f%s\n",stu[i].average,stu[i].name);
}
return0;
}
2-57用结构数组建立并初始化一个工资表,然后输入一个人的姓名,查询其工资情况,并在屏幕上输出。
2-57
2-58用枚举值MON、TUE、WED、THU、FRI、SAT和SUN表示一个星期中的7天。
从键盘输入一个0~6之间的整数,根据输入的整数输出对应的英文缩写。
2-58
2-59编写一个求解一元二次方程的根的程序,方程的系数由用户输入。
2-59
#include
#include
intmain()
{
inta,b,c;
intR;
floatp;
floatx1,x2;
cin>>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<<"仅且只有一个根"<else
cout<<"有两个不同的根"<}
elseif(R<0)cout<<"无根"<return0;
}
2-60从键盘输入一个字符,判断输入的字符是m、a、n或其他字符。
如果是m则输出“Goodmorning!
”;如果是a则输出“Goodafternoon!
”;如果是n则输出“Goodnight!
”;如果是其他字符则输出“Ican‘tundersrand!
”。
2-60
2-61编程实现两个整数的加、减、乘、除四则运算,运算式形如“32+120”。
2-61
2-62编写一个程序,利用swith语句将百分制的学生成绩转换为优、良、中、及格和不及格5分制成绩。
2-62
2-63从键盘输入一个字符,判断输入的字符是数字、空格还是其他字符,并给出相应的提示信息。
2-63
#include
intmain()
{
charch;
cout<<"请输入一个字符:
";
cin.get(ch);
if(ch=='')
cout<<"这是一个空格!
"<elseif((ch>='0')&&(ch<='9'))
cout<<"这是一个数字!
"<else
cout<<"这是一个其他字符!
"<return0;
}
2-64从键盘输入一个字符序列,编程统计其中的数字个数和英文字母个数。
输入的字符序列以“#”作为结束符。
2-64
#include
intmain()
{
charsymbol[100];
inti,end,j=0,k=0;
cin>>symbol;
for(i=0;i<100;i++)
if(symbol[i]=='#')
{
end=i;
break;
}
for(i=0;i{
if((symbol[i]>='0')&&(symbol[i]<='9'))j++;
elsek++;
}
cout<<"digit:
"<cout<<"letter:
"<return0;
}
2-65输入一个由若干单词组成的文本串,每个单词之间用一些空格分隔,统计此文本串单词的个数。
2-65
#include
intmain()
{
charstr[1000];
intcount=1;
cin.get(str,1000);
//while(!
str[0])
//{
for(inti=0;str[i]!
=0;i++)
if(str[i]==''&&str[i+1]!
='')
count++;
//}
cout<<"thecountis:
"<return0;
}
2-67编程求π值,使用如下公式:
π/4=1-1/3+1/5-1/7+…,直到最后一项的绝对值小于10-6为止。
2-67
(1)
#include
#include
intmain()
{
inti,n=1,j=1;
doubles=0;
for(i=0;(2*i+1){
/*cout<
cout<<"******************";
cout<<2*i+1<cout<<"********************************";
cout<cout<<"******************";*/
s+=pow((2*i+1),-1)*n;
//j=2*i+1;
n=n*(-1);
}
cout<
cout<<4*s<return0;
}
2-67
(2)
#include
#include
intmain()
{
floati=0;
doubles=0;
for(i=0;2*i+1{
s+=pow(-1,i)*(1/(2*i+1));
}
cout<
return0;
}
2-68把100~150之间不能被3整除的数输出,要求一行输出10个数。
2-68
2-69编程输出一个九九乘法表。
2-69
#include
intmain()
{
chartable[9][9];
inti,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<}
cout<}
return0;
}
2-70编程计算整型数各位数字之和,例如数2007各位数字之和为2+0+0+7=9.
2-70
#include
intmain()
{
intnum;
intsum=0,i;
cin>>num;
for(i=0;num!
=0;i++)
{
sum+=num%10;
num=num/10;
}
cout<<"sum="<return0;
}
2-71输入n个整数,利用冒泡排序法将它们从小到大排列,并在屏幕上输出。
2-71
#include
intmain()
{
intn;
inti,j,temp;
intnum[100];
cin>>n;
for(i=0;icin>>num[i];
for(i=0;ifor(j=i+1;jif(num[i]{
temp=num[i];
num[i]=num[j];
num[j]=temp;
}
for(i=0;icout<cout<return0;
}
2-72编程求出从键盘输入的10个数之和,遇到负数时终止输入求和。
2-72
#include
intmain()
{
intArray[10];
intsum=0;
for(inti=0;i<10;i++)
{
cin>>Array[i];
if(Array[i]>0)
sum+=Array[i];
else
break;
}
cout<return0;
}
2-73编程求出从键盘输入的10个数中所有正数之和,负数不参加求和。
2-73
#include
intmain()
{
intnum[10];
inti,sum=0;
for(i=0;i<=9;i++)
{
cin>>num[i];
if(num[i]>0)
sum+=num[i];
}
cout<<"sumis"<return0;
}
2-74设计函数prime(),它只带一个整型参数,当这个参数的值是素数时,该函数返回非0,否则返回0.利用这个函数编写一个程序来验证哥德巴赫猜想:
任何一个大于2的偶数都可以表示成两个素数之和。
2-74
#include
intprime(intx)
{
inti;
for(i=2;iif(x%i==0)
return0;
returnx;
}
intmain()
{
inta,b,c,d;
intj=2,k;
cin>>a;
if(a>2&&a%2==0)
{
for(j=2;j{
b=prime(j);
if(b==j)
c=a-b;
d=prime(c);
if(d==c)
cout<<"该定理成立!
"<}
}
elsecout<<"此数不是大于2的偶数!
"<return0;
}
2-75编制如下函数原型的函数:
intindex(constchar*str,charc),这个函数返回字符串str中第一次出现字符c的位置。
2-75
#include
intindex(constchar*str,charc)
{
intcount=1;
intCcount=0;
for(inti=0;str[i]!
='\0';i++)
{
if(str[i]==c&&Ccount==0)
{
Ccount++;
break;
}
count++;
}
returncount;
}
intmain()
{
charstring[100];
charC;
intV=0;
intresult;
cin>>string;
cin>>C;
while(string[V]!
='\0')
V++;
result=index(string,C);
if((V+1)==result)
cout<<"此字符不在字符串中!
"<else
cout<return0;
}
2-76首先编写以下函数声明的函数:
voidswap(float*px,float*py),该函数用于交换两个实型变量的值,然后编写一个主函数验证函数swap()的功能。
2-76
#include
voidswap(float*px,float*py)
{
floattemp;
temp=*px;
*px=*py;
*py=temp;
}
intmain()
{
floatX,Y;
cin>>X>>Y;
swap(&X,&Y);
cout<<"使用swap函数的值";
cout</*floattemp;
{
temp=X;
X=Y;
Y=temp;
}*/
cout<<"验证值:
"<return0;
}
2-77定义将一个字符串反转的函数,例如将字符串“abcd”反转为“dcba”。
2