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