牛顿迭代法解方根Word格式.docx
- 文档编号:21193865
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:13
- 大小:53.19KB
牛顿迭代法解方根Word格式.docx
《牛顿迭代法解方根Word格式.docx》由会员分享,可在线阅读,更多相关《牛顿迭代法解方根Word格式.docx(13页珍藏版)》请在冰豆网上搜索。
第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<
m;
m++)
if(m%i=0)
否则返回1;
}
主函数main()
定义整型变量i,j,m,p,h;
for(i=0;
i<
3;
i++)
for(j=0;
j<
j++)
将二维数组b[i][j]初始化
b[i][j]=0;
for(m=0;
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];
排除不满足条件的整数;
if(a[m]%2==0)
a[m]=0;
while(a[m]!
=0&
&
b[i][j]==0)
{
b[i][j]=a[m];
m++;
h=b[2][0];
b[2][0]=b[2][2];
b[2][2]=h;
for(i=0;
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;
30换行
31利用循环(j=0;
32输出结果:
33325
34416
359107
36Pressanykeytocontinue
参考文献
[1]谭浩强主编,卜家岐,范燮昌编著.C语言程序设计[M].北京:
高等教育出版社,2006
[2]张磊.C语言程序设计[M].京:
高等教育出版社,2005
[3]张长海.C语言程序设计[M].北京:
高等教育出版社2006
[4]谭浩强.C语言程序设计(第三版)[M].北京:
清华大学出版社2006
附录(程序清单)
#include<
stdio.h>
intisprime(intm)//判断是否为素数
inti;
if(m==1||m%2==0)
return0;
if(m==2)
return1;
for(i=3;
=m;
i+=2)
if(m%i==0)
return0;
}
voidmain()
inti,j,m,p=0,k=0;
intsum=0;
intd[10],a[10],b[3][3];
for(i=0;
for(j=0;
b[i][j]=0;
//数组初始化
printf("
pleaseinputthedata\n"
);
//提示输入数据
10;
scanf("
%d"
&
a[m]);
//存放数据
b[1][1]=a[0];
for(m=1;
{
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<
sum)
for(j=0;
if((i+j)%2!
{
b[i][j]=d[p];
p++;
}
a[m]=0;
for(m=1;
if(a[m]!
for(i=0;
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])));
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])));
isprime(b[2][2]+b[2][1]))&
isprime(b[2][2]+b[1][2])));
m++;
}
{
%3d"
b[i][j]);
printf("
\n"
}
课程设计总结:
这次课程设计总共用了两周的时间,通过这次课程设计我感到自己学到了很多知识。
不仅巩固了自己在课堂上学的东西,而且收获很多在过去半年中没学过知识,自己对于C语言了解也加深了。
在这次课程设计中,对自定义函数的运用有了很深的了解,对for循环的运用也变得顺畅,我的程序题目是字数最少的,但自我感觉却是最难做的!
在这两周中我进了很多次图书馆,看了很多与专业相关的书籍,它们帮助我很多很多。
我的程序题目很难,按照最初的设计思想,最佳的方法应该是运用回溯法,考虑到大一学生专业科目知识的欠缺,老师给我的题目降低了难度。
虽然降低了难度,相比来说,仍然挺难。
正是因为这个题目有难度,我才能有机会更好的锻炼自己。
由于自己知识的欠缺,在这两周内我不仅翻阅了大量的书籍,还向大二大三的学长学姐请教了相关知识。
从学长学姐那里,我学到了在过去半年中没有学到的知识。
从这次课程设计中我领略到:
题目越难,收获才会越多。
这次程序我加强自己的动手能力,改掉了自己眼高手低的毛病,收获很多。
通过这次课程设计,自己的实际编程能力有了进一步的锻炼,也有了一定程度的提高。
而且加强了自己如何进行编译,修改错误和单步跟踪检查等的能力。
更加强了自己编程的能力。
指导教师评语:
指导教师(签字):
年月日
课程设计成绩
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 牛顿 迭代法 方根