C语言课程设计

发布 2022-09-30 16:45:28 阅读 8121

课程设计。

课程设计任务书。

一、课程设计题目:用高斯列主元消元法解线性方程。

二、课程设计工作自2024年7月9日起至2024年7月18日止。

三、课程设计内容:

运用所学的c语言知识,编制和调试程序,具有如下功能:

请用高斯列主元消元法解下列方程组:

四、课程设计要求:

程序质量: 用模快化程序设计方法;在程序界面,以菜单的形式调用各功能函数:程序可读性强,界面友好;输出形式尽量美观。

用户界面友好,功能明确,操作方便;可以加以其它功能或修饰。

用户界面中的菜单至少应包括“输入数据”、“开始计算”、 退出”3项。

**应适当缩进,并给出必要的注释,以增强程序的可读性。

附:高斯列主元消元法求解线性方程组ax=b的简要步骤。

高斯消元过程)

ax=b:方法说明(以4阶为例)

第一步消元——在增广矩阵(a,b)第一列中找到绝对值最大的元素,将其所在行与第一行交换,再对(a,b)做初等行变换使原方程组转化为如下形式:

第二步消元——在增广矩阵(a,b)中的第二列中(从第二行开始)找到绝对值最大的元素,将其所在行与第二行交换,再对(a,b)做初等行变换使原方程组转化为:

第三步消元——在增广矩阵(a,b)中的第三列中(从第三行开始)找到绝对值最大的元素,将其所在行与第二行交换,再对(a,b)做初等行变换使原方程组转化为:

按x4 x3 x2 x1 的顺序回代求解出方程组的解。

课程设计说明书:

课程结束后,上交课程设计说明书(打印稿和电子稿),其内容如下:

封面。 课程设计任务书。

目录。 需求分析(分析题目的要求)

程序流程图(总体流程图和主要功能模块流程图)

核心技术的实现说明及相应程序段。

个人总结。

参考资料。

源程序及适当的注释。

指导教师学生签名:__

目录。一、需求分析 1

二、程序流程图 2

三、核心技术的实现说明及相应程序段 8

四、个人总结 11

五、参考文献 11

六、源程序 11

经过对程序设计题目的分析可知,整个程序的设计实现大致分为三个模块,分别是:输入方程组,计算方程组,继续运算/退出。

计算方程组模块对应三个函数,其函数名和功能如下:

一、交换行的距函数(huanhang):主要实现线性代数高斯列主元消元法求解线性方程组中的初等行变换。

二、比较系数大小的函数(bijiao):实现比较系数大小的算法。

三、实现菜单选择的函数(caidan):使用户界面友好,操作方便。

除上面介绍的功能之外,程序还具有“继续运算/退出”功能,可以在程序的一次运行当中循环执行所有的功能,并根据需要,终止程序的执行。

1、程序总体结构图。

图1: 程序总体结构图。

图1程序总体结构图。

2、具体功能框图。

1)界面 caidan函数。

图2 caidan函数。

2) 比较 bijia函数。

图3: bijia函数。

3) 交换行的矩函数 haunghang函数。

图4: haunghang函数。

4) 运算 yunsuna函数。

当。接上一页:

接上一页:图5: yunsuna函数。

本程序一共由四个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其他函数来实现要求的所有功能。在这些函数当中,比较系数大小的函数、运算函数是程序中较为核心的部分,下面分别进行说明。

1、比较系数大小的函数

比较系数大小的函数主要是为运算函数所做准备的, fabs是求双精度浮点数的绝对值的函数。 输入参数是双精度浮点数,计算结果送返绝对值,也是双精度浮点数这样才可以保证以前已经存在的数据不丢失。具体的程序段如下:

float bijiao(int k) /比较系数大小的函数*/

int i;

float temp=0;

for(i=k;i<=n;i++

if(fabs(a[i][k])>temp)

temp=fabs(a[i][k]);

flag=i;

return temp;

2、运算函数

运算函数是本程序的主要部分,首先输入系数和向量后存入数组,判断方程是否合法,不合法则返回菜单,然后通过循环解二维数组,最后输出结果i,x[i],具体程序段如下:

float yunsuan()

float x[number]; 此数组用于存放方程解*/

int r,k,i,j;

printf(" 输入方程组的维数:n=")

scanf("%d",&n);

printf(" n现在输入系数矩阵a和向量b:")

for(i=1;i<=n;i++

printf("请输入a?-a%d%d系数和向量b%d:",i,i,n);

*实现将每一行中的系数和向量一次性输入,数之间用空格格开,输完后回车确定*/

for(j=1;j<=n+1;j++ 将刚才输入的数存入数组*/

scanf("%f",&a[i][j]);

for(k=1;k<=n-1;k++

ark=bijiao(k);

if(ark==0) /判断方程是否为线性方程,即是否合法*/

printf("此方程组不合法!error!")caidan();

else if(flag!=k)

huanhang(flag,k);

for(i=k+1;i<=n;i++

for(j=k+1;j<=n+1;j++

a[i][j]=a[i][j]-a[k][j]*a[i][k]/a[k][k];

x[n]=a[n][n+1]/a[n][n];

for( k=n-1;k>=1;k--)

float me=0;

for(j=k+1;j<=n;j++

me=me+a[k][j]*x[j];

x[k]=(a[k][n+1]-me)/a[k][k];

for(i=1;i<=n;i++

printf(" nx%d=%f",i,x[i]);

这次课设让我更熟悉的掌握了通过c语言运用高斯定理解方程组,也使我对二维数组的认识更加深入了解,在完成程序中,遇到过较大的困难,但通过重新深入教材和对资料理解的基础逐步完成。

1 谭浩强.《c程序设计》.北京:清华大学出版社,2005

2 刘成等.《c语言程序设计实验指导与习题集》.北京:中国铁道出版社,2006

#include<>

#include<>

#define number 20

#define esc 0x1b

#define enter 0x0d

float a[number][number+1] ,ark;

int flag,n;

huanhang(int r,int k);

float bijiao(int k);

caidan();

float yunsuan();

main()

char celect;

clrscr();清除文本模式窗口*/

printf("用gauss列主元消元法解线性方程组");

printf("1.解方程组请按enter.")

printf("2.退出程式请按esc.")

celect=getch();

switch(celect)

case(esc):exit(0);

case(enter):yunsuan();

default:

caidan();

float yunsuan()

float x[number]; 此数组用于存放方程解*/

int r,k,i,j;

printf(" 输入方程组的维数:n=")

scanf("%d",&n);

printf(" n现在输入系数矩阵a和向量b:")

for(i=1;i<=n;i++

printf("请输入a?-a%d%d系数和向量b%d:",i,i,n);

*实现将每一行中的系数和向量一次性输入,数之间用空格格开,输完后回车确定*/

for(j=1;j<=n+1;j++ 将刚才输入的数存入数组*/

scanf("%f",&a[i][j]);

for(k=1;k<=n-1;k++

ark=bijiao(k);

if(ark==0) /判断方程是否为线性方程,即是否合法*/

printf("此方程组不合法!error!")caidan();

else if(flag!=k)

huanhang(flag,k);

for(i=k+1;i<=n;i++

for(j=k+1;j<=n+1;j++

a[i][j]=a[i][j]-a[k][j]*a[i][k]/a[k][k];

x[n]=a[n][n+1]/a[n][n];

for( k=n-1;k>=1;k--)

float me=0;

for(j=k+1;j<=n;j++

me=me+a[k][j]*x[j];

x[k]=(a[k][n+1]-me)/a[k][k];

for(i=1;i<=n;i++

printf(" nx%d=%f",i,x[i]);

caidan();

huanhang(int r,int k) /交换行的矩函数*/

int i;

for(i=1;i<=n+1;i++

a[0][i]=a[r][i];

for(i=1;i<=n+1;i++

a[r][i]=a[k][i];

for(i=1;i<=n+1;i++

a[k][i]=a[0][i];

float bijiao(int k) /比较系数大小的函数*/

int i;

float temp=0;

for(i=k;i<=n;i++

C语言课程课程设计

课程设计报告。课程名称 c语言程序设计 系别 xxx 专业班级 xxx班 学号 xxxxxxxxxx 姓名 xxx 课程题目 10或100以内儿童加减乘除算术游戏。完成日期 2013.6.14 19 指导老师 xxx 2013年 6月 21日。附件 一 程序模块图。二 源程序。include inc...

C语言课程设计

目录。1 c语言程序课程设计教学大纲。2 c语言程序课程设计说明书。3 c语言程序课程设计报告 模板 4 c语言程序课程设计成绩评定表。xx xx学院。课程教学大纲。课程名称 c语言程序课程设计。适用专业 课程类别 专业基础课。制订时间 2010年11月 计算机科学与技术系制。c语言程序课程设计教学...

C语言课程设计

目录。1 c语言程序课程设计教学大纲。2 c语言程序课程设计说明书。3 c语言程序课程设计报告 模板 4 c语言程序课程设计成绩评定表。珠海学院。课程教学大纲。课程名称 c语言程序课程设计。适用专业 2010级计算机科学与技术系各专业。课程类别 专业基础课。制订时间 2010年11月 计算机科学与技...