4-4 while 文 for 文と同様 ある処理を繰り返し実行するためのものだが for 文と違うのは while 文で指定するのは 継続条件のみであるということ for 文で書かれた左のプログラムを while 文で書き換えると右のようになる /* 読込んだ正の整数値までカウントアップ (for

Similar documents
<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

3-4 switch 文 switch 文は 単一の式の値によって実行する内容を決める ( 変える ) 時に用いる 例えば if 文を使って次のようなプログラムを作ったとする /* 3 で割った余りを求める */ #include <stdio.h> main() { int a, b; } pri

Microsoft PowerPoint - 説明3_if文switch文(C_guide3)【2015新教材対応確認済み】.pptx

Microsoft Word - Training4_判断と制御.docx

Microsoft PowerPoint - C言語の復習(配布用).ppt [互換モード]

プログラミングA

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

プログラミングA

kiso2-09.key

cp-7. 配列

PowerPoint プレゼンテーション

プログラミング基礎

PowerPoint Presentation

Microsoft Word - 3new.doc

情報処理Ⅰ

Microsoft Word - VBA基礎(3).docx

Microsoft PowerPoint - lec4.ppt

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

Microsoft PowerPoint - 4.pptx

2

Microsoft PowerPoint - C4(反復for).ppt

6 関数 6-1 関数とは少し長いプログラムを作るようになると 同じ処理を何度も行う場面が出てくる そのたびに処 理を書いていたのでは明らかに無駄であるし プログラム全体の見通しも悪くなる そこで登場す るのが 関数 である 関数を使うことを 関数を呼び出す ともいう どのように使うのか 実際に見て

4 分岐処理と繰返し処理 ( 教科書 P.32) プログラムの基本的処理は三つある. (1) 順次処理 : 上から下に順番に処理する ぶんきそろ (2) 分岐処理 : 条件が揃えば, 処理する はんぷく (3) 反復処理 : 条件が揃うまで処理を繰り返す 全てのプログラムは (1) から (3) の

Microsoft PowerPoint - å®�æ−•è©¦é¨fi3ㆮ対ç�Œ.pptx

Java講座

プログラミングA

PowerPoint Presentation

プログラミング入門1

Microsoft PowerPoint - 計算機言語 第7回.ppt

JavaプログラミングⅠ

Microsoft PowerPoint - 説明2_演算と型(C_guide2)【2015新教材対応確認済み】.pptx

Microsoft PowerPoint - C_Programming(3).pptx

Microsoft Word - no11.docx

Week 1 理解度確認クイズ解答 解説 問題 1 (4 2 点 =8 点 ) 以下の各問いに答えよ 問題 bit 版の Windows8.1 に Java をインストールする時 必要なパッケージはどれか 但し Java のコンパイルができる環境をインストールするものとする 1. jdk

Microsoft PowerPoint - 3.pptx

/*Source.cpp*/ #include<stdio.h> //printf はここでインクルードして初めて使えるようになる // ここで関数 average を定義 3 つの整数の平均値を返す double 型の関数です double average(int a,int b,int c){

Prog1_6th

C#の基本2 ~プログラムの制御構造~

JavaプログラミングⅠ

2

Cプログラミング1(再) 第2回

Microsoft PowerPoint - program.ppt [互換モード]

Microsoft PowerPoint - 説柔5_間勊+C_guide5ï¼›2015ã•’2015æŒ°æŁŽæš’å¯¾å¿œç¢ºèª“æ¸‹ã†¿ã•‚.pptx

プログラムの基本構成

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く

Microsoft PowerPoint - prog03.ppt

C 言語第 3 回 2 a と b? 関係演算子 a と b の関係 関係演算子 等しい a==b 等しくない a!=b より大きい a>b 以上 a>=b より小さい a<b 以下 a<=b 状態 真偽 値 条件が満たされた場合 TRUE( 真 ) 1(0 以外 ) 条件が満たされなかった場合 F

Taro-再帰関数Ⅲ(公開版).jtd

物質工学科 田中晋

スライド 1

Microsoft Word - Training10_プリプロセッサ.docx

gengo1-11

フローチャートの書き方

問題1 以下に示すプログラムは、次の処理をするプログラムである

memo

3. 標準入出力

Taro-リストⅠ(公開版).jtd

Microsoft PowerPoint - prog03.ppt

C 言語の式と文 C 言語の文 ( 関数の呼び出し ) printf("hello, n"); 式 a a+4 a++ a = 7 関数名関数の引数セミコロン 3 < a "hello" printf("hello") 関数の引数は () で囲み, 中に式を書く. 文 ( 式文 ) は

問 2 ( 型変換 ) 次のプログラムを実行しても正しい結果が得られない 何が間違いかを指摘し 正しく修正せよ ただし int サイズが 2 バイト long サイズが 4 バイトの処理系での演算を仮定する #include <stdio.h> int main( void ) { int a =

gengo1-8

Prog1_10th

今回のプログラミングの課題 ( 前回の課題で取り上げた )data.txt の要素をソートして sorted.txt というファイルに書出す ソート (sort) とは : 数の場合 小さいものから大きなもの ( 昇順 ) もしくは 大きなものから小さなもの ( 降順 ) になるよう 並び替えること

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 今日の講義講義で学ぶ内容 switch 文 論理演算子 条件演算子 条件判断文 3 switch 文 switch 文 式が case のラベルと一致する場所から直後の break; まで処理しますどれにも一致致しない場合 def

Microsoft PowerPoint - class04.ppt

プログラミング入門1

スライド 1

gengo1-6

fuga scanf("%lf%*c",&fuga); 改行文字を読み捨てる 10 進数の整数 おまじない取り込んだ値を代入する変数 scanf( %d%*c,&hoge); キーボードから取り込め という命令 1: scanf 1 1: int double scanf %d %lf printf

Microsoft PowerPoint - prog11.ppt

計算機プログラミング

Microsoft PowerPoint - Prog05.ppt

Microsoft PowerPoint - ca ppt [互換モード]

Microsoft Word - VBA基礎(6).docx

untitled

R pdf

Microsoft PowerPoint - CproNt02.ppt [互換モード]

Microsoft PowerPoint - prog04.ppt

5

メソッドのまとめ


データ構造

PowerPoint プレゼンテーション

Microsoft Word - Cプログラミング演習(1)_2012

Microsoft PowerPoint - 11th.ppt [互換モード]

PowerPoint プレゼンテーション

Microsoft PowerPoint - 第3回目.ppt [互換モード]

プログラム言語及び演習Ⅲ

break 文 switch ブロック内の実行中の処理を強制的に終了し ブロックから抜けます switch(i) 強制終了 ソースコード例ソースファイル名 :Sample7_1.java // 入力値の判定 import java.io.*; class Sample7_1 public stati

3,, となって欲しいのだが 実際の出力結果を確認すると両方の配列とも 10, 2, 3,, となってしまっている この結果は代入後の配列 a と b は同じものになっていることを示している つまり 代入演算子 = によるの代入は全要素のコピーではなく 先をコピーする ため 代入後の a と b は

初歩のC言語ターミナル_2014_May.pages

2 ASCII コードと文字型変数 2-1 ASCII コード 文字 コードコードコードコードコードコードコードコード文字文字文字文字文字文字文字 10 進 10 進 10 進 10 進 10 進 10 進 10 進 10 進 0 16 SP P 80 ` 96 p 112

ポインタ変数

プログラミング基礎

Microsoft PowerPoint - prog04.ppt

Taro-プログラミングの基礎Ⅱ(公

Prog1_15th

Microsoft PowerPoint pptx

Microsoft Word - no202.docx

P03.ppt

Transcription:

4-4 while 文 for 文と同様 ある処理を繰り返し実行するためのものだが for 文と違うのは while 文で指定するのは 継続条件のみであるということ for 文で書かれた左のプログラムを while 文で書き換えると右のようになる /* 読込んだ正の整数値までカウントアップ (for 文 ) */ int i, no; for (i = 0; i <= no; i++) printf( %d, i); printf( n ); /* 読込んだ正の整数値までカウントアップ (while 文 ) */ int i=0; int no; while (i <= no) printf( %d, i); printf( n ); 同じ色でマーキングされたところが 対応する処理内容 見て分るとおり 書き方は異なるが プログラム実行に必要な要素は 両方とも同じである つまり 基本的に for 文で書かれたプログラムは while 文で書き換えることができるし 当然その逆も言える 問題 4-5 次の文を while 文で書き換えよ int no, total, i; total = 0; no = 10; for (i = 1; i <= no; i++) total += i; printf( 1 から %d までの和は %d です n, i, no, total);

次のプログラムを while 文を使って作成せよ 問題 4-6 1. 整数を指定された数だけ入力し その合計 平均 最高 最低を出力する 2.2 の n 乗を表示する ただし n は 0 n 30 の整数とし それ以外はエラー表示して終了する 2. の実行結果 ( その 1) 2 の n 乗を表示します n はいくつですか :4 2^0 : 1 2^1 : 2 2^2 : 4 2^3 : 8 2^4 : 16 1. の実行結果整数は何個ですか :5 No.1 : 10 No.2 : 56 No.3 : 82 No.4 : 72 No.5 : 27 合計 :247 平均 :49.40 最大 :82(No.3) 最小 :10(No.1) 2. の実行結果 ( その 2) 2 の n 乗を表示します n はいくつですか :32 その値は受け付けません!! 4-5 do~while 文今までは範囲外の数値が入力されたときは エラー表示をして終了していた しかし実際は 適切な数値が入力されるまで 入力を促すことが多い そんなとき使えるのが do~while 文である 右のプログラムはその例 do で処理を囲み 最後の while で継続条件を判定し もし ( ) 内の条件を満たしていれば 再び 内の処理を繰り返し そうでなければ次の行に移る while 文と違うのは 継続判定が最後にあること つまり do 文の場合は必ず 1 回は 内の処理を行うが while 文の場合は一度も実行されないこともある /* 読込んだ正の整数値は奇数か偶数か */ int no; do if (no <= 0) printf( 正の整数です!! n ); while (no <= 0); if (no % 2) printf( %d は奇数です n, no); else printf( %d は偶数です n, no);

ちなみに for 文や while 文を使っても 同じ処理をさせようと思えばできが do 文を使った方 がスッキリしていると思う /* 読込んだ正の整数値は奇数か偶数か */ int no; no = 0; for ( ; no <= 0; ) if (no <= 0) printf( 正の整数です!! n ); /* 読込んだ正の整数値は奇数か偶数か */ int no; no = 0; while (no <= 0) if (no <= 0) printf( 正の整数です!! n ); if (no % 2) printf( %d は奇数です n, no); else printf( %d は偶数です n, no); if (no % 2) printf( %d は奇数です n, no); else printf( %d は偶数です n, no); 問題 4-7 の 1. を次のように修正しなさい 問題 4-7 入力する整数の数を制限しない 入力される整数は 0~100 とする -1 が入力されたら入力を中止し 合計等の表示を行う もちろん -1 は合計等に含めない 次のプログラムは あらかじめ決められた数を当てるというものである 空欄を埋めて完成せよ 問題 4-8 int no = 89; /* 当てさせる数 */ int x; /* 入力する数 */ 1 printf( 数を当てて下さい : ); scanf( %d, 2 ); if ( 3 ) printf( もっと大きいです n ); else printf( もっと小さいです n ); 4 ( 5 ); printf( 正解です n );

次のプログラムを実行したらどうなるか 選択肢から選びなさい なお main 文の中のみ書いてある 問題 4-9 1) int a=5; while (a) printf( %d, a); a--; 2) int a=5; while (a>0) printf( %d, a--); 選択肢 1012 200000 301234 443210 5543210 654321 71111 811111 9 無限ループになる 10コンパイルエラー 3) int a=5; do printf( %d, --a); while (a>0); 4) int a=5, i=0; do int b = a-i; printf( %d, b); while (b>0); 5) int a=1, b=5; while (a<b--) printf( %d, a); a++;

問題解答 4-5 int no, total, i; total = 0; no = 10; i = 1; while (i <= no) total += i; printf( 1 から %d までの和は %d です n, i, no, total);

4-6 1. int no, max, min, point; /* no: 整数の個数 max: 最大値 min: 最小値 point: 入力する整数 */ int max_num, min_num /* max_num: 最大値の番号 min_num: 最小値の番号 */ double total=0, ave; /* total: 合計 ave: 平均 */ int i; /* i: ループ用 */ printf( 整数は何個ですか : ); i = 1; max_num = min_num = 1; /* 最小 最大の番号をとりあえず 1 とする */ while (i <= no) printf( No.%d:, i); scanf( %d, &point); if (i == 1) /* max, min には初期値が必要なので */ min = point; /* No.1 の値を初期値とした */ max = point; total += point; /* 合計値に入力した値を加算 */ if (point < min) /* point が min より小さかったら */ min_num = i; min = point; if (point > max) /* point が max より大きかったら */ max_num = i; max = point; /* i をひとつ増やす */ ave = total / no; /* 平均の計算 */ /* 結果の表示 */ printf( 合計 :%.0f n, total); printf( 平均 :%.2f n, ave); printf( 最大 :%d(no.%d) n, max, max_num); printf( 最小 :%d(no.%d) n, min, min_num); 分りづらいのは max_num = min_num = 1 という代入の仕方ではないだろうか これを訳せば 最初に min_num に 1 を代入し 次に max_num に min_num を代入する となる こういう書き方をして 複数の変数に同じ数値を代入する方法がある また i=1 のときの point の値を max と min に代入するのは 何も代入されていないと後の値との比較ができないから 代入する値の範囲があらかじめ決まっていれば それらを max と min に代入できるが 今回は範囲を決めていないため その他の箇所については じっくり見てもらえれば理解できると思う

2. 4-7 int n, i, sum=1; printf( 2 の n 乗を表示します n ); printf( n はいくつですか : ); scanf( %d, &n); if (n<0 n > 30) printf( その値は受け付けません!! n ); else i = 0; while (i <= n) printf( 2^%d:%d n, i, sum); sum *= 2;

4-7 int max, min, point; /* max: 最大値 min: 最小値 point: 入力する整数 */ int max_num, min_num; /* max_num: 最大値の番号 min_num: 最小値の番号 */ double total=0, ave; /* total: 合計 ave: 平均 */ int i; /* i: ループ用 */ i = 1; max = 0; min = 100; while ( i ) /* 値の入力 */ do printf( No.%d:, i); scanf( %d, &point); if ((point < 0 point > 100) && point!= -1) printf( 0 から 100 までです!! n ); while ((point < 0 point > 100) && point!= -1); if (point == -1) --i; break; total += point; /* 合計値に入力した値を加算 */ if (point < min) /* point が min より小さかったら */ min_num = i; min = point; if (point > max) /* point が max より大きかったら */ max_num = i; max = point; ave = total / i; /* 平均の計算 */ /* 結果の表示 */ printf( 合計 :%.0f n, total); printf( 平均 :%.2f n, ave); printf( 最大 :%d(no.%d) n, max, max_num); printf( 最小 :%d(no.%d) n, min, min_num); 今回は入力値の範囲が決まっているので それを元に max min を初期化している 水色の部分が 入力の終了条件 ( 入力値が -1 の時 ) に関わるところ i が余計にインクリメント ( 増加 ) されているので break する前に戻している

4-8 1 do: 繰り返し文であることは想像できると思う ループ文の 最後の括弧の次に続きがあるので do が入ることが分る 2 x: 変数は二つのみ no には既に値が入っているので ここでは x を用いる コメント文にもその旨書いてある 3 x < no: もっと大きいです というのは no の方が入力した値より大きいということ 4 while:do の締めくくりは while 5 x!= no:x が no と等しくなるまで 入力を続ける 4-9 1)6:c 言語の場合 条件の評価が 1 以外のとき真 0 のとき偽となる 2)6:printf( %d, a); a--; とほぼ同じ意味となる 3)4: 最初の printf 文を実行する前に a は 1 減って 4 となる a=0 まで表示して 直後の while でループから抜ける 4)5:3) 同様 b=0 を表示した後ループを抜ける 5)7: ちょっと意地悪問題 間違いではなく わざとこういう書き方をした 最後の a++ はループの外 丁寧に書くと int a=1, b=5; while (a < b--) printf( %d, a); a++; a はループ中は 1 のまま b はループに入ったとき 5 B=5,4,3,2 のとき printf を実行するので 1 を 4 回表示する