第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文のみを使うように書け。
- キーボードより整数を入力させる
- 3の倍数であるときは「Fizz」と表示
- 5の倍数であるときは「Buzz」と表示
- 15の倍数であるときは「Fizz Buzz」と表示
- その他の場合は入力した数字を表示
練習課題8 (提出不要)
1.次の通りに動作するプログラムをif文を使わずにswitch文のみを使うように書け。
- 0から100までの整数を入力させ,60以上の数が入力された際は合格,それ以外の場合は不合格と表示するプログラムを作成せよ.
- 90以上の数字を入力した際は「優 合格」と表示するように変更せよ
- 60点未満の数字を入力した際は「不可 不合格」と表示するように変更せよ
- 30点未満の数字を入力した際は「不可 不合格 29点」と点数も表示するプログラムを作成せよ
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以下の整数を当てさせるゲームである。
コンピュータは以下のルールに従って表示する。
- 正解を入力したとき「正解です!!」と表示
- 正解より10以上小さい数字を入力したとき「とても小さいです」と表示
- 正解より9以下だけ小さい数字を入力したとき「小さいです」と表示
- 正解より9以下だけ大きい数字を入力したとき「大きいです」と表示
- 正解より10以上大きい数字を入力したとき「とても大きいです」と表示
プログラムは未完である。
完成させよ
-------------------
#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
以下の仕様を満たすプログラムを作成せよ
- 3の倍数であるときは「Fizz」と表示
- 5の倍数であるときは「Buzz」と表示
- 15の倍数であるときは「Fizz Buzz」と表示
- その他の場合は数字を表示
-------------------
#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 です。
続行するには何かキーを押してください . . .
-------------------