2つの行列が等しいかどうかを判定するC言語プログラム
このプログラムでは、ユーザーが2つの行列の次数(行数と列数)および各要素を入力し、入力された2つの行列を比較します。
2つの行列のサイズ(行数・列数)とすべての要素が一致している場合、「2つの行列は等しい」と表示されます。
サイズは同じでも要素が1つでも異なる場合には、「行列は比較できるが、等しくはない」と表示されます。
サイズ自体が一致しない場合には、「2つの行列は比較できない」と表示されます。
プログラム
以下は、2つの行列が等しいかどうかを比較するCプログラムです。
#include <stdio.h>
#include <conio.h>
main(){
int A[10][10], B[10][10];
int i, j, R1, C1, R2, C2, flag =1;
printf("Enter the order of the matrix A\n");
scanf("%d %d", &R1, &C1);
printf("Enter the order of the matrix B\n");
scanf("%d %d", &R2,&C2);
printf("Enter the elements of matrix A\n");
for(i=0; i<R1; i++){
for(j=0; j<C1; j++){
scanf("%d",&A[i][j]);
}
}
printf("Enter the elements of matrix B\n");
for(i=0; i<R2; i++){
for(j=0; j<C2; j++){
scanf("%d",&B[i][j]);
}
}
printf("MATRIX A is\n");
for(i=0; i<R1; i++){
for(j=0; j<C1; j++){
printf("%3d",A[i][j]);
}
printf("\n");
}
printf("MATRIX B is\n");
for(i=0; i<R2; i++){
for(j=0; j<C2; j++){
printf("%3d",B[i][j]);
}
printf("\n");
}
/* Comparing two matrices for equality */
if(R1 == R2 && C1 == C2){
printf("Matrices can be compared\n");
for(i=0; i<R1; i++){
for(j=0; j<C2; j++){
if(A[i][j] != B[i][j]){
flag = 0;
break;
}
}
}
}
else{
printf(" Cannot be compared\n");
exit(1);
}
if(flag == 1 )
printf("Two matrices are equal\n");
else
printf("But,two matrices are not equal\n");
}実行結果
上記のプログラムをコンパイルして実行すると、次のような出力が得られます。
Run 1: Enter the order of the matrix A 2 2 Enter the order of the matrix B 2 2 Enter the elements of matrix A 1 2 3 4 Enter the elements of matrix B 1 2 3 4 MATRIX A is 1 2 3 4 MATRIX B is 1 2 3 4 Matrices can be compared Two matrices are equal Run 2: Enter the order of the matrix A 2 2 Enter the order of the matrix B 2 2 Enter the elements of matrix A 1 2 3 4 Enter the elements of matrix B 5 6 7 8 MATRIX A is 1 2 3 4 MATRIX B is 5 6 7 8 Matrices can be compared But,two matrices are not equal
プログラムの解説
このプログラムのポイントは、初期値が 1 のフラグ変数(flag)を使って等しいかどうかを判定している点です。
まず、2つの行列の行数(R1 と R2)および列数(C1 と C2)が一致しているかどうかを確認します。サイズが一致しない場合は比較が不可能なため、メッセージを表示してプログラムを終了します。
サイズが一致している場合は、二重の for ループで全要素を順番に比較します。もし1つでも異なる要素が見つかった時点で、フラグ変数を 0 に設定し、break 文でループを抜けます。
最終的にフラグ変数が 1 のままなら「2つの行列は等しい」、0 に変更されていれば「2つの行列は等しくない」と判定して結果を表示します。
-
C言語のトークンとは?6つの種類とサンプルコードでわかりやすく解説
トークンとはトークン(token)とは、コンパイラにとって意味を持つ、プログラムを構成する最小単位のことです。コンパイラはソースコードをこの最小単位へと分割し、生成されたトークンを基にコンパイルの各段階へと処理を進めていきます。トークンの種類C言語のトークンは、主に以下の6種類に分類されます。キーワード(予約語):int、return など、言語仕様によって意味が定められた語識別子:変数名や関数名など、開発者が自由に命名できる名前定数:10、3.14 など、プログラム中で値が変わらない固定値文字列:ダブルクォート( )で囲まれた文字の並び特殊記号:{ }、( )、; など、構文を区切るための記
-
C言語で正方行列をZ字形に表示するプログラム
プログラムの概要本記事では、C言語を使って正方行列の要素を「Z」の字形に沿って出力するプログラムを解説します。正方行列とは、行数と列数が等しい行列のことです。n行n列の行列は「n次の正方行列」と呼ばれ、2×2、3×3、4×4などの行列が該当します。Z字形出力のアルゴリズム行列の要素をZ字形で表示するには、次の3つの部分を順番に出力します。最上行(1行目):左端から右端までのすべての要素対角成分:右上から左下へ向かう斜めの要素(両端の角は除く)最下行(最終行):すべての要素これらを順につなげると、アルファベットの「Z」の形が完成します。3×3の行列の場合: a00 a01 a02