問: キー入力した2個の正の整数の大きい方の値が小さい方の値の何倍であるかを画面に表示するプログラムを示せ。なお、2 数が等しいときもエラーにせず “1倍” と表示してよい。
考え方(1): 2 数を m, n に格納し、「m < n」のときは m, n の値を交換する。
#include <stdio.h> |
#include <stdio.h> |
☆ 「<*「m < n」ならば *>{k = m; m = n; n = k;}」は「m < n」でなければ何もしない。
☆ m, n の値を交換するには別の変数を用いて 「k = m; m = n; n = k;」のようにしなければならない。
☆ 「x = m/n;」とすると「m」を「n」で割った値の整数部(小数点以下を切り捨てた値)が「x」に
代入される。「x = (m + 0.0)/n;」は「x = m/(n + 0.0);」でもよい。
★ 「x = m; x /= n;」や「x = (double)m/n;」でもよい。
★ 「x = m; x = (m < n ? x/n: n/x);」
考え方(2): 2 数を m, n に格納し、「m > n」のときは「(m + 0.0)/n;」、そうでないときは「(n + 0.0)/m;」で計算する。
#include <stdio.h> |
#include <stdio.h> |
☆ else 節を使わない「
if(m < n){x = (m + 0.0)/n;}
if(m >= n){x = (n + 0.0)/m;}
」でもよい。
問: エアコンの使用許可の問い合わせに対して、キー入力された温度 T が T<15 ならば暖房を許可、T>25 ならば冷房を許可、その他の場合は使用を禁止する回答をするプログラムの例を示せ。
考え方: if-else 文を用いると「その他の場合」の処理を else 節に書けばよい。
#include <stdio.h> |
#include <stdio.h> |
☆ else 節を用いずに、文章どおりに書くと「
if(T < 15){printf("暖房許可\n");}
if(T > 25){printf("冷房許可\n");}
if(!(T < 15 || T > 25)){printf("使用禁止\n");}
」のようになる(場合の数が多いと「その他の場合」の式が複雑になる)。
★ 場合の数が多いときは 「if(T < 15){・・・}else if(T <= 25){・・・}else{・・・}」のように大きさの順に並べると見やすくなる。
問: キー入力した文字が 'c' ならば "char\n"、'd' ならば "double\n"、'i' ならば "int\n"、いずれでもなければ "?\n" を画面に表示するプログラムを示せ。
考え方: switch 文を使ってみる。
#include <stdio.h> |
#include <stdio.h> |
★ 項目数が多いとき、ジャンプテーブルを用いるので「
if(x == 'c'){printf("char\n");}
else if(x == 'd'){printf("double\n");}
else if(x == 'i'){printf("int\n");}
else{printf("?\n");}
」のような構成より高速。
※コメント投稿者のブログIDはブログ作成者のみに通知されます