Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

【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 / 6745 / 89 は、どちらも商が 0 となるため、結果は 0.00 になるのです。

もし小数点以下まで正確な除算結果が必要な場合は、計算時に明示的にキャストを行い、div[i] = (float)A[i] / B[i]; のように記述します。これにより、浮動小数点数として除算が行われるため、期待通りの小数値が得られます。

  1. C言語の文字操作を徹底解説!宣言方法と入出力関数の使い方

    Cプログラミング言語において、文字(character)は英大文字(A〜Z)、英小文字(a〜z)、数字(0〜9)、空白(ホワイトスペース)、または特殊記号のいずれかとして扱われます。文字の宣言方法C言語で文字型変数を宣言する際は、char 型を使用します。文字定数はシングルクォーテーション( )で囲んで指定します。char a = A; /* 文字定数を使用した宣言 */このように宣言することで、変数 a に1文字分のデータを格納できます。文字入出力関数の種類C言語には、文字を入出力するための関数がいくつか用意されています。代表的なものは以下の3組です。scanf / printf: 書式指定

  2. C言語のシフト演算とは?左シフト・右シフト・補数の基本をわかりやすく解説

    問題 C言語を使用して、ある数値に対する左シフト・右シフト・補数(ビット反転)を求める簡単なプログラムを作成するには、どのようにすればよいのでしょうか。 解決方法 左シフト(<<) 変数の値を1ビットだけ左へシフトすると、その値は2倍になります。「a × 2」を計算したのと同じ結果です。 例:a = 10 の場合、a << 1 = 20 右シフト(>>) 変数の値を1ビットだけ右へシフトすると、その値は元の半分になります。「a ÷ 2」の整数除算と同じ結果です。 例:a = 10 の場合、a >> 1 = 5 サンプルプログラム 以下は、シ