a = 6, b = 5 のとき,次の各計算結果を表示するプログラムを作成せよ.
解答例:
#include <stdio.h>
void main()
{
int a, b;
a = 6;
b = 5;
printf("a = %d ¥n b = %d ¥n ", a, b);
printf("a + b = %d ¥n", a+b);
printf("a - b = %d ¥n", a-b);
printf("a x b = %d ¥n", a*b);
printf("a / b = %d ¥n", a/b);
printf("a %% b = %d ¥n", a%b); /* ここはコメント.%%で画面に%が出力される */
printf("底辺a,高さbの三角形の面積 = %d¥n", a*b/2);
printf("a^2 + ab = %d ¥n", (a+b)*a);
}
結果:
a = 6 b = 5 a + b = 11 a - b = 1 a x b = 30 a / b = 1 a % b = 1 底辺a,高さbの三角形の面積 = 15 a^2 + ab = 66
あれ,割り算の結果が思い通りになりませんね.
わり算の結果(商)は,実数になるはずなので,
printf("a / b = %f ¥n", a/b);
としてみよう.さあ,どうでしょう?
a / b = 0.000000
ますますおかしくなりましたね.これは,同じ型同士で演算をすると結果も同じ型になるからである.
上の例だと,
[整数]=[整数]÷[整数]
となるため,商が正しく求まりません.そこで,別の実数の変数を用意して,
[実数]=[整数]÷[整数]
となるように,書き換えてみよう.
#include <stdio.h>
void main()
{
int a, b;
float c;
a = 6;
b = 5;
c = a / b;
printf("a / b = %f¥n", c);
}
結果:
a / b = 1.000000
まだ,おかしいですね.
わり算をうまく行うには,
[実数]=[実数]÷[実数]
としなくてはならない.そこで整数から実数に変数の型を変換する必要がある. 型を変換することを キャスト と呼ぶ.
#include <stdio.h>
void main()
{
int a, b;
float c;
a = 6;
b = 5;
c = (float)a / (float)b;
printf("a / b = %f ¥n", c);
}
結果:
a / b = 1.200000
やっと,意図した結果が得られた.
このように,計算の途中で型が思い通りにならないことが多く出てくる.気をつけてプログラムを作ろう.
これまで,プログラム内で扱う値は,あらかじめ(=コンパイル時に)プログラムに記述してあるものしか扱えなかった.
そこで、上のプログラムにおいて,変数 a や変数 b に後から(=実行時に)値を設定できるようにしよう.
キーボードからデータを入力するには scanf()関数を用いる.
基本的な文法は既にに学んだ printf() 関数とよく似ている.
scanf() 関数は,printf() 関数によく似ているが,値を格納する変数の前に必ず & をつける必要がある.
この記号の意味(変数のアドレスを取り出す演算子)は情報処理・演習2(後期)に扱う.
キーボードから変数に値を入力し,画面に表示するプログラム:
#include <stdio.h>
void main()
{
int a;
float b;
printf("a = ");
scanf("%d", &a);
printf("b = ");
scanf("%f", &b);
printf("a = %d ¥n", a);
printf("b = %f ¥n", b);
}
さて今度は,ある整数を入力したとき,その整数が正か負かを判定し,結果を画面に表示するにはどうしたらよいか考えてみよう.
プログラムを作成するときは,課題が与えられたらいきなりプログラミングに取りかからず,必ず計算手順(アルゴリズム)を検討する.
1.整数を入力する 2.正負を判定する |
となる.それぞれを,詳細に検討すると,
1.整数を入力する |
2.1 整数が0以上か? 2.1T 成立するとき 「正の整数です」 |
これを,C言語を用いてプログラムにしてみよう.
英語でif~, ~, は,「もし~ならば,~」と,条件を表すことができる.
C言語でも同様に条件によってプログラムの流れを切り替える(制御する)方法が必要である.
プログラム中において,変数と数の大小などを比較し,その結果によって処理を変えることを条件分岐と呼ぶ.
C言語の if 文の最も簡単な分岐の例をフローチャートで表すと,
となり,条件が成り立つときは処理1を実行し,成り立たないときは処理1を実行せず,その先に進む.
さらに,if~else~文では,
このように,条件が成り立つときは処理1を実行し,成り立たないときは別の処理2を実行するという流れが実現できる.
数の大小を比較する演算子を比較演算子と呼び,比較の条件が成立した場合を「真(True)」,不成立の場合を「偽(False)」という.
演算子 | はたらき | 使い方 | 意味 |
= = | 等しい | a = = b | a と b は等しい |
!= | 等しくない | a != b | a と b は等しくない |
< | 小なり | a < b | a は b より小さい |
> | 大なり | a > b | a は b より大きい |
<= | 以下 | a <= b | a は b 以下 |
>= | 以上 | a >= b | a は b 以上 |
注意: =>,=<, =! という比較演算子は存在しない.
複数の条件を組み合わせてより複雑な条件を作るには,論理演算子を用いる.
演算子 | はたらき | 使い方 | 意味 |
&& | かつ | a = = 5 && b = = 3 | ![]() |
|| | または | a = = 2 || b < -2 | ![]() |
! | ~ではない | ! (a = = 0) | ![]() |
では if 文を使って整数の正負判定プログラムを作ってみよう.
#include <stdio.h>
void main()
{
int n;
printf("整数を入力して下さい");
scanf("%d", &n);
if ( n >=0 )
{
printf("正の整数です¥n "); /*整数が0以上の時に実行される 処理1*/
}
else
{
printf("負の整数です¥n "); /* 整数が0未満の時に実行される 処理2*/
}
}
(1)先週の課題(2)において,変数a, b をキーボードから入力して計算するように変更してみよう.
(2)肥満度を表す指標にBMI(Body Mass Index)というものがある. これはWHOで基準が発表されているが,18.5から25までが正常範囲とされている.
BMI=体重(kg) ÷ 身長2(m)
キーボードから体重と身長を入力(単位に注意!)すると,BMI値を計算して画面に表示するプログラムを作成せよ.
(3)次に,もし求めたBMI値が25以上だったら「肥満です」と画面に表示されるようにプログラムを改良しよう.
(4)以下の表のように,求めたBMI値がさらに細かく分類され,判定結果を画面に表示するようにプログラムを改良しよう.
BMI | 判定 |
18.5未満 | やせ |
18.5〜25 | 普通 |
25〜30 | やや肥満 |
30〜35 | 肥満1 |
35〜40 | 肥満2 |
40以上 | 肥満3 |