Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

条件分岐・繰り返し処理

321 views

Published on

Published in: Technology
  • Be the first to comment

  • Be the first to like this

条件分岐・繰り返し処理

  1. 1. C++講習会 条件分岐・繰り返し処理
  2. 2. 条件分岐 (場合分け)
  3. 3. if文:条件式が真のときのみ { }の中の式を実行する if(条件式){ 実行文 } 条件式 実行文 真 偽
  4. 4. else文:if文の条件式が偽のときに実行する 文を書くときに使う if(条件式){ 実行文1 }else{ 実行文2 } 条件 実行文1 真 偽 実行文2
  5. 5. if文、else文を使ったサンプルコード int main(){ int A; int B; cin >> A >> B ; if(A<B){ cout << "A < B" << endl; } else{ cout << "A >= B" << endl; } return 0; } A<B のとき この式を実行する A<B でないとき この式を実行する
  6. 6. 条件式を書くときのイコールに注意点! 数学 プログラミング AとBは等しい (等号) A=B A==B AはB以上だ (不等号) A≧B A>=B AはB以下だ (不等号) A≦B A<=B AはBと異なる A≠B A!=B
  7. 7. else if:条件式を判断して多分岐を行う if(条件式1){ 実行式1 } else if(条件式2){ 実行式2 } else{ 実行式3 } 真 条件1 式1 真 偽 式2 条件2 式3 偽
  8. 8. if、else、else ifを使ったサンプルコード int main(){ int A; int B; cin >> A >> B ; if( A==B ){ cout << "A = B" << endl; } else if( A<B ){ cout << "A < B" << endl; } else{ cout << "A>B" << endl; } return 0; } A==B のとき この式を実行する A==B でない かつ A<B のとき この式を実行する A==B でない かつ A<B でないとき この式を実行する AtCoder Beginner Contest 054 A を解いてみよう!
  9. 9. 練習問題:AtCoder Beginner Contest 031 A 攻撃力Aと防御力Dが与えられる レベルアップするときに、どちらか片方の数値を 1だけ増やすことができる レベルアップ後の攻撃力と防御力の積の最大値を求めよ
  10. 10. #include<iostream> using namespace std; int main(){ int A, B; cin >> A >> B ; int x = (A+1) * B; int y = A * (B+1); 練習問題:AtCoder Beginner Contest 031 A 解法1 攻撃力を1増やす場合と防御力を1増やす場合を両方試し てみて、大きい方を出力する if(x > y){ cout << x << endl; } else{ cout << y << endl; } return 0; }
  11. 11. #include<iostream> using namespace std; int main(){ int A, B; cin >> A >> B; 練習問題:AtCoder Beginner Contest 031 A 解法2 レベルアップ前の値のうち、小さい方を1増やす if(A < B){ cout << (A+1) * B << endl; } else{ cout << A * (B+1) << endl; } return 0; }
  12. 12. 練習問題:じゃんけん A君とB君がじゃんけんをする A君の出した手とB君の出した手が与えられるので A君が勝ったら"A"、B君が勝ったら"B"を、引き分けなら "C"を出力してください ただし、入力(A君B君が出した手)は1~3の数字 グーのとき1 チョキのとき2 パーのとき3 例1 入力:1 3 出力:B 例2 入力:2 2 出力:C
  13. 13. 繰り返し処理 (ループ)
  14. 14. コードの中で同じことを何度も書くのは辛い... 例 Hello World!を200回出力する <コード> int main(){ cout <<"Hello World!"<<endl; cout <<"Hello World!"<<endl; cout <<"Hello World!"<<endl; cout <<"Hello World!"<<endl; ・・・
  15. 15. やってること同じだしもっと簡潔に書きたい… ⇒while文、for文
  16. 16. while文:条件式が真のあいだ繰り返す while(条件式){ 実行文 } 条件式 実行文 真 偽
  17. 17. 目標:2のN乗を求めたい 変数Nに数を入力する。変数Aを使って、2 のN乗を計算する。 手順: 1. 変数Nに数を代入する。 2. 変数Aに 1 を代入する。 3. Aに 2 を N 回かける。 a. A に 2 を1度かける。 b. N を 1 減らす c. N が 0 なら手順 "4" へ、 そうでなければ 手順 "a" へ戻る。 4. 変数 A を出力する
  18. 18. while文を使ったサンプルコード int main(){ int N; int A=1; cin >> N ; while( N>0 ){ A = A*2 ; N = N-1 ; } cout << A << endl; return 0; } N>0 のとき この式を実行する
  19. 19. for文:同じことを繰り返し処理させるときに使う。 for( ; ; ){ } 初め 条件式 毎回最後 毎回やる処理 繰り返しする内容を書く 初めにやる内容を書く ㊟繰り返し処理をする前に1回だけ行わ れる 処理を繰り返す条件 繰り返すたびに 最後にする処理を書く
  20. 20. 例 int i,n=1; for( i=0 ; i<10 ; i++ ){ n=n*2; } cout << n <<endl; for文の流れ nに1が保管される iに0が保管される nに2がかけられる i<10が成り立つ? iに1を足す nを出力 Yes!! No
  21. 21. もっと具体例で見てみよう! 10回2を足したい。 iは最初0 i<10が成り立てばそのまま処理を続ける 処理が一回行われるたびに i に1が足される。 そうでない(つまりi>=10)になるとループが終わ る。 結果的に0~9の10回ループが回る。 iはループをカウントするためだけにある! int main(){ int ans=0; int i; for( i=0 ; i<10 ; i++ ){ ans=ans+2; } cout << ans << endl; return 0; }
  22. 22. もっと他にも… 1~10までの和を求めてみよう int main(){ int ans=0; int j=1; for( ; j<=10; j++){ ans=ans+j; } cout << ans << endl; return 0; } jはループカウンタ(何回繰り返し たかを覚えておく変数) 宣言時に初期化してるのでfor文 の中で初期化しなくて良い。 ansにjを毎回足していく jをうまく使うこともできる!
  23. 23. i++ iに保管されている値を1増やす演算 子 他に... i-- iに保管されている値を1減らす演算 子 これは少しややこしいので、 これぐらいを知っておけばいいです ⇒i=i+1してるのと同じ ⇒i=i-1してるのと同じ 補足
  24. 24. while文とfor文の違い while(条件式){ 実行文 } for( 初め ; 条件式 ; 毎回最後){ 実行文 } int i = 1; int x = 0; while( i <= 10 ){ x = x + i ; i++; } int i; int x = 0; for( i = 1 ; i <= 10 ; i++ ){ x = x + i ; }
  25. 25. 練習問題:NからMまでの偶数を小さい順に出力せよ コンパイル方法 $ g++ pra.cpp $ ./a.out プログラムを 書いている ファイルの名前 #include<iostream> using namespace std; int main(){ int N, M; cin >> N >> M ; return 0; } ここに書く!! 例 入力:1 10 出力:2 4 6 8 10

×