c++实验3 程序结构与数组.docx

上传人:b****5 文档编号:11536890 上传时间:2023-03-19 格式:DOCX 页数:17 大小:122.95KB
下载 相关 举报
c++实验3 程序结构与数组.docx_第1页
第1页 / 共17页
c++实验3 程序结构与数组.docx_第2页
第2页 / 共17页
c++实验3 程序结构与数组.docx_第3页
第3页 / 共17页
c++实验3 程序结构与数组.docx_第4页
第4页 / 共17页
c++实验3 程序结构与数组.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

c++实验3 程序结构与数组.docx

《c++实验3 程序结构与数组.docx》由会员分享,可在线阅读,更多相关《c++实验3 程序结构与数组.docx(17页珍藏版)》请在冰豆网上搜索。

c++实验3 程序结构与数组.docx

c++实验3程序结构与数组

实验3:

C++语言程序结构、数组

说明:

所有的程序和文档都建立在学生学号_名字_第三次实验文件夹内,最终以压缩文件的形式提交到指定邮箱。

第一部分基础练习

1.用牛顿迭代法求方程:

3x3+2x2-8x-5=0,在x=1.5附近的根。

◆要求:

前后两次求出的x的差的绝对值小于10-6,则为结果。

◆思路:

如图所示,设xn为一个接近xa的近似根,过(xn,f(xn))点做切线,其切线方程为:

式中只有xn+1为未知量,将它放在等号的左边,即:

上式就为牛顿迭代公式。

源代码:

#include

#include

usingnamespacestd;

intmain()

{

floatx1,x0,f,f1;

x1=1.5;

do

{x0=x1;

f=3*x0*x0*x0+3*x0*x0-8*x0-5;

f1=9*x0*x0+4*x0-8;

x1=x0-f/f1;

}while(fabs(x1-x0)>1e-6);

cout<<"该方程的根为:

"<

return0;

}

截图:

◆ 思考题及问题

1更改初值,观察程序的运行结果。

当x1=0时,运算截图为

②如果程序总是无法结束,又不是死循环,程序应该如何修改?

程序无法结束,可能因为迭代所求根总在不断地振荡,无法得到精度内的结果,可以适当的降低精度,使振荡值落在精度范围内。

2.编程序,输出以下图形

*********

*******

*****

***

*

*****

****

***

**

*

1

13

135

1357

13579

A

BBB

CCCCC

DDDDDDD

CCCCC

BBB

A

◆要求

应该使用双重循环。

外循环体中包含两个并列的for循环语句,分别控制每行输出的空格符和非空格字符(如:

星号);用cout<<“\n”;语句控制输出一行字符之后回车换行。

源程序:

#include

usingnamespacestd;

intmain()

{inti,j;

for(i=1;i<=5;i++)

{for(j=1;j<=i;j++)

cout<<"";

for(j=11-2*i;j>0;j--)

cout<<"*";

cout<<"\n";

}

cout<<"\n";

for(i=1;i<=5;i++)

{for(j=1;j<=i;j++)

cout<<"";

for(j=6-i;j>0;j--)

cout<<"*";

cout<<"\n";

}

cout<<"\n";

for(i=1;i<=5;i++)

{for(j=6-i;j>0;j--)

cout<<"";

for(j=1;j<=i;j++)

cout<<2*j-1;

cout<<"\n";

}

cout<<"\n";

for(i=1;i<=4;i++)

{for(j=5-i;j>0;j--)

cout<<"";

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

cout<<(char)('A'+i-1);

cout<<"\n";

}

for(i=1;i<=3;i++)

{for(j=1;j<=i+1;j++)

cout<<"";

for(j=7-2*i;j>0;j--)

cout<<(char)('D'-i);

cout<<"\n";

}

return0;

截图:

◆思考题

1如果输出10行的图形,应如何修改程序?

#include

#include

usingnamespacestd;

intmain()

{inti,j;

for(i=1;i<=10;i++)

{for(j=1;j<=i;j++)

cout<<"";

for(j=21-2*i;j>0;j--)

cout<<"*";

cout<<"\n";

}

cout<<"\n";

for(i=1;i<=10;i++)

{for(j=1;j<=i;j++)

cout<<"";

for(j=11-i;j>0;j--)

cout<<"*";

cout<<"\n";

}

cout<<"\n";

for(i=1;i<=10;i++)

{for(j=11-i;j>0;j--)

cout<<"";

for(j=1;j<=i;j++)

cout<

(2)<<2*j-1;

cout<<"\n";

}

cout<<"\n";

for(i=1;i<=10;i++)

{for(j=11-i;j>0;j--)

cout<<"";

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

cout<<(char)('A'+i-1);

cout<<"\n";

}

for(i=1;i<=9;i++)

{for(j=1;j<=i+1;j++)

cout<<"";

for(j=19-2*i;j>0;j--)

cout<<(char)('J'-i);

cout<<"\n";

}

return0;

}

 

②如果输出图形向右平移25个字符位置,程序应该如何修改?

源程序:

#include

usingnamespacestd;

intmain()

{inti,j;

for(i=1;i<=5;i++)

{for(j=1;j<=i+25;j++)

cout<<"";

for(j=11-2*i;j>0;j--)

cout<<"*";

cout<<"\n";

}

cout<<"\n";

for(i=1;i<=5;i++)

{for(j=1;j<=i+25;j++)

cout<<"";

for(j=6-i;j>0;j--)

cout<<"*";

cout<<"\n";

}

cout<<"\n";

for(i=1;i<=5;i++)

{for(j=31-i;j>0;j--)

cout<<"";

for(j=1;j<=i;j++)

cout<<2*j-1;

cout<<"\n";

}

cout<<"\n";

for(i=1;i<=4;i++)

{for(j=30-i;j>0;j--)

cout<<"";

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

cout<<(char)('A'+i-1);

cout<<"\n";

}

for(i=1;i<=3;i++)

{for(j=1;j<=i+26;j++)

cout<<"";

for(j=7-2*i;j>0;j--)

cout<<(char)('D'-i);

cout<<"\n";

}

return0;

}

截图:

3.若干个数据首尾相连,构成一个圆环,找到连续的4个数之和最大的一段。

◆要求:

从键盘输入数据,当输入-1时结束输入,输出其中连续的4个数之和最大的一段的起始数据的位置及这4个数的和。

源程序:

#include

usingnamespacestd;

intmain()

{

inti,j,m,n=0,max=0,sum=0;

inta[20];

cout<<"请输入圆环数据:

";

cin>>i;

while(i!

=-1)

{

a[n]=i;

n++;

cin>>i;

}

for(j=0;j

{

sum=a[j]+a[(j+1)%n]+a[(j+2)%n]+a[(j+3)%n];

if(sum>max)

{max=sum;

m=j;

}

}

cout<<"输出圆环数据:

";

for(j=0;j

{

cout<

}

cout<<"\n从第"<

"<

return0;

}

截图:

第二部分自测练习

1.猜数游戏

编程先由计算机“想”一个1~100之间的数请人猜,如果人猜对了,则结束游戏,并在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平;否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可以猜10次,如果猜了10次仍未猜中的话,结束游戏并输出该数。

思路-函数说明:

   intrand();           :

返回从[0,MAX)之间的随机整数,这里的MAX与你所定义的数据类型而定;需#include

 voidsrand(unsignedseed);                         :

设置随机数种子,#include

  time_ttime(time_t*time);                         :

返回当前时间,#include

应用举例:

srand(time(0));                                          //根据系统时间设置随机数种子

inti=rand()%N;                                     //取得区间[0,N)的整数

如要产生1~10之间随机数,则代码如下:

#include

usingnamespacestd;

#include

#include

intmain()

{

        intt;

        srand(time(0));      //seed

        t=rand()%10+1;      //randomnumber1-10

   

        cout<

        return0;

}

源程序:

#include"stdio.h"

#include"stdlib.h"

voidmain()

{

intnum=rand()%100;

intguess;

inti=0;

printf("Guessanumber(1-100):

");

while

(1)

{

scanf("%d",&guess);

i++;

if(i>=10)

{printf("Sorry,gameover!

\n");

break;

}

if(guess==num)

{

printf("Youareright,guess%dtimes.\n",i);

break;

}

elseif(guess>num)

printf("Guesstoobig,tryagain:

");

else

printf("Guesstoosmall,tryagain:

");

}

}截图:

2.排序

编程实现将10个整数升序排列。

要求:

冒泡法排序。

 冒泡排序(BubbleSort)的基本概念是:

依次比较相邻的两个数,将小数放在前面,大数放在后面。

●即在第一趟:

首先比较第1个和第2个数,将小数放前,大数放后。

然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。

至此第一趟结束,将最大的数放到了最后。

●在第二趟:

仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。

●如此下去,重复以上过程,直至最终完成排序

源程序:

#include

usingnamespacestd;

intmain()

{inti,j,t,a[10],k;

cout<<"输入10个整数:

";

for(i=0;i<10;i++)

cin>>a[i];

for(i=0;i<10;i++)

for(j=i+1;j<10;j++)

if(a[i]>a[j])

swap(a[i],a[j]);

cout<<"输出升序排列的结果:

";

for(i=0;i<10;i++)

cout<

cout<

return0;

}

截图:

3.检验并打印魔方矩阵

在下面的5×5阶魔方矩阵中,每一行、每一列、每一对角线上的元素之和都是相等的,试编写程序将这些魔方矩阵中的元素读到一个二维整型数组中,然后检验其是否为魔方矩阵,并将其按如下格式显示到屏幕上。

17

24

1

8

15

23

5

7

14

16

4

6

13

20

22

10

12

19

21

3

11

18

25

2

9

源程序:

#include

usingnamespacestd;

intmain()

{

inta[5][5],i,j,k,x,z=0;

for(i=0;i<5;i++)

{

for(j=0;j<5;j++)

cin>>a[i][j];

}

intp=0,s=0,q=0;

for(k=0,x=0;k<5,x<5;k++,x++)

{

s+=a[0][k];

q+=a[x][0];

p+=a[k][x];

}

if(s==q&&q==p)

{

inty=s;

for(i=1,j=1;i<5,j<5;i++,j++)

{

inth=0,d=0,f=0;

for(k=0,x=0;k<5,x<5;k++,x++)

{

h+=a[i][k];

d+=a[x][j];

f+=a[k][x];

}

if(y!

=h&&y!

=d&&y!

=f)

z++;

}

if(z==0)

{

cout<<"是"<

for(i=0;i<5;i++)

{

for(j=0;j<5;j++)

{

cout<

}

cout<

}

}

else

cout<<"否"<

}

else

cout<<"否"<

return0;

}

截图:

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

当前位置:首页 > 医药卫生 > 基础医学

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

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