簡単応用:関数の引数で指定する配列

ポインタで管理する配列を変更する。

プログラム仕様
次の実行例のように、評価レベルを選んで点数を評価するプログラムです。が入力です。

厳しく評価するなら 1, 易しく評価するなら 0 を入力>1
点数入力>45
不合格です。
厳しく評価するなら 1, 易しく評価するなら 0 を入力>0
点数入力>45
合格ですが、勉強不足です。
厳しく評価するなら 1, 易しく評価するなら 0 を入力>1
点数入力>60
合格ですが、勉強不足です。
厳しく評価するなら 1, 易しく評価するなら 0 を入力>0
点数入力>60
合格です。
厳しく評価するなら 1, 易しく評価するなら 0 を入力>end

同じ45点でも、厳しく評価した場合は不合格になり、易しい評価であれば合格になっています。
このようなプログラムの作り方はいろいろあるあるでしょうが、 次のように『評価基準となる配列を変更することで、評価を変える』考え方がよいでしょう。 この手法の場合評価方法が複雑に変更された場合でも容易に対応できます。以下にプログラム例を示します。

#include <stdio.h>

main()
{
	int stric[] = { 50, 70, 90 };/* 厳しい評価基準 */
	int easy[] = { 40, 55, 80 };/* 易しい評価基準 */
	int * p; /* ポインタを記憶する変数 */

	int n;		/* 評価入力 */ 
	int ten;	/* 点数入力 */
	for( ; ; ){
		printf("厳しく評価するなら 1, 易しく評価するなら 0 を入力>"); 
		if( scanf("%d", &n) != 1) break;
		if(n == 0){
			p = easy; /* ポインタ変数へ easy配列先頭要素のアドレスをセット */
		} else {
			p = stric;
		}
		printf("点数入力>"); 
		scanf("%d", & ten);

		if(ten < p[0]){
			printf("不合格です。\n");

		} else if(ten < p[1]){
			printf("合格ですが、勉強不足です。\n");

		} else if(ten < p[2]) {
			printf("合格です。\n");

		} else {
			printf("優秀です。\n");
		}
	}
}