引入
在今年的暑假,作者利用空闲时间阅读了gilbert strange的introduction to linear algebra。作为享誉国际学界多年的MIT教材,该书以高斯消元法求解二三元方程组为开头,先介绍矩阵,随后是线性空间,再是行列式,与国内苏联风格的教材大相径庭。当时正好作者也在自学Python,便萌生出编写一个求解三元一次方程组的程序的想法。很可惜,由于暑假的时间安排的原因,这个想法最终没有实现,Python的学习也半途而废。
在大一新生军训之后,随着课程的开始,这个想法再次浮现,并且这次是以C语言来编写。
作者在阅读完C primer plus一书中的数组和指针的相关章节后,就开始着手这个项目。
初步构思
数组这种形式,可以很方便的表示矩阵,这次作者选择了三个长度为四的数组来组成矩阵。用户在程序的引导下分三次完成各个系数和等号右边常数项的输入,数据将被保存至数组中,再利用高斯消元将其化为上三角矩阵,最后回代完成求解,并将解打印在屏幕上。
数据输入
作者在完成这个部分的时候走了一个很大的弯路,因为在一开始的设计中,用户会分三次输入数据,所以将键盘输入传入数组的工作最好是由函数来完成,在main函数中直接调用三次,就可以完成工作。
但是,C语言并不允许函数返回一个数组,只能通过返回一个指向数组地址的指针,再将这个返回值赋给main函数的相应指针来实现和main函数通信(此处指针就不能直接给数组赋值了)。(1.0ver如下图)
# include
int * getcoe(void);
int main(void)
{
int * p1 = NULL;
printf("Please enter the coefficients of the first equation one by one(divide them with blank):\n");
p1 = getcoe();
printf("%d %d %d", *p1,*(p1+1),*(p1+2));//我把数组打印出来
return 0;
}
int * getcoe(void)
{
int row[3];
int * pi = NULL;
int a1,a2,a3;
scanf("%d %d %d",&a1,&a2,&a3);
row[0] = a1;
row[1] &