用高斯列主元消元法解线性方程.docx
- 文档编号:11249974
- 上传时间:2023-02-26
- 格式:DOCX
- 页数:12
- 大小:144.41KB
用高斯列主元消元法解线性方程.docx
《用高斯列主元消元法解线性方程.docx》由会员分享,可在线阅读,更多相关《用高斯列主元消元法解线性方程.docx(12页珍藏版)》请在冰豆网上搜索。
用高斯列主元消元法解线性方程
课程设计
学号:
班级:
姓名:
指导教师:
2008年9月12日
课程设计任务书
一、课程设计题目:
用高斯列主元消元法解线性方程
二、课程设计工作自2008年9月8日起至2008年9月12日止
三、课程设计内容:
运用所学的C语言知识,编制和调试程序,具有如下功能:
请用高斯列主元消元法解下列方程组:
四、课程设计要求:
程序质量:
●用模快化程序设计方法;在程序界面,以菜单形式调用各功能函数:
程序可读性强,界面友好;输出形式尽量美观。
●用户界面友好,功能明确,操作方便;可以加其它功能或修饰。
●用户界面中的菜单至少应包括“输入数据”、“开始计算”、“退出”3项。
●代码应适当缩进,并给出必要的注释,以增强程序的可读性。
课程设计说明书:
课程结束后,上交课程设计说明书(打印稿和电子稿),其内容如下:
●封面
●课程设计任务书
●目录
●需求分析(分析题目的要求)
●程序流程图(总体流程图和主要功能模块流程图)
●核心技术的实现说明及相应程序段
●个人总结
●参考资料
●源程序及适当的注释
指导教师:
________学生签名:
________
五、成绩:
六、教师评语:
目录
一、需求分析1
二、程序流程图2
三、核心技术的实现说明及相应程序段....4
四、个人总结8
五、源程序8
六、参考文献11
一、需求分析
●经过对程序设计题目的分析可知,整个程序的设计实现大
致分为三个模块,分别是:
输入方程组,计算方程组,继续运算/退出。
要求以菜单的形式调用各功能函数:
程序可读性强,界面友好;输出形式尽量美观。
计算方程组模块对应三个函数,其函数名和功能如下:
一、主函数(main):
调用其它函数。
二、菜单(menu):
使用户界面友好,操作方便。
三、计算函数:
(gauss):
核心部分,列主元消元法,并输出。
二、程序流程图
图1:
程序总体结构图
主要程序流程图:
三、核心技术的实现说明及相应程序段
本程序一共由二个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其他函数来实现要求的所有功能。
在这些函数当中,运算函数是程序中较为核心的部分,其他的函数为辅,整个程序运行的主界面如下:
下面作分步解说:
1、gauss函数
voidgauss(doublea[N][M],doublex[N])
{
inti,j,l,n,m,k=0;
doubletemp[N];
/*下面do-while是将增广矩阵消成上三角形式*/
do{n=0;
for(l=k;l temp[n++]=a[l+1][k]/a[k][k]; for(m=0,i=k;i for(j=k;j a[i+1][j]-=temp[m]*a[k][j]; k++; } while(k /*下面do-while是将矩阵消成对角形式,并且重新给k赋值*/ k=L-1; do{ n=0; for(l=k;l>=0;l--) temp[n++]=a[k-l][k+1]/a[k+1][k+1]; for(m=0,i=k;i>=0;i--,m++) for(j=k;j a[k-i][j]-=temp[m]*a[k+1][j]; k--; }while(k>=0); 2、输入函数,为方程赋予初值 printf("数据输入\n! ! 此方程组系数是%d*%d的矩阵,每行有%d个元素: \n",N,M,M); for(i=0;i { printf("请输入第%d行数据: \n",i+1); for(j=0;j scanf("%lf,",&a[i][j]); 3、运算函数 运算函数是本程序的主要部分,将系数矩阵的增广矩阵化为行最简矩阵。 并输出行最简矩阵,再计算出x[i]的值,然后回带,最后输出。 {printf("\n增广矩阵的最简矩阵是: \n_____\n"); gauss(a,answer); for(i=0;i {for(j=0;j printf("%-2lf",a[i][j]); putchar('\n'); } printf("_____\n运算结果是: \n"); for(i=0;i printf("x%d=%lf\n",i+1,answer[i]); 四、个人总结 这次课设让我更熟悉的掌握通过C语言运用高斯定理解方程组,使我对二维数组的认识更加深入了解,在完成程序中,遇到过较大的困难,但通过重新深入教材和对资料理解的基础逐步完成。 五、源程序 #include"Stdio.h" #include"stdlib.h" /*L是矩阵的行减1,从程序上看是最外层循环的次数 N对应矩阵的行数,M对应矩阵的列数 可以通过改变L、N、M来控制矩阵的阶数*/ #defineL2 #defineN3 #defineM4 voidgauss(doublea[N][M],doublex[N]) {inti,j,l,n,m,k=0; doubletemp[N]; /*下面do-while是将增广矩阵消成上三角形式*/ do { n=0; for(l=k;l temp[n++]=a[l+1][k]/a[k][k]; for(m=0,i=k;i for(j=k;j a[i+1][j]-=temp[m]*a[k][j]; k++; } while(k /*下面do-while是将矩阵消成对角形式,并且重新给k赋值*/ k=L-1; do{ n=0; for(l=k;l>=0;l--) temp[n++]=a[k-l][k+1]/a[k+1][k+1]; for(m=0,i=k;i>=0;i--,m++) for(j=k;j a[k-i][j]-=temp[m]*a[k+1][j]; k--; }while(k>=0); /*下面解方程组*/ for(i=0;i x[i]=a[i][N]/a[i][i]; } voidmenu() { printf("\n_____\n"); printf("1.数据输入\n"); printf("2.开始运算\n"); printf("3.退出程序"); printf("\n_____\n"); } voidmain() { inti,j; charchoose; doublea[N][M]={0},answer[N]; menu(); while (1) { scanf("%c",&choose); switch(choose) { case'1': printf("数据输入\n! ! 此方程组系数是%d*%d的矩阵,每行有%d个元素: \n",N,M,M); for(i=0;i { printf("请输入第%d行数据,用逗号隔开: \n",i+1); for(j=0;j scanf("%lf,",&a[i][j]); }printf("! ! 请选择操作! ! \n");break; case'2': {printf("\n增广矩阵的最简矩阵是: \n_____\n"); gauss(a,answer); for(i=0;i {for(j=0;j printf("%-lf",a[i][j]); putchar('\n'); } printf("_____\n运算结果是: \n"); for(i=0;i printf("x%d=%f\n",i+1,answer[i]); } printf("! ! 请选择操作! ! \n"); break; case'3': exit(0);break; } } } 六、参考文献 1谭浩强.《C程序设计教程》.北京: 清华大学出版社,2007.7 2刘成等.《C语言程序设计实验指导与习题集》.北京: 中国铁道出版社,2007
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 用高斯列主元消元法解 线性方程