第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以下の整数を当てさせるゲームである。
コンピュータは以下のルールに従って表示する。
- 正解を入力したとき「正解です!!」と表示
- 正解より10以上小さい数字を入力したとき「小さすぎます」と表示
- 正解より9以下だけ小さい数字を入力したとき「小さいです」と表示
- 正解より9以下だけ大きい数字を入力したとき「大きいです」と表示
- 正解より10以上大きい数字を入力したとき「大きすぎます」と表示
プログラムは未完である。
完成させよ
-------------------
#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
以下の仕様を満たすプログラムを作成せよ
- 3の倍数であるときは「Fizz」と表示
- 5の倍数であるときは「Buzz」と表示
- 15の倍数であるときは「Fizz Buzz」と表示
- その他の場合は数字を表示
-------------------
#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」の成績とする。
ただし、採点の負荷を軽減するために、提出は、どちらか一方のみで良い。
両方提出した場合は減点するので、
よく考えてから提出すること。