第4回 練習課題

練習課題1

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

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

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

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

練習課題2

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

練習課題3

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

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

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

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

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

練習課題4

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

void 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) );

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

練習課題5

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

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

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

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

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

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

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

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

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

練習課題6

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

void main(){
	int ans, a;

	srand( time(0) );

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

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

		if ( a <= ans-10 )
			printf("小さすぎます。\n");
		else if( )

	} while(  )

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



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

練習課題7

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

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

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

		n = n+1;

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

練習課題8

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

void main(){
 int a=1;

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

練習問題9

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

提出課題 (基本課題)

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

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

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

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

提出課題(発展課題)

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

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

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

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

基本課題と発展課題について

基本課題に合格した場合は「A」、発展課題に合格した場合は「S」の成績とする。
ただし、採点の負荷を軽減するために、提出は、どちらか一方のみで良い。
両方提出した場合は減点するので、 よく考えてから提出すること。