7月22日(木) 5時限(16:00〜17:00) 実施 0406教室
持ち込み禁止です. 細かいところまで,気を遣ってプログラムを書くようにしましょう.
乱数を利用して,プログラムをスタートすると
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]);
}
}