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

p.158 ヘッダとインクルード

・printf、scanfなどのC言語が提供するライブラリ関数の場合、その関数原型宣言はstdio.hなどのヘッダファイルに格納されている
・よって「#include <stdio.h>」することで、ここに関数原型宣言が含まれるライブラリ関数を自由に呼び出せる
※ VC++などでは、stdio.hは仮想的存在でシステム内部に含まれている

p.159 関数の汎用性

・関数は部品であり、可能な限り使いまわす前提で設計し実装しよう
・そのためにも、関数間において受け渡す情報は引数で行うべきであり、ファイル有効範囲の変数や配列は不向き

p.160 配列の受け渡し

・引数に配列を指定できる
・呼び出し側(実引数)は、定義済の配列名を指定すれば良い
・関数側(仮引数)は「配列の型 配列の仮引数名[]」とし、[]をつけ、要素数は指定しない
・そして、別の引数などを用いて要素数を受け渡すのが基本

p.160 list0611.cpp

//p.160 list0611.cpp 英語の点数と数学の点数の最高点を求める
#include <stdio.h>
#define NUMBER    5        // 学生の人数
//--- 要素数nの配列vの最大値を返す ---//
int max_of(int v[], int n) { //戻り値型がintで、int型の配列とその要素数を受けとる関数
    int max = v[0]; //仮に専用要素が最大値だとする
    for (int i = 1; i < n; i++) { //次の要素以降の全要素について繰り返す
        if (v[i] > max) { //最大値超なら
            max = v[i]; //最大値更新
        }
    }
    return max; //最大値を返す
}
int main(void) {
    int eng[NUMBER]; // 英語の点数
    int mat[NUMBER]; // 数学の点数
    printf("%d人の点数を入力せよ。\n", NUMBER);
    for (int i = 0; i < NUMBER; i++) {
        printf("[%d] 英語:", i + 1);  scanf("%d", &eng[i]);
        printf("    数学:");         scanf("%d", &mat[i]);
    }
    int max_e = max_of(eng, NUMBER); // 英語の最高点(配列と要素数を渡して最大値を得る)
    int max_m = max_of(mat, NUMBER); // 数学の最高点(〃)
    printf("英語の最高点=%d\n", max_e);
    printf("数学の最高点=%d\n", max_m);
    return 0;
}

補足:p.160 list0611.cpp について

・関数max_ofの中でNUMBERを用いれば、要素数を引数で受け取る必要はないが、関数の汎用性が下がるので、引数で渡すほうが良い

コメントを残す

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