(3)整数型の変数,a = 6, b = 5 とするとき,次の各計算結果を画面に表示するプログラムを作成しよう.
解答例:
#include <stdio.h>
void main()
{
int a,b; /*ここはコメント.C言語のとき宣言は最初*/
a = 6; /*ここはコメント.aに6を代入*/
b = 5; /*ここはコメント.bに5を代入*/
printf("a×b=%d¥n",a*b);
printf("a÷b=%d¥n",a/b);
printf("a%%b=%d¥n",a%b); /*ここはコメント.半角%を表示させるには,%%と打つ*/
printf("a^2 + ab =%d¥n",a*a+a*b);
}
結果:
a = 6 b = 5 a x b = 30 a / b = 1 a % b = 1 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 変数x=6,y=5をキーボードから入力して以下の式を計算してみよう.
・x × y
・x ÷ y
・x % y
・( x - y )( x² + xy + y² )
問2 キーボードから整数値を入力すると,偶数か奇数か表示するプログラムを作ってみよう.
問3
3-1) キーボードから二つの整数値を入力すると,次のようなメッセージを出力するプログラムを作ってみよう.
値が同じ場合 | 2つの数は同じ値です |
それ以外の場合 | 2つの数は違う値です |
3-2) 3-1を応用して値が違う場合,2つの整数値の差を表示するプログラムを作ってみよう.
値が同じ場合 | 2つの数は同じ値です |
それ以外の場合 | 2つの数は違う値です.差は○○です |
問4
4-1) キーボードから入力した金額の5%引きの金額を表示させるプログラムを作ってみよう.
4-2) 4-1を応用して,3000円以上~5000円未満が入力された場合,その金額の5%引きの金額を表示させるプログラムを作ってみよう.
4-3) 4-2を応用して,以下のように金額に応じて割引が異なる場合,その割引を考慮した金額を表示せよ.
3000円以上~5000円未満 | 5%引き |
5000円以上~10000未満 | 15%引き |
10000円以上 | 31%引き |
授業終了時までのプログラムと完成した提出用プログラムをoh-meijiシステムを使って提出すること
授業終了時に送るのは出席の確認用である.完成した課題は提出用の回に送ること
(提出用の回に提出しないと,採点を行わない)