#1
by たきじゅん » 2年前
コード:
#include <stdio.h>
struct matrix //構造体作成//
{
int 行;
int 列;
double data[100][100];
};
void matrix_read(struct matrix* P);//readは要素に値を入力する
void matrix_print(struct matrix P);//printは要素を表示する
void matrix_add(struct matrix A, struct matrix B, struct matrix* C);//A+B=C
void matrix_sub(struct matrix A, struct matrix B, struct matrix* C);//A-B=C
void matrix_mul(struct matrix A, struct matrix B, struct matrix* C);//A*B=C
void matrix_copy(struct matrix A, struct matrix* B);
int main()//操作選択
{
int select;
struct matrix A, B, C;
// 初期化
A.行 = 0;
A.列 = 0;
B.行 = 0;
B.列 = 0;
C.行 = 0;
C.列 = 0;
do {
printf("項目を選択してください.\n1.行列Aを入力\n2.行列Bを入力\n3.行列Aを表示\n4.行列Bを表示\n5.行列Cを表示\n6.C = A + Bを計算\n7.C = A - Bを計算\n8.C = ABを計算\n9.行列Cを行列Aにコピー\n10.行列Cを行列Bにコピー\n11.終了\n");
scanf_s("%d", &select);
switch (select) {
case 1:
printf("行列Aを読み込みます¥n");
matrix_read(&A);
break;
case 2:
printf("行列Bを読み込みます¥n");
matrix_read(&B);
break;
case 3:
printf("行列A¥n");
matrix_print(A);
break;
case 4:
printf("行列B¥n");
matrix_print(B);
break;
case 5:
printf("行列C¥n");
matrix_print(C);
break;
case 6:
printf("行列の和C = A + Bを計算します¥n");
matrix_add(A, B, &C);
break;
case 7:
printf("行列の差C = A - Bを計算します¥n");
matrix_sub(A, B, &C);
break;
case 8:
printf("行列の積C = A * Bを計算します¥n");
matrix_mul(A, B, &C);
break;
case 9:
printf("行列Cを行列Aにコピー¥n");
matrix_copy(C, &A);
break;
case 10:
printf("行列Cを行列Bにコピー¥n");
B = C;
break;
}
} while (select != 11);
return 0;
}
void matrix_read(struct matrix* P)//入力
{
int i, j;
printf("行の数は:");
scanf_s("%d", &P->行);
printf("列の数は:");
scanf_s("%d", &P->列);
for (i = 0; P->行 > i; i++)
{
for (j = 0; P->列 > j; j++)
{
printf("(%d,%d)成分:", i + 1, j + 1);
scanf_s("%lf", &P->data[i][j]);
}
}
}
void matrix_print(struct matrix P)//表示
{
int i, j;
for (i = 0; P.行 > i; i++)
{
printf("|");
for (j = 0; P.列 > j; j++)
{
printf("%7.2f", P.data[i][j]);
}
printf("|¥n");
}
printf("¥n");
}
void matrix_add(struct matrix A, struct matrix B, struct matrix* C)
{
int i, j;
for ("i=0;P.行>i;i++")
{
for ("j=0;P.列>j;j++")
{
C[i][j] = a[i][j] + b[i][j];
}
}
}
void matrix_sub(struct matrix A, struct matrix B, struct matrix* C)
{
int i, j;
for ("i=0;P.行>i;i++")
{
for ("j=0;P.列>j;j++")
{
C[i][j] = a[i][j] - b[i][j];
}
}
}
void matrix_mul(struct matrix A, struct matrix B, struct matrix* C)
{
int i, j, k, x;
for ("i=0;P.行>i;i++")
{
for ("j=0;P.列>j;j++")
{
C[i][j] = a[i][j] * b[i][j];
for (i = 0; P.行 > i; i++)
{
for ("j=0;P.列>j;j++")
{
x = 0;
for(k=0;P.行>k;k++)
x=x+ a[i][k] * b[k][j];
C[i][j] = x;
}
}
}
}
}
void matrix_copy(struct matrix A, struct matrix* B)
{ // 中身を作成してください
}
最後の3つのmatrixが上手くいきません。
[code]
#include <stdio.h>
struct matrix //構造体作成//
{
int 行;
int 列;
double data[100][100];
};
void matrix_read(struct matrix* P);//readは要素に値を入力する
void matrix_print(struct matrix P);//printは要素を表示する
void matrix_add(struct matrix A, struct matrix B, struct matrix* C);//A+B=C
void matrix_sub(struct matrix A, struct matrix B, struct matrix* C);//A-B=C
void matrix_mul(struct matrix A, struct matrix B, struct matrix* C);//A*B=C
void matrix_copy(struct matrix A, struct matrix* B);
int main()//操作選択
{
int select;
struct matrix A, B, C;
// 初期化
A.行 = 0;
A.列 = 0;
B.行 = 0;
B.列 = 0;
C.行 = 0;
C.列 = 0;
do {
printf("項目を選択してください.\n1.行列Aを入力\n2.行列Bを入力\n3.行列Aを表示\n4.行列Bを表示\n5.行列Cを表示\n6.C = A + Bを計算\n7.C = A - Bを計算\n8.C = ABを計算\n9.行列Cを行列Aにコピー\n10.行列Cを行列Bにコピー\n11.終了\n");
scanf_s("%d", &select);
switch (select) {
case 1:
printf("行列Aを読み込みます¥n");
matrix_read(&A);
break;
case 2:
printf("行列Bを読み込みます¥n");
matrix_read(&B);
break;
case 3:
printf("行列A¥n");
matrix_print(A);
break;
case 4:
printf("行列B¥n");
matrix_print(B);
break;
case 5:
printf("行列C¥n");
matrix_print(C);
break;
case 6:
printf("行列の和C = A + Bを計算します¥n");
matrix_add(A, B, &C);
break;
case 7:
printf("行列の差C = A - Bを計算します¥n");
matrix_sub(A, B, &C);
break;
case 8:
printf("行列の積C = A * Bを計算します¥n");
matrix_mul(A, B, &C);
break;
case 9:
printf("行列Cを行列Aにコピー¥n");
matrix_copy(C, &A);
break;
case 10:
printf("行列Cを行列Bにコピー¥n");
B = C;
break;
}
} while (select != 11);
return 0;
}
void matrix_read(struct matrix* P)//入力
{
int i, j;
printf("行の数は:");
scanf_s("%d", &P->行);
printf("列の数は:");
scanf_s("%d", &P->列);
for (i = 0; P->行 > i; i++)
{
for (j = 0; P->列 > j; j++)
{
printf("(%d,%d)成分:", i + 1, j + 1);
scanf_s("%lf", &P->data[i][j]);
}
}
}
void matrix_print(struct matrix P)//表示
{
int i, j;
for (i = 0; P.行 > i; i++)
{
printf("|");
for (j = 0; P.列 > j; j++)
{
printf("%7.2f", P.data[i][j]);
}
printf("|¥n");
}
printf("¥n");
}
void matrix_add(struct matrix A, struct matrix B, struct matrix* C)
{
int i, j;
for ("i=0;P.行>i;i++")
{
for ("j=0;P.列>j;j++")
{
C[i][j] = a[i][j] + b[i][j];
}
}
}
void matrix_sub(struct matrix A, struct matrix B, struct matrix* C)
{
int i, j;
for ("i=0;P.行>i;i++")
{
for ("j=0;P.列>j;j++")
{
C[i][j] = a[i][j] - b[i][j];
}
}
}
void matrix_mul(struct matrix A, struct matrix B, struct matrix* C)
{
int i, j, k, x;
for ("i=0;P.行>i;i++")
{
for ("j=0;P.列>j;j++")
{
C[i][j] = a[i][j] * b[i][j];
for (i = 0; P.行 > i; i++)
{
for ("j=0;P.列>j;j++")
{
x = 0;
for(k=0;P.行>k;k++)
x=x+ a[i][k] * b[k][j];
C[i][j] = x;
}
}
}
}
}
void matrix_copy(struct matrix A, struct matrix* B)
{ // 中身を作成してください
}
[/code]
最後の3つのmatrixが上手くいきません。