プログラミング実習II知能・機械 の教科書

『キックオフC言語 2024年度用』のサポートページです。

配布物

製本した印刷物は、授業の初回で配布します。 A5版以外に、少量ですが大きめのB5版も用意しています。

PDF は以下で公開します。

正誤表

2章

p.34 問題4.
補足:このスワップ動作は、3変数間で同時に行うことを意図しています。順次入れ替えるわけではありません。
p.34 問題8.
補足:マクロ YEAR_PER_CENTURY は2回使用することに気をつけてください。

3章

p.51
「問題4.の考察」と「問題6.」をオプションにします。
p.51 問題1.
補足:関数の型(double)と、引数nの型(int)の、一致しないことが正当な例を挙げておく。
/* 正n角形の中心角 360/n を返す */
double central_angle(int n) {
    return 360.0 / (double)n;
}
p.52 問題9.
今回の提出対象から除外します。(7章に移動します。)

4章

p.71 問題3.
補足:「else-if」は「elseを1回、ifを1回」と数えます。
p.71 問題5.
動作確認のmain()と補助関数を例示しておきます。
void print_exist_triangle(int a, int b, int c) {
    printf("3辺の長さが %d, %d, %d の三角形は", a, b, c);
    if (exist_triangle(a, b, c)) {
        printf("存在する\n");
    } else {
        printf("存在しない\n");
    }
}

int main(void) {
    print_exist_triangle(1, 1, 1);  // する
    print_exist_triangle(3, 4, 5);  // する
    print_exist_triangle(1, 1, 10); // しない
    print_exist_triangle(10, 5, 5); // しない
    print_exist_triangle(1, 15, 5); // しない
}

8章

p.142 問題8.
オプションの問題を追加しておきます。『問題8. [配列要素の全ペア] 東海道新幹線のぞみ号の停車する6つの駅の、東京駅からの距離(km)は、それぞれ
 東京  品川  新横浜 名古屋 京都  新大阪
 0.0    6.8   28.8  366.0  513.6  552.6 
である。この距離を1次元配列に格納し、以下の表のように、各駅の間の距離を計算で求めて表示するプログラムを作れ。
・実行結果の、()内の駅名はヒントであるので、数値部分だけを表示すればよい。
・数値は "%8.1f" で表示すると、桁が揃いやすい。
・絶対値を返す数学関数 fabs(x) を用いてよい。
実行結果
          ( 東京)( 品川)(新横浜)(名古屋)( 京都)(新大阪)
( 東京)      0.0     6.8    28.8   366.0   513.6   552.6
( 品川)      6.8     0.0    22.0   359.2   506.8   545.8
(新横浜)     28.8    22.0     0.0   337.2   484.8   523.8
(名古屋)    366.0   359.2   337.2     0.0   147.6   186.6
( 京都)    513.6   506.8   484.8   147.6     0.0    39.0
(新大阪)    552.6   545.8   523.8   186.6    39.0     0.0

9章

p.162 問題4.
関数のプロトタイプと、main()関数を例示しておきます。また、参考にしたURLがコメント中に記載されていれば、採点の際に考慮します。
void print_cancel_or_not(char weather[]) {
    /* ここを作る */
}
int main(void) {
    print_cancel_or_not("暴風雪警報");
    print_cancel_or_not("大雪警報");
    print_cancel_or_not("特別警報(大雪)");
}

10章

p.178 問題5.
(補足)レポートには「(i)関数呼び出しが有利。なぜなら... (ii)処理をコピーして符号反転が有利。なぜなら... (iii)関数呼び出しが有利。なぜなら...」のように、3項目について、「関数呼び出し」と「処理をコピーして符号反転」の2つの手法のどちらが有利かを述べること。
p.178 問題6.
(補足)動作検証に用いる数値には、frac_t y = { -1, 4 }; のように、除数の分子をマイナスにした例を含めてください。
p.178 問題7.
動作検証用のmain()を例示しておきます。
int main(void) {
    quad_t q;
    sol_t s = { 2.0, 3.0 };
 
    quad_unsolve(&q, &s);
    printf("a=%f, b=%f, c=%f\n", q.a, q.b, q.c); // 1.0, -5.0, 6.0

    sol_solve(&s, &q);
    printf("alpha=%f, beta=%f\n", s.alpha, s.beta); // 2.0 と 3.0

    q.a = -2 * q.a;
    q.b = -2 * q.b;
    q.c = -2 * q.c;
    sol_solve(&s, &q);
    printf("alpha=%f, beta=%f\n", s.alpha, s.beta); // 2.0 と 3.0 のまま(入れ替わってもよい)
}

11章

p.198 問題2.
補足指示です。入力ファイルとして、次の内容を input.txt として保存して用いてください。
123 One Two Three
987 Nine Eight Seven
また、出力結果を提出してください。出力結果は「./11_6_2.exe > 11_6_2.txt」として保存した "11_6_2.txt" か、あるいは画面に出力された文字をコピー&ペーストしてテキストファイルを作成してください。
p.198 問題3.
補足指示です。入力ファイルとして、次の内容を in-value.txt として保存して用い、出力結果も提出してください。
24
53
95
48
20
75
33

(ヒント1) 読み込む数値の範囲が 0 から 100 の間であることを利用してよい。(事前に範囲がわからない場合に INT_MAX, INT_MIN の定数を用いる手法もある。)

(ヒント2) 最大値と最小値は同時に求めるように考えてみよ。→192ページの頻出ミス(上)

(ヒント3) ファイル末尾に空行を追加した場合、最小値が 0 になることも試してみよ。→192ページの頻出ミス(下)

p.198 問題5.
新たに追加します。→./11_6_5

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS