中南大学C++程序设计实践思考题答案Word格式.docx
《中南大学C++程序设计实践思考题答案Word格式.docx》由会员分享,可在线阅读,更多相关《中南大学C++程序设计实践思考题答案Word格式.docx(27页珍藏版)》请在冰豆网上搜索。
![中南大学C++程序设计实践思考题答案Word格式.docx](https://file1.bdocx.com/fileroot1/2022-11/29/e9b9b171-5ccc-4151-86fb-80ef58bf7af6/e9b9b171-5ccc-4151-86fb-80ef58bf7af61.gif)
if(c>
='
c<
Z'
)
c+='
-'
3.输入一个学生的成绩,如高于60分,则输出“pass”;
否则,输出“failed”。
floatgrade;
请输入成绩:
grade;
if(grade>
=60)
pass"
else
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<
5.从键盘上输入1~7之间的一个数字,输出其对应星期几的英文表示。
Enteracharacterofnumbersbetween1and7:
switch(c)
{
case'
1'
:
cout<
Monday"
break;
2'
Tuesdag"
3'
Wenesday"
4'
Thursday"
5'
Friday"
6'
Saturday"
7'
Sunday"
default:
wrongnumber"
}
6.设计一个简单的计算器程序,能够进行加、减、乘、除简单运算并显示结果。
输入简单的算术表达式:
(数操作符数)"
intleftOperand,rightOperand;
charOperator;
leftOperand>
Operator>
rightOperand;
intresult;
switch(Operator)
result=leftOperand+rightOperand;
result=leftOperand-rightOperand;
*'
result=leftOperand*rightOperand;
/'
if(rightOperand!
=0)
result=leftOperand/rightOperand;
除数为0,除法不能进行"
break;
Operator<
是本程序不支持的操作。
leftOperand<
rightOperand<
'
result<
实验3
三、思考题参考程序
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<
2.输入两个正整数,判别它们是否互为互质数。
所谓互质数,就是最大公约数是1。
intm,n,r;
请输入两个正整数:
m>
m<
”和”<
if(m<
n)
{r=m;
m=n;
n=r;
}
while(r=m%n)
m=n;
n=r;
if(n==1)
是互质数"
<
else
”不是互质数”<
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天将剩下的桃子又吃了一半,又多吃一个。
以后每天都吃了前一天剩下的一半零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;
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)的值。
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;
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;
sum+=i;
i>
i--)
sum<
while(i<
=2*N)
{
i++;
}
while(i>
i--;
2.设
,求与8最接近的s的值及与之对应的n值。
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,求满足
的共有多少组。
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<
4.一司机出车祸后驾车逃离现场,第一位目击者记得车牌号前两位数字相同,且后两位数字也相同;
第二位目击者是一位数学家,他看出车牌号是四位完全平方数。
试推算肇事车的车牌号。
intn,i;
for(i=32;
100;
n=i*i;
if(n%10==n%100/10&
n/1000==n/100%10)
cout<
5.编程验证“四方定理”:
所有自然数至多只要用4个数的平方和就可以表示。
intnumber,i,j,k,l;
Pleaseenteranumber:
number;
number/2;
i++)
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)
{
cout<
="
*"
+"
exit(0);
}
6.编程验证“角谷猜想”:
任给一个自然数,若为偶数则除以2,若为奇数则乘3加1,得到一个新的自然数,然后按同样的方法继续运算,若干次运算后得到的结果必然为1。
intn,flag;
flag=1;
pleaseinputn:
while(flag)
if(n%2==0)
n=n/2;
else
n=n*3+1;
if(n==1)
flag=0;
success!
实验5函数和编译预处理
1.参考程序如下:
longintFibonacci(intn);
voidmain()
inti;
longintt,t1;
pleaseinputt:
cin>
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;
elsereturnnum_n(n-1,a)*10+a;
inti,n;
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;
//非素数,函数值返回0
return1;
//素数,函数值返回1
inti,min_prime,max_prime;
for(i=1000;
=2000;
if(isprime(i)==1)
最小素数="
for(i=2000;
=1000;
最大素数="
4.参考程序如下:
intsum(intn)
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的倒序数
fn=0;
while(m!
i=(m%10);
fn=(fn*10+i);
m=m/10;
if(fn==n)return1;
//是回文数返回1
elsereturn0;
//不是回文数返回0
intt;
=t;
if(is_h(i)==1)
回文数:
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<
没有找到"
yLooked<
\n谢谢使用本程序,再见!
cin.get();
intlookup(intx[],intn,inty)//函数定义
{intflag=-1;
//首先假设找不到
for(i=0;
if(x[i]==y)
{flag=i;
//找到了则不必再往后找
returnflag;
--------------------------------------------------------------------------------------------------
思考题2.shi_6_3_2.cpp
intmax(int[],int);
{inti,a[N],xMax;