第13回:前期の復習


定期試験について

7月22日(木) 5時限(16:00〜17:00) 実施 0406教室

持ち込み禁止です. 細かいところまで,気を遣ってプログラムを書くようにしましょう.


前期に取り上げた内容

  • C言語によるプログラムの開発
  • 変数とは
  • 演算子
  • 入出力
  • 条件による分岐 if〜else〜
  • 繰り返し for
  • 文字型
  • 配列

演習の解答

乱数を利用して,プログラムをスタートすると

0がグー,1がチョキ,2がパー

として,どれかを出してくるプログラムをまず作ってみる.

これができるようになったら,こちらの手を数字で入力し,勝ち負けの判定もできるようにする.

#include <stdlib.h>
#include <stdio.h>

void main()
{
    int kikai, hito;

    / 乱数発生ルーチンの初期化
    randomize();

    //機械側の手
    kikai = rand() % 3;

    //人間の手の入力
    printf("じゃんけんぽん グー:0、チョキ:1、パー:2 を入力:");
    scanf("%d", &hito);

    //結果発表
    printf("私:%d あなた:%d\n", kikai, hito);

    //勝負の判定
    if(((kikai - hito + 3) % 3) == 0){
        printf("引き分け\n");
    }else if(((kikai - hito + 3) % 3) == 1){
        printf("あなたの勝ち\n");
    }else{
        printf("私の勝ち\n");
    }
}

演習の解答

整数型配列に初期値として,(10,20,30,40,50)を設定したとき,全ての要素の値を表示するプログラムを作成しなさい.

(forループを使って)

#include <stdio.h>

void main()
{
    int a[5] = {10, 20, 30, 40,50};
    int i;

    for(i=0; i<5; i++){
        printf("%d番目の値:%d\n", i, a[i]);
    }
}

キーボードから配列に数を読み込んで表示するようにプログラムを変えてみよう.


演習の解答

配列に格納された10個の数を,大きい順に並べかえて表示するプログラム(ソート)を作りなさい.

手順:

まず,「応用」のプログラムを利用して,10個の数を画面に表示するプログラムを作ろう.

大きい順に並べ替えるには,どのようなプログラムを作ったらよいか,アルゴリズムを考えてから,プログラムを考えよう.

ソートのアルゴリズムは,いろいろ考えられています.ココでは,もっともわかりやすいものを示します.

5 3 6 2 最初の状態
5 3 6 2 最初の数と,2番目の数を比較し,大きい方を左へ
5 3 6 2 最初の数と,3番目の数を比較し,大きい方を左へ
6 3 5 2 最初の数と,4番目の数を比較し,大きい方を左へ
6 3 5 2 この時点で,一番大きい数が,左端へ
2巡目
6 3 5 2 2番目の数と,3番目の数を比較し,大きい方を左へ
6 5 3 2 2番目の数と,4番目の数を比較し,大きい方を左へ
6 5 3 2 この時点で,2番目まで決まる
3巡目
6 5 3 2 3番目の数と,4番目の数を比較し,大きい方を左へ
6 5 3 2 おしまい

他のアルゴリズムについても興味のある人は調べてみてください.

プログラムを組む上でのポイントは,

  • データの入れ替え方
  • ループの範囲

です.

#include <stdio.h>
void main()
{
    int a[10] = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
    int i,j,buf;

    for(i=0; i<9; i++){
        for(j=i+1; j<10; j++){
            if(a[i] < a[j]){
                printf("Swap %d to %d\n", i,j);
                buf = a[i];
                a[i] = a[j];
                a[j] = buf;
            }
        }
    }

    for(i=0; i<10; i++){
        printf("%d th Data  = %d\n", i+1, a[i]);
    }
}