Presentation is loading. Please wait.

Presentation is loading. Please wait.

分岐(If-Else, Else if, Switch) ループ(While, For, Do-while)

Similar presentations


Presentation on theme: "分岐(If-Else, Else if, Switch) ループ(While, For, Do-while)"— Presentation transcript:

1 分岐(If-Else, Else if, Switch) ループ(While, For, Do-while)
C言語講座2016 第二回 分岐(If-Else, Else if, Switch) ループ(While, For, Do-while)

2 確認! 代入演算子 加算、減算演算子 演算子 使い方 意味 += A+=B 足して代入 (A=A+Bと同じ) -= A-=B 引いて代入
*= A*=B 掛けて代入 (A=A*Bと同じ) /= A/=B 割って代入(A=A/Bと同じ) %= A%=B 余りを代入 (A=A%Bと同じ) 加算、減算演算子 演算子 使い方 意味 ++ A++ または ++A A の値を1増やす -- A-- または --A A の値を1減らす 参考:Cの絵本 C言語が好きになる9つの扉

3 比較演算子(条件式が真か偽かを調べる) 論理演算子 注意:1<A<10 と書いても実行できません!
※真ならば1、偽ならば0を返す 演算子 使い方 意味 == A==B A と B は等しい < A<B A は B より小さい > A>B A は B より大きい <= A<=B A は B 以上 >= A>=B A は B 以下 != A!=B A と B は等しくない 注意:1<A<10 と書いても実行できません! 論理演算子 演算子 使い方 意味 && (1<=A)&&(A<100) A は1以上かつ100未満 || (A==1)||(A==100) A の値が1か100 ! !(A==100) または A!=100 A は100ではない

4 if-else if(条件式) 命令文A else 命令文B 条件式を満たすとき(真)、命令文Aを実行 条件式を満たさないとき(偽)、命令文Bを実行

5 else if if(条件式A) 命令文A else if(条件式B) 命令文B else if(条件式C) 命令文C else 命令文D

6 例.1 ptrの値には数字でない文字列が入ります 関数 fgets について、sizeof(x)で x分だけの文字数、文字列を長さxまでに
#include<stdio.h> #include<stdlib.h> #include<string.h> int main(void){ char buffer[100], *ptr; printf("数字を入力して下さい\n"); fgets(buffer, sizeof(buffer), stdin); buffer[strlen(buffer) - 1] = '\0'; long num = strtol(buffer, &ptr, 10); if (num == NULL){ printf("%sは数字ではありません\n", ptr); } if (num != NULL) printf("%ldは数字です\n", num); return(0); ptrの値には数字でない文字列が入ります 関数 fgets について、sizeof(x)で x分だけの文字数、文字列を長さxまでに 制限することができます 関数 strlen は文字列の長さを調べます buffer[strlen(buffer) - 1] = '\0';は Enterを押した分、改行の分を指します 関数 strtol で変数 num を string 型から long 型へ変換します NULLは、値が0で、この場合は変数 num に 数字が入っていないことを指します

7 switch switch(条件式){ case 定数A:命令文A break; case 定数B:命令文B default :命令文C }
条件式を満たし、その整数が 定数A → 命令文A 定数B → 命令文B それ以外 → 命令文C を実行 break で、 switch 文に加え for, while, do 文のループからも抜け出せる 逆に、continue でループを続行する

8 whileとfor while(条件式) 命令文 条件式を満たし、これが0に なるまで命令文を繰り返す

9 i は1ずつ加算され、それが100以下の間ループする
例.2 ループの周回毎に i は1ずつ加算され、それが100以下の間ループする #include<stdio.h> int main(void){ int i, sum; for (i = 1, sum = 0; i <= 100; i++){ sum += i; } printf("1から100の和は\"%d\"\n", sum); return(0); ループの1周目に入る前は、 i = 1, sum = 0 エスケープシーケンス \” で ” を表示

10 練習問題.1 int 型変数 a 、 b に値を読み込み、関数 for を使って a から b の 和を求めるプログラムを作りましょう!
char buf1[100]; fgets(buf1, sizeof(buf1), stdin); buffer[strlen(buf1) - 1] = '\0'; int a = strtol(buf1, 0, 10); を雛形として、a と b を読み込みます また、実行結果は、例えば a=1 , b=10 の場合 1 から 10 の和は“55”です となるようにしてみて下さい

11 do-while do 命令文 while(条件式); 条件式を満たすとき、命令文を繰り返し実行する 注意:この命令文は1回実行される

12 例.2 i++;は i に1を足すことを指します if (num >= 100)break;について num が100以上のとき
#include<stdio.h> #include<stdlib.h> #include<string.h> int main(void){ int i = 0; char buffer[100]; printf("5回文字を入力できます\n"); printf("数字の場合、100以上で終了します\n"); do{ putchar('\t'); fgets(buffer, sizeof(buffer), stdin); buffer[strlen(buffer) - 1] = '\0'; long num = strtol(buffer, 0, 10); if (num >= 100)break; i++; } while (i < 5); return(0); } i++;は i に1を足すことを指します if (num >= 100)break;について num が100以上のとき ループを抜けます この場合は、単に while (i < 5){ putchar('\t'); fgets(buffer, sizeof(buffer), stdin); buffer[strlen(buffer) - 1] = '\0'; long num = strtol(buffer, &ptr, 10); if (num >= 100)break; i++; }; としても実行できます

13 乱数の取得(randとsrand) 例.3 練習問題の前に... そこで... x = rand() % 6 + 1;は
ランダムな整数(乱数)を6で割ったものに1を 加える、つまり、1~6を指します rand()の()には乱数発生の基準となる数字(seed) が入ります このとき seed は一定なので 実行毎に毎回同じ乱数が出来てしまいます 例.3 #include<stdio.h> #include<stdlib.h> int main(void){ int x, i; for (i = 0; i < 10; i++){ x = rand() % 6 + 1; printf("出た目は= %d\n", x); } return(0); そこで...

14 例.4 常に変化する、現在時刻を利用するため #include<time.h>で、関数 time を使えるようにします
#include<stdio.h> #include<stdlib.h> #include<time.h> int main(void) { int x, i; srand((unsigned)time(NULL)); for (i = 0; i < 10; i++){ x = rand() % 6 + 1; printf("出た目は= %d\n", x); } return(0); 常に変化する、現在時刻を利用するため #include<time.h>で、関数 time を使えるようにします srand((unsigned)time(NULL));で seed を現在時刻に従って 設定します ↳実行する度、違った乱数に!

15 練習問題.2 100点を満点とするテストのスコアを乱数で出し、そのスコアに応じて、 0~29点 30~49点 50~69点 70~89点
90~100点 の5段階で評価(関数 if を使う)してみましょう! そのときの点数がいくらだったか printf で表してみて下さい!

16 練習問題.1解答例 #include<stdio.h> #include<stdlib.h>
#include<string.h> int main(void){ int i, sum; printf("a="); char buf1[100]; fgets(buf1, sizeof(buf1), stdin); buf1[strlen(buf1) - 1] = '\0'; int a = strtol(buf1, 0, 10); printf("b="); char buf2[100]; fgets(buf2, sizeof(buf2), stdin); buf2[strlen(buf2) - 1] = '\0'; int b = strtol(buf2, 0, 10); for (i = a, sum = 0; i <= b; i++)sum += i; printf("%dから%dの和は\"%d\"\n", a, b, sum); return(0); }

17 練習問題.2解答例 #include<stdio.h> #include<stdlib.h>
#include<time.h> int main(void){ int x; srand((unsigned)time(NULL)); x = rand() % 101; printf("今回のあなたの点数は%d点\n", x); printf("評価は\n"); if (90 <= x && x <= 100){ printf("\tA\n");} else if (70 <= x){ printf("\tB\n");} else if (50 <= x){ printf("\tC\n");} else if (30 <= x){ printf("\tE\n");} else printf("\tF\n"); return(0); }

18 本日は以上です お疲れ様です!


Download ppt "分岐(If-Else, Else if, Switch) ループ(While, For, Do-while)"

Similar presentations


Ads by Google