C言語でモジュロ(剰余)と除算を区別する方法
C言語には、除算に関連する2つの算術演算子が用意されています。それぞれの役割は以下のとおりです。
- 剰余演算子(モジュロ):「%」で表され、整数除算の余りを返します。
- 除算演算子:「/」で表され、除算の商を返します。
プログラム1:基本的な使い方
#include<stdio.h>
int main(){
int a, b, c;
printf("enter a,b,c values:");
scanf("%d%d%d",&a,&b,&c);
printf("a/b=%d a%%b=%d\n", a/b, a%b);
printf("(a+10)%%b=%d (a+10)/b=%d\n", (a+10)%b, (a+10)/b);
}
実行結果
enter a,b,c values:2 4 6 a/b=0 a%b=2 (a+10)%b=0 (a+10)/b=3
結果の解説
a=2、b=4 を入力した場合、各演算子は次のように動作します。
a/b→ 2 ÷ 4 の商は 0a%b→ 2 ÷ 4 の余りは 2(a+10)/b→ 12 ÷ 4 の商は 3(a+10)%b→ 12 ÷ 4 の余りは 0
プログラム2:ポインタ変数を使った演算
次に、ポインタ変数を介してモジュロと除算を実行する例を示します。ポインタが指し示す先の値(*p1、*p2)に対して演算を行っている点がポイントです。
#include<stdio.h>
void main(){
/* ポインタと変数の宣言 */
int num1, num2;
int *p1, *p2;
int div, mod;
p1 = &num1;
p2 = &num2;
/* ユーザー入力の読み込み */
printf("Enter the values of num1 & num2: ");
scanf("%d,%d",&num1,&num2);
div = *p1 / *p2;
mod = *p1 % *p2;
/* 結果の出力 */
printf("Division value = %d\n", div);
printf("Modulus value = %d\n", mod);
}
実行結果
Enter the values of num1 & num2: 30,20 Division value = 1 Modulus value = 10
結果の解説
num1=30、num2=20 を入力すると、ポインタ p1・p2 が参照する値を使って計算が行われます。
- 30 ÷ 20 の商(div)は 1
- 30 ÷ 20 の余り(mod)は 10
「/」と「%」の違いまとめ
| 演算子 | 名称 | 返す値 | 計算例(7 ÷ 2) |
|---|---|---|---|
| / | 除算 | 商 | 3 |
| % | 剰余(モジュロ) | 余り | 1 |
このように、「/」は商を、「%」は余りを求める演算子です。両者を組み合わせることで、割り切れるかどうかの判定や偶数・奇数の判定など、さまざまな処理に応用できます。
-
C言語入門:モノリシックプログラミングとモジュラープログラミングの違いを徹底解説
本記事では、C言語におけるモノリシックプログラミングとモジュラープログラミングの違いを、それぞれのメリット・デメリットとともに詳しく解説します。 モノリシックプログラミングとは プログラム全体を1つの関数、すなわちmain関数だけですべて記述する方式を「モノリシック(一枚岩)型プログラミング」と呼びます。しかし、すべてのロジックを単一の関数に詰め込むのは、良いプログラミングスタイルとは言えません。 デメリット モノリシックプログラミングには、以下のような欠点があります。 プログラムが非常に大きく、複雑になりやすい。 デバッグ、テスト、保守が非常に困難になる。 モジュラープログラミングとは
-
C言語のシフト演算とは?左シフト・右シフト・補数の基本をわかりやすく解説
問題 C言語を使用して、ある数値に対する左シフト・右シフト・補数(ビット反転)を求める簡単なプログラムを作成するには、どのようにすればよいのでしょうか。 解決方法 左シフト(<<) 変数の値を1ビットだけ左へシフトすると、その値は2倍になります。「a × 2」を計算したのと同じ結果です。 例:a = 10 の場合、a << 1 = 20 右シフト(>>) 変数の値を1ビットだけ右へシフトすると、その値は元の半分になります。「a ÷ 2」の整数除算と同じ結果です。 例:a = 10 の場合、a >> 1 = 5 サンプルプログラム 以下は、シ