第3回 練習課題

練習課題1

1.以下を入力し実行せよ。
-------------------
#include <stdio.h>

int main()
{
	int a,b;

	printf("整数を入力してください:");
	scanf("%d",&a);

	b = a % 2;

	switch(b)
	{
	case 0:
		printf("入力した数は偶数です。\n");
		break;
	case 1:
		printf("入力した数は奇数です。\n");
		break;
	}
	return 0;
}
-------------------
2.最後の「break;」を削除した場合どうなるか?実行して確かめよ。
3.全ての「break;」を削除した場合どうなるか?実行する前に考えよ、
4.実行して確かめよ。

練習課題2

1.以下を入力し実行せよ。
-------------------
#include <stdio.h>

int main()
{
	int a;

	printf("1以上5以下の整数を入力してください:");
	scanf("%d",&a);

	switch(a)
	{
	case 1:
		printf("1を入力しました。\n");
	case 2:
		printf("2を入力しました。\n");
	case 3:
		printf("3を入力しました。\n");
	case 4:
		printf("4を入力しました。\n");
	case 5:
		printf("5を入力しました。\n");
	}
	return 0;
}
-------------------
2.上記プログラムの間違いを修正せよ。
3.1以上5以下の整数以外の整数が入力された場合に「入力が無効です」と表示するように修正せよ

練習課題3

1.以下のプログラムは月(1月〜12月)を入力すると、その月が何日あるのかを表示するプログラムの作成途中である。 完成させよ。ただし2月は28日までとする。
-------------------
#include <stdio.h>

int main()
{
	int mon;

	printf("何月ですか?");
	scanf("%d",&mon);

	switch(mon)
	{
	case 1:
	case 3:
		・
		・
		・
		printf("31日です。\n");
		break;
	・
	・
	・
	・
	・
		printf("入力が無効です。1−12を入力してください。\n");
	}
	return 0;
}
-------------------

練習課題4

1900年以降の西暦を入力すると干支を返すプログラムを作成せよ。
≪ヒント≫
T.1900年は「子」
U.割り算での余りを求める演算子「%」と switch()を使う
V.干支は、子 丑 寅 卯 辰 巳 午 未 申 酉 戌 亥 の順

練習課題5

次のプログラムをswitch文を使わずにif文のみを使うように書き換えよ。
-------------------
#include <stdio.h>

int main()
{
	int day;

	printf("何日ですか?");
	scanf("%d",&day);

	switch(day)
	{
		case 3:
		case 4:
		case 5:
		case 6:
			printf("祝日です。\n");
			break;
		case 11:
		case 18:
		case 25:
			printf("日曜日です。\n");
			break;
		default:
			printf("平日です。\n");
	}
	return 0;
}
-------------------

練習課題6 (提出不要)

次のプログラムをif文を使わずにswitch文のみを使うように書き換えよ。
-------------------
#include <stdio.h>

int main()
{
	int x;

	printf("1−10までの整数xを入力してください:");
	scanf("%d",&x);

	if (  ( (1<=x) && (x<=3) ) || ( (8<=x) && (x<=10) ) )
		printf("整数xは集合Aに属しています。\n");
	if ( ( (2<=x) && (x<5) ) || ( (7<x) && (x<=9) ) )
		printf("整数xは集合Bに属しています。\n");
	else if( x%2==0 )
		printf("整数xは集合Cに属しています。\n");
	else
		printf("整数xは集合Dに属しています。\n");
	return 0;
}
-------------------

練習課題7

次の通りに動作するプログラムをif文を使わずにswitch文のみを使うように書け。

練習課題8 (提出不要)

1.次の通りに動作するプログラムをif文を使わずにswitch文のみを使うように書け。
2.上記のプログラムをif文に書き換えよ

練習課題9 (提出不要)

1.以下を入力し実行せよ。
-------------------
#include <stdio.h>

int main()
{
	int a=1, n=0;

	do
	{
		a=a*2;
		n = n + 1;
	}
	while( a <= 10000 );

	printf("2の%d乗で初めて10000を超えます。\n",n);
	return 0;
}
-------------------

練習課題10 (提出不要)

1.1+2+3+4+・・・ と和を計算していったとき、 初めて1000を超えるのは、どんな数を足した直後か?
2.練習課題1を参考にして、1を求めるプログラムを作成せよ

練習課題11 (提出不要)

1.以下のプログラムを実行せよ。
-------------------
#include <stdio.h>

int main()
{
	int a=0,sum=0;

	do
	{
		printf("整数を入力してください:");
		scanf("%d",&a);

		sum = sum + a;
		printf("これまでの合計:%d\n",sum);
	}
	while( a != 0 );

	return 0;
}
-------------------
2.何をするプログラムか?
3.while()を使って書き換えよ(do while()ではなく、while()のみ)

練習課題12 (提出不要)

1.以下のプログラムは以下の数列が、n→∞のときに、 どのような値に収束するかを求めるプログラムである。収束する値を理論的に求め、実行結果と比較せよ
xn+1=0.5xn+3
-------------------
#include <stdio.h>

int main()
{
	double x1,x2;

	x2=1.0;

	do
	{
		x1 = x2;
		x2 = 0.5*x1+3.0;

		printf("%lf\n",x2);
	}
	while( (x1-x2 > 0.000001) || (x2-x1 > 0.000001) );

	return 0;
}
-------------------
2.xn+1=0.25 xn2+1 が、n→∞のときに、どのような値になるのかを求めるプログラムに変更せよ。
3.2のとき、結局、どんな方程式を解いていることになるのか?(ヒント:二次方程式)

練習課題13

rand()関数は整数の乱数を生成する関数である。
以下のプログラムを実行し、rand()関数を確かめよ。
なお、rand()関数を呼び出すには、#include <stdlib.h> が必要であることに注意せよ。
-------------------
#include <stdio.h>
#include <stdlib.h>

int main()
{
	int i=0,a;

	srand(10); //乱数のタネを与える

	while( i<19 )
	{
		a = rand(); //乱数を発生させ変数aに代入
		printf("%d\n",a);

		i = i+1;
	}
	return 0;
}
-------------------
1.何度も実行し(10回以上)表示される数を確かめよ。乱数か?
2.srand(10)をsrand(125)に書き換え何度も実行せよ。1の場合と同じか?
3.関数srand()の引数を適当な整数に変えて、何度も実行せよ。どうなるか?
4.以下のように書き換えよ。赤い部分が書き換えた部分である。
-------------------
#include <stdio.h>
#include <stdlib.h>
#include <time.h> 

int main()
{
	int i=0,a;

	srand( time(0) ); //乱数のタネを与える

	while( i<19 )
	{
		a = rand(); //乱数を発生させ変数aに代入
		printf("%d\n",a);

		i = i+1;
	}
	return 0;
}
-------------------
5.何度も実行し(10回以上)、srand()の引数が固定の整数だった場合に比べてどうなったか確かめよ。

練習課題14

以下のプログラムはランダムに生成された0以上99以下の整数を当てさせるゲームである。
コンピュータは以下のルールに従って表示する。 プログラムは未完である。
完成させよ
-------------------
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
	int ans, a;

	srand( time(0) );

	ans = rand()%100;  // 乱数を生成し100で割った余りを求める
	                   // つまり、乱数で0以上99以下の整数を生成

	do
	{
		printf("0以上99以下の整数を入力してください:");
		scanf("%d",&a);

		if ( a <= ans-10 )
			printf("とても小さいです。\n");
		else if( )

	}
	while(  )

	printf("正解です!!!\n");
	return 0;
}



-------------------

練習課題15 (提出不要)

以下のプログラムを実行せよ。
-------------------
#include <stdio.h>
int main()
{
	int ans=1,a;
	int n=1;

	while( n <=20 )
	{
		printf("整数を入力してください\n");
		scanf("%d",&a);
		ans = ans*a;

		if( (ans<-10000) || (ans>10000) )
			break;

		n = n+1;

		printf("%d \n",ans);
	}
	return 0;
}
-------------------
1.「break;」を使わないプログラムに修正せよ。

練習課題16

以下の仕様を満たすプログラムを作成せよ
-------------------
#include <stdio.h>

int main()
{
 int a=1;

 while(a<=100)
 {
	/*
	ここを書く
	/*
 }
	return 0;
}
-------------------

練習課題17

1.練習課題14をコンピュータが自分で当てるプログラムに変更し,何回目で当てたか表示せよ.ただしコンピュータが知る事のできる情報は問題6の条件と同じである.
2.当てるのにかかった手数を減らすにはどうすればよいか考え,プログラムを変更せよ

提出課題

提出課題2と提出課題3について

提出は、どちらか一方のみで良い。

提出課題1

誕生日(月と日)を入力させ、その結果、星座を表示するプログラムを作成せよ。
switch()文とif文を使うこと。

星座の判定には以下の表を用いること
おひつじ座 3/21−4/19
おうし座 4/20−5/20
ふたご座 5/21−6/21
かに座 6/22−7/22
しし座 7/23−8/22
おとめ座 8/23−9/22
てんびん座 9/23−10/23
さそり座 10/24−11/21
いて座 11/22−12/21
やぎ座 12/22−1/19
みずがめ座 1/20−2/18
うお座 2/19−3/20
<ヒント>
-------------------
#include <stdio.h>

int main()
{
	int mon;
	int day;

	printf("何月ですか?");
	scanf("%d",&mon);
	printf("何日ですか?");
	scanf("%d",&day);

	この続きを書く
-------------------

提出課題2

while文を使い、二つの正の整数を入力させ、最小公倍数を表示するプログラムを作成せよ。
入力された値が正であることをチェックせよ(整数であるこをチェックする必要はない)

表示例
-------------------
1つ目の正の整数を入力してください:-3
正ではありません。
1つ目の正の整数を入力してください:3
2つ目の正の整数を入力してください:5

3と5の最小公倍数は 15 です。

続行するには何かキーを押してください . . .
-------------------
ヒント:
大きい方を2倍、3倍・・し、小さい方で割り切れれば公倍数。

提出課題3

while文を使い、二つの正の整数を入力させ、最小公倍数と最大公約数を表示するプログラムを作成せよ。
入力された値が正であることをチェックせよ(整数であるこをチェックする必要はない)

表示例
-------------------
1つ目の正の整数を入力してください:0
正ではありません。
1つ目の正の整数を入力してください:15
2つ目の正の整数を入力してください:12

15と12の最小公倍数は 60 です。
15と12の最大公約数は 3 です。

続行するには何かキーを押してください . . .
-------------------