・p.48「非ゼロの判定」から
提出:p.47 演習3-1 ヒント ex0301.cpp(再掲載)
・int型の変数a、bを宣言する ・「二つの整数を入力せよ」と表示 ・「変数A:」と表示し、変数aに整数を入力する ・「変数B:」と表示し、変数bに整数を入力する ・(a % b)が非0ならば「BはAの約数ではありません」と表示し でなければ「BはAの約数です」と表示する
作成例
/*
p.47 演習3-1
*/
#include <stdio.h>
int main(void)
{
int a, b; //int型の2変数を宣言
puts("二つの整数を入力せよ");
printf("変数A:"); scanf("%d", &a); //入力案内を表示しキーボードから整数値を入力
printf("変数B:"); scanf("%d", &b); //入力案内を表示しキーボードから整数値を入力
if (a % b) //aをbで割った余りが非0ならば
puts("BはAの約数ではありません");
else
puts("BはAの約数です");
return 0;
}
p.48 非ゼロの判定
・if文のカッコ内には「式または値」を記述できる。変数1個も式なので、変数を記述しても良い。 ・よって「if (変数)」とすることで、「変数の値が非0ならば」を意味できる
p.48 ifの構文図
・if直後のカッコと式または値は必須 ・elseの前の文も必須
p.50 等価演算子
・2項==演算子:2項が等しければ1を、でなければ0を返す(戻り値型はint) ・2項!=演算子:2項が異なれば1を、でなければ0を返す(戻り値型はint)
p.51 list0307.cpp
// p.51 list0307.cpp
#include <stdio.h>
int main(void)
{
int n1, n2; //int型の2変数を宣言
puts("二つの整数を入力せよ");
printf("変数1:"); scanf("%d", &n1); //入力案内を表示しキーボードから整数値を入力
printf("変数2:"); scanf("%d", &n2); //入力案内を表示しキーボードから整数値を入力
if (n1 != n2) //n1とn2の値が異なれば
puts("それらの値は違います");
else
puts("それらの値は同じです");
return 0;
}
p.52 関係演算子
・数値の大小関係を評価して当てはまれば1を、でなければ0を返す演算子群 ・「<」「>」「<=」「>=」がある。 ※「=<」や「=>」は不可。「< =」「> =」は不可。
アレンジ演習:p.52 list0309.cpp
・整数値n1とn2を入力し、下記のどれかを表示しよう ①同じ値 ②n1の方が大きい ③n2の方が大きい
作成例
//アレンジ演習:p.52 list0309.cpp
#include <stdio.h>
int main(void)
{
int n1, n2; //int型の2変数を宣言
puts("二つの整数を入力せよ");
printf("n1:"); scanf("%d", &n1); //入力案内を表示しキーボードから整数値を入力
printf("n2:"); scanf("%d", &n2); //入力案内を表示しキーボードから整数値を入力
if (n1 == n2) //n1とn2の値が等しければ
puts("同じ値");
else if (n1 > n2) //ではなくてn1の方が大きければ
puts("n1の方が大きい");
else //どちらでもなければ
puts("n2の方が大きい");
return 0;
}
p.53 入れ子になったif文
・入れ子(ネスティング)とはある構造の中に同じ構造があること ・if文は、その内部にさらにif文を書ける
p.53 演習3-2 解答例
・動作は全く変わらない ・しかし、記述方法としては推奨されない。ifの条件の指定にミスがあると「どれも実行されない」ことになりやすい。 ・ifの後に「else if」をいくつでも書けるが、最後に「どれでもなければ」を意味する「else」を記述すると良い ・すると、書き換えに強い(変更しやすい)プログラムになる
p.53 演習3-3 ヒント
・絶対値とはその値と0との距離のことで、整数ではそのままの値、負の数では符号を反転した値になる ・符号の反転には単項-演算子(p.28)を用いると良い
作成例
//p.53 演習3-3 最もシンプルバージョン
#include <stdio.h>
int main(void)
{
int n1; //int型の変数を宣言
printf("整数を入力せよ:"); scanf("%d", &n1); //入力案内を表示しキーボードから整数値を入力
if (n1 < 0) //負の数であれば
n1 = -n1; //符号を反転した結果を代入
printf("絶対値は%dです。\n", n1);
return 0;
}
//p.53 演習3-3 別解バージョン
#include <stdio.h>
int main(void)
{
int n1, n2; //int型の変数を宣言(n1は入力用、n2は絶対値用)
printf("整数を入力せよ:"); scanf("%d", &n1); //入力案内を表示しキーボードから整数値を入力
if (n1 < 0) //負の数であれば
n2 = -n1; //符号を反転した結果を代入
else //でなければ(0か正の数ならば)
n2 = n1; //そのまま代入
printf("絶対値は%dです。\n", n2);
return 0;
}
自由参加課題 free53.cpp
・整数を入力したら、その値が3の倍数、4の倍数、5の倍数か判定しよう ・2つ以上に当てはまる場合は、すべて表示すること 実行例①: 整数を入力せよ:9 3の倍数 実行例②: 整数を入力せよ:60 3の倍数 4の倍数 5の倍数
p.53 入れ子になったif文(続き)
・if文のifの中にif-elseを記述することができる ・この場合、ifとelseのペアを読み違えないよう注意 ・そのため、インデント(字下げ)を行う(VC++でしてくれるのを確認)
アレンジ演習:p.54 list0310.cpp
・入力値が正の数で、 ・3の倍数なら「正の3の倍数」 ・でなければ「正だが3の倍数ではない」 ・正でなければ ・「正ではない」
作成例
//アレンジ演習:p.54 list0310.cpp
#include <stdio.h>
int main(void)
{
int no; //int型の変数を宣言
printf("整数を入力せよ:"); scanf("%d", &no); //入力案内を表示しキーボードから整数値を入力
if (no > 0) //正の数であれば
if (no % 3 == 0)
puts("正の3の倍数");
else
puts("正だが3の倍数ではない");
else //でなければ(正の数でなければ)
puts("正ではない");
return 0;
}
p.54 入れ子になったif文(さらに続き)
・入れ子になったif文では読みづらさを防止するために対象範囲を「{」「}」で囲むと良い
・業務(チームルール)によっては「{」「}」で囲むことを義務にしている場合もある
・なお「{」で1行にしても良く、ifやelseのある行の末尾においても良い
※ VC++の規定値では前者になり、カスタマイズも可能
・また、p.54の下の例では内側のif-elseには「{」「}」を用いていないが、すべてにおいて「{」「}」で囲むことを義務にしている場合もある
アレンジ演習:p.54 list0310.cpp・続き
・p.54の下の例を参考に「{」「}」で囲んでみよう
・それから、すべてのif-elseにおいて「{」「}」で囲んでみよう
作成例
//アレンジ演習:p.54 list0310.cpp
#include <stdio.h>
int main(void)
{
int no; //int型の変数を宣言
printf("整数を入力せよ:"); scanf("%d", &no); //入力案内を表示しキーボードから整数値を入力
if (no > 0) { //正の数であれば
if (no % 3 == 0) { //3の倍数?
puts("正の3の倍数");
} else {
puts("正だが3の倍数ではない");
}
} else { //でなければ(正の数でなければ)
puts("正ではない");
}
return 0;
}
※ VC++の設定により勝手に改行される場合もある
//アレンジ演習:p.54 list0310.cpp
#include <stdio.h>
int main(void)
{
int no; //int型の変数を宣言
printf("整数を入力せよ:"); scanf("%d", &no); //入力案内を表示しキーボードから整数値を入力
if (no > 0) { //正の数であれば
if (no % 3 == 0) { //3の倍数?
puts("正の3の倍数");
}
else {
puts("正だが3の倍数ではない");
}
}
else { //でなければ(正の数でなければ)
puts("正ではない");
}
return 0;
}