C++程序设计 上机实践答案文档格式.docx
《C++程序设计 上机实践答案文档格式.docx》由会员分享,可在线阅读,更多相关《C++程序设计 上机实践答案文档格式.docx(88页珍藏版)》请在冰点文库上搜索。
s=a+b+c;
s=s/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
area<
实验二
{floata,b,c;
//定义变量,存放三角形的三边数据
cout<
inputabc\n"
//输入提示信息
cin>
//从键盘依次输入三边的值
if((a+b<
c)||(a+c<
b)||(b+c<
a))//判断这三边是否能构成三角形
cout<
NotTriangle\n"
//不满足三角形三边条件,输出否定信息
else
Triangle\n"
//满足三边构成条件,输出确认信息
{intyear;
//定义变量,存放将输入的年份
Inputyear:
//输出提示信息
year;
//输入欲判断的年份
if(year%400==0||year%4==0&
&
year%100!
=0)//判断该年份是否为闰年的条件
year<
isaleapyear"
//条件为真,说明输入的年份为闰年,输出确认信息
else
isn'
taleapyear"
//否则,输出否定信息
floata1,a2;
//定义两个操作数
charoper;
//定义运算符
floatresult;
//定义变量,存放结果
intflag=0;
//?
请输入简单的运算式:
\n"
a1>
oper>
a2;
//从键盘键入运算式,如5+3<
CR>
4.5*7<
等
switch(oper)//利用开关语句结构判断进行何种运算
{
case'
+'
:
//加法
result=a1+a2;
break;
-'
//减法
result=a1-a2;
*'
result=a1*a2;
default:
输入错误的运算符!
flag=1;
}
if(flag==0)
a1<
oper<
a2<
="
result<
//输出结果
doublea,b,c;
doublex1,x2,disc;
请输入方程的系数abc:
disc=b*b-4*a*c;
if(fabs(disc)<
1e-5)
x1=(-b)/2/a;
方程有两个相等的实根:
x="
x1<
elseif(disc<
0)
方程无实根!
else
x1=(-b+sqrt(disc))/2/a;
x2=(-b-sqrt(disc))/2/a;
方程有两个不同的实根:
x1="
\t"
x2="
x2<
\\
/'
if(a2==0)
{
cout<
除数不能为0!
flag=1;
break;
}
result=a1/a2;
实验三
intx,y;
//定义变量,x代表鸡的数目,y代表兔子的数目
for(x=1;
x<
30;
x++)//鸡的数目从1~30皆有可能,所以程序将所有可能的解循环验证一遍
for(y=1;
y<
y++)//同样兔子的数目从1~30皆有可能,所以程序将所有可能的解循环验证一遍
if(2*x+4*y==90&
x+y==30)//所有可能的解中将满足给定条件的解输出
鸡有:
'
\t'
兔有:
{inta,a1,a2;
//定义变量,a代表个位,a1代表十位,a2代表百位
intb;
//b为由a2,a1,a所组成的百位数
for(a2=1;
=9;
a2++)//百位的位值从1~9皆有可能,所以程序将所有可能的解循环验证一遍
for(a1=0;
a1++)//同样十位的位值从0~9皆有可能,所以程序将所有可能的解循环验证一遍
for(a=0;
a<
a++)
{b=a2*100+a1*10+a;
if(a*a*a+a1*a1*a1+a2*a2*a2==b)//所有可能的解中将满足给定条件的解输出
cout<
b<
inta0,a1,a2;
//定义变量,a0代表个位,a1代表十位,a2代表百位
//b为由a2,a1,a0所组成的百位数
for(b=100;
=999;
b++)//将数字b从100到999循环,并将每个数拆开,看看是否符合水仙花数的条件
a2=b/100;
//剥出数字b的百位数
a1=b/10%10;
//剥出数字b的十位数
a0=b%10;
//剥出数字b的个位数
if(a0*a0*a0+a1*a1*a1+a2*a2*a2==b)//判断是否满足水仙花数的条件
//满足条件,输出这个数
intman,woman,children;
//定义变量,存放结果(男人、女人、小孩的个数)
for(man=1;
man<
man++)//男人从1人到9人循环,每种情况下计算满足条件的女人和小孩的人数
for(woman=1;
woman<
=18;
woman++)//在男人人数确定的情况下,女人从1人到18人循环,每种情况下计算满足条件的小孩人数
{
children=36-man-woman;
//男人女人人数确定后,小孩的人数就可以根据条件求出
if((man+woman+children==man*4+woman*2+children/2)&
(children%2==0))
//看看每种条件下男人、女人、小孩的人数及搬的砖是否满足给定的条件,因为小孩是每两人
//搬一块砖,所以小孩人数必须是偶数
man="
woman="
children="
children<
//输出满足if条件的结果,即男人、女人、小孩的人数
}
inti,j,k,n,t=0;
//定义n为从1到599循环的数字,i,j,k分别为n的百位、十位、个位数字
//t为控制输出格式的计数变量
for(n=1;
n<
=599;
n++)//使n从1到599循环,将满足条件的n摘出来
i=n/100;
//剥出n的百位数
j=n/10%10;
//剥出n的十位数
k=n%10;
//剥出n的个位数
if(n%3==0&
(i==5||j==5||k==5))//当数字n满足给定的条件是
//输出n的值
t++;
if(t%5==0)//控制输出格式,每5个为一行,即输出5个数后输出回车
\n'
实验四
inta,b;
intt,x;
请输入两个正整数:
x=a*b;
if(a<
b)
{t=a;
a=b;
b=t;
while(t=a%b)
a=b;
b=t;
最大公约数:
最小公倍数:
x/b<
{inta,b,c;
//定义存放输入的三个整数的变量空间
Inputthreenumber:
//提示信息
//从键盘输入三个整数
for(inti=a;
i>
=1;
i--)//假设最大公约数为i,使i从a(或b或c)到1逐次递减循环
if(a%i==0&
b%i==0&
c%i==0)//当i满足公约数的条件时(同时能被a,b,c整除)时,退出循环,即这时的i即为最大公约数
i<
//输出结果
inta;
请输入一个正整数:
a;
for(inti=2;
a/2;
i++)
if(a%i==0)
if(i>
=a/2)
是素数\n"
不是素数\n"
inta,b,c;
请输入三个整数:
=a*b*c;
if(i%a==0&
i%b==0&
i%c==0)
最小公倍数为:
for(inti=100;
=200;
i++)//将i从100到200依次循环,以求出所有满足素数条件的i
{
for(intj=2;
j<
i/2;
j++)//对每一个i,判断i是否为素数,即让i依次被2,3,...,i/2除,看看是否有余数
if(i%j==0)//若i能被上述其中一个数整除,即表示i不是素数,后面的数就不必除了,直接退出循环
if(j>
=i/2)//出了循环后,要判断i是中途退出的(不是素数)还是循环到i/2后再退出的(是素数)
//如果除数大于等于i/2,即表明i是循环完退出的,是素数,输出结果
ints;
for(inti=1;
1000;
a=i;
s=0;
for(intj=1;
i;
j++)
if(a%j==0)
s=s+j;
if(a==s)
实验五
intt=2;
ints=0;
=7;
s=s+t;
t=t*10+2;
2+22+222+...+2222222="
{floaty=1,t=1;
//t为通项,初值为1,即1!
,y为结果,初值为1
intn;
Inputn:
n;
//输入欲求的项数
for(inti=2;
=n;
{t=t*i;
//根据前一项求后一项
y=y+t;
//通项累加和
1!
+2!
+3!
+....+"
!
floatx,y1,y2;
请输入x的值:
x;
y2=x;
do
y1=y2;
y2=2*y1/3+x/y1/y1/3;
}while(fabs(y1-y2)>
1e-5);
y="
y2<
floatx,y,t;
//t为通项,x为未知数
intn;
//n为通项个数,必须是整数
Inputnx:
//输出提示信息
n>
//从键盘输入数据102.5
y=x;
//结果的初始值,因为循环从第2项开始,所以第1项要先赋给结果y
t=x;
//通项的初始值
i++)//假设第1项已求出(初始值),从第2项开始计算
t=-t*x*x/((2*i-1)*(2*i-2));
//首先计算通项,计算方法是用前1项的值推算后1项的值
//即求出前后两项相除的结果,这个结果是它们相差的倍数,然后前1项的值乘以这个倍数即为后1项的值
y=y+t;
//将当前的通项值累加起来
实验六
floatfun(floatx)//函数fun求形参x的函数值,并将结果返回
floaty;
//定义x的函数值
y=2*x*x+3*x+5;
//计算函数值
returny;
//将结果返回
floaty1,y2;
//定义x为1和1.2时的函数值
y1=fun(1.0);
//将1.0作为实参调用fun函数,即赋给形参x,函数值即为所求的结果
y2=fun(1.2);
//将1.2作为实参调用fun函数,即赋给形参x,函数值即为所求的结果
y1="
y1<
y2="
floatf(floatx)//求形参x的多项式的值
returnx*x+3*x-4;
floatf1(floatx)//求形参x的多项式的导数值
return2*x+3;
floatx1,x0;
//定义存放新旧迭代值的变量
x1=0;
//迭代变量赋初值
x0=x1;
//迭代循环,将新的迭代值变成旧的迭代值,再去求新的迭代值
x1=x0-f(x0)/f1(x0);
//用旧的迭代值求新的迭代值
}while(fabs(x1-x0)>
//不满足结束条件,一直迭代循环
x="
floatf(floatx)//根据形参x求函数f(x)=x*x+3*x-4的值
{returnx*x+3*x-4;
floatx1,x2,x0;
do//判断输入的初值是否满足要求
{cout<
请输入初值x1和x2:
x1>
x2;
//输入初值
}while((f(x1)*f(x2))>
0);
//当解不在初值范围之内时,重新循环输入初值
{x0=(x1+x2)/2;
//根据初值求方程的新的根x0
if(f(x0)*f(x1)>
0)//实际的根在x2和x0之间
x1=x0;
//将x0作为新的x1
else//实际的根在x1和x0之间
x2=x0;
//将x0作为新的x2
}while(fabs(f(x0))>
//判断x0是否是满足方程的解的精度
x0="
x0<
//输出x0
{x0=(x1*f(x2)-x2*f(x1))/(f(x2)-f(x1));
floatff(floatx)
if(fabs(f(x))<
y=x;
y=ff(x-f(x)/f1(x));
floatx1;
ff(x1)<