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

Slides:



Advertisements
Similar presentations
プログラミング論 第八回数字の計算,整数の入出力. 本日の内容 前回の課題(続き) 前回の課題(続き) 数字の計算をする 数字の計算をする – 加減乗除を行う – インクリメント演算子とデクリメン ト演算子.
Advertisements

第 2 章 数値の入力と変数 scanf と変数をやります 第 2 章 数値の入力と変数 1. 以下のプログラムを実行してみよう  C 言語では文の最後に「 ; 」(セミコロン)が付きます 第 2 章 数値の入力と変数 2 #include int main() { int x; x = 3; printf("x.
プログラミング演習( 2 組) 第 9 回
情報処理演習 (秋学期・樋口担当) 2回目 10/1 日本工業大学 コンピュータリテラシーII.
7/10 if 文課題 力作が多くて感心! 演習1:キーボードから2つの整数を入力し、小さい方の数字を 表示せよ。
第6回条件による分岐.
第3回:ボールを上下に動かそう! (オブジェクトの移動、一次元)
ループで実行する文が一つならこれでもOK
4章 制御の流れ-3.
計算技術研究会 C言語講座 第3回 Loops (for文 while文).
第2章 数値の入力と変数 scanfと変数をやります.
第2回ネットワークプログラミング 中村 修.
C言語 配列 2016年 吉田研究室.
コンピュータープログラミング (C言語)(6) 1.条件分岐2(switch文、復習) 2.繰り返し処理(for文、while文)
C言語講座 第4回 ポインタ.
第6章 2重ループ&配列 2重ループと配列をやります.
第7回 条件による繰り返し.
情報基礎及び演習 プログラミング基礎① 電気・佐藤亮一.
岩村雅一 知能情報工学演習I 第8回(後半第2回) 岩村雅一
プログラミング演習 バージョン1 担当教員:綴木 馴.
ちょっとした練習問題① 配列iroを['R', 'W', 'R', 'R', 'W' , 'W' , 'W']を宣言して、「W」のときの配列の番号をprintfで表示するようなプログラムを記述しなさい。
プログラムの制御構造 選択・繰り返し.
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
繰り返し計算 while文, for文.
電気・機械・情報概論 VBAプログラミング 第2回 2018年7月2日
プログラミング論 II 2008年10月30日 文字列
アルゴリズムとプログラミング (Algorithms and Programming)
今までの練習問題の復習.
前回の練習問題.
第7回 条件による繰り返し.
第7回 プログラミングⅡ 第7回
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
高度プログラミング演習 (05).
高度プログラミング演習 (05).
C言語講座第二回 2017 分岐とループと乱数.
プログラミング言語論 第四回 理工学部 情報システム工学科 新田直也.
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
復習 一定回数を繰り返す反復処理の考え方 「ループ」と呼ぶ false i < 3 true i をループ変数あるいはカウンタと呼ぶ
疑似乱数, モンテカルロ法によるシミュレーション
プログラミングⅡ 第2回.
復習 Cにおけるループからの脱出と制御 break ループを強制終了する.if文と組み合わせて利用するのが一般的. continue
C言語,ソースファイルの作成,コンパイル,実行
C#プログラミング実習 第2回.
復習 if ~ 選択制御文(条件分岐) カッコが必要 true 条件 false 真(true)なら この中が aを2倍する 実行される
C言語講座 制御(選択) 2006年 計算技術研究会.
地域情報学 C言語プログラミング 第3回 入力、if文、for文 2016年11月25日
プログラミング基礎演習 第4回.
第2章 printf(“変数と入力”); scanf(“%d”,&num);
ループだよ!難しいよ! 第5章 while(ループ);.
標準入出力、変数、演算子、エスケープシーケンス
cp-15. 疑似乱数とシミュレーション (C プログラミング演習,Visual Studio 2019 対応)
第4章 double 小数型の変数;.
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
地域情報学 C言語プログラミング 第3回 入力、if文、for文 2017年11月1日
四則演算,変数 入力文,出力文,代入文, ライブラリ関数
プログラミング1 プログラミング演習I 第2回.
湘南工科大学 2013年10月22日 情報理論2 湘南工科大学情報工学科 准教授 小林 学.
プログラミング序論演習.
第2章 数値の入力と変数 scanfと変数をやります.
第12章 ランダム関数.
復習 いろいろな変数型(2) char 1バイト → 英数字1文字を入れるのにぴったり アスキーコード → 付録 int
C言語講座 四則演算  if ,  switch 制御文.
計算技術研究会 C言語講座 第二回 制御構文 if , switch.
知能情報工学演習I 第10回( C言語第4回) 課題の回答
第1章 文字の表示と計算 printfと演算子をやります 第1章 文字の表示と計算.
第1章 文字の表示と計算 printfと演算子をやります.
第13章 構造体 講習最後だよ!.
= 55 課題6-1 #define _CRT_SECURE_NO_WARNINGS
ファーストイヤー・セミナーⅡ 第10回 if文による選択処理(2).
Presentation transcript:

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

確認! 代入演算子 加算、減算演算子 演算子 使い方 意味 += 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つの扉

比較演算子(条件式が真か偽かを調べる) 論理演算子 注意: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ではない

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

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

例.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 に 数字が入っていないことを指します

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

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

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 エスケープシーケンス \” で ” を表示

練習問題.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”です となるようにしてみて下さい

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

例.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++; }; としても実行できます

乱数の取得(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); そこで...

例.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 を現在時刻に従って 設定します ↳実行する度、違った乱数に!

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

練習問題.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); }

練習問題.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); }

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