【C言語】配列の算術演算(加算・減算・乗算・除算・剰余)を実行する方法
配列(アレイ)とは、互いに関連性のある複数のデータ項目を、たった1つの名前でまとめて管理できるデータ構造のことです。
例えば int student[30]; と宣言すると、「student」という1つの変数名だけで、30個分のデータ項目を格納できます。個別の変数を大量に用意する必要がないため、コードがすっきりし、管理も容易になります。
配列に対する主な操作
- 探索(サーチ) … 特定の要素が配列内に存在するかどうかを調べる操作です。
- 整列(ソート) … 配列内の要素を昇順または降順に並べ替える操作です。
- 走査(トラバース) … 配列内のすべての要素を先頭から順番に処理していく操作です。
- 挿入 … 配列に新しい要素を追加する操作です。
- 削除 … 配列から不要な要素を取り除く操作です。
配列の算術演算の基本的なロジック
2つの配列 A と B の対応する要素同士に対して、加算・減算・乗算・除算・剰余の5種類の演算を一度に行いたい場合は、forループを使って次のように記述します。
for(i = 0; i < size; i++){
add[i] = A[i] + B[i];
sub[i] = A[i] - B[i];
mul[i] = A[i] * B[i];
div[i] = A[i] / B[i];
mod[i] = A[i] % B[i];
}
このように、添字(インデックス)i を使って同じ位置の要素を順番に取り出しながら演算を行うのが、配列同士の算術演算の基本パターンです。
C言語によるサンプルプログラム
以下は、ユーザーが入力した2つの整数型配列の各要素に対して5種類の算術演算を実行し、その結果を表形式で一覧表示するC言語のプログラム例です。
#include<stdio.h>
int main(){
int size, i, A[50], B[50];
int add[10], sub[10], mul[10], mod[10];
float div[10];
printf("enter array size:\n");
scanf("%d", &size);
printf("enter elements of 1st array:\n");
for(i = 0; i < size; i++){
scanf("%d", &A[i]);
}
printf("enter the elements of 2nd array:\n");
for(i = 0; i < size; i++){
scanf("%d", &B[i]);
}
for(i = 0; i < size; i++){
add[i] = A[i] + B[i];
sub[i] = A[i] - B[i];
mul[i] = A[i] * B[i];
div[i] = A[i] / B[i];
mod[i] = A[i] % B[i];
}
printf("\n add\t sub\t Mul\t Div\t Mod\n");
printf("------------------------------------\n");
for(i = 0; i < size; i++){
printf("\n%d\t ", add[i]);
printf("%d \t ", sub[i]);
printf("%d \t ", mul[i]);
printf("%.2f\t ", div[i]);
printf("%d \t ", mod[i]);
}
return 0;
}
実行結果
上記のプログラムをコンパイルして実行すると、次のような出力が得られます。
Run 1: enter array size: 2 enter elements of 1st array: 23 45 enter the elements of 2nd array: 67 89 add sub Mul Div Mod ------------------------------------ 90 -44 1541 0.00 23 134 -44 4005 0.00 45 Run 2: enter array size: 4 enter elements of 1st array: 89 23 12 56 enter the elements of 2nd array: 2 4 7 8 add sub Mul Div Mod ------------------------------------ 91 87 178 44.00 1 27 19 92 5.00 3 19 5 84 1.00 5 64 48 448 7.00 0
ポイント:除算結果が「0.00」になる理由
Run 1 の実行結果では、Div の欄が 0.00 になっています。これはバグではなく、C言語の仕様によるものです。配列 A と B がどちらも int 型(整数型)であるため、A[i] / B[i] の計算は整数同士の除算として処理され、小数点以下が切り捨てられます。つまり 23 / 67 や 45 / 89 は、どちらも商が 0 となるため、結果は 0.00 になるのです。
もし小数点以下まで正確な除算結果が必要な場合は、計算時に明示的にキャストを行い、div[i] = (float)A[i] / B[i]; のように記述します。これにより、浮動小数点数として除算が行われるため、期待通りの小数値が得られます。
-
C言語の文字操作を徹底解説!宣言方法と入出力関数の使い方
Cプログラミング言語において、文字(character)は英大文字(A〜Z)、英小文字(a〜z)、数字(0〜9)、空白(ホワイトスペース)、または特殊記号のいずれかとして扱われます。文字の宣言方法C言語で文字型変数を宣言する際は、char 型を使用します。文字定数はシングルクォーテーション( )で囲んで指定します。char a = A; /* 文字定数を使用した宣言 */このように宣言することで、変数 a に1文字分のデータを格納できます。文字入出力関数の種類C言語には、文字を入出力するための関数がいくつか用意されています。代表的なものは以下の3組です。scanf / printf: 書式指定
-
C言語のシフト演算とは?左シフト・右シフト・補数の基本をわかりやすく解説
問題 C言語を使用して、ある数値に対する左シフト・右シフト・補数(ビット反転)を求める簡単なプログラムを作成するには、どのようにすればよいのでしょうか。 解決方法 左シフト(<<) 変数の値を1ビットだけ左へシフトすると、その値は2倍になります。「a × 2」を計算したのと同じ結果です。 例:a = 10 の場合、a << 1 = 20 右シフト(>>) 変数の値を1ビットだけ右へシフトすると、その値は元の半分になります。「a ÷ 2」の整数除算と同じ結果です。 例:a = 10 の場合、a >> 1 = 5 サンプルプログラム 以下は、シ