授業/C言語基礎/タイピング・ゲーム
をテンプレートにして作成
開始行:
*文字列の比較 [#i7591004]
string.h には、文字列を比較するstrcmp関数が用意されていま...
strcmp関数は、引数として二つの文字列 s1 と s2 を受け取り...
s1 > s2(辞書で s1 が s2 より後に載る場合)ならば正の値、...
#geshi(c){{
#include <stdio.h>
#include <string.h>
#include <time.h>
int main(void) {
char s1[256], s2[256];
printf("メール・アドレスを入力してください:\n");
scanf("%s", s1)
printf("もう一度入力してください:\n");
scanf("%s", s2)
if (strcmp(s1, s2) == 0) {
printf("OK\n");
} else {
printf("NG\n");
}
return 0;
}
}}
*文字列のコピー(代入) [#e7d8fee4]
string.h には、文字列をコピー(代入)するstrcpy関数が用意...
strcpy関数は、引数として二つの文字列 s1 と s2 を受け取り...
#geshi(c){{
#include <stdio.h>
#include <string.h>
#include <time.h>
int main(void) {
char s1[256], s2[256];
printf("メール・アドレスを入力してください:\n");
scanf("%s", s2)
strcpy(s1, s2);
printf("%s\n", s1);
return 0;
}
}}
*タイピング・ゲーム [#b5e294ed]
ランダムに文字列を出題し、キーボードから入力された文字列...
#geshi(c){{
/*
* タイピング・ゲーム
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
int main(void) {
char s[256];
char ans[10][256] = {
"cat",
"dog",
"lion",
"bear",
"tiger",
"monkey",
"giraffe",
"elephant",
"kangaroo",
"hippopotamus"
};
srand((unsigned int) time(NULL));
int r = rand() % 10;
printf("%s:\n", ans[r]);
scanf("%s", s);
if (strcmp(s, ans[r]) == 0) {
printf("正解!\n");
} else {
printf("間違い!\n");
}
return 0;
}
}}
*繰り返しタイピング・ゲーム [#a4a0a2cd]
タイピング・ゲームを改良し、10問出題して正解数を出力する...
#geshi(c){{
/*
* 繰り返しタイピング・ゲーム
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
int main(void) {
char s[256];
char ans[10][256] = {
"cat",
"dog",
"lion",
"bear",
"tiger",
"monkey",
"giraffe",
"elephant",
"kangaroo",
"hippopotamus"
};
srand((unsigned int) time(NULL));
int score = 0; // 得点
int i;
for (i = 1; i <= 10; i++) {
int r = rand() % 10;
printf("第%d問: %s:\n", i, ans[r]);
scanf("%s", s);
if (strcmp(s, ans[r]) == 0) {
printf("正解!\n");
score++;
} else {
printf("間違い!\n");
}
}
printf("%d問正解\n", score);
return 0;
}
}}
*スピード・タイピング・ゲーム [#zae0a50c]
次に、スピード計算ゲームと同じように、制限時間内に何問正...
#geshi(c){{
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
int main(void) {
char s[256];
char ans[10][256] = {
"cat",
"dog",
"lion",
"bear",
"tiger",
"monkey",
"giraffe",
"elephant",
"kangaroo",
"hippopotamus"
};
srand((unsigned int) time(NULL));
long limit = 30; // 制限時間(秒)
printf("制限時間: %d秒\n", limit);
long t = time(NULL); // 開始時刻
int score = 0; // 得点
while (time(NULL) < t + limit) {
int r = rand() % 10;
printf("第%d問: %s:\n", score + 1, ans[r]);
scanf("%s", s);
if (time(NULL) > t + limit) { break; } // 時間切れ
if (strcmp(s, ans[r]) == 0) {
printf("正解!\n");
score++;
} else {
printf("間違い!\n");
}
}
printf("%d問正解\n", score);
return 0;
}
}}
*モジュール化 [#zcddbaaf]
プログラムを組み合わせて、いろいろな問題のタイピング・ゲ...
まず、モジュールごとにファイルを分割します。
#geshi(c){{
/*
* typing.h
*/
#define SIZE 10
#define MAX_LENGTH 256
}}
#geshi(c){{
/*
* animal.c
*/
#include <string.h>
#include "typing.h"
int getans(char ans[][MAX_LENGTH]) {
char s[SIZE][MAX_LENGTH] = {
"cat",
"dog",
"lion",
"bear",
"tiger",
"monkey",
"giraffe",
"elephant",
"kangaroo",
"hippopotamus"
};
int i;
for (i = 0; i < SIZE; i++) {
strcpy(ans[i], s[i]);
}
return 0;
}
}}
#geshi(c){{
/*
* typing.c
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include "typing.h"
extern int getans(char [][MAX_LENGTH]);
int main(void) {
char s[MAX_LENGTH];
char ans[SIZE][MAX_LENGTH];
getans(ans);
srand((unsigned int) time(NULL));
long limit = 30; // 制限時間(秒)
printf("制限時間: %d秒\n", limit);
long t = time(NULL); // 開始時刻
int score = 0; // 得点
while (time(NULL) < t + limit) {
int r = rand() % SIZE;
printf("第%d問: %s:\n", score + 1, ans[r]);
scanf("%s", s);
if (time(NULL) > t + limit) { break; } // 時間切れ
if (strcmp(s, ans[r]) == 0) {
printf("正解!\n");
score++;
} else {
printf("間違い!\n");
}
}
printf("%d問正解\n", score);
return 0;
}
}}
すると、ファイルごとにコンパイルできます。
#geshi(sh){{
luna% gcc -c animal.c
luna% gcc -c typing.c
luna% gcc -o typing typing.o animal.o
}}
そこで、別の問題作成モジュールを用意します。
#geshi(c){{
/*
* country.c
*/
#include <string.h>
#include "typing.h"
int getans(char ans[][MAX_LENGTH]) {
char s[SIZE][MAX_LENGTH] = {
"UK",
"USA",
"Japan",
"Italy",
"Canada",
"French",
"Germany",
"China",
"Korea",
"Russia"
};
int i;
for (i = 0; i < SIZE; i++) {
strcpy(ans[i], s[i]);
}
return 0;
}
}}
このファイルも、このファイルだけでコンパイルでき、すでに...
#geshi(sh){{
luna% gcc -c country.c
luna% gcc -o typing typing.o county.o
}}
*二次元配列を関数の引数にするときの注意(おまけ) [#d7fdc...
配列を関数の引数にするときは、要素数は無視され、省略でき...
#geshi(c){{
int sum(int a[], int n) {
int i, s = 0;
for (i = 0; i < n; i++) {
s += a[i]
}
return s;
}
}}
配列の要素数を省略できるのは、要素の型が分かっていれば要...
たとえば、int型が32ビットのとき、int型の配列 a における要...
ところが、二次元配列を関数の引数にするときは、高次元配列...
#geshi(c){{
int sum(int a[][100], int n) {
int i, j, s = 0;
for (i = 0; i < n; i++) {
for (j = 0; j < 100; j++) {
s += a[i][j];
}
}
return s;
}
}}
二次元配列で低次元配列の要素数が省略されていると、低次元...
たとえば、int型が32ビットのとき、int型の二次元配列 a にお...
そのため、低次元配列の要素数は省略できません。
終了行:
*文字列の比較 [#i7591004]
string.h には、文字列を比較するstrcmp関数が用意されていま...
strcmp関数は、引数として二つの文字列 s1 と s2 を受け取り...
s1 > s2(辞書で s1 が s2 より後に載る場合)ならば正の値、...
#geshi(c){{
#include <stdio.h>
#include <string.h>
#include <time.h>
int main(void) {
char s1[256], s2[256];
printf("メール・アドレスを入力してください:\n");
scanf("%s", s1)
printf("もう一度入力してください:\n");
scanf("%s", s2)
if (strcmp(s1, s2) == 0) {
printf("OK\n");
} else {
printf("NG\n");
}
return 0;
}
}}
*文字列のコピー(代入) [#e7d8fee4]
string.h には、文字列をコピー(代入)するstrcpy関数が用意...
strcpy関数は、引数として二つの文字列 s1 と s2 を受け取り...
#geshi(c){{
#include <stdio.h>
#include <string.h>
#include <time.h>
int main(void) {
char s1[256], s2[256];
printf("メール・アドレスを入力してください:\n");
scanf("%s", s2)
strcpy(s1, s2);
printf("%s\n", s1);
return 0;
}
}}
*タイピング・ゲーム [#b5e294ed]
ランダムに文字列を出題し、キーボードから入力された文字列...
#geshi(c){{
/*
* タイピング・ゲーム
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
int main(void) {
char s[256];
char ans[10][256] = {
"cat",
"dog",
"lion",
"bear",
"tiger",
"monkey",
"giraffe",
"elephant",
"kangaroo",
"hippopotamus"
};
srand((unsigned int) time(NULL));
int r = rand() % 10;
printf("%s:\n", ans[r]);
scanf("%s", s);
if (strcmp(s, ans[r]) == 0) {
printf("正解!\n");
} else {
printf("間違い!\n");
}
return 0;
}
}}
*繰り返しタイピング・ゲーム [#a4a0a2cd]
タイピング・ゲームを改良し、10問出題して正解数を出力する...
#geshi(c){{
/*
* 繰り返しタイピング・ゲーム
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
int main(void) {
char s[256];
char ans[10][256] = {
"cat",
"dog",
"lion",
"bear",
"tiger",
"monkey",
"giraffe",
"elephant",
"kangaroo",
"hippopotamus"
};
srand((unsigned int) time(NULL));
int score = 0; // 得点
int i;
for (i = 1; i <= 10; i++) {
int r = rand() % 10;
printf("第%d問: %s:\n", i, ans[r]);
scanf("%s", s);
if (strcmp(s, ans[r]) == 0) {
printf("正解!\n");
score++;
} else {
printf("間違い!\n");
}
}
printf("%d問正解\n", score);
return 0;
}
}}
*スピード・タイピング・ゲーム [#zae0a50c]
次に、スピード計算ゲームと同じように、制限時間内に何問正...
#geshi(c){{
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
int main(void) {
char s[256];
char ans[10][256] = {
"cat",
"dog",
"lion",
"bear",
"tiger",
"monkey",
"giraffe",
"elephant",
"kangaroo",
"hippopotamus"
};
srand((unsigned int) time(NULL));
long limit = 30; // 制限時間(秒)
printf("制限時間: %d秒\n", limit);
long t = time(NULL); // 開始時刻
int score = 0; // 得点
while (time(NULL) < t + limit) {
int r = rand() % 10;
printf("第%d問: %s:\n", score + 1, ans[r]);
scanf("%s", s);
if (time(NULL) > t + limit) { break; } // 時間切れ
if (strcmp(s, ans[r]) == 0) {
printf("正解!\n");
score++;
} else {
printf("間違い!\n");
}
}
printf("%d問正解\n", score);
return 0;
}
}}
*モジュール化 [#zcddbaaf]
プログラムを組み合わせて、いろいろな問題のタイピング・ゲ...
まず、モジュールごとにファイルを分割します。
#geshi(c){{
/*
* typing.h
*/
#define SIZE 10
#define MAX_LENGTH 256
}}
#geshi(c){{
/*
* animal.c
*/
#include <string.h>
#include "typing.h"
int getans(char ans[][MAX_LENGTH]) {
char s[SIZE][MAX_LENGTH] = {
"cat",
"dog",
"lion",
"bear",
"tiger",
"monkey",
"giraffe",
"elephant",
"kangaroo",
"hippopotamus"
};
int i;
for (i = 0; i < SIZE; i++) {
strcpy(ans[i], s[i]);
}
return 0;
}
}}
#geshi(c){{
/*
* typing.c
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include "typing.h"
extern int getans(char [][MAX_LENGTH]);
int main(void) {
char s[MAX_LENGTH];
char ans[SIZE][MAX_LENGTH];
getans(ans);
srand((unsigned int) time(NULL));
long limit = 30; // 制限時間(秒)
printf("制限時間: %d秒\n", limit);
long t = time(NULL); // 開始時刻
int score = 0; // 得点
while (time(NULL) < t + limit) {
int r = rand() % SIZE;
printf("第%d問: %s:\n", score + 1, ans[r]);
scanf("%s", s);
if (time(NULL) > t + limit) { break; } // 時間切れ
if (strcmp(s, ans[r]) == 0) {
printf("正解!\n");
score++;
} else {
printf("間違い!\n");
}
}
printf("%d問正解\n", score);
return 0;
}
}}
すると、ファイルごとにコンパイルできます。
#geshi(sh){{
luna% gcc -c animal.c
luna% gcc -c typing.c
luna% gcc -o typing typing.o animal.o
}}
そこで、別の問題作成モジュールを用意します。
#geshi(c){{
/*
* country.c
*/
#include <string.h>
#include "typing.h"
int getans(char ans[][MAX_LENGTH]) {
char s[SIZE][MAX_LENGTH] = {
"UK",
"USA",
"Japan",
"Italy",
"Canada",
"French",
"Germany",
"China",
"Korea",
"Russia"
};
int i;
for (i = 0; i < SIZE; i++) {
strcpy(ans[i], s[i]);
}
return 0;
}
}}
このファイルも、このファイルだけでコンパイルでき、すでに...
#geshi(sh){{
luna% gcc -c country.c
luna% gcc -o typing typing.o county.o
}}
*二次元配列を関数の引数にするときの注意(おまけ) [#d7fdc...
配列を関数の引数にするときは、要素数は無視され、省略でき...
#geshi(c){{
int sum(int a[], int n) {
int i, s = 0;
for (i = 0; i < n; i++) {
s += a[i]
}
return s;
}
}}
配列の要素数を省略できるのは、要素の型が分かっていれば要...
たとえば、int型が32ビットのとき、int型の配列 a における要...
ところが、二次元配列を関数の引数にするときは、高次元配列...
#geshi(c){{
int sum(int a[][100], int n) {
int i, j, s = 0;
for (i = 0; i < n; i++) {
for (j = 0; j < 100; j++) {
s += a[i][j];
}
}
return s;
}
}}
二次元配列で低次元配列の要素数が省略されていると、低次元...
たとえば、int型が32ビットのとき、int型の二次元配列 a にお...
そのため、低次元配列の要素数は省略できません。
ページ名: