ページ 11

もっと短くできればと…

Posted: 2011年7月05日(火) 14:00
by たけのん
課題でやってたんですけど先生からもう少し短くできないかと聞かれました。
あとインデントとか演算子前後がなんとか…しかしよくわかりませんでした;

できる方は解説も一緒にお願いしますm(_ _)m


#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define cnt (double)(end-start)/CLOCKS_PER_SEC//時間定義

int main(void)
{
char name[255];
int g_start=0,answer_1,answer_2,answer_3,answer_4,answer_5,gokei=0;
clock_t start,end;

printf("国関係のゲームを開始します\n");

/*ゲーム準備 */
printf("このゲームは回答の速度も測定します。\n");
while(1)
{
printf("準備ができたら'1'を入力してください。\n同時に時間計測が開始されします\n");
scanf("%d",&g_start);
if(g_start ==1)
{
break;
}
else if(g_start !=1)
{
printf("入力数字が違います。\n");
continue;
}
}

/*時間計測開始*/
start = clock();

/*出題開始*/
printf("問題1:香港返還がされたのは1997年。どこの国から返還された?\n(1:イギリス、2:中国、3:ロシア)\n");
scanf("%d",&answer_1);
if(answer_1 == 1)
gokei += 1;

printf("問題2:フランスの国花は?\n(1:アイリス、2:薔薇、3:人食い花)\n");
scanf("%d",&answer_2);
if(answer_2 == 1)
gokei += 1;

printf("問題3:次の中で島国はどこ?\n(1:ベラルーシ、2:スペイン、3:アイスランド)\n");
scanf("%d",&answer_3);
if(answer_3 == 3)
gokei += 1;

printf("問題4:東京スカイツリーは何区にある?\n(1:千代田区、2:墨田区、3:武蔵村山市)\n");
scanf("%d",&answer_4);
if(answer_4 == 2)
gokei += 1;

printf("問題5:イタリアの首都は?\n(1:ヴェネツィア、2:ナポリタン、3:ローマ)\n");
scanf("%d",&answer_5);
if(answer_5 == 3)
{gokei += 1;}
/*出題終了*/

/*時間記憶終了*/
end = clock();


switch(gokei)
{
case 5:
printf("正解数 = 5問中%d問正解です。全問正解です!すごい(人´∀`).☆.。.:*・ \n",gokei);
break;
case 4:
printf("正解数 = 5問中%d問正解です。おしい!あと一歩Σd(゚∀゚。)デス!! \n",gokei);
break;
case 3:
printf("正解数 = 5問中%d問正解です。とんとんです∑d(・ω・*)ネッ!\n",gokei);
break;
case 2:
printf("正解数 = 5問中%d問正解です。あらら。残念でした(´・ω・`)ショボーン\n",gokei);
break;
case 1:
printf("正解数 = 5問中%d問正解です。あれ・・・?(^q^)\n",gokei);
break;
case 0:
printf("正解数 = 5問中%d問正解です。なんていうことでしょう;´Д`)エェェェェェェ… \n",gokei);
break;
}

printf("解答時間の統計は%.3f秒でした\n",cnt);

return 0;
}

Re: もっと短くできればと…

Posted: 2011年7月05日(火) 14:15
by non
質問ですが、
1 ポインタ配列は習ってますか?
2 ポインタ配列を習っていない場合、2次元配列は習ってますか?
3 関数は習ってますか?
4 scanf以外の入力関数は習ってますか?

インデント(字下げ)をして添付してください。※コードを貼り付ける場合は [code] と [/code] で囲って下さい。

「編集」
 code や /code の前後は 半角の[ ]です。

Re: もっと短くできればと…

Posted: 2011年7月05日(火) 14:37
by たけのん
たけのん さんが書きました:課題でやってたんですけど先生からもう少し短くできないかと聞かれました。
あとインデントとか演算子前後がなんとか…しかしよくわかりませんでした;

できる方は解説も一緒にお願いしますm(_ _)m

コード:

 
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define cnt (double)(end-start)/CLOCKS_PER_SEC//時間定義

int main(void)
{
	char name[255];
	int g_start=0,answer_1,answer_2,answer_3,answer_4,answer_5,gokei=0;
	clock_t start,end;
	
	printf("国関係のゲームを開始します\n");
	
	/*ゲーム準備 */
	printf("このゲームは回答の速度も測定します。\n");
	while(1)
	{
		printf("準備ができたら'1'を入力してください。\n同時に時間計測が開始されします\n");
		scanf("%d",&g_start);
		if(g_start ==1)
		{
			break;
		}
		else if(g_start !=1)
		{
			printf("入力数字が違います。\n");
			continue;
		}
	}
	
	/*時間計測開始*/
	start = clock(); 
	
	/*出題開始*/
	printf("問題1:香港返還がされたのは1997年。どこの国から返還された?\n(1:イギリス、2:中国、3:ロシア)\n");
	scanf("%d",&answer_1);
	if(answer_1 == 1)
	gokei += 1;

	printf("問題2:フランスの国花は?\n(1:アイリス、2:薔薇、3:人食い花)\n");
	scanf("%d",&answer_2);
	if(answer_2 == 1)
	gokei += 1;

	printf("問題3:次の中で島国はどこ?\n(1:ベラルーシ、2:スペイン、3:アイスランド)\n");
	scanf("%d",&answer_3);
	if(answer_3 == 3)
	gokei += 1;
	
	printf("問題4:東京スカイツリーは何区にある?\n(1:千代田区、2:墨田区、3:武蔵村山市)\n");
	scanf("%d",&answer_4);
	if(answer_4 == 2)
	gokei += 1;
		
	printf("問題5:イタリアの首都は?\n(1:ヴェネツィア、2:ナポリタン、3:ローマ)\n");
	scanf("%d",&answer_5);
	if(answer_5 == 3)
	{gokei += 1;}
	/*出題終了*/
	
	/*時間記憶終了*/
	end = clock(); 
	
	
	switch(gokei)
	{
	case 5:
		printf("正解数 = 5問中%d問正解です。全問正解です!すごい(人´∀`).☆.。.:*・ \n",gokei);
		break;
	case 4:
		printf("正解数 = 5問中%d問正解です。おしい!あと一歩Σd(゚∀゚。)デス!!  \n",gokei);
		break;
	case 3:
		printf("正解数 = 5問中%d問正解です。とんとんです∑d(・ω・*)ネッ!\n",gokei);
		break;
	case 2:
		printf("正解数 = 5問中%d問正解です。あらら。残念でした(´・ω・`)ショボーン\n",gokei);
		break;
	case 1:
		printf("正解数 = 5問中%d問正解です。あれ・・・?(^q^)\n",gokei);
		break;
	case 0:
		printf("正解数 = 5問中%d問正解です。なんていうことでしょう;´Д`)エェェェェェェ… \n",gokei);
		break;
	}

	printf("解答時間の統計は%.3f秒でした\n",cnt);
		
	return 0;
}[/quote]



質問の
1 ポインタ配列は習ってますか?
2 ポインタ配列を習っていない場合、2次元配列は習ってますか?
3 関数は習ってますか?
4 scanf以外の入力関数は習ってますか?
はすべて「はい」です。
ただ理解しきれていないところがあるので言い切っていいものかがわからないのですが…

Re: もっと短くできればと…

Posted: 2011年7月05日(火) 15:11
by バグ
うーん、あんまり短くなってないか・・・(苦笑)
ところどころ、私好みに書き換えてますがご了承ください(^_^;)

コード:

#include <stdio.h>
#include <time.h>

/**********************************************************
出題&回答を行う関数
【 引 数 】
	int count = 何問目
【 戻り値 】
	0 = 不正解
	1 = 正解
**********************************************************/
int question(int count)
{
	const int answer[] = {1, 1, 3, 2, 3};
	const char* quiz[] = {	"問題1:香港返還がされたのは1997年。どこの国から返還された?\n(1:イギリス、2:中国、3:ロシア)\n",
							"問題2:フランスの国花は?\n(1:アイリス、2:薔薇、3:人食い花)\n",
							"問題3:次の中で島国はどこ?\n(1:ベラルーシ、2:スペイン、3:アイスランド)\n",
							"問題4:東京スカイツリーは何区にある?\n(1:千代田区、2:墨田区、3:武蔵村山市)\n",
							"問題5:イタリアの首都は?\n(1:ヴェネツィア、2:ナポリタン、3:ローマ)\n"	};
	int input = 0;
	printf(quiz[count]);
	scanf("%d", &input);
	return (input == answer[count]);
}

int main(void)
{
	int g_start = 0, gokei = 0, i = 0;
	clock_t start, end;
	const char* message[] = {	"なんていうことでしょう;´Д`)エェェェェェェ… \n",
								"あれ・・・?(^q^)\n",
								"あらら。残念でした(´・ω・`)ショボーン\n",
								"とんとんです∑d(・ω・*)ネッ!\n",
								"おしい!あと一歩Σd(゚∀゚。)デス!! \n",
								"全問正解です!すごい(人´∀`).☆.。.:*・ \n"	};

	printf("国関係のゲームを開始します\n");
	printf("このゲームは回答の速度も測定します\n");
	for (; ;)
	{
		printf("準備ができたら'1'を入力してください\n");
		printf("同時に時間計測が開始されします\n");
		scanf("%d",&g_start);
		if(g_start == 1) break;
		printf("入力数字が違います\n");
	}
	start = clock();
	for (i = 0; i < 5; ++i) gokei += question(i);
	end = clock(); 
	printf("正解数 = 5問中%d問正解です。%s", gokei, message[gokei]);
	printf("解答時間の統計は%.3f秒でした\n", (double)(end - start) / CLOCKS_PER_SEC);
	return 0;
}

Re: もっと短くできればと…

Posted: 2011年7月06日(水) 14:20
by たけのん
>バグさん
プログラム修正ありがとうございました!

こちらのプログラムを内容を勉強しつつ使用させていただきたいと思います(*^_^*)