#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#define MaxNumber 30;
typedef double ElemType;
typedef struct matrix {
int col;
int column;
ElemType data[10][10];
}Matrix, * FuckMatrix;
FuckMatrix InitMatrix(FuckMatrix M, int m, int n) {
M->col = m;
M->column = n;
return M;
}
void EnterMatrix(FuckMatrix M) {
for (int i = 0; i < M->col; i++) {
for (int j = 0; j < M->column; j++) {
scanf_s("%lf", &M->data[i][j]);
}
}
}
ElemType det(FuckMatrix M) {
ElemType sum = 0;
FuckMatrix me;
me = (FuckMatrix)malloc(sizeof(Matrix));
me->col = M->col - 1;
me->column = M->column - 1;
if (M->col == 1)
return M->data[0][0];
else {
for (int k = 0; k < M->col; k++) {
for (int i = 0; i < me->col; i++) {
for (int j = 0; j < me->column; j++) {
if (i < k)
me->data[i][j] = M->data[i][j + 1];
else
me->data[i][j] = M->data[i + 1][j + 1];
}
}
sum += pow(-1, k) * M->data[k][0] * det(me);
}
}
free(me);
return sum;
}
void PrintMatrix(FuckMatrix M) {
for (int i = 0; i < M->col; i++) {
for (int j = 0; j < M->column; j++) {
printf("%-5.1lf ", M->data[i][j]);
}
printf("\n");
}
system("pause");
}
FuckMatrix AddMatrix(FuckMatrix M, FuckMatrix N) {
for (int i = 0; i < M->col; i++) {
for (int j = 0; j < M->column; j++) {
M->data[i][j] += N->data[i][j];
}
}
return M;
}
FuckMatrix TranMatrix(FuckMatrix M, FuckMatrix N) {
for (int i = 0; i < N->col; i++) {
for (int j = 0; j < N->column; j++) {
N->data[i][j] = M->data[j][i];
}
}
return N;
}
FuckMatrix MultiMatrix(FuckMatrix M, FuckMatrix N) {
FuckMatrix R;
R = (FuckMatrix)malloc(sizeof(Matrix));
InitMatrix(R, M->col, N->column);
for (int i = 0; i < R->col; i++) {
for (int j = 0; j < R->column; j++) {
R->data[i][j] = 0;
for (int k = 0; k < M->column; k++) {
R->data[i][j] += M->data[i][k] * N->data[k][j];
}
}
}
return R;
}
double DuiMatrix(FuckMatrix M) {
double sum = 0;
for (int i = 0; i < M->col; i++) {
for (int j = 0; j < M->column; j++) {
if (i == j || (i + j) == M->col - 1)
sum += M->data[i][j];
}
}
return sum;
}
void matrix_1() {
FuckMatrix M;
int m, n;
system("CLS");
M = (FuckMatrix)malloc(sizeof(Matrix));
printf("Enter M and N(M == N):");
scanf_s("%d %d", &m, &n);
while (m != n) {
printf("Enter M and N(M == N):");
scanf_s("%d %d", &m, &n);
}
InitMatrix(M, m, n);
EnterMatrix(M);
printf("%lf\n", det(M));
free(M);
printf("fuck you\n");
system("pause");
}
void matrix_2() {
FuckMatrix M, N;
int m, n;
system("CLS");
M = (FuckMatrix)malloc(sizeof(Matrix));
N = (FuckMatrix)malloc(sizeof(Matrix));
printf("Enter M and N:");
scanf_s("%d %d", &m, &n);
InitMatrix(M, m, n);
InitMatrix(N, m, n);
printf("Enter First:\n");
EnterMatrix(M);
printf("Enter Last:\n");
EnterMatrix(N);
M = AddMatrix(M, N);
printf("The Result:\n");
PrintMatrix(M);
}
void matrix_3() {
FuckMatrix M, N, R;
int x, y, z, k;
system("CLS");
M = (FuckMatrix)malloc(sizeof(Matrix));
N = (FuckMatrix)malloc(sizeof(Matrix));
R = (FuckMatrix)malloc(sizeof(Matrix));
printf("Enter X and Y:");
scanf_s("%d %d", &x, &y);
InitMatrix(M, x, y);
printf("Enter First:\n");
EnterMatrix(M);
printf("\n-- --- -- --- -- --- -- --- \n\n");
printf("Enter Y and Z:");
scanf_s("%d %d", &k, &z);
while (k != y) {
printf("Enter Y and Z:");
scanf_s("%d %d", &k, &z);
}
InitMatrix(N, k, z);
printf("Enter Last:\n");
EnterMatrix(N);
InitMatrix(R, x, z);
R = MultiMatrix(M, N);
printf("The Result:\n");
PrintMatrix(R);
}
void matrix_4() {
FuckMatrix M, N;
int m, n;
system("CLS");
M = (FuckMatrix)malloc(sizeof(Matrix));
N = (FuckMatrix)malloc(sizeof(Matrix));
printf("Enter M and N(M == N):");
scanf_s("%d %d", &m, &n);
InitMatrix(M, m, n);
InitMatrix(N, n, m);
EnterMatrix(M);
N = TranMatrix(M, N);
printf("The Result:\n");
PrintMatrix(N);
}
void matrix_5() {
FuckMatrix M, N;
int x[4];
srand(time(NULL));
system("CLS");
M = (FuckMatrix)malloc(sizeof(Matrix));
N = (FuckMatrix)malloc(sizeof(Matrix));
for (int i = 0; i < 4; i++) {
x[i] = (int)(rand() % 10) + 1;
}
InitMatrix(M, x[0], x[1]);
InitMatrix(N, x[2], x[3]);
for (int i = 0; i < M->col; i++) {
for (int j = 0; j < M->column; j++) {
M->data[i][j] = rand() % MaxNumber;
}
}
for (int i = 0; i < N->col; i++) {
for (int j = 0; j < N->column; j++) {
N->data[i][j] = rand() % MaxNumber;
}
}
printf("The First:\n");
PrintMatrix(M);
printf("\nThe Last:\n");
PrintMatrix(N);
}
void matrix_6() {
FuckMatrix M;
int m, n;
double sum = 0;
M = (FuckMatrix)malloc(sizeof(Matrix));
system("CLS");
printf("Enter M and N(M == N):");
scanf_s("%d %d", &m, &n);
InitMatrix(M, m, n);
EnterMatrix(M);
sum = DuiMatrix(M);
printf("The Result:%f\n", sum);
system("pause");
}
int main() {
int choice;
while (1) {
system("CLS");
system("color 11");
printf("\t\t\t---------------------------------------------------\n");
printf("\t\t\t--------------------1.行列式计算-------------------\n");
printf("\t\t\t--------------------2.矩阵相加---------------------\n");
printf("\t\t\t--------------------3.矩阵相乘---------------------\n");
printf("\t\t\t--------------------4.矩阵求逆---------------------\n");
printf("\t\t\t--------------------5.矩阵随机生成-----------------\n");
printf("\t\t\t--------------------6.对角线元素之和---------------\n");
printf("\t\t\t--------------------7.结束程序---------------------\n");
printf("\t\t\t---------------------------------------------------\n");
printf("\t\t\tEnter Your Choice:");
scanf_s("%d", &choice);
switch (choice) {
case 1:
matrix_1(); break;
case 2:
matrix_2(); break;
case 3:
matrix_3(); break;
case 4:
matrix_4(); break;
case 5:
matrix_5(); break;
case 6:
matrix_6(); break;
case 7:
exit(0);
default:printf("Wrong!\n");
}
}
}
C语言实现一点基本的矩阵运算