・p.124「オブジェクト形式マクロ」から
提出フォロー:アレンジ演習:p.123 list0508.c・改
・要素数を6にしてみよう ・numの初期値と、配列の要素数の両方を6にして動作を確認すること
作成例
//アレンジ演習:p.121 list0508.cpp
#include <stdio.h>
int main(void)
{
int num = 6; //要素数
int x[6]; //配列の宣言(※ x[num]とはできない)
for (int i = 0; i < num; i++) { //配列aの添字の範囲(0~num未満)で繰返す
printf("x[%d]:", i); //添字を表示
scanf("%d", &x[i]); //要素x[i]に読み込む
}
for (int i = 0; i < num / 2; i++) { //配列aの添字の範囲の前半について繰返す
int t = x[i]; //要素x[i]の値を退避
x[i] = x[num - 1 - i]; //要素x[i]の反対側の要素の値を代入
x[num - 1 - i] = t; //反対側の要素に退避してあった値を代入
}
puts("反転しました。");
for (int i = 0; i < num; i++) { //配列aの添字の範囲(0~num未満)で繰返す
printf("x[%d] = %d\n", i, x[i]); //添字と値を表示
}
return 0;
}
p.124 オブジェクト形式マクロ
・プログラムをビルド(コンパイル&リンク)直前に編集(置換)してくれる機能 ・これにより、プログラム中で複数回もちいるリテラルを一括管理できる ・「変化に強いプログラム」に貢献する仕掛け ・書式: #define マクロ名 値 ※ 途中改行不可。セミコロン不要(付けると値の一部とみなされる) ・この考え方を「定数」といい各プログラム言語でそれぞれの形で実装されている。 ・これによりプログラム中に意味がわかりづらいリテラル(マジックナンバー)が散見されるのを防止できる 例: int a = price * 0.1, b = newprice * (1 + 0.1); ⇒ 「#define TAX 0.1」とすれば、int a = price * TAX, b = newprice * (1 + TAX);
アレンジ演習:p.121 list0510.cpp
・学生の人数を8人にしよう(マクロ以外は書き換えないこと)
作成例
//アレンジ演習:p.121 list0510.cpp
#include <stdio.h>
#define NUMBER 8 //学生の人数
int main(void)
{
int tensu[NUMBER]; //配列の宣言(要素数はマクロで得る)
int sum = 0; //合計
printf("%d人の点数を入力せよ。\n", NUMBER); //表示する値をマクロで得る
for (int i = 0; i < NUMBER; i++) { //繰返しの回数をマクロで得る
printf("%2d番:", i + 1); //添字+1を表示
scanf("%d", &tensu[i]); //要素tensu[i]に読み込む
sum += tensu[i]; //合計に足し込む
}
printf("合計点:%5d\n", sum); //合計を表示
printf("平均点:%5.1f\n", (double)sum / NUMBER); //件数をマクロで得る
return 0;
}