第6回の演習の解答例

(1)じゃんけんプログラムを,どちらかが先に3回勝つまで繰り返すようにしよう。繰り返すのは,/* 入力 */ から /* 勝負 */までですね。あとは,どちらかが3回勝つまでというのを,どうやって表現したら良いだろうか。

解答例:


#include <stdio.h>
void main()
{
	int a, b, win_a=0, win_b=0;

	while(win_a<3  && win_b<3){
		printf("a君とb君がじゃんけんします。¥nグー : 1 チョキ : 2 パー : 3¥n");
		printf("a君は何を出しますか?¥n"); scanf("%d", &a);
		printf("b君は何を出しますか?¥n"); scanf("%d", &b);
	
		if(a < 1 || a > 3 || b < 1 || b > 3){
			printf("1か2か3をちゃんと入力してください¥n");
		}else if(b==(a%3)+1){			/* aの勝ち */
			win_a++;
		}else if(b==(((a+1)%3)+1)){ 		/* bの勝ち */
			win_b++;
		}else{ 					/* あいこ */
			printf("あいこです。¥n");
		}

		printf("A君:%d勝¥nB君:%d勝¥n",win_a,win_b);

	}

	if(win_a==3){
		printf("A君が先に3回勝ちました。¥n");
	}else{
		printf("B君が先に3回勝ちました。¥n");
	}
}



(2)先週の課題(2)ができなかった人は,これに挑戦しよう。キーボードから,二つの正整数を入力すると,はじめの数÷あとの数 を計算し,商とあまりを求めるプログラムを,引き算だけで実現しなさい。

解答例:


#include <stdio.h>

void main()
{
	int a,b,i=0;
	
	printf("初めの数の入力 "); scanf("%d",&a);
	printf("あとの数の入力 "); scanf("%d",&b);
	
	while(a>b){
		a -= b;
		i++;
	}
	
	printf("商は%d,余りは%dです。¥n",i,a);
	
}



(3)先週の課題(5)ができなかった人は,かけ算九九を何とか表示するプログラムを作ろう。九九を計算するには,繰り返しを入れ子にして,カウンタを二つ利用する方法が一般的です。

解答例:


 
#include <stdio.h>
 
void main()
{
	int a,b,i,j;

	a=9;b=9;
	i=1;
	while(i<=a){
		j=1;

		while(j<=b){
			printf("%d×%d=%2d  ",j,i,i*j);  /* %2dの2は二桁表示の意味 */
			j++;
		}
		printf("¥n");  /* 行の改行 */
		i++;
	}
}




(4)素数の判定:入力した整数が,素数かどうか判定するプログラムを作成しよう。

解答例:


#include <stdio.h>
 
void main()
{
	int i,a,s;

	printf("整数を入力してください。¥n");
	scanf("%d", &a);
	
	s=0;
	for( i=1; i <a; i++){
		if(a%i == 0){
			s++;
		}
	}
	if(s == 1){
		printf("素数です。¥n");
	}else{
		printf("素数ではありません。¥n");
	}
}



(5)ユークリッドの互除法に挑戦しよう。2つの整数の最大公約数を求める有名なアルゴリズムです。最大公約数は,これまでどうやって求めてきましたか?これまでに習った素因数分解は,人間の感に頼っている部分がありコンピュータではできません。そこで,考えられたのが次のアルゴリズムです。 「大きい方の数から小さい方の数を引くことを,両者が等しくなるまで繰り返す。等しくなったら,その数が最大公約数。」

解答例:



#include <stdio.h>

void main()
{
	int a,b;

	printf("一つ目の整数を入力してください。");
	scanf("%d",&a);

	printf("二つ目の整数を入力してください。");
	scanf("%d",&b);

	while(a!=b&&a>0){
		if(a>b){
			a=a-b;
		}else{
			b=b-a;
		}
	}

	if(a==b){
		printf("最大公約数は%dです。¥n",a);
	}else{
		printf("最大公約数はありません。¥n");
	}
}