实验3 c++程序设计初步.docx

上传人:b****4 文档编号:26994580 上传时间:2023-06-24 格式:DOCX 页数:14 大小:18.73KB
下载 相关 举报
实验3 c++程序设计初步.docx_第1页
第1页 / 共14页
实验3 c++程序设计初步.docx_第2页
第2页 / 共14页
实验3 c++程序设计初步.docx_第3页
第3页 / 共14页
实验3 c++程序设计初步.docx_第4页
第4页 / 共14页
实验3 c++程序设计初步.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

实验3 c++程序设计初步.docx

《实验3 c++程序设计初步.docx》由会员分享,可在线阅读,更多相关《实验3 c++程序设计初步.docx(14页珍藏版)》请在冰豆网上搜索。

实验3 c++程序设计初步.docx

实验3c++程序设计初步

 

中南大学

实验报告

 

课程名称c++程序设计

实验项目名称实验4实验5实验6

指导老师向瑶

实验学生班级电子信息工程1503

实验学生姓名陶韬

学    号0903130309

实验时间2016.4.1至4.10

实验地点校本部科技楼4楼

实验成绩评定

 

实验三c++程序设计初步

班级:

电信1503姓名:

陶韬

实验3.1

题目:

有一函数

X(X<1)

Y=2X-1(1=

3X-11(x>=10)

编程输入x,求y

代码

#include

usingnamespacestd;

main()

{

intx,y;

cout<<"enterx:

";

cin>>x;

if(x<1)

{

y=x;

cout<<"x="<

}

elseif(x<10)

{

y=2*x-1;

cout<<"x="<

}

else

{

y=3*x-11;

cout<<"x="<

}

cout<

return0;

}

运行结果

enterx:

-1

x=-1,y=x=-1

enterx:

4

X=4,y=2*x-1=7

enterx:

20

x=20,y=3*x-11=49

实验3.2

题目:

一个数如果恰好等于它的因子之和,这个数就称为“完数”。

例如6的因子为1,2,3,而6=1+2+3,因此6是“完数”。

编程找出1000之内的所有完数,并按照下面格式输出其因子

6,itsfactorsare1,2,3;

我的分析思路

首先算法应该分为2大部分

第一部分把输入的数的所有因子找出来可以定义一个整型数组来存放因子

第二部分判断这个数的所有因子之和和这个数是否相等相当就输出不等就继续循环

代码

方法一:

#include

usingnamespacestd;

main()

{

inti=1,j=1,sum=0;//定义变量i是表示1到1000的数

//j是因子,sum是因子的和

intk=0,m=0,factor[1000];

//facetor[]是存放因子数值的数组k表示数组的下标

for(i=1;i<=1000;i++,sum=0,k=0)//通过循环找出i的所有因子然后求和

//注意每次循环前sum和k的值一定要重置

{

for(j=1;j

if(i%j==0)

{

sum+=j;

factor[k]=j;

k++;

}

if(i==sum)//判断i是否等于sum如果是就输出结果否则继续外圈循环(i循环)

{

cout<

for(m=0;m<=k-1;m++)

cout<

cout<

}

}

}

输出结果

6,itsfactorsare1,2,3,

28,itsfactorsare1,2,4,7,14,

496,itsfactorsare1,2,4,8,16,31,62,124,248,

方法二:

#include

usingnamespacestd;

main()

{

inti=0,j=0,sum=0;

for(i=2;i<=1000;i++,sum=0)//这里每次循环前对sum进行重新赋值很重要

{

for(j=1;j

if(i%j==0)

sum+=j;

if(sum==i)//如果满足条件就通过循环结构输出因子的值

{

cout<

for(j=1;j

if(i%j==0)

cout<

cout<

}

}

return0;

}

输出结果

6,itsfactorsare1,2,3,

28,itsfactorsare1,2,4,7,14,

496,itsfactorsare1,2,4,8,16,31,62,124,248,

实验3.3.1

题目:

用迭代法求x=√a求平方根的迭代公式为

Xn+1=1/2(Xn+1/(Xn))

要求前后两次求出的x的差的绝对值小于1e-5,在运行时输入不同的数值赋给变量a,分析所得结果是否正确。

如果输入的值为一个负数,在运行时会出现什么情况?

修改程序使之能处理任何的a值

前后两次求出的x的差的绝对值能否该为小于1e-10或者更小?

为什么?

请试一下。

分析:

求平方根的算法为

设定一个x的初值x0

用上述公式求出x的下一个值x1

再将x1带入上述公式右侧,求出x的下一个值x2

如此继续下去,直到前后2次求出x的值

代码1

#include

#include

usingnamespacestd;

main()

{

floatx0,x1,a;

cout<<"请输入一个正数"<

cin>>a;

x0=a/2;

x1=0.5*(x0+a/x0);

for(;fabs(x1-x0)>1e-5;)

{

x0=x1;

x1=0.5*(x0+a/x0);

}

cout<<"a的平方根为"<

}

输出结果

请输入一个正数

2

a的平方根为1.41422

Pressanykeytocontinue

实验3.3.2

如果输入一个负值会一直循环下去也就是形成死循环

解决方法在a的输入语句后面加一个判断语句判断所给的a是否是正值如果不是就需要再输入

代码

#include

#include

usingnamespacestd;

main()

{

floatx0,x1,a;

cout<<"请输入一个正数"<

cin>>a;

for(;a>0;)

{

cout<<"你输入的不是一个符合要求的正数,请重新输入"<

cin>>a;

}

x0=a/2;

x1=0.5*(x0+a/x0);

for(;fabs(x1-x0)>1e-5;)

{

x0=x1;

x1=0.5*(x0+a/x0);

}

cout<<"a的平方根为"<

}

输出结果

请输入一个正数

-1

你输入的不是一个符合要求的正数,请重新输入

2

a的平方根为1.41421

Pressanykeytocontinue

实验3.3.3前后2次x的差的绝对值能否改为小于1e-10或者更小?

为什么?

请试一下

可以修改,但是实际作用和1e-5等效,因为float类型的有效数字只有6位显然后面位数无法进行精确比较,为了满足题设应该把变量定义为double类型

float精度是2^23,能保证6位。

double精度是2^52,能保证15位。

但是默认float和double都只能显示6位,再多需要#include,然后在输出语句之前插入cout<

代码

#include

#include

#include

usingnamespacestd;

main()

{

longdoublex0,x1,a;

cout<<"请输入一个正数"<

cin>>a;

for(;a<=0;)

{

cout<<"你输入的不是一个符合要求的正数,请重新输入"<

cin>>a;

}

x0=a/2;

x1=0.5*(x0+a/x0);

for(;fabs(x1-x0)>1e-10;)

{

x0=x1;

x1=0.5*(x0+a/x0);

}

cout<<"a的平方根为"<

 

}

输出结果

请输入一个正数

2

a的平方根为1.4142135623730949

Pressanykeytocontinue

实验3.4

要求输入以下图案

*

***

*****

*******

*****

***

*

分析:

分成2部分解决第一部分输出第1到4行每一行‘*’的个数为2*n-1

第二部分输出第4到7行,相当于重新输入1到3行每一行‘*’的个数为7-(2*n)

代码

#include

#include

#include

usingnamespacestd;

main()

{

inti=1,j=1;

for(i=1;i<=4;i++)//输出第1到4行的图标

{

for(j=1;j<=2*i-1;j++)

cout<<'*';

cout<

}

for(i=1;i<=3;i++)//输出第5到7行的图标

{for(j=1;j<=7-2*i;j++)

cout<<'*';

cout<

}

return0;

}

输出结果

*

***

*****

*******

*****

***

*

Pressanykeytocontinue

实验3.4.2

在运行得到正确结果后,请修改程序,以输出以下的图案

*

***

*****

*******

*****

***

*

分析还是分成2个小部分来解决第一部分输出上半部分第二部分输出下半部分

行数

空格数

*

空格与行数的关系

*与行数的关系

1

3

1

4-i

2*i-1

2

2

3

3

1

5

4

0

7

代码

#include

#include

#include

usingnamespacestd;

main()

{

inti=1,j=1;

for(i=1;i<=4;i++)//输出第一部分

{

for(j=1;j<=4-i;j++)//第一部分的空格

cout<<'';

for(j=1;j<=2*i-1;j++)//第一部分的*

cout<<'*';

cout<

}

for(i=1;i<=3;i++)//输出第二部分

{

for(j=1;j<=i;j++)//第二部分的空格

cout<<'';

for(j=1;j<=7-2*i;j++)//第二部分的*

cout<<'*';

cout<

}

}

结果

*

***

*****

*******

*****

***

*

Pressanykeytocontinue

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 工作总结汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1