制御構造
Point1 基礎事項
制御構造…「判断」「繰り返し」「分岐」などを行う。
5.4.1 判断(if文)
if=もし〜ならば if文も文の仲間なので、if文の中にif文を書くことができる。
5.4.2 繰り返し(for文)
ある処理を「何回繰り返すのか」が分かっているときに使うと便利
5.4.3 繰り返し(while文)
ある処理を「何回繰り返すのか分からない」ときに使うと便利
5.4.4 繰り返しの応用

5.4.5 キーボードからの1字読み込み
5.4.6 switch-case文(多条件分岐)
if文が重なると見づらい→switch-case文の方が見やすい
Point2問題
練習28 a=32、b=53、c=20としたとき、最大値を表示するプログラムを作れ。
{int a,b,c;
a=32,b=53,c=20;
if(a>b){ if(a>c){ printf("MAX=%dです。\n",a); }
else{ printf("MAX=%dです。\n",c); }}
else{ if(b>c){ printf("MAX=%dです。\n",b); }
else{ printf("MAX=%dです。\n",c); }}}
練習29 a=−20のような形で数字を与えたとき、その絶対値を表示せよ。
{int a=−20;
printf("%dの絶対値は",a);
if(a<0){ a*=−1;}
printf("%dです。\n",a); }
練習30 二次方程式の解の個数を表示するプログラムを作れ。
{float a,b,c,d; int n;
a=1.0; b=-3.0; c=2.0; d=b*b-4*a*c;
if(d>0){ n=2; }
else if(d=0){ n=1; }
else{ n=0; }
printf("a=%4.1f、b=%4.1f、c=%4.1f\n",a,b,c);
printf("答えの数は%dです。\n",n); }
練習31 二次方程式の解を求めるプログラムを作れ。但し、虚数解(判別式D=マイナス)のとき、x1=1.00+1.73i x2=1.00-1.73iのように表示せよ。
*あらかじめ、<math.h>をインクルードしたうえで…
{float x1,x2,a,b,c,d,z,i;
a=1.0; b=-3.0; c=2.0; d=b*b-4*a*c;
if(d>0){ x1=-b+sqrt(d)/(2*a); x2=-b-sqrt(d)/(2*a);
printf("x1=%5.2f、x2=%5.2f\n",x1,x2); }
else if(d==0){ z=-b/(2*a);
printf("x=%5.2f\n",z); }
else{ z=-b/(2*a); i=sqrt(-d)/(2*a);
printf("x1=%5.2f+%5.2fi\n",z,i);
printf("x2=%5.2f-%5.2fi\n",z,i); }}
練習32 1から10までの和を求めるプログラムを作りなさい。
{int c,s; s=0;
for(c=1;c<11;c++){ s=s+c; }
printf("1から10までの和は%dです。\n",s); }
練習33 1から5までの積を求めるプログラムを作りなさい。
{int c,v; v=1;
for(c=1;c<6;c++){ v=v*c; }
printf("1から5までの積は%dです。\n",v); }
練習34 上の例21(P55)のプログラムを参考に以下のような数表を作るプログラムを作成してみよ。
i i*i 1+…i
1 1 1
2 4 3
3 9 6
{int i,s; s=0;
printf("i i*i 1+...i\n");
for(i=1;i<11;i++){ s=s+i; printf("%3d %3d %d\n",i,i*i,s); }
練習35 以下のような√の数表を作るプログラムを作れ。
i root
1 1.000
2 1.414
3 1.732
{int i; float r;
printf("i root\n");
for(i=1;i<11;i++){ r=sqrt(i); printf("%3d %5.3d\n",i,r); }}
練習36 以下のようなsin、cos、tanの数表を作るプログラムを作れ。
i sin cos tan
0 0.000 1.000 0.000
1 0.017 1.000 0.017
2 0.035 0.999 0.035
3 0.052 0.999 0.052
{int i,d; float s,c,t,pi=3.14159;
printf("i sin cos tan\n");
for(i=0;i<11;i++){ d=pi*i/180; s=sin(d); c=cos(d); t=tan(d);
printf("%d %5.3f %5.3f %5.3f\n",i,s,c,t); }}
練習37 九九の表を作るプログラムを作れ。
{int i,j;
for(i=1;i<10;i++){ for(j=1;j<10;j++){ printf("%3d",i*j); }
printf("\n"); }}
練習38 1から10までの和を求めるプログラムをwhile文を使って書け。
{int i,s; i=1; s=0;
while(i<11){ s+=i; i++; printf("1から10までの和は%dです。\n",s); }}
練習39 上の例(P58)で、printfで、*****を表示する前にスペースを入れ、平行四辺形を書くプログラムを作れ。
{int i,j;
for(i=1;i<6;i++){
for(j=0;j<i;j++){ printf(" "); }
printf("**********\n"); }}
練習40 上の例とは逆向きの平行四辺形を書くプログラムを作れ。
{int i,j;
for(i=6;i>1;i--){
for(j=i;j>0;j--){ printf(" "); }
printf("**********\n"); }}
練習41 次のような、二等辺三角形を書くプログラムを作れ。
*
***
*****
{int i,j;
for(i=0;i<5;i++){
for(j=0;j<4-i;j++){ printf(" "); }
for(j=0;j<1+(2*i);j++){ printf("*"); }
printf("\n"); }}
練習42 aを押すとapple、bを押すとblue、cを押すとcarと表示し、zを押すと終了するプログラムを作れ。(d〜yはなにも表示しない)
{int a;
while((a=getchar())!='z'){
if(a=='a') printf("apple\n");
if(a=='b') printf("blue\n");
if(a=='c') printf("car\n"); }}
練習43 上の例のプログラム(P60)でbreakを取って実行するとどうなるか?実際にやってみよ。
aを押すと…apple bを押すと…blue cを押すと…car zを押すと…終了
blue car
car
制御構造…「判断」「繰り返し」「分岐」などを行う。
5.4.1 判断(if文)
if=もし〜ならば if文も文の仲間なので、if文の中にif文を書くことができる。
使い方 |
if(条件){ 処理1; } else{ 処理2; } 「もし条件が成立するなら処理1を行いなさい。不成立なら処理2を行いなさい。」 |
5.4.2 繰り返し(for文)
ある処理を「何回繰り返すのか」が分かっているときに使うと便利
使い方 |
for(変数=初期値;条件;変数の増減間隔){ 処理; } |
5.4.3 繰り返し(while文)
ある処理を「何回繰り返すのか分からない」ときに使うと便利
使い方 |
while(条件){ 処理; } 一般的に繰り返していくうちに条件が不成立になるような文も入れる。 |
5.4.4 繰り返しの応用

5.4.5 キーボードからの1字読み込み
使い方 |
変数=getchar(); →整数(int)型、文字(char)型 |
5.4.6 switch-case文(多条件分岐)
if文が重なると見づらい→switch-case文の方が見やすい
使い方 |
switch(変数){
case 1:処理1; break; case 2:処理2; break; … … case n: 処理n; } |
default文の使い方(switch-case内で使う) |
default : printf(" "); どのcaseにも当てはまらない場合→caseとして最下文に入力する。 |
Point2
練習28 a=32、b=53、c=20としたとき、最大値を表示するプログラムを作れ。
{int a,b,c;
a=32,b=53,c=20;
if(a>b){ if(a>c){ printf("MAX=%dです。\n",a); }
else{ printf("MAX=%dです。\n",c); }}
else{ if(b>c){ printf("MAX=%dです。\n",b); }
else{ printf("MAX=%dです。\n",c); }}}
練習29 a=−20のような形で数字を与えたとき、その絶対値を表示せよ。
{int a=−20;
printf("%dの絶対値は",a);
if(a<0){ a*=−1;}
printf("%dです。\n",a); }
練習30 二次方程式の解の個数を表示するプログラムを作れ。
{float a,b,c,d; int n;
a=1.0; b=-3.0; c=2.0; d=b*b-4*a*c;
if(d>0){ n=2; }
else if(d=0){ n=1; }
else{ n=0; }
printf("a=%4.1f、b=%4.1f、c=%4.1f\n",a,b,c);
printf("答えの数は%dです。\n",n); }
練習31 二次方程式の解を求めるプログラムを作れ。但し、虚数解(判別式D=マイナス)のとき、x1=1.00+1.73i x2=1.00-1.73iのように表示せよ。
*あらかじめ、<math.h>をインクルードしたうえで…
{float x1,x2,a,b,c,d,z,i;
a=1.0; b=-3.0; c=2.0; d=b*b-4*a*c;
if(d>0){ x1=-b+sqrt(d)/(2*a); x2=-b-sqrt(d)/(2*a);
printf("x1=%5.2f、x2=%5.2f\n",x1,x2); }
else if(d==0){ z=-b/(2*a);
printf("x=%5.2f\n",z); }
else{ z=-b/(2*a); i=sqrt(-d)/(2*a);
printf("x1=%5.2f+%5.2fi\n",z,i);
printf("x2=%5.2f-%5.2fi\n",z,i); }}
練習32 1から10までの和を求めるプログラムを作りなさい。
{int c,s; s=0;
for(c=1;c<11;c++){ s=s+c; }
printf("1から10までの和は%dです。\n",s); }
練習33 1から5までの積を求めるプログラムを作りなさい。
{int c,v; v=1;
for(c=1;c<6;c++){ v=v*c; }
printf("1から5までの積は%dです。\n",v); }
練習34 上の例21(P55)のプログラムを参考に以下のような数表を作るプログラムを作成してみよ。
i i*i 1+…i
1 1 1
2 4 3
3 9 6
{int i,s; s=0;
printf("i i*i 1+...i\n");
for(i=1;i<11;i++){ s=s+i; printf("%3d %3d %d\n",i,i*i,s); }
練習35 以下のような√の数表を作るプログラムを作れ。
i root
1 1.000
2 1.414
3 1.732
{int i; float r;
printf("i root\n");
for(i=1;i<11;i++){ r=sqrt(i); printf("%3d %5.3d\n",i,r); }}
練習36 以下のようなsin、cos、tanの数表を作るプログラムを作れ。
i sin cos tan
0 0.000 1.000 0.000
1 0.017 1.000 0.017
2 0.035 0.999 0.035
3 0.052 0.999 0.052
{int i,d; float s,c,t,pi=3.14159;
printf("i sin cos tan\n");
for(i=0;i<11;i++){ d=pi*i/180; s=sin(d); c=cos(d); t=tan(d);
printf("%d %5.3f %5.3f %5.3f\n",i,s,c,t); }}
練習37 九九の表を作るプログラムを作れ。
{int i,j;
for(i=1;i<10;i++){ for(j=1;j<10;j++){ printf("%3d",i*j); }
printf("\n"); }}
練習38 1から10までの和を求めるプログラムをwhile文を使って書け。
{int i,s; i=1; s=0;
while(i<11){ s+=i; i++; printf("1から10までの和は%dです。\n",s); }}
練習39 上の例(P58)で、printfで、*****を表示する前にスペースを入れ、平行四辺形を書くプログラムを作れ。
{int i,j;
for(i=1;i<6;i++){
for(j=0;j<i;j++){ printf(" "); }
printf("**********\n"); }}
練習40 上の例とは逆向きの平行四辺形を書くプログラムを作れ。
{int i,j;
for(i=6;i>1;i--){
for(j=i;j>0;j--){ printf(" "); }
printf("**********\n"); }}
練習41 次のような、二等辺三角形を書くプログラムを作れ。
*
***
*****
{int i,j;
for(i=0;i<5;i++){
for(j=0;j<4-i;j++){ printf(" "); }
for(j=0;j<1+(2*i);j++){ printf("*"); }
printf("\n"); }}
練習42 aを押すとapple、bを押すとblue、cを押すとcarと表示し、zを押すと終了するプログラムを作れ。(d〜yはなにも表示しない)
{int a;
while((a=getchar())!='z'){
if(a=='a') printf("apple\n");
if(a=='b') printf("blue\n");
if(a=='c') printf("car\n"); }}
練習43 上の例のプログラム(P60)でbreakを取って実行するとどうなるか?実際にやってみよ。
aを押すと…apple bを押すと…blue cを押すと…car zを押すと…終了
blue car
car
br→
main_box