プログラミング言語Ⅰ・講義メモ

・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;
}

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です