C言語で配列の下三角行列と上三角行列を出力するプログラム
プログラムの説明
本記事では、入力された配列(行列)から下三角行列と上三角行列を出力するC言語のプログラムを紹介します。
三角行列とは
三角行列とは、下三角行列または上三角行列のいずれかに該当する行列の総称です。
下三角行列
正方行列において、主対角線より上側のすべての要素が0である行列を「下三角行列」と呼びます。
上三角行列
正方行列において、主対角線より下側のすべての要素が0である行列を「上三角行列」と呼びます。
次のような形状を持つ行列は下三角行列(左三角行列)と呼ばれます。
$${\displaystyle L={\begin{bmatrix}\ell _{1,1}&&&&0\\\ell _{2,1}&\ell _{2,2}&&&\\\ell _{3,1}&\ell _{3,2}&\ddots &&\\\vdots &\vdots &\ddots &\ddots &\\\ell _{n,1}&\ell _{n,2}&\ldots &\ell _{n,n-1}&\ell _{n,n}\end{bmatrix}}}$$
同様に、次のような形状を持つ行列は上三角行列(右三角行列)と呼ばれます。
$${\displaystyle U={\begin{bmatrix}u_{1,1}&u_{1,2}&u_{1,3}&\ldots &u_{1,n}\\&u_{2,2}&u_{2,3}&\ldots &u_{2,n}\\&&\ddots &\ddots &\vdots \\&&&\ddots &u_{n-1,n}\\0&&&&u_{n,n}\end{bmatrix}}}$$
慣例として、下三角行列(左三角行列)は変数 L で、上三角行列(右三角行列)は変数 U または R で表されます。
また、上三角と下三角の性質を同時に満たす行列は対角行列となります。さらに、三角行列と相似な行列は「三角化可能(triangularisable)」と呼ばれます。
例:上三角行列
$${\displaystyle {\begin{bmatrix}{1}&{4}&{1}\\{0}&{6}&{4}\\{0}&{0}&{1}\end{bmatrix}}}$$
例:下三角行列
$${\displaystyle {\begin{bmatrix}{1}&{0}&{0}\\{2}&{8}&{0}\\{4}&{9}&{7}\end{bmatrix}}}$$
アルゴリズム
さまざまなサイズの行列に対して、以下の手順で処理を実行します。


下三角行列を作成する手順
- 行と列のインデックス位置を確認します。
- 列のインデックスが行のインデックスより大きい場合、その位置の値を0にします。
上三角行列を作成する手順
- 行と列のインデックス位置を確認します。
- 列のインデックスが行のインデックスより小さい場合、その位置の値を0にします。

サンプルコード
/* 下三角行列と上三角行列を求めるプログラム */
#include<stdio.h>
int main() {
int rows, cols, r, c, matrix[10][10];
clrscr(); /*画面のクリア*/
printf("Please enter the number of rows for the matrix: ");
scanf("%d", &rows);
printf("\n");
printf("Please enter the number of columns for the matrix: ");
scanf("%d", &cols);
printf("\n");
printf("Please enter the elements for the Matrix: \n");
for(r = 0; r < rows; r++){
for(c = 0;c < cols;c++){
scanf("%d", &matrix[r][c]);
}
}
printf("\n The Lower Triangular Matrix is: ");
for(r = 0; r < rows; r++){
printf("\n");
for(c = 0; c < cols; c++){
if(r >= c){
printf("%d\t ", matrix[r][c]);
}
else{
printf("0");
printf("\t");
}
}
}
printf("\n\n The Upper Triangular Matrix is: ");
for(r = 0; r < rows; r++){
printf("\n");
for(c = 0; c < cols; c++){
if(r > c){
printf("0");
printf("\t");
}
else{
printf("%d\t ", matrix[r][c]);
}
}
}
getch();
return 0;
}
補足: clrscr() と getch() はTurbo Cなどの古い開発環境専用の関数です。GCCなどの現代的なコンパイラで実行する場合は、これらの行を削除してください。
出力結果

-
Cプログラムで2次元行列の四隅の要素とその合計を出力する方法
概要 サイズ2×2以上の2次元配列(行列)が与えられたとき、その四隅に格納されているすべての要素を取り出し、合計を求めて出力するのが本記事のテーマです。 四隅の要素とは? 行数「r」、列数「c」(いずれも0から開始)をもつ行列 mat[r][c] を考えると、四隅の要素は次の4つになります。 左上:mat[0][0] 右上:mat[0][c-1] 左下:mat[r-1][0] 右下:mat[r-1][c-1] したがって、求める合計は次の式で表されます。mat[0][0] + mat[0][c-1] + mat[r-1][0] + mat[r-1][c-1]これらの四隅の要素を取得して加算
-
C++で行列が下三角行列かどうかを判定するプログラム
行数 r と列数 c が等しい(r = c)正方行列 M[r][c] が与えられたとき、その行列 M が「下三角行列」であるかどうかを判定する方法を解説します。 下三角行列とは 下三角行列とは、主対角線(およびその下側)の要素が非ゼロであり、主対角線より上側の要素がすべてゼロである行列のことです。 次の図の例を見てみましょう。 上の図で赤く強調されている要素は主対角線より上側の要素で、これらはすべてゼロになっています。それ以外の要素は非ゼロです。 入力例と出力例 Input: m[3][3] = { {1, 0, 0}, {2, 3, 0}, &nbs