プログラミング演習2003

第7回目 [6月5日、H.15(‘03)]
繰り返し構造(for文)と
増(減)・複合代入演算子
本日のメニュー
1)前回の課題について
2)前回の宿題について
3)for文 と 増減・複合代入演算子
4)課題
PE03-07.ppt
前回の課題
教科書の各演習を順に処理するプログラム
を作成せよ。
(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(6
8頁)を理解して、演習4-6(96頁)
ファイル名は en6-****.c
ファイル名の **** は学籍番号の二桁目と下3桁
例:学生番号 024987 ならば xxx-2987.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 ) 冗長
式 b=c の値
→ if ( a = 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;
d = (a>b) ? a-b: b-a;
else
d = b-a;
if ( d >= 11 ) ・・・
-11
11
→ d = a – b;
-10 0 10
if ( d < 0 ) d = -d;
if ( d >= 11 ) ・・・
前回の宿題
ファイル名:hw6-****.{c, exe}
正の整数を入力していき、 data ? 30
0(ゼロ) 又は負の整数が data ? 54
入力されるまでに入力さ data ? 16
data ? –1
れた正の整数について、
最大値は 54 です。
次の値を順に出力せよ 最小値は 16 です。
1) 最大値 2) 最小値 個数は 3 個です。
平均値は 33.33 です。
3) 個数
4) 平均値
• 締め切り: 6月3日(火) 午後5時
• リストの提出は、オープン利用室のレポート入れ
• 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
printf("入力データ数はゼロです。\n");
return(0);
}
宿題について
・一番先に、0又は負の値が入力された場合に対応
していない。 → 実行時エラーとなるものが多い
(ゼロでの割り算)
・最後に入力する0又は負の値も入力個数や合計
の計算に加えている。
・入力した値の符号判断を複数の場所で行っている
→ 論理に無駄が有る
・平均を求める式の場所 → 繰り返しの外でよい
・max, min への初期値の与え方、与え忘れ
→ 最小値がいつもゼロ、システムに依存する
・宿題提出者数が少ない
今回の課題
教科書の各演習を順に処理するプログラ
ムを作成せよ。
・演習4-3(65頁)、
・演習4-9、演習4-10(71頁)、
・演習4-13、演習4-14(77頁)
提出はいつもと同様、リスト印刷とファイル転送
ファイル名は en7-****.c
ファイル名の **** は学籍番号の二桁目と下3桁
例:学生番号 024987 ならば xxx-2987.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月10日(火) 午後5時
• リストの提出は、オープン利用室のレポート入れ
• aucopy でのファイル転送フォルダーは、
[森下伊三男]-[プログラミング演習]
第7回終了
次回(第8回)の
プログラミング入門、
プログラミング演習は
6月12日です。