専門学校60日目(情報工学)7月5日(金)

1時限~3時限
C言語基礎 やさしいC 第5版

先週は配列を学びました。今までは変数という箱が1個の場合を学んだが、箱が複数あるのが配列でした。
配列の応用ということで、ソートする方法を学んでいきます。

先週やった課題を少し変えて、ソートするプログラムを作りました。学年もソートした配列に合わせて並び替えて表示させるのが難しく感じ、自力では解けませんでした。要点としては、配列countには1年生から6年生までの人数が1年生から順に並んでいることに着目し、それと同じ新しい配列を{1,2,3,4,5,6}で初期化します。そしてcountのソートに合わせて、新しい配列も同じようにソートすれば新しい配列は多い学年順になります。なのでソートするコードの中に二つのソートを並べればよい。以下がそのコードです。

#include <stdio.h>
int main(void) {
    //*/
    int gakunen[10];
    int count[6] = { 0 };
    int igaku = 0;
    int i = 0;
    int s = 0;
    int t = 0;
    int tmp = 0;
    int max = 0;
    int maxgaku = 0;
    int tmp2;
    int num[6] = { 1,2,3,4,5,6 };
    printf("10人の生徒の学年を入力してください。\n");
    for (i = 0; i < 10; i++) {
        scanf_s("%d", &gakunen[i]); //10件のデータを入力
    }
    for (i = 0; i < 10; i++) {
        igaku = gakunen[i];
        count[igaku - 1]++; //0番目から数える配列に合わせて配列の要素をインクリメント
    }
    for (s = 0; s < 5; s++) {
        for (t = s + 1; t < 6; t++) {
            if (count[t] > count[s]) {
                tmp = count[t];
                count[t] = count[s];
                count[s] = tmp;
                //countの並び替えと、numの並び替えは同じソートになる
                tmp2 = num[t];
                num[t] = num[s];
                num[s] = tmp2;
            }
        }
    }
    for (i = 0; i < 6; i++) {
        printf("%d年生は%d名です。\n", num[i], count[i]);
    }
    //*/
    return 0;
}

逆に人数の少ない順に並べ替えるときはどうするか。
count[t]>count[s]となっているところを、>記号を<記号に変えればよい。

身長と体重を格納する2次元配列を初期化してから表示させるプログラムを書きました。

int height_weight[2][5];
int i;
printf("5人分の身長と体重を入力してください。\n");
for (i = 0; i < 5; i++) {
    printf("%d番目の人の身長を入力してください。\n", i);
    scanf_s("%d", &height_weight[0][i]);
    printf("%d番目の人の体重を入力してください。\n", i);
    scanf_s("%d", &height_weight[1][i]);
}
for (i = 0; i < 5; i++) {
    printf("%d番目の人の身長は%dセンチです。\n", i+1, height_weight[0][i]);
    printf("%d番目の人の体重は%dキロです。\n", i+1, height_weight[1][i]);
}

教科書p.203文字列と配列
文字の入力はgetchar()で1文字だけ入力する方法を学びました。
文字列をchar型の配列で扱える。一番最後の要素には\0を入れることになっています。\0とはNULL文字と呼ばれている。なので最後に\0を入れることを考慮して文字列の長さ+1個の要素が必要になる。
文字列を""(ダブルクォーテーション)で囲うとそれで初期化ができる。しかし代入には使えない。
文字列の変換仕様は%sを使います。

文字列をキーボードから入力させるには、scanf_s()を使うが、&は使わない。scanf_sではscanfと違い、配列の要素数を指定する必要があり、
scanf_s("%s", str, 10)
のように書きます。
scanf_s("%s", str, 5)
でHelloと入力すると文字が表示されないが、5+1の6を入れると表示される。文字列+1を忘れないようにしましょう。

/**/
char str[100];printf("文字列を入力してください。\n");
scanf_s("%s", str, 100);printf("入力した文字は%sです。\n", str);
//*/

4時限~6時限
webDBシステム開発 スッキリわかるSQL入門第3版ドリル256問付き

本日はグループワークで配布された科目別得点表のプリントを参考に、成績管理テーブルと他のいくつかのマスタテーブルに分け、エクセルでテーブルとE-R図を書きました。


この記事が気に入ったらサポートをしてみませんか?