第9回演習の解答例


(1)要素数 12 個の整数型配列 {9, 8, 7, -6, -7, 5, 3, 9, 0, 7, -3, 1}の中から数字の 7 を探し,
   7が存在「する」または「しない」を表示するプログラムを作成せよ

ヒント: 配列から 7 を探すには,配列の各要素を順番に 7 かどうか調べて,7 が存在すれば「する」,しないなら「しない」を表示する


#include <stdio.h>

void main()
{
    int i;      /* カウンタ変数 */
    int n;      /* 個数 */
    
    int a[12] = { 9, 8, 7, -6, -7, 5, 3, 9, 0, 7, -3, 1 };

    n = 0;
    for(i=0; i<12; i++) {
        if( a[i] == 7 ) {
            n++;
        }
    }

    if (n != 0) {
        printf("配列に7が含まれます¥n");
    } else {
        printf("配列に7が含まれません¥n");
    }
}

注意1:配列の添え字は番号 0, 1, 2, 3 ...

注意2:if( a[i] == 7 ) を, if( a[i] = 7 )と間違えないように!


また,以下のような解法もあります.(別解)


#include <stdio.h>

void main()
{
    int i;      /* カウンタ変数 */
    int seki;   /* 積を記憶する変数 */
    
    int a[12] = {9, 8, 7, -6, -7, 5, 3, 9, 0, 7, -3, 1};

    /* 配列の全ての要素から 7 を引く */
    for(i=0; i<12; i++) {
        a[i] -= 7;
    }

    seki = 1;
    /* 配列の全ての要素の積を求める.*/
    for(i=0; i<12; i++) {
        seki *= a[i];
    }

    /* 配列に 1 つでも 7 が含まれていれば,積が 0 になる. */
    if (seki == 0) {
        printf("配列に7が含まれます¥n");
    } else {
        printf("配列に7が含まれません¥n");
    }
}


(2)上の問題で,7 がいくつあるかを数え,配列の何番目の要素かを表示するプログラムを作成せよ.


#include <stdio.h>

void main()
{
    int i;      /* カウンタ変数 */
    int n;      /* 7 の個数 */

    int a[12] = { 9, 8, 7, -6, -7, 5, 3, 9, 0, 7, -3, 1 };

    n = 0;

    for(i=0; i<12; i++) {

        if( a[i] == 7 ) {

            printf("%d 番目の要素¥n", i);
            n++;

        }

    }

    if(n != 0) {

        printf("配列に含まれる7の数は,%d 個です¥n", n);

    } else {

        printf("配列に7が含まれせん¥n");

    }
}


(3)実数型配列に,数値 10.2, 9.8, 3.3, 8.4, 11.9  をキーボード入力し,
   全ての要素の合計と平均を表示するプログラムを作成せよ


#include <stdio.h>
void main()
{
	int i;
	float data[5], sum, ave;	/* sum:合計,ave:平均 */
	
	for(i=0; i<5; i++){

		printf("データを入力:dada[%d] = ",i);
		scanf("%f",&data[i]);
	
	sum += data[i];
	
	}
	
	ave = sum / 5;
	
	printf("データの合計 = %f¥n",sum);
	printf("データの平均 = %f¥n",ave);
}


(4)整数型配列に成績データを入力し,その得点と偏差値を表示するプログラムを作成せよ
   成績データは以下に示すものを使用せよ

偏差値は,以下の式から求めることが出来る

上に示す偏差値の計算結果とプログラミングによる結果とを比較し,
プログラムが正しいかを確認しなさい


#include <stdio.h>
#include <math.h>
void main()
{
	int i, data[20];
	float ave, variance, deviation, T_score;	/* ave:平均,variance:分散,deviation:標準偏差,T_score:偏差値 */
	
	for(i=0; i<20; i++){

		printf("番号 %d: ",i+1);
		scanf("%d",&data[i]);
	
		ave += (float)data[i] / 20.0;		/* 平均を計算 */
	
	}
	
	for(i=0; i<20; i++){
	
		variance += ( (float)data[i] - ave ) * ( (float)data[i] - ave ) / 20.0;	/* 分散を計算 */
	
	}
	
	deviation = sqrt( variance );			/* 標準偏差を計算 */
	
	printf("¥n番号|得点|偏差値");
	printf("¥n――――――――¥n");
	
	for(i=0; i<20; i++){
	
		T_score = 10.0 * ( (float)data[i] - ave ) / deviation + 50.0;	/* 偏差値を計算 */
	
		printf(" %2.d | %2.d | %2.2f¥n", i+1, data[i], T_score );
	
	}
	
}