离散数学的行列式计算器(自动给出 解!题!步!骤!和答案)(基于c语言)

emmmmmmmmmmmmm
额,这估计是一篇丑陋的博客,因为我没有区分任何的标题

并且没有使用任何的高亮来处理自己的代码

代码本身也写得很丑陋,可能是因为我不在状态吧。。。。。

#include<stdio.h>
struct juz{     //自定义了分数的数据类型
	int a;     //分子
	int b;    //分母
};
juz Juz[12][12],Juz_T;    //用来存放行列式的二位结构体数组
int n;
void YueF_All(){    //自定义函数全局约分(可以一次性约分已经输入的所有数)
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			if(Juz[i][j].a<0&&Juz[i][j].b<0||Juz[i][j].a>0&&Juz[i][j].b<0){
				Juz[i][j].a*=-1;
				Juz[i][j].b*=-1;
			}	
			int x=Juz[i][j].a;
			int y=Juz[i][j].b;
			while(y){
            	int t=x%y;
            	x=y;
            	y=t;
        	}
        	Juz[i][j].a/=x;
        	Juz[i][j].b/=x;
		}
	}
}
void YueF(int i,int j){    //自定义函数单个约分(只需要传入数据的坐标就ok)
	if(Juz[i][j].a<0&&Juz[i][j].b<0||Juz[i][j].a>0&&Juz[i][j].b<0){
				Juz[i][j].a*=-1;
				Juz[i][j].b*=-1;
			}
	int x=Juz[i][j].a;
	int y=Juz[i][j].b;
	while(y){
       	int t=x%y;
       	x=y;
      	y=t;
    }
    Juz[i][j].a/=x;
    Juz[i][j].b/=x;
}
juz jian(int x,int y,int a,int b){    //减法函数,返回z[x][y]-z[a][b]的值
	int x_=Juz[x][y].a;
	int y_=Juz[x][y].b;
	int a_=Juz[a][b].a;
	int b_=Juz[a][b].b;
	a_*=y_;
	x_*=b_;
	y_*=b_;
	x_-=a_;
	Juz_T.a=x_;
	Juz_T.b=y_;
	return Juz_T;
}
juz Ride(int x,int y,int a,int b){//   =xy*ab 返回z[x][y]*z[a][b]的值
	int x_=Juz[x][y].a;
	int y_=Juz[x][y].b;
	int a_=Juz[a][b].a;
	int b_=Juz[a][b].b;
	Juz_T.a=x_*a_;
	Juz_T.b=y_*b_;
	return Juz_T; 
}
juz Div(int x,int y,int a,int b){//   =xy/ab 返回z[x][y]/z[a][b]的值
	int x_=Juz[x][y].a;
	int y_=Juz[x][y].b;
	int a_=Juz[a][b].a;
	int b_=Juz[a][b].b;
	Juz_T.a=x_*b_;
	Juz_T.b=y_*a_;
	return Juz_T;
}

int main(){                     //这是我处理得比较糟糕的部分,算法的实现被我一团糟的写到了主函数的部分。
	printf("ÑùÀýÊäÈ룺\n");
	printf("3\n");
	printf("1 -1 2\n");
	printf("5  6 7\n");
	printf("4 -1 2\n");
	printf("\n");
	while(1){
		scanf("%d",&n);
		for(int i=0;i<n;i++){
			for(int j=0;j<n;j++){
				scanf("%d",&Juz[i][j].a);
				Juz[i][j].b=1;	
			}
		}	
		int T=n;
		for(int i=1;i<T;i++){
			for(int j=i;j<T;j++){
				if(Juz[j][i-1].a){
					Juz[10][10]=Div(j,i-1,i-1,i-1);//»ñÈ¡ÐÐÁÐʽ±¶ÂÊ
					for(int k=1;k<=T;k++){
						Juz[11][11]=Ride(10,10,i-1,k-1);
						Juz[j][k-1]=jian(j,k-1,11,11);
					}
					YueF_All();
					YueF(10,10);
					YueF(11,11);
					if(Juz[10][10].b==1){
						if(Juz[10][10].a<0)
							printf("\nC%d+%d*C%d\n",j+1,-Juz[10][10].a,i);
						else
							printf("\nC%d-%d*C%d\n",j+1,Juz[10][10].a,i);
					}else{
						if(Juz[10][10].a<0)
							printf("\nC%d+%d/%d*C%d\n",j+1,-Juz[10][10].a,Juz[10][10].b,i);
						else
							printf("\nC%d-%d/%d*C%d\n",j+1,Juz[10][10].a,Juz[10][10].b,i);
					}
					for(int q=0;q<n;q++){
						for(int w=0;w<n;w++){
							if(Juz[q][w].b==1)
								printf(" %d",Juz[q][w].a);
							else
								printf(" %d/%d",Juz[q][w].a,Juz[q][w].b);
						}
						printf("\n\n");
					}
				}
			}
		}
		Juz[10][10].a=1;
		Juz[10][10].b=1; 
		for(int p=0;p<n;p++){
			Juz[10][10]=Ride(10,10,p,p);
		}
		YueF(10,10);
		if(Juz[10][10].b==1)
			printf("´ð°¸ÊÇ£º%d",Juz[10][10].a);
		else
			printf("´ð°¸ÊÇ£º%d/%d",Juz[10][10].a,Juz[10][10].b);
	}
	return 0;
}
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值