C++程序设计实践教程思考题答案Word文件下载.docx
《C++程序设计实践教程思考题答案Word文件下载.docx》由会员分享,可在线阅读,更多相关《C++程序设计实践教程思考题答案Word文件下载.docx(23页珍藏版)》请在冰豆网上搜索。
c<
Z'
)
c+='
-'
3.输入一个学生的成绩,如高于60分,则输出“pass”;
否则,输出“failed”。
#include<
floatgrade;
请输入成绩:
grade;
if(grade>
=60)
pass"
failed"
4.计算分段函数
#include<
doublex,y;
请输入一个数x:
x;
if(!
x)
y=cos(x)-pow(x,2)+3*x;
y=sin(x)+sqrt(pow(x,2)+1)+3*x;
y="
y<
2
5.从键盘上输入1~7之间的一个数字,输出其对应星期几的英文表示。
#include<
Enteracharacterofnumbersbetween1and7:
switch(c)
case'
1'
:
Monday"
break;
2'
Tuesdag"
3'
Wenesday"
4'
Thursday"
5'
Friday"
6'
Saturday"
7'
Sunday"
default:
cout<
wrongnumber"
6.设计一个简单的计算器程序,能够进行加、减、乘、除简单运算并显示结果。
输入简单的算术表达式:
(数操作符数)"
intleftOperand,rightOperand;
charOperator;
leftOperand>
Operator>
rightOperand;
intresult;
switch(Operator)
result=leftOperand+rightOperand;
result=leftOperand-rightOperand;
*'
3result=leftOperand*rightOperand;
/'
if(rightOperand!
=0)
result=leftOperand/rightOperand;
除数为0,除法不能进行"
Operator<
是本程序不支持的操作。
return0;
leftOperand<
rightOperand<
'
result<
实验3
三、思考题参考程序
1n2?
kn1.编程计算表达式k?
1的值。
intn,k=1,sum=0,mean;
请输入n的值:
"
n;
while(k<
=n)
sum+=k*k;
k++;
if(n>
0)
mean=sum/n;
mean=0;
1~n个整数平方和的均值="
mean<
4}
2.输入两个正整数,判别它们是否互为互质数。
所谓互质数,就是最大公约数是1。
intm,n,r;
请输入两个正整数:
m>
m<
”和”<
if(m<
n)
{r=m;
m=n;
n=r;
while(r=m%n)
if(n==1)
是互质数"
<
”不是互质数”<
3.编写程序,输出从公元2000年至3000年间所有闰年的年号。
intyear;
公元2000年至3000年间闰年的年号:
\n"
for(year=2000;
year<
=3000;
year++)
if((year%4==0&
year%100!
=0)||(year%400==0))
\t'
4.编写程序模拟猴子吃桃子问题:
猴子第1天摘下若干桃子,当即吃了一半,还不过瘾,又多吃了一个。
第2天将剩下的桃子又吃了一半,又多吃一个。
以后每天都吃了前一天剩下的
5
一半零1个。
到了第10天,只剩下了一个桃子。
请问猴子第一天共摘了多少个桃子?
方法1:
intday,qian,hou=1;
for(day=9;
day>
=1;
day--)
qian=(hou+1)*2;
hou=qian;
qian<
运行结果:
1534
方法2:
intday,number=1;
number=(number+1)*2;
number<
方法3:
intpeach(int);
第1天共摘了"
peach
(1)<
个"
intpeach(intday)
intnumber;
6
if(day==10)
number=1;
number=2*(peach(day+1)+1);
returnnumber;
5.计算s=1+(1+2)+(1+2+3)+(1+2+3+4)+…+(1+2+3+…+n)的值。
方法1:
inti,j,n;
longintsum,total(0);
inputn:
for(i=1;
i<
=n;
i++)
sum=0;
for(j=1;
j<
=i;
j++)
sum+=j;
total+=sum;
s="
total<
inti,n;
longintsum(0),total(0);
sum+=i;
7
6.马克思曾经做过这样一道趣味数学题:
有30个人在一家小饭馆用餐,其中有男人、女人和小孩。
每个男人花了3先令,每个女人花了2先令,每个小孩花了1先令,一共花了50先令。
请问男人、女人以及小孩各有几个人?
intx,y,z;
for(x=1;
x<
=16;
x++)
for(y=1;
=24;
y++)
z=30-x-y;
if(3*x+2*y+z==50)
Menare"
womenare"
y<
childrenare"
z<
."
}
}实验4常用程序设计算法
1.读入一个整数N,若N为非负数,则计算N到2×
N之间的整数和;
若N为负数,则求2×
N到N之间的整数和。
分别利用for和while写出两个程序。
intN;
N;
inti=N;
longsum=0;
if(N>
for(;
=2*N;
8
i>
i--)sum+=i;
sum<
usingnamespacestd;
if(N>
=0){
while(i<
=2*N){
i++;
while(i>
i--;
9
2.设s?
1?
111?
?
,求与8最接近的s的值及与之对应的n值。
23n
floats=1.0;
intn=1;
do
++n;
s+=1.0/n;
}while(s<
=8);
if((s-8)>
(8-(s-1.0/n)))
s-1.0/n<
'
n="
n-1<
s<
n<
3.已知A>
B>
C,且A+B+C<
100,求满足1?
1的共有多少组。
A2B2C2
intA,B,C;
intcount=0;
for(C=0;
C!
=33;
++C)
for(B=100;
B>
C;
--B)
for(A=100;
A>
B;
--A)
if((A+B+C<
100)&
((A*A*B*B)==((A*A+B*B)*C*C))){
cout<
A<
B<
C<
endl;
++count;
countis:
count<
10
4.一司机出车祸后驾车逃离现场,第一位目击者记得车牌号前两位数字相同,且后两位数字也相同;
第二位目击者是一位数学家,他看出车牌号是四位完全平方数。
试推算肇事车的车牌号。
intn,i;
for(i=32;
100;
n=i*i;
if(n%10==n%100/10&
n/1000==n/100%10)
11
5.编程验证“四方定理”:
所有自然数至多只要用4个数的平方和就可以表示。
intnumber,i,j,k,l;
Pleaseenteranumber:
number;
number/2;
for(j=0;
for(k=0;
k<
=j;
k++)
for(l=0;
l<
=k;
l++)
if(number==i*i+j*j+k*k+l*l)
="
*"
+"
exit(0);
6.编程验证“角谷猜想”:
任给一个自然数,若为偶数则除以2,若为奇数则乘3加1,得到一个新的自然数,然后按同样的方法继续运算,若干次运算后得到的结果必然为1。
intn,flag;
flag=1;
pleaseinputn:
while(flag)
if(n%2==0)
n=n/2;
n=n*3+1;
12
}if(n==1){flag=0;
success!
}}return0;
实验5函数和编译预处理
1.参考程序如下:
longintFibonacci(intn);
voidmain()
longintt,t1;
pleaseinputt:
t;
for(i=2;
t1=Fibonacci(i);
if(t1>
t){cout<
minFibonacci="
t1<
}}
longintFibonacci(intn)
if(n==0)return1;
elseif(n==1)return1;
elsereturnFibonacci(n-1)+Fibonacci(n-2);
2.参考程序如下:
intnum_n(intn,inta)//由n个a组成的多位数的计算{
if(n==1)returna;
13
elsereturnnum_n(n-1,a)*10+a;
longintsum=0;
for(i=1;
{cout<
num_n(i,2)<
sum+=num_n(i,2);
sum="
3.参考程序如下:
intisprime(intn)//判断n是否为素数的函数{
n-1;
if(n%i==0)return0;
//非素数,函数值返回0return1;
//素数,函数值返回1
inti,min_prime,max_prime;
for(i=1000;
=2000;
if(isprime(i)==1)
最小素数="
break;
}for(i=2000;
=1000;
i--)
最大素数="
4.参考程序如下:
intsum(intn)
14{
statics=0;
s=s+n;
returns;
inti,n,s;
情指定n:
s=sum(i);
1~n之和="
5.参考程序如下:
intis_h(intn)//判断参数n是否为回文
inti,m,fn;
//i用来记录n的某一位数字,m初值为n,fn用于记录n的倒序数m=n;
fn=0;
while(m!
i=(m%10);
fn=(fn*10+i);
m=m/10;
if(fn==n)return1;
//是回文数返回1
elsereturn0;
//不是回文数返回0
intt;
cin>
=t;
if(is_h(i)==1)
回文数:
15
6.参考程序如下:
#defineX(a+b)/2
#defineAREAX*h
floata,b,h,s;
请分别输入a,b,h的值,用空格分隔!
b>
h;
s=AREA;
AREA<
实验六数组
三、实验思考题
参考源代码
思考题1.shi_6_3_1.cpp
iostream.h>
#defineN5
intlookup(int[],int,int);
//函数说明
{inti,a[N],index,yLooked;
请输入N(=5)个整数:
for(i=0;
i++)cin>
a[i];
请输入您要找的整数:
yLooked;
index=lookup(a,N,yLooked);
//函数调用if(index!
=-1)
您要找的数下标为:
index<
else
没有找到"
yLooked<
\n谢谢使用本程序,再见!
cin.get();
16cin.get();
intlookup(intx[],intn,inty)//函数定义
{intflag=-1;
//首先假设找不到
if(x[i]==y)
{flag=i;
//找到了则不必再往后找
returnflag;
--------------------------------------------------------------------------------------------------思考题2.shi_6_3_2.cpp
intmax(int[],int);
{inti,a[N],xMax;
xMax=max(a,N);
数组中最大的的整数:
xMax<
cin.get();
intmax(intx[],intn)
{inti,r=x[0];
//首先假设x[0]最大,且存于r中
i++)//也可写成for(i=0;
if(x[i]>
r)r=x[i];
//发现了更大的则修改r
returnr;
//r中存有最大元素的值
------------------------------------------------------------------