第7回[平成16年6月1日(火)]:PN04ー07.ppt 繰り返し構造(for文)と 増(減)・複合代入演算子 今日の内容 1 2 3 4 5 6 構造化プログラム(復習) 繰り返し構造(do文,while文)の復習と演習 繰り返し構造(for文)と制御変数 後置増(減)分演算子・前置増(減)分演算子 複合代入演算子 演習 皆さんのミニレポートから • 演習(4)の閏年を求める問題で、 今日の授業の長さがちょうど良いです。でも、量は多くて、 内容も難しいので、理解しにくいです。 if( (y%4==0) && ・・・ で、 (y%4) && ・・・ はダメでしょうか? • if( doは「する」、whileは「の間は」 y%4 が 0 の時に y%4==0 が true •→カウントの所を間違えた。(・・・)の後に ; を付けない物 →が出てきたので注意したい。? y%4 が 0 なら非0(true)ではないので false 今回は、switch文があったり、do-while文、while • 今回の授業は、大体のことは分かったのですが、理屈が 文といろいろ新しいことをやったので、少し難しく感じた。 分かったとしても、実践とかなるとなかなかうまくいかない 今回の理解度75%ぐらい。 のが痛いところかなって思います。 • 何とか理解できました。演習で頑張りたいです。何となく 一気にやってすこし理解が追いつかなかったですが、プ リントや教科書を読み返して理解したいです。 ですが、教室が少し暑く感じます(毎回)。 • do-whileとwhileの文はすごく難しかったです。次回 いつも授業の始めに中央のディスプレイが見えないので、 ちゃんと中央のディスプレーも付けてほしい。注意します はもっと詳しくやるので必ず出席してdo-while文と • while文をマスターしたいです。 去年服部先生に習ったような内容になってきた。 • • 最初の方は良く分かった。でも、最後が難しい。 何とか理解できたと思う。復習をしっかりしておきたい。 復習 構造化プログラミング • 順次構造 A B • 選択構造 true 判断 ・二者択一、 複数場合分け A ・if文、switch文 false B • 繰り返し(反復)構造 ・定数回繰り返し、前判断、後判断 ・for文、while文、do-while文 どの構造も入口と出口 が一つだけ false 判断 true A 論理演算子(p.52-) 復習 •p,q は 非0(true,1)又は0(false)とする •論理否定演算子(!) → !p p が非0(true,1) ならば !p は 0(false) 0(false) 1(true) •論理AND演算子(&&) → p && q pとqが共に非0(true,1) の時のみ 1(true) •論理OR演算子(||) → p || q pとqのいずれかが非0(true,1)なら 1(true) 演算子の優先順位:教科書177頁を常に参照 do-while文(do文) 復習 • 継続条件式が真(true)の間は文繰り返す do 文 while ( 条件式 ); do { 文1 ... 文n } while ( 条件式 ); セミコロンを 忘れない! k = 1; do { printf("A"); k = k + 1; } while( k<=20000 ); k=1; printf("A"); k = k + 1; true k<=20000 反復を繰り返す条件 false 復習 while文 • 継続条件式が 真(true)の間は文を繰り返す while ( 条件式 ) 文 while ( 条件式 ) {文1 文2 ... 文n} 反復を続ける条件 k = 1; while ( k<=20000 ) { printf("A"); k = k + 1; } k=1; false k<=20000 true printf("A"); k = k + 1; while文 と do文との関係(1) while文 => do文 false P P false true true S S true P false while (P) S if (P) do S while (P); while文 と do文との関係(2) do文 => while文 S S P true true P false false S do S while (P) ; S while (P) S 演習 次の仕様のプログラムをそれぞれ作成せよ (a)while文を使う場合 (b)do文を使う場合 仕様:特別なデータとして「0」が入力さ れるまで、入力したデータを合計していく data ? 1 data ? 2 data ? 3 data ? 0 sum = 6 data ? 5 data ? 15 data ? -20 data ? 100 data ? 0 sum = 100 int a, sum; = 0; printf("data ? "); scanf("%d",&a); while ( ) { = ; ; ; } printf("sum = %d\n",sum); int a, sum; a = 0; do { printf("data ? "); scanf("%d",&a); } printf("sum = %d\n",sum); 定数回繰り返し:for文(p.74-) for(初期設定式;継続条件式;再設定式)文 例 for ( k=1; k<=200; k=k+1) printf("A"); • 初期設定式では制御変数に初期値を与える 制御変数(k)は、通常は整数型の変数で繰り 返し回数を数えるカウンターの働きをする • 継続条件式が 1(true) ならば 文 を実行 • 再設定式で制御変数に新たな値を与える 実行したい文が複数ある → 複合文,複文 for文 for(初期設定式;継続条件式;再設定式)文 例 for ( k=1; k<=200; k=k+1) printf("A"); k=1 初期設定式 初回の1回のみ 0(false) で終了 printf("A") k<=200 ? 継続条件式 1(true) なら継続 文 再設定式 k=k+1 文実行後再設定 継続条件式と再設定式 •継続条件式 → 真偽が決まる式 関係演算(< <= > >=) 等価演算(== !=) 論理演算(&& ||) 整数値(0はfalse, 非0はtrue) •再設定式 → 制御変数の値を変更する 制御変数に新しい値を代入( i=i+1 ) 増減演算子の利用( ++ -- ) 増減演算子(p.67,73) • 変数の値を1ずつ増加(減少)させる • 制御変数 → 後置・前置いずれも同じ作用 増分演算子 i++ ++i i = i + 1 減分演算子 i-- --i i = i - 1 後置演算子 k=n++; 前置演算子 式が評価された後 式が評価される前 で1だけ増減する k=++n; に1だけ増減する 前置・後置の違い 後置演算子 評価後に1増加 n = 5; k = n++; j = n; kとjの 値は? 前置演算子 評価前に1増加 n = 5; k = ++n; j = n; 例 1からnまでの総和 int n, i, sum; n ? printf("n=>"); i ? scanf("%d",&n); sum ? sum = 0; for ( i=1; i<=n; i++) sum = sum + i; printf("合計は = %d\n",sum); 変数 i と sum の中身を調べてみよう → トレース(n に 5 が入力された場合) for文 と while文 との関係 for ( A ; P ; C ) S [ループ本体] ; while ( ) { [ループ本体] } A P true S C false 例 N個の星を連続表示(76頁) 整数 N(=10)が既に入力されているとする。 for ( i = 0; i < N; i++) putchar('*'); for ( i = 1; i <= N; i++) putchar('*'); while ( N-- > 0) putchar('*'); while ( --N >= 0) putchar('*'); 複合代入演算子(p.66-) • 変数aの値にbを演算@(+ - * / % 等)をし、変数aの値を変化させる a @= b a += b -= *= 5 /= 3 %= ? ? ? ? ? a a a a a a = = = = = = a a a a a a @ + * / % b b b b b b for文の演習 1から10までの和を計算するfor文を書け s=0; n=10; for ( ; ; ) s += i; 100までの偶数について和と二乗和を計算 s1=0; s2=0; b=100; for ( ) { s1 += i; s2 += i*i; } for文の演習 100から90まで大きい順に値を表示する for ( ) printf("%3d",i); 200頁の文字コード表から、32[20](16)~ 127[7F](16)までの文字を表示する for ( ) printf("コード:%d は %c\n",i,i); 今日の課題 • 自然数 n について、 1~n までのすべ ての値に対する剰余を計算して、n の約数 をすべて表示せよ。 余りがゼロならば約数となる 整数nを入力せよ: 30 約数は、 1 2 3 5 6 10 15 30 • ここで、約数の数が2個(1と自分自身)の 時、n は素数となる。入力したnが 素数で あった場合、「素数です。」と表示せよ。 整数nを入力せよ: 29 約数は、 1 29 :素数です。 提出用紙に授業への意見・感想・提案も書いて下さい int n, m, cnt=0; printf("整数nを入力せよ:\n"); scanf("%d",&n); printf("約数は、"); for ( m ; m ; m ) if ( ) { printf(" %3d",m); cnt = } if ( ) puts(" :素数です。");
© Copyright 2024 ExpyDoc