第7回目 [6月1日、H.16(‘04)] 繰り返し構造(for文)と 増(減)・複合代入演算子 本日のメニュー 1)前回の課題について 2)前回の宿題について 3)for文 と 増減・複合代入演算子 4)課題 PE04-07.ppt 前回の課題 ファイル名は en6-****.c 教科書の各演習を順に処理するプログラムを 作成せよ。 (1)演習3-9、演習3-10(53頁)、 演習3-11、演習3-12(57頁) (2)List4-2、4-3(62,63頁)を理解してか ら演習4-1、演習4-2(65頁)、List4-7 (68頁)を理解してから演習4-6(96頁) 提出はいつもと同様、リスト印刷とファイル転送 ファイル名の **** は学籍番号の二桁目と下3桁 例:学生番号 034987 ならば xxx-3987.c int a, b, c; puts("024222 朝日太郎"); puts("三つの整数を入力してください"); printf("整数A:"); scanf("%d", &a); printf("整数B:"); scanf("%d", &b); printf("整数C:"); scanf("%d", &c); if ( a==b && b==c ) puts("三つの値は等しいです。"); else if ( a==b || b==c || c==a ) puts("二つの値が等しいです。"); else puts("三つの値は異なります。"); 課題:演習3-9について ・3つの値が等しいかどうかをチェックする場合 (いずれの場合もコンパイルエラーにはならない) → if( a == b == c ) とは書けない if ( a==b && b==c ) と書く必要がある → if ( a==b && b==c && c==a ) 冗長 → if ( a = b = c ) とは書けない 式 b=c の値 a,b,cが共に 3 の時 を a に代入 a == b == c の評価 a = b = c の評価 1(true) == c p.177 = は右結合 c の値をb に代入 0(false) == は左結合 式の値にもなる 課題:演習3-10について ◎2数 a, b の差が 11 以上か 10 以下かを判定 ・ a-b が –11 以下 または 11以上 if(( a-b <= -11 ) || ( a-b >= 11 )) ・ a-b が –10 以上 かつ 10以下 if(( a-b >= -10 ) && ( a-b <= 10 )) ・ if ( a > b ) d = a-b; delse = (a>b) ? a-b: b-a; d = b-a; -11 11 if ( d >= 11 ) ・・・ -10 0 10 ・ d = a – b; if ( d < 0 ) d = -d; 課題では、 if ( d >= 11 ) ・・・ 論理ORを使うこと 課題:演習3-11について if ( no % 2 ) puts("その数は奇数です。"); else puts("その数は偶数です。"); no % 2 の値が 1 つまり true 0 なら false switch ( no % 2 ) { case 0 : puts("その数は偶数です。"); break; case 1 : puts("その数は奇数です。"); break; } no % 2 の値が 0 の時 case 0 に移り、 1 の時 case 1 に移る。 課題:演習3-12について if ( month >= 3 && month <= 5 ) puts("春です。"); ・・・・・・ else if ( month == 1 || month ==2 || month == 12 ) puts("冬です。"); else puts("そんな月はありませんよ!!\a"); case の後ろには 必ず空白 switch ( month ) { case 3: case 4: case 5 : puts("春です。"); break; ・・・・・ case 1: case 2: case 12 : puts("冬です。"); break; default: puts("そんな月はありませんよ!!\a");} 課題:演習4-1について do { printf("非負整数を入力:"); scanf("%d", &num); if (num < 0) puts("負値を入力しない"); } while ( num < 0 ); printf("%dを逆から読むと", num); printf("その数を逆から読むと"); do { printf("%d", num % 10); num = num / 10; } while ( num > 0 ); puts("です。"); 課題:演習4-2について do { printf("非負整数を入力:"); scanf("%d", &num); if (num < 0) puts("負値を入力しない"); } while ( num < 0 ); printf("%dは", num); num の値 dig = 0; は作り替え do { られている num = num / 10; dig = dig + 1; } while ( num > 0 ); printf("%d桁です。\n", dig); printf("%dは%d桁です。\n", printf("%d桁です。\n", dig); num, dig); 課題:演習4-6について printf("整数を入力:"); scanf("%d", &no); if ( no > 0 ) { while ( no >= 0 ) { printf("%d", no); no = no – 1; no--; putchar( )は } 文字定数(一文字) putchar('\n'); を出力する関数 } 文字定数はシングルクォーテイション で文字を囲む <=> 文字列 "・・・" 課題:その他 ・ case文の書き方 → case の後ろにスペース(空白)が無い コンパイルエラーにはなない、しかし、実行結果が おかしくなる。case の後ろには空白を入れよう! ・題意に沿わないプログラム → 論理OR演算子を利用しない(演習3-11) → 論理式の間違い(演習3-11) → 以上、以下、未満などの使い方 「10以上です」と「10以下です」:10の時? → 正の値が入力されても改行されない(演習4-6) 前回の宿題 ファイル名:hw6-****.{c, exe} 正の整数を入力していき、 data ? 30 0(ゼロ) 又は負の整数が data ? 54 入力されるまでに入力さ data ? 16 data ? –1 れた正の整数について、 最大値は 54 です。 次の値を順に出力せよ 最小値は 16 です。 1) 最大値 2) 最小値 個数は 3 個です。 平均値は 33.33 です。 3) 個数 4) 平均値 • 締め切り: 5月29日(土) 午後1時 • リストの提出は、オープン利用室のレポート入れ • aucopy でのファイル転送フォルダーは、 [森下伊三男]-[プログラミング演習] int main(void) { int a, m, max, min, cnt cnt;= 0 ; double ave, sum; sum = 0.0; max,minに cnt = 0; sum = 0.0; 初期値を与える printf("data ?"); scanf("%d",&a); if ( a > 0 ) { max = a; min = a; } while (a > 0) { if ( a < min ) min = a; else if ( a > max ) max = a; sum = sum + a; cnt = cnt + 1; printf("data ?"); scanf("%d",&a); } if (cnt != 0) { ave = sum/cnt; printf("最大値は %d です。\n",max); printf("最小値は %d です。\n",min); printf("個数は %d 個です。\n",cnt); printf("平均値は %5.2f です。\n", ave); } else { puts("入力データ数はゼロです。"); puts("最大値,最小値,平均はありません"); } return(0); } 宿題について ・一番先に、0又は負の値が入力された場合に対応 していない。 → 実行時エラーとなるものが多い (ゼロでの割り算) ・最後に入力する0又は負の値も入力個数や合計、 最大値、最小値の対象として計算に加えている。 ・入力した値の符号判断を複数の場所で行っている → 論理に無駄が有る ・平均を求める式の場所 → 繰り返しの外でよい ・max, min への初期値の与え方、与え忘れ → 最小値がいつもゼロ、システムに依存する ・宿題提出者数が少ない 今回の課題 教科書の各演習を順に処理するプログラ ムを作成せよ。 ・演習4-3(65頁)、 ・演習4-9、演習4-10(71頁)、 ・演習4-13、演習4-14(77頁) 提出はいつもと同様、リスト印刷とファイル転送 ファイル名は en7-****.c ファイル名の **** は学籍番号の二桁目と下3桁 例:学生番号 034987 ならば xxx-3987.c 今回の宿題 ファイル名は hw7-****.c ◎ n を入力し、n以下のnを入力? 30 30 以下の 次の値を順に出力せよ。 偶数の和は 240 です。 1)偶数の和 3の倍数の和は 165 です。 約数は、 2) 3の倍数の和 1 2 3 5 6 10 15 30 3) 全ての約数の値 約数の個数は 8 個です。 4) 約数の個数と合計約数の和は 72 です。 • 締め切り: 6月5日(土) 午後1時 • リストの提出は、オープン利用室のレポート入れ • aucopy でのファイル転送フォルダーは、 [森下伊三男]-[プログラミング演習]
© Copyright 2024 ExpyDoc