第7回[平成15年6月5日(木)]:PN03ー07.ppt 繰り返し構造(for文)と 増(減)・複合代入演算子 今日の内容 1 2 3 4 5 6 構造化プログラム(復習) 繰り返し構造(do文,while文)の復習と演習 繰り返し構造(for文)と制御変数 後置増(減)分演算子・前置増(減)分演算子 複合代入演算子 演習 復習 構造化プログラミング • 順次構造 A B • 選択構造 true 判断 ・二者択一、 複数場合分け A ・if文、switch文 false B • 繰り返し(反復)構造 ・定数回繰り返し、前判断、後判断 ・for文、while文、do文 どの構造も入口と出口 が一つだけ 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 演算子の優先順位:教科書177頁を常に参照 pとqのいずれかが非0(true,1)なら 復習 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; 前置演算子 評価前に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(" :素数です。 P入門(第7回)は 終了です。 次回(第8回)は 6月12日 続いて、P演習に入ります。 では、しばらく休憩します。
© Copyright 2024 ExpyDoc