西安交通大学 C++ 上机实验.docx
《西安交通大学 C++ 上机实验.docx》由会员分享,可在线阅读,更多相关《西安交通大学 C++ 上机实验.docx(15页珍藏版)》请在冰豆网上搜索。
西安交通大学C++上机实验
西安交通大学实验报告
一.实验目的
(1)了解了C++程序中的几种控制结构,包括分支和循环。
(2)初步学习运用了for循环、while循环、do{}while循环,能够简单的用于一些问题的解答。
(3)熟悉了两种分支:
两重分支和多重分支,并将两重分支多次运用于将解决实际问题。
(4)了解了许多有趣的数字,并使用程序获得有关这些数字的知识。
二.实验内容
(-)实验题目一:
第3章第2题
1.程序源代码
#include
usingnamespacestd;
intmain()
{
doublex,y;
cout<<"请输入x的值";
cin>>x;
if(x<0)
{
y=x*x;
}
else
{
y=x*x*x+2*x*x+x;
}
cout<<"y="<return0;
}
2.实验结果
(二)实验题目二:
编程计算n!
。
n由用户输入,输入的n不合法时给出提示
【问题扩展】你写的程序能计算多大的数的阶乘。
再大了呢?
怎么办呢?
1.程序源代码
#include
usingnamespacestd;
intmain()
{
intm,i;
doublen,sum;
cout<<"请输入n的值";
cin>>n;
i=1;
sum=1;
m=n;
if(n-m!
=0)
{
cout<<"输入的n不合理"<}
else
{
if(n<=0)
{
if(n==0)
{
cout<<"阶乘sum=1"<}
else
{
cout<<"输入的n不合理"<}
}
else
{
do
{
sum=i*sum;
i=i+1;
}while(i<=n);
cout<<"阶乘sum="<}
}
return0;
}
2.实验结果
【问题扩展】为了得到更大数的阶乘,采用范围更广的双精度型,使得能表示的结果的范围更大,即能够计算获得更大的数的阶乘,换句话说就是n!
<=1.8E+308
程序源代码
#include
usingnamespacestd;
intmain()
{
intn;
doublesum;
n=1;
sum=1;
do
{
sum=sum*n;
n=n+1;
cout<="<}while(n<=200);
return0;
}
实验结果
故最多只能计算170的阶乘,在n=171时将超过范围。
(三)实验题目三:
第3章第12题前两小题,即
(1)和
(2)题(必做题)
小题
(1)
1.程序源代码
#include
usingnamespacestd;
intmain()
{
intn,sum,Fn,i,b,m;
cout<<"请输入n的值";
cin>>n;
m=1;
sum=0;
i=1;
b=0;
if(n<0)
{
cout<<"输入不合理"<}
else
{
if(n==0)
{
cout<<"F0=0"<cout<<"前n项和sum=0"<}
else
{
do
{
Fn=b+m;
sum=sum+Fn;
b=Fn;
m=b-m;
i=i+1;
}while(i<=n);
cout<<"前n项和sum="<cout<<"第n项Fn的值为"<}
}
return0;
}
2.实验结果
小题
(2)
1.程序源代码
#include
#include
usingnamespacestd;
intmain()
{
doublefn,F1,F2;
doublef0=0,f1=1,sum=0,n=0;
do
{
sum=sum+f0/f1;
fn=f0+f1;
F1=f0/f1;
F2=f1/fn;
f0=f1;
f1=fn;
n=n+1;
}while(fabs(F1-F2)>=10E-8);
cout<<"n="<cout<<"f"<cout<<"前"<return0;
}
2.实验结果
(四)实验题目四:
第3章第13题(必做题)
1.程序源代码
#include
usingnamespacestd;
intmain()
{
inta,i,m,n,sum;
cout<<"请输入a和n的值";
cin>>a;
cin>>n;
sum=0;
m=a;
for(i=1;i<=n;i++)
{
cout<sum=a+sum;
a=m+a*10;
}
cout<return0;
}
2.实验结果
(五)实验题目五:
第3章第16题(必做题)
1.程序源代码
#include
usingnamespacestd;
intmain()
{
inta,b,c,d;
for(a=1;a>=0;a=a-1)//1:
是小偷0:
不是
for(b=1;b>=0;b=b-1)
for(c=1;c>=0;c=c-1)
for(d=1;d>=0;d=d-1)
if((a==0)+(c==1)+(d==1)+(d==0)==3&&a+b+c+d==1)//4人的说法中有3个真的,且只有一个小偷
{
cout<<"A"<<(a?
"":
"不")<<"是小偷。
"<cout<<"B"<<(b?
"":
"不")<<"是小偷。
"<cout<<"C"<<(c?
"":
"不")<<"是小偷。
"<cout<<"D"<<(d?
"":
"不")<<"是小偷。
"<}
return0;
}
2.实验结果
(六)实验题目六:
求所有水仙花数之和,再计算平均数。
1.程序源代码
#include
usingnamespacestd;
intmain()
{
inta,b,c,s,i,n;
doublep;
s=0;
n=0;
for(i=100;i<1000;i++)
{
a=i/100;
b=(i-a*100)/10;
c=(i-a*100-b*10)/1;
if(a*a*a+b*b*b+c*c*c==i)
{
s=s+i;
n=n+1;
cout<
}
}
p=s/n;
cout<<"水仙花数的总和s="<
return0;
}
2.实验结果
(七)实验题目七:
找出1000-2000之间所有整数中满足如下条件的数,该数的高端两位数字的和与低端两位数字的和值相等,如1001、1120。
程序能输出所有满足条件的数及它们的总个数。
1.程序源代码
#include
usingnamespacestd;
intmain()
{
inta,b,c,d,i,n;
n=0;
for(i=1000;i<=2000;i++)
{
a=i/1000;
b=(i-a*1000)/100;
c=(i-a*1000-b*100)/10;
d=(i-a*1000-b*100-c*10)/1;
if(a+b==c+d)
{
n=n+1;
cout<
}
}
cout<<"这类数的个数n="<return0;
}
2.实验结果
三.个人小结
经过这次上机实验,我学习掌握并应用了不同的循环和分支。
同时了解了C++中的有关循环和分支的知识,初步学会使用ifelse语句、switch语句来实现分支结构,学会了使用while语句、dowhile语句、for语句来实现循环结构,并在解决实际问题的编程中运用这些循环和分支,尤其是两重分支,它给我我们带来了更加简洁的算法。
除此之外,还对于一些特殊的数字有了初步的了解。
同时,自己对C++有了更加具体深入的体会,增加了对该门课程的兴趣。