プログラミング演習2004

第8回目 [6月8日、H.16(‘04)]
多重ループ
繰り返し構造:補足事項
本日のメニュー
1)前回の課題について
2)前回の宿題について
3)多重ループ、補足事項
4)課題
PE04-08.ppt
前回の課題
教科書の各演習を順に処理するプログラ
ムを作成せよ。
・演習4-3(65頁)、
・演習4-9、演習4-10(71頁)、
・演習4-13、演習4-14(77頁)
提出はいつもと同様、リスト印刷とファイル転送
ファイル名は en7-****.c
ファイル名の **** は学籍番号の二桁目と下3桁
例:学生番号 034987 ならば xxx-3987.c
/* 演習4-3 */
printf("二つの整数を入力せよ:");
scanf("%d %d", &a, &b);
if ( a > b )
{ start = b; last = a; }
else
{ start = a; last = b; }
sum = 0;
sum の初期値を忘れない!
for ( m=start; m<=last; m++)
sum += m;
printf("%d以上%d以下の全整数の和は"
" %dです。\n",start,last,sum);
/* 演習4-9(10) */
初期値を忘れない事
printf("整数を入力せよ:");
scanf("%d", &n);
スペースがあると
i = 2;
出力が見やすくなる
while ( i <= n ) {
演習4-10
printf("%d ", i);
の場合は、
i += 2;
}
i *= 2;
printf("\n");
i = i*2;
/* 演習4-13 */
for ( i = 1; i <= n; i++ )
1の位のみ
printf("%d", i % 10);
一桁だけ表示
putchar('\n');
/*演習4-9(10) forの場合 */
for ( i=2; i<=n; i+=2 )
printf("%d ",i);
for ( i=2; i<=n; i*=2 )
printf("%d ",i);
/*演習4-10(9) doの場合 */
i = 2;
初期値を忘れない!
if ( i <= n )
演習4-9
do {
の場合は、
printf("%d ",i); i += 2;
i *= 2;
i = i+2;
} while ( i <= n );
/* 演習4-14 */
printf("何cmから:");scanf("%d",&lw);
printf("何cmまで:");scanf("%d",&up);
printf("何cmごと:");scanf("%d",&st);
for ( h=lw; h<=up; h+=st) {
wt = ( h – 100.0 ) * 0.9;
printf("%dcm %.2fkg\n", h, wt);
}
h = lw;
while ( h <= up ) {
wt = ( h – 100.0 ) * 0.9;
printf("%dcm %.2fkg\n", h, wt);
h += st;
}
課題の提出について
◎for(i=2; i<a; i+=2) printf(・・・
for(i=2; i<a; i*=2) printf(・・・
で、a に 16 を入力すると 2・・・ と出力され、最後に
16 が出力されない。→i<=a
◎変数の値を常にトレースしてみよう。
sum = 0;
while(min<=max) {
sum = sum + min; min=min+1; }
printf("%d以上%d以下の・・",min,max・・);
→ min の値が変化していくことに注意
◎出力のされ方に注意しよう。適所に改行を入れよう。
・出力された数値がすべてくっついてしまう。
printf("%d",i); → printf("%d ",i);
前回の宿題 ファイル名は 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 でのファイル転送フォルダーは、
[森下伊三男]-[プログラミング演習]
{int n, m, sum, cnt;
初期値の代入
偶数の値をm
puts("123456 を忘れない!
朝日太郎");
に再設定
printf("整数 n を入れよ=>");
m+2 ではダメ
scanf("%d",&n);
m+=2 は良い
printf("%d 以下の\n",n);
sum += m;
sum = 0;
for ( m=2; m<=n; m=m+2) sum=sum+m;
printf("偶数の和は %d です。\n",sum);
sum = 0;
初期値の代入
for ( m=1; m<=n; m++) を忘れない!
if ( m % 3 == 0 ) sum=sum+m;
printf("3の倍数の和は %d です。\n",
sum);
printf("約数は、\n");
初期値の設定
cnt = 0; sum = 0;
を忘れない!
for ( m=1; m<=n; m++)
約数をその都度
if ( n % m == 0 ) {
出力する
printf(" %d, ",m);
cnt = cnt + 1;
約数の数を数える
sum = sum + m;
約数の合計を計算
}
printf("\n約数の個数は %d です。\n",
cnt);
printf("約数の和は %d です。\n",
sum);
}
宿題の提出について
◎if( i%n ) と if( i%n==0 ) の違い
→ n が i の約数の時
i%n はゼロ(False), i%n==0 は1(True)
◎変数名の付け方:O(オー)と0(ゼロ)は間違えや
すいので避ける。内容が分かりやすい変数名を。
◎偶数、3の倍数の和
・for(i=3; i<=n; i+=3) sum3 += i;
・for(i=1; i<=n; i++)
{ if ( i%2 == 0 ) sum2 += i;
if ( i%3 == 0 ) sum3 += i; }
◎リストは必ずA4用紙で提出。感想質問等記入可
今回の課題
ファイル名は en8-****.c
教科書の List 4-17、4-18、4-19を良
く復習してから、次の各演習を順に処理
するプログラムを字下げに注意して作れ。
スタイルも評価対象とする。
・演習4-16、演習4-17(80頁)、
・演習4-18(81頁)
提出はいつもと同様、リスト印刷とファイル転送
ファイル名の **** は学籍番号の二桁目と下3桁
例:学生番号 034987 ならば xxx-3987.c
今回の宿題
ファイル名は hw8-****.c
条件を満足する整数は、
6 28 ???? ????
◎前回の宿題の発展問題
整数 n を順に変えて、約数の和が n のちょ
うど2倍となるような整数を4つ見つけ出せ。
6の約数は 1 2 3 6 であるから、
1+2+3+6 = 12 → 2x6
28の約数は 1 2 4 7 14 28 であり、
1+2+4+7+14+28 = 56 → 2x28
• 締め切り: 6月12日(土) 午後1時
• リストの提出は、オープン利用室のレポート入れ
• aucopy でのファイル転送フォルダーは、
[森下伊三男]-[プログラミング演習]