牛顿迭代法解方程根.docx

上传人:b****7 文档编号:9119084 上传时间:2023-02-03 格式:DOCX 页数:15 大小:53.63KB
下载 相关 举报
牛顿迭代法解方程根.docx_第1页
第1页 / 共15页
牛顿迭代法解方程根.docx_第2页
第2页 / 共15页
牛顿迭代法解方程根.docx_第3页
第3页 / 共15页
牛顿迭代法解方程根.docx_第4页
第4页 / 共15页
牛顿迭代法解方程根.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

牛顿迭代法解方程根.docx

《牛顿迭代法解方程根.docx》由会员分享,可在线阅读,更多相关《牛顿迭代法解方程根.docx(15页珍藏版)》请在冰豆网上搜索。

牛顿迭代法解方程根.docx

牛顿迭代法解方程根

沈阳航空航天大学

 

课程设计报告

课程设计名称:

C语言课程设计

课程设计题目:

填数值游戏程序

 

院(系):

计算机学院

专业:

计算机科学与技术

班级:

04010102

学号:

2010040101044

姓名:

刘倩

指导教师:

卢秉亮

完成日期:

2011年03月18日

目录

第1章需求分析3

1.1输入的形式和输入值的范围3

1.2输出的形式3

1.3程序实现的功能3

第2章概要设计4

2.1主要数据结构和数据类型的定义描述4

2.1.1主要数据结构4

2.1.2主要数据类型的定义描述4

2.2主要算法思想和算法描述4

2.2.1主要算法思想4

2.2.2主要算法描述4

2.2.3程序模块之间的层次和调用关系5

第3章详细设计6

3.1实现概要设计中定义的所有数据类型6

3.2对主程序和主要模块的实现写出伪码算法6

3.3详细定义、说明主要函数和过程的输入输出参数和功能9

3.4程序的流程图9

第4章调试分析11

4.1调试过程中遇到的问题及解决办法11

4.2改进设想11

4.3经验和体会11

第5章用户使用说明12

第6章测试结果13

参考文献15

附录(程序清单)16

第1章需求分析

1.1输入的形式和输入值的范围

输入数据类型为整型,将一批整型数据输入到一维数组中。

输入值的范围是1~10之间的整数,采取逐个输入的形式进行输入。

1.2输出的形式

输出数据类型为整型,采用双重for循环将按要求排列后所得到的二维数组输出。

1.3程序实现的功能

可以对给定的一个含有1~10十个整数的一维数组,从中选择某9个填到一个3*3方格中,并且要求满足方格中所有相邻的两个整数之和是素数。

能够将满足条件的二维数组输出。

第2章概要设计

2.1主要数据结构和数据类型的定义描述

2.1.1主要数据结构

数组是本程序用到的数据结构。

2.1.2主要数据类型的定义描述

本程序用到的数组类型是一维数组和二维数组,用到的基本数据类型是整型。

定义了四个整型的循环变量i,j,p,m进行循环控制,定义变量sum用于累加。

2.2主要算法思想和算法描述

2.2.1主要算法思想

利用循环将1~10十个整数中的某9个整数按规律逐个填入到3*3方格中,直至将方格填满,并使其满足所有相邻的两个整数之和为素数。

2.2.2主要算法描述

定义判断素数的子函数isprime,在主函数中利用循环将二维数组b[i][j]初始化,即将b[i][j]赋值为0,然后将a[0]赋予b[1][1],将该位置的0覆盖,然后以a[0]为中心,按要求选填剩余9个数中的4个,首先利用循环语句将与a[0]相加是素数的整数选出,并置于另一个已经定义的一维数组d[10]中,然后再利用循环将一维数组d[10]中的整数赋予二维数组中的奇数位。

之后利用循环从剩余的5个整数中选出可以满足条件的4个整数,然后按要求填入到剩余方格中将初始值0覆盖。

最后将满足要求的二维数组输出。

2.2.3程序模块之间的层次和调用关系

程序模块之间的层次和调用关系如图2.1所示。

图2.1程序模块之间的层次和调用关系

第3章详细设计

3.1实现概要设计中定义的所有数据类型

概要设计中定义的所有数据类型有:

整型数组:

a[10],d[10],b[3][3]

整型变量:

i,j,m,p,sum

3.2对主程序和主要模块的实现写出伪码算法

函数isprime(定义未知整型变量m)

{

定义循环变量i;

if(m=1或者m为偶数)

返回0;

if(m=2)

返回1;

for(i=3;i*i

if(m%i=0)

返回0;

否则返回1;

}

主函数main()

{

定义整型变量i,j,m,p,h;

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

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

将二维数组b[i][j]初始化

b[i][j]=0;

for(m=0;m<3;m++)

输入1~10十个整数a[m];

b[1][1]=a[0];

调用函数isprime;

if(isprime(a[0]+a[m]))

{

将与a[0]相加是素数的整数赋予d[p];

[p]=a[m];

a[m]=0;

p++;

}

if((i+j)%2!

=0)

将d[p]中的整数赋予b[i][j];

b[i][j]=d[p];

排除不满足条件的整数;

for(m=0;m<3;m++)

if(a[m]%2==0)

a[m]=0;

while(a[m]!

=0&&b[i][j]==0)

{

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

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

{

b[i][j]=a[m];

m++;

}

h=b[2][0];

b[2][0]=b[2][2];

b[2][2]=h;

}

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

{

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

输出结果;

}

结束程序

3.3详细定义、说明主要函数和过程的输入输出参数和功能

主函数中利用for循环语句实现了数组值的输入,并按要求选填1~10十个整数的9个。

自定义函数的功能是判断一个整数是否为素数。

3.4程序的流程图

主函数流程图如图2.2所示

图2.2主函数

判断素数子函数流程图如图2.3所示。

 

图2.3判断素数子函数流程图

第4章调试分析

4.1调试过程中遇到的问题及解决办法

调试过程中遇到了一些问题:

1.在不该加分号的地方加分号,例如:

在if条件句的后面加了分号。

2.该用复合语句是忘记写花括号{}。

3.定义空间不够,出现数组越界操作。

4.在定义子函数时,在主函数内部定义函数。

5.变量未定义就使用。

6.函数调用时实参个数多于形参个数。

解决方法:

通过编译后的错误提示找出错误并改正。

4.2改进设想

编译的时检查到语法错误,进行修改。

利用单步跟踪,找出出现逻辑错误的部分,进行修改。

4.3经验和体会

1.在调用函数时,一定要保证实参个数和形参个数相同。

22.在给数组申请空间时,尽量多申请些,防止出现越界现象。

3.在使用复合语句时一定不要忘记使用{}。

4.在if条件句的后面不能加了分号,以防止其成为空语句。

5.在使用变量是要保证前面已经定义。

第5章用户使用说明

1、运行VC++程序。

2.、在运行界面下按要求输入1~10十个整数,存入到一个一维数组中,每输入一个数据后按空格再输入下一个数据。

3、当10个数据都输入结束后按回车键,数据输入结束。

4、运行界面上会显示出运行结果。

5、按任意键,程序结束。

第6章测试结果

Pleaseinputthedata:

1~10

输入待填入3*3方格的数据:

1,2,3,4,5,6,7,8,9,10

将1~10十个整数填入方格的中间过程:

1二维数组b[3][3]初始化,赋值为0.即b[i][j]=0;即b[3][3]={0,0,0,0,0,0,0,0,0};

2.利用循环赋值:

a]10]={1,2,3,4,5,6,7,8,9,10};

3.b[1][1]=a[0];a[0]=0;标示a[0]已经被填入方格;

4b[1][1]=1;

5.b[3][3]={0,0,0,1,0,0,0,0,0}

6.利用循环将与a[0]相加是素数的整数a[m]赋值于d[10],d[10]={2,4,6,10};a[m]=0;

7.a[10]={0,0,3,0,5,0,7,8,9,0}

8.利用循环找i与j相加是奇数的方格位置即:

b[0][1],b[1][0],b[1][2],b[2][1];

9.利用循环将d[10]中的整数赋予b[0][1],b[1][0],b[1][2],b[2][1];

10.b[3][3]={0,2,0,4,1,6,0,10,0};

11.利用循环在剩余的5个数中找出与b[0][1],b[1][0],b[1][2],b[2][1];相加均不为素数的整数,赋值为0;表示该数不可选填,即a[7]=0;

12.a[10]={0,0,3,0,5,0,7,0,9,0}

13.在条件a[m]!

=0的情况下,利用循环将满足b[0][0]位置的整数选填,并使a[m]=0;

14a[10]={0,0,0,0,5,0,7,0,9,0}

15b[3][3]={3,2,0,4,1,6,0,10,0};

16在条件a[m]!

=0的情况下,将利用循环将满足b[0][2]位置的整数选填,并使a[m]=0;

17a[10]={0,0,0,0,0,0,7,0,9,0}

18b[3][3]={3,2,5,4,1,6,0,10,0};

19在条件a[m]!

=0的情况下,将利用循环将满足b[2][0]位置的整数选填,并使a[m]=0;

20a[10]={0,0,0,0,0,0,7,0,9,0}

21b[3][3]={3,2,5,4,1,6,7,10,0};

22在条件a[m]!

=0的情况下,将剩余的唯一整数填入b[2][2]的位置

23b[2][2]=9,

24b[3][3]={0,2,0,4,1,6,7,10,9};

25不合理

26定义中间变量h,将b[2][2]和b[2][2]位置的整数调换

27h=b[2][2];b[2][2]=b[2][0];b[2][0]=h

28b[3][3]={3,2,5,4,1,6,9,10,7};

29利用循环(i=0;i<3;i++)

30换行

31利用循环(j=0;j<3;j++)

32输出结果:

33325

34416

359107

36Pressanykeytocontinue

参考文献

[1]谭浩强主编,卜家岐,范燮昌编著.C语言程序设计[M].北京:

高等教育出版社,2006

[2]张磊.C语言程序设计[M].京:

高等教育出版社,2005

[3]张长海.C语言程序设计[M].北京:

高等教育出版社2006

[4]谭浩强.C语言程序设计(第三版)[M].北京:

清华大学出版社2006

附录(程序清单)

#include

intisprime(intm)//判断是否为素数

{

inti;

if(m==1||m%2==0)

return0;

if(m==2)

return1;

for(i=3;i*i<=m;i+=2)

if(m%i==0)

return0;

return1;

}

voidmain()

{

inti,j,m,p=0,k=0;

intsum=0;

intd[10],a[10],b[3][3];

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

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

b[i][j]=0;//数组初始化

printf("pleaseinputthedata\n");//提示输入数据

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

scanf("%d",&a[m]);//存放数据

b[1][1]=a[0];

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

{

if(isprime(a[0]+a[m]))//判断与a[0]相加是否为素数

{

d[p]=a[m];//存放与其相加为素数的数

a[m]=0;

p++;

sum++;//计算与a[0]相加为素数的个数

}//if(isprime)

}

p=0;

while(p

{

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

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

if((i+j)%2!

=0)

{

b[i][j]=d[p];

p++;

}

}

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

if(a[m]%2==0)

a[m]=0;

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

{

if(a[m]!

=0)

{

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

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

{

if(((i+j)%2==0)&&(i*j!

=1))

b[i][j]=a[m];

if((!

isprime(b[0][0]+b[0][1]))&&(!

isprime(b[0][0]+b[1][0])));

if((!

isprime(b[0][2]+b[0][1]))&&(!

isprime(b[0][2]+b[1][2])));

if((!

isprime(b[2][0]+b[2][1]))&&(!

isprime(b[2][0]+b[1][0])));

if((!

isprime(b[2][2]+b[2][1]))&&(!

isprime(b[2][2]+b[1][2])));

m++;

}

}

}

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

{

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

printf("%3d",b[i][j]);

printf("\n");

}

}

课程设计总结:

这次课程设计总共用了两周的时间,通过这次课程设计我感到自己学到了很多知识。

不仅巩固了自己在课堂上学的东西,而且收获很多在过去半年中没学过知识,自己对于C语言了解也加深了。

在这次课程设计中,对自定义函数的运用有了很深的了解,对for循环的运用也变得顺畅,我的程序题目是字数最少的,但自我感觉却是最难做的!

在这两周中我进了很多次图书馆,看了很多与专业相关的书籍,它们帮助我很多很多。

我的程序题目很难,按照最初的设计思想,最佳的方法应该是运用回溯法,考虑到大一学生专业科目知识的欠缺,老师给我的题目降低了难度。

虽然降低了难度,相比来说,仍然挺难。

正是因为这个题目有难度,我才能有机会更好的锻炼自己。

由于自己知识的欠缺,在这两周内我不仅翻阅了大量的书籍,还向大二大三的学长学姐请教了相关知识。

从学长学姐那里,我学到了在过去半年中没有学到的知识。

从这次课程设计中我领略到:

题目越难,收获才会越多。

这次程序我加强自己的动手能力,改掉了自己眼高手低的毛病,收获很多。

通过这次课程设计,自己的实际编程能力有了进一步的锻炼,也有了一定程度的提高。

而且加强了自己如何进行编译,修改错误和单步跟踪检查等的能力。

更加强了自己编程的能力。

指导教师评语:

 

指导教师(签字):

年月日

课程设计成绩

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

当前位置:首页 > 高等教育 > 农学

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

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