
C言語基礎|複数の変換指定と単項演算子
ここまでの内容では、1つの値を表示したり、1つの値を読み込んだりするプログラムを作ってきました。
しかし実際のプログラムでは、複数の計算結果をまとめて表示したい場面 や、値を加工して表示したい場面 が数多くあります。
この記事では、
- printf 関数で 複数の変換指定を使う方法
- オペランドが 1 個だけの 単項演算子
について学習します。
どちらも、プログラムを簡潔に書くためにとても重要な考え方です。

複数の変換指定を使った表示
まずは、二つの整数値を読み込み、
平均との差と平均との差の絶対的な大きさ を同時に表示するプログラムを見てみましょう。
サンプルプログラム
プロジェクト名:chap2-3-1 ソースファイル名:chap2-3-1.c
Visual Studio でこのプログラムを実行するには、SDLチェック設定を変更しておく必要があります。
1.プロジェクト名を右クリックして、「プロパティ」をクリックします。
2.「C/C++」→「全般」→「SDLチェック」を「いいえ」に切り替えて「OK」をクリックします。
// 二つの整数値を読み込んで差とその符号反転値を表示
#include <stdio.h>
int main(void)
{
int p, q;
puts("二つの整数を入力してください。");
printf("整数 p:"); scanf("%d", &p);
printf("整数 q:"); scanf("%d", &q);
printf("pとqの差は%d、その符号を反転すると%dです。\n",
p - q, -(p - q));
return 0;
}実行例
二つの整数を入力してください。
整数 p:80
整数 q:55
pとqの差は25、その符号を反転すると-25です。複数の変換指定の対応関係
この printf 呼び出しでは、書式文字列に %d が2つ 含まれています。
printf("pとqの差は%d、その符号を反転すると%dです。\n",
p - q, -(p - q));| 書式文字列中の変換指定 | 対応する実引数 |
|---|---|
| 最初の %d | p - q |
| 次の %d | -(p - q) |
重要なルール
変換指定は、左から順番に実引数へ対応 します。
この順番が崩れることはありません。
scanf 関数での複数変換指定
scanf 関数でも、複数の変換指定を使うことができます。
scanf("%d%d", &p, &q);この場合、
- 1つ目の整数 → p
- 2つ目の整数 → q
という順序で読み込まれます。
入力時は、次のいずれかで区切ります。
- スペース
- タブ
- 改行
80 55
80
55どちらでも正しく読み込めます。
演習問題
演習 2-2
二つの整数値を読み込み、
平均との差と平均との差の2倍の値 を表示するプログラムを作成せよ。
実行例
二つの整数を入力してください。
整数 a:40
整数 b:18
差は22、差の2倍は44です。解答例
プロジェクト名:chap2-3-2 ソースファイル名:chap2-3-2.c
Visual Studio でこのプログラムを実行するには、SDLチェック設定を変更しておく必要があります。
1.プロジェクト名を右クリックして、「プロパティ」をクリックします。
2.「C/C++」→「全般」→「SDLチェック」を「いいえ」に切り替えて「OK」をクリックします。
#include <stdio.h>
int main(void)
{
int a, b;
puts("二つの整数を入力してください。");
printf("整数 a:"); scanf("%d", &a);
printf("整数 b:"); scanf("%d", &b);
printf("差は%d、差の2倍は%dです。\n", a - b, 2 * (a - b));
return 0;
}単項演算子とは
ここまでに使ってきた + や -、* などは、
2つの値を対象にする演算子 でした。
このような演算子は 2項演算子 と呼ばれます。
それに対して、値を1つだけ扱う演算子 も存在します。
それが 単項演算子 です。
単項 + 演算子と単項 − 演算子
次のプログラムでは、読み込んだ整数と、
符号を反転した値・絶対的な大きさ を同時に表示します。
サンプルプログラム
プロジェクト名:chap2-3-3 ソースファイル名:chap2-3-3.c
Visual Studio でこのプログラムを実行するには、SDLチェック設定を変更しておく必要があります。
1.プロジェクト名を右クリックして、「プロパティ」をクリックします。
2.「C/C++」→「全般」→「SDLチェック」を「いいえ」に切り替えて「OK」をクリックします。
// 整数値と符号反転値・元の値を表示
#include <stdio.h>
int main(void)
{
int n;
printf("整数を入力してください:");
scanf("%d", &n);
printf("入力値は%d、符号反転は%dです。\n", +n, -n);
return 0;
}実行例
整数を入力してください:12
入力値は12、符号反転は-12です。
整数を入力してください:-9
入力値は-9、符号反転は9です。単項演算子の意味
| 演算子 | 書式 | 意味 |
|---|---|---|
| 単項 + | +a | a の値そのもの |
| 単項 − | -a | a の符号を反転した値 |
単項 + 演算子は 実質的に何も変えません。
そのため、
+nは
nと同じ意味になります。
一方、単項 − 演算子は、符号を反転した新しい値を生成 します。
演算子の種類を整理しよう
| 種類 | オペランド数 | 例 |
|---|---|---|
| 単項演算子 | 1個 | -a, +a |
| 2項演算子 | 2個 | a + b, a * b |
| 3項演算子 | 3個 | 条件 ? 真 : 偽 |
この記事では、
複数の値を一度に表示する方法 と
単項演算子による値の扱い方 を解説しました。
