p.80 複合代入演算子
・今回の「sum = sum + cnt;」のように「● = ● 演算子 ■」という構文は良く用いるが、同じ変数名を2度記述するのはすっきりしない ・そこで、複合代入演算子を用いて「● 演算子= ■」とすると良い ・例: sum = sum + cnt; ⇒ sum += cnt; //sumにcntを足し込む ・「+=」のみではなく「-=」「*=」「/=」「%=」なども利用可能 ・例: sum = sum - 5; ⇒ sum -= 5; //sumから5を差し引く ・例: sum = sum * 5; ⇒ sum *= 5; //sumを5倍にする ・例: sum = sum / 5; ⇒ sum /= 5; //sumを1/5倍にする ・例: sum = sum % 5; ⇒ sum %= 5; //sumを5で割った余りにする
p.81 増分演算子
・今回の「cnt = cnt + 1;」のように「● = ● + 1」という構文は良く用いるが、同じ変数名を2度記述するのはすっきりしない ・そこで、増分演算子を用いて「●++」とすると良い ・増分演算子は後置の「●++」と前置の「++●」があり、単独で用いる場合はどちらでも良い(後置の方がよく使われる) ・違いは評価のタイミングで、後置の「●++」は評価の後で+1し、前置の「++●」は評価の前に+1する ・+1することをインクリメントというので、インクリメント演算子ともいう ・-1する減分演算子「--」もあり、デクリメント演算子ともいう。仕様は同様。
アレンジ演習:p.79 演習4-2
・複合代入演算子と増分演算子を用いて書き換えよう
作成例
//アレンジ演習:p.79 演習4-2 ex0402.cpp
#include <stdio.h>
int main(void)
{
int na, nb; //int型の2変数を宣言
puts("二つの整数を入力せよ");
printf("変数a:"); scanf("%d", &na); //入力案内を表示しキーボードから整数値を入力
printf("変数b:"); scanf("%d", &nb); //入力案内を表示しキーボードから整数値を入力
int sum = 0; //合計用の変数を0で初期化
int start = (na < nb) ? na : nb; //開始値の変数を、変数aとbの小さいほうで初期化
int end = (na > nb) ? na : nb; //終了値の変数を、変数aとbの大きいほうで初期化
int cnt = start; //カウンタ用の変数を、開始値で初期化
do {
sum += cnt; //【変更】合計にカウンタを足し込む)
cnt++; //【変更】カウンタに1を足し込む
} while (cnt <= end); //カウンタが終了値以下である間、繰返す
printf("%d以上%d以下の全整数の和は%d。\n", start, end, sum);
return 0;
}
p.82 while文
・do-whileを前判定にした繰返し構文 ・初回の繰返しの前に条件をチェックし、繰返し内容が終わったら条件チェックに戻る ・よって、繰返し内容を1度も実行しない可能性がある場合に便利 ・例:生きているモンスターがいる間、戦いを繰返す(いなければ戦わない) ・do-whileとは異なり文末の「;」は不要p.82 list0405.cpp//p.82 list0405.cpp #include <stdio.h> int main(void) { int no; //入力用の変数を宣言 printf("正の整数を入力せよ:"); scanf("%d", &no); //入力案内を表示しキーボードから整数値を入力 while (no >= 0) { //noが0以上である間、繰返す printf("%d ", no); //整数値と空白を出力(改行しない) no--; //変数noをデクリメント(カウントダウン) } printf("\n"); //改行する return 0; }p.83 演習4-3 ヒント
・「printf("\n"); //改行する」を変数noが0か正の数である場合のみ実行すれば良い ・noの値は書き変わってしまうので、入力値をとっておくと良い作成例
//p.83 演習4-3 #include <stdio.h> int main(void) { int no; //入力用の変数を宣言 printf("正の整数を入力せよ:"); scanf("%d", &no); //入力案内を表示しキーボードから整数値を入力 int enter = no; //【追加】入力値を退避 while (no >= 0) { //noが0以上である間、繰返す printf("%d ", no); //整数値と空白を出力(改行しない) no--; //変数noをデクリメント(カウントダウン) } if (enter >= 0) { //【追加】入力値が0または正の数であれば printf("\n"); //改行する } return 0; }