プログラミング演習2004

第13回目 [7月13日、H.16(‘04)]
総合演習
本日のメニュー
1)前回の課題について
2)総合演習課題
3)過去の試験問題
4)試験について
最終回
PE04-13.ppt
前回の課題
(1)List6-12、List6-13等参考にして、演習6-7、演
習6-8、演習6-9(133頁)を完成せよ。
(1) → ファイル名:enC-****.c で提出
(2)List6-20 を参考に、演習6-12 を完成せよ。
(2) → 授業の最後に答え合わせをする
(3)以下のプログラムを実行させ、関連する説明を
復習せよ。(134-145頁)
(a)List6-14(134頁)[逐次探索]
(b)List6-15,16(136頁-)[番兵法]
(c)List6-17(138頁)[多次元配列]
(d)List6-18(140頁)[有効範囲]
(e)List6-19(143頁)[記憶域期間]
int min_of(const int vc[], int no) /*演習6-7*/
{ int i, min = vc[0];
for ( i=1; i<no; i++)
if ( vc[i]<min ) min = vc[i];
return ( min );
}
void rev_intary( int vc[], int no) /*演習6-8*/
{ int i, temp;
vc[4-i],
for ( i = 0; i< no/2; i++) {
for(i=0;i<4・・・
temp = vc[no-i-1];
など,具体的な値
vc[no-i-1] = vc[i];
vc[i]
= temp;
} (マジックナンバー)
return;
が入っている
}
void intary_rcpy(int v1[],const int v2[],int no)
{ int i;
/*演習6-9*/
for (i=0;i<no;i++) v1[i]=v2[no-i-1];
return;
}
int main(void)
{ int i, v[10], v1[10], N=10;
puts("整数を10個入力せよ");
for ( i=0; i<N; i++) {
printf("v[%d]=>",i); scanf("%d", &v[i]);
}
printf("配列 v の要素中の最小値は %d です。\n",
min_of(v,N) );
puts("配列 v を逆順にすると");
rev_intary(v,N);
for ( i=0; i<N; i++)
printf("v[%d]=%d\n",i,v[i]);
puts("更に v を逆にして v1 に代入すると");
intary_rcpy(v1, v, N);
for ( i=0; i<N; i++)
printf("v[%d]=%d: v1[%d]=%d\n",
i, v[i], i, v1[i]);
return(0);
}
課題の提出について
・配列の入れ替えなどを関数で実行せずに、main
の中で実行している。 → 関数を作って利用する。
・mainの中で、関数の呼び出しが無い。
・関数の中で入出力の処理をしている。
・関数の中に具体的な値(マジックナンバー)がは
いっている。 → 引数で情報の受け渡しをする
・転送ファイルが無い,番号・氏名が無い,セミコロ
ンが無い,constの綴りミス
・void型関数をprintfの中に記述している。
→ void型関数の呼び出し方を復習すること。
・ソースリストに余分な文字が入っている。
前回の宿題
ファイル名:hwC-****.c
第10回の課題・宿題の続きとして、各科目の最高
点・最低点、合計の最高点・最低点の出力を追加せ
よ。(最高点、最低点を求める関数を作る)
学籍番号
1023
1026
:
1132
平均点
最高点
最低点
英語 数学 国語 合計点
平均点
63
71
68
202
67.33
49
28
51
128
42.67
:
:
:
81
89
75
245
81.67
67.3 62.1 72.1
201.5 67.17
96
89
92
265
88.33
44
23
46
113
37.67
提出はいつもと同様、リスト印刷とファイル転送
• 締め切り: 7月10日(土) 午後1時(厳守)
#include <stdio.h>
int maxk(int x[][5], int no, int k) {
int i;
int max = x[0][k]; const int x[][5]
for ( i=1; i<no-1; i++)
if ( x[i][k] > max ) max = x[i][k];
return ( max );
}
int mink(int x[][5], int no, int k) {
int i;
int min = x[0][k];
for ( i=1; i<no-1; i++)
if ( x[i][k] < min ) min = x[i][k];
return ( min );
}
int main(void) { ・・・・・・
int main(void) {
int a[11][5]={{ 1023, 63, 71, 68, 0},
{ 1026, 49, 28, 51, 0},
・・・・
{ 1132, 81, 89, 75, 0},
{
0, 0, 0, 0, 0} };
・・・・
/*最高点と最低点の出力*/
printf("最高点");
for ( j=1; j<=4; j++)
printf("%6d", maxk( a, 11, j) );
printf("%9.2f\n", maxk( a, 11, 4)/3.0);
printf("最低点");
for ( j=1; j<=4; j++)
printf("%6d", mink( a, 11, j) );
printf("%9.2f\n", mink( a, 11, 4)/3.0);
int maxk(int x[][5], int no, int k)
{
int i;
int max = x[0][k];
for ( i=1; i<no-1; i++)
if ( x[i][k]>max ) max=x[i][k];
return ( max );
}
/*最高点と最低点の出力*/
printf("最高点");
for ( j=1; j<=4; j++)
printf("%6d", maxk( a, 11, j) );
printf("%9.2f\n",maxk(a,11,4)/3.0);
宿題の提出について
・関数が作られていない。
・配列の要素数を引数として与えていない。
→ 汎用性が無くなる。
・大域変数を利用している。
→ 汎用性が無くなる。
・関数の中に出力の部分を入れている。
→ 汎用性が無くなる。
・要素数が1の場合は1次元配列でよい。
→ int a[1][5] ならば a[5] でよい。
総合演習課題(1)
【1】(1)ある商品の定価と消費税率を入力
し、税込みの値段を出力するプログラムを
作成せよ。ただし、消費税率は%の単位で
入力し、一円未満の金額は切り捨てにして、
円の単位で出力するものとする。
定価(円)
=> 1590
定価(円)
=> 2315
消費税率(%)=> 4
消費税率(%)=> 7
税込価格は 1653 円です。 税込価格は 2477 円です。
総合演習課題(2)
【1】(2)ある商品の定価と割引率を入力し、
実際の売値を出力するプログラムを作成せ
よ。ただし、割引率は%の単位で入力し、
一円未満の金額は切り捨てにして、円の単
位で出力するものとする。
出力は、【1】(1)に続いて行え。
定価(円) => 1890
割引率(%)=> 7
売値は 1757 円です。
定価(円) => 3563
割引率(%)=> 15
売値は 3028 円です。
総合演習課題(3)
【2】次の(1),(2)の順にプログラムを完成させよ。
出力は【1】(1)(2)に続いて行え。
(1)10個以上のデータを
配列に入力し、1行に6
個づつの形式で複数行
にわたって出力せよ。た
だし、データは2桁の正
または負の整数で、個
数は100個以下、入力
の最後には -999を入
力するものとする。
データを入力
20 15 -12 -11 9 5 8 –37
-3 5 25 –9 –89 0 7 -999
(1)の出力
20 15 -12 –11
9
5
8 -37 -3
5 25 -9
-89
0
7
(2)の出力
・・・・・
総合演習課題(4)
(2) (1)で出力し
た各行について、
それらの平均値
を小数点以下2
桁まで求め(1)
の出力に続いて
例のように出力
せよ。
(1)の出力
20 15 -12 –11
9
5
8 -37 -3
5 25 -9
-89
0
7
(2)の出力
1 行目の平均値= 4.33
2 行目の平均値= -1.83
3 行目の平均値= -27.33
・・・・・
(以下、入力個数に応じて
出力していく)
今回の宿題(最後の宿題)
◎今日の課題の完成
(提出不要)
◎総復習と試験勉強
以下の頁にある
過去問の勉強
試験について
範囲:第1章から第6章(pp.1-145)
追加で pp.176-177,200-201
及び pptファイルで扱った内容
[基本的に『プログラミング入門』と同じ]
日時:7月20日(火曜日)の4時限目
14:30 – 15:30 日時場所は掲示で
場所:パソコン教室1
再確認すること
条件:これまでのpptファイル、森下印の
ある提出プログラムリスト(コピー不可)
平成15年度の出題形式
(注意)
以下の注意が守られない場合、解答は採点されない。
*解答プログラムは【1】が t1-****.c、【2】が
t2-****.c というファイル名とし、コンパイル後
の実行形式ファイル t1-****.exe、t2-****.exe
と共に試験終了直後に aucoy によりファイル
転送する。ただし、**** は、授業中に指定した
番号とする。また、実行形式ファイルが作成で
きなかった場合は、.c ファイルのみを転送する。
ファイル転送が無い場合には未提出となる。
試験時に貸与したFDは保存したファイルを消
さずに返却すること。
平成15年度の出題形式
(注意)[つづき]
*プログラムの中に学籍番号・氏名を画面に出
力する為の文を記述すること。
*この用紙は試験終了後に学籍番号・氏名・貸
与FD番号を記入して提出すること。
*試験には、パワーポイントのファイルを印刷し
たもの(自筆の加筆可)、課題・宿題の返却リ
スト(森下の日付印のあるもの)は持ち込んで
も良い。その他(教科書など)は不可
【1】次の(1)~(3)を順に実行していくプログラムを
作成せよ。
(1)キーボードから4桁の整数を入力し、各桁の
値の合計を表示し、その後で、その値が3の倍数
ならば「3 の倍数です」、そうでないならば「3 の倍
数ではない」と[例]に倣って表示せよ。
(2)次に、キーボードから二つの整数を入力し、小
さい方の値から大きい方の値までに存在する全て
の偶数を1行に5個づつ、[例]に倣って、縦に数
値がきれいに並ぶように出力せよ。
(3)最後に、要素の数が5個の配列を初期値0で
定義し、(2)で出力した値について、縦に並んだ
値の合計を[例]に倣って表示せよ。
[例]
4桁の整数:3584
合計は 20 で 3 の倍数ではない
二つの整数を入力せよ
整数A:19
整数B:4
4桁の整数:6084
4
6
8 10 12
合計は 18 で 3 の倍数です
14 16 18
二つの整数を入力せよ
合計は
整数A:7
18 22 26 10 12
整数B:32
8 10 12 14 16
18 20 22 24 26
28 30 32
合計は
54 60 66 38 42
【2】二つの整数を引数とし、第1引数を最小幅、
第2引数を高さとする例に示すような台形を*
を用いて表示する関数daikeiを作成し、それを
呼び出すmain関数も含めてプログラム全体を
作成せよ。ただし、main関数では、最小幅と高
さを入力し、関数daikeiを呼び出した後、再び
最小幅と高さを入力できるようにし、最小幅に
0が入力されたらプログラムを終了するように
せよ。
[例]
最小幅:5
高 さ:6
*****
*******
*********
***********
*************
***************
最小幅:0
最小幅:8
高 さ:2
********
**********
最小幅:1
高 さ:4
*
***
*****
*******
最小幅:0
(注意)
平成14年度の出題形式
以下の注意が守られない場合、解答は採点されない。
*解答プログラムは【1】が t1-****.c、【2】が t2****.c というファイル名とし、コンパイル後の実
行形式ファイル t1-****.exe、t2-****.exe と共
に試験終了直後に aucoy によりファイル転送す
る。ただし、**** は、授業中に指定した番号とす
る。また、実行形式ファイルが作成できなかった
場合は、.c ファイルのみの転送をする。ファイル
転送が無い場合には未提出となる。また、試験
時に貸与したFDに保存したファイルは消さずに
返却すること。
平成14年度の出題形式
(注意)[続き]
*プログラムの最上行に学籍番号・氏名を記した
注釈行をいれること。
*プログラムの中に学籍番号・氏名を画面に出力
する為の文を記述すること。
*この用紙は試験終了後に学籍番号・氏名・貸与
FD番号を記入して提出すること。
*試験には、パワーポイントのファイルを印刷した
もの(自筆の加筆可)、課題・宿題の返却リスト
(森下の日付印のあるもの)は持ち込んでも良
い。その他(教科書など)は不可
【1】次の(1)から(3)を順に実行していくプログラムを作成せ
よ。
(1)キーボードから3つの整数を変数 a, b, c に入力し、
a+b-c の値を整数で、その値を3で割った値を小数点
以下2桁まで表示せよ。
(2)得点を正の整数値として読込、その値に応じた評
価を表示せよ。なお、評価は70点未満が『不可』、70
点~79点は『可』、80点~89点は『良』、90点以上は
『優』とする。
(3)整数値を読み込み、その数が 6 で割り切れるかど
うかを表示せよ。ただし、表示後に、もう一度続けるか
どうかの確認を促し、それに応じて何度でも繰り返せる
ようにすること。例えば、0以外が入力されたら繰り返し
て入力できるようにし、0 が入力されたら終了するよう
にする。
【2】次の5つの整数値:10,20,30,40,50で
初期化した配列を用意し、キーボードから入力した
整数値を各要素に加え、その結果の値を順に表示
せよ。続いて、配列の各要素の合計と平均値を表
示し、最後に、各要素を平均値で割った値につい
て表示せよ。例えば 8 を入力した場合の表示例を
以下に示す。この例にならって表示せよ。平均値と
最後の行の出力は小数点以下2桁とせよ。
8 を加えた結果は 18 28 38 48 58 です。
合計は 190、平均値は 38.00 です。
各要素を平均値で割ると 0.47, 0.74 1.00 1.26
1.53 です。
(注意)
平成13年度の出題形式
以下の注意が守られない場合、解答は採点されな
い。
*解答プログラムは【1】が t1-****.c、【2】が t2****.c というファイル名とし、コンパイル後の実行形
式ファイル t1-****.exe、t2-****.exe と共に試験終了
直後に aucoy によりファイル転送する。ただし、****
は、授業中に指定した番号とする。また、実行形式
ファイルが作成できなかった場合は、 .c ファイル
のみの転送をする。ファイル転送が無い場合には
未提出となる。また、試験時に貸与したFDに保存
したファイルは消さずに返却すること。
(注意)[続き]
平成13年度の出題形式
*プログラムの最上行に学籍番号・氏名を記した
注釈行をいれること。
*プログラムの中に学籍番号・氏名を画面出力す
る printf文 を記述すること。
*この用紙は試験終了後に学籍番号・氏名・貸与
FD番号を記入して提出すること。
*試験には、パワーポイントのファイルを印刷した
もの(自筆の加筆可)、課題・宿題の返却リスト
(森下の日付印のあるもの)は持ち込んでも良
い。その他(教科書、携帯電話等)は不可
【1】次の(1)から(3)を順に実行していくプログラムを
作成せよ。
(1)キーボードから2つの浮動小数点数を読み込み、
その和、差、積、商を小数点以下2桁で表示する。
(小数点以下3桁目の切り捨て、四捨五入等は問わない)
(2)正の整数値を読み込み、その値を0までカウン
トダウンする様子を表示する。例えば、5が入力され
た場合、5 4 3 2 1 0 と出力する。
(3)整数を読み込み、その値の個数だけ、1234567
890の順に数字を繰り返して表示する。例えば、25
が入力された場合、 1234567890123456789012345
と出力する。ただし、負の整数又は0が入力された
場合は、-999 と出力せよ。
【2】キーボードから正の整数を順に入力していき、
その中の奇数のみを配列に格納し、その個数が6
個になったら入力を受け付けず、その6個の整数
の和と平均を求めよ。画面には、配列に格納され
た6個の数値を出力した後に、和と平均(小数点
以下3桁まで)を出力せよ。
例えば、
3 4 9 2 5 6 1 2 3 7
と入力すると、最後の7を入力した時点で、例えば、
以下のような形式で出力をする。
格納データは 3 9 5 1 3 7 です。
和は 28、 平均は 4.667 です。
平成12年度の出題形式
(注意)
以下の注意が守られない場合、解答は採点
されない。
*解答プログラムは【1】が t1-****.c、【2】が
t2-****.c というファイル名とし、コンパイル
後の実行形式ファイル t2-****.exe、t2****.exe と共に試験終了直後に aucoy に
よりファイル転送する。ただし、**** は、授
業中に指定した番号とする。また、実行形
式ファイルが作成できなかった場合は、cpp
ファイルのみの転送をする。ファイル転送
が無い場合には未提出となる。
平成12年度の出題形式
*プログラムの印刷提出はしなくて良い。
*プログラムの最上行に学籍番号・氏名を
記した注釈行をいれること。
*プログラムの中に学籍番号・氏名を画面
出力する printf を記述すること。
*この用紙は試験終了後に学籍番号・氏名
を記入して提出すること。
*試験には教科書などを持ち込んでも良い
が、携帯電話や話など、周囲の人との情
報交換は不可とする。
【1】円とドルの換算プログラムを作成せよ。
初めに円を入力し、それをドルに変換せよ。
次に、ドルを入力して円に変換せよ。ただし、
1ドルは 107.38 円とせよ。また、表示する
値はすべて小数点以下第3位を切り捨てて、
小数点以下二桁までの表示とせよ。
{例} 1580.00 円は、14.71 ドルです。
18.56 ドルは、1992.97 円です。
【2】通常郵便物の速達料金は、250gまで
が270円、250gを越える1㎏までが370円、
1㎏を越える4㎏までが630円となっている。
キーボードから通常郵便物の重さをキログラ
ムの単位で入力し、その速達料金を出力す
るプログラムを作成せよ。また、4㎏を越える
場合には入力間違いのメッセージを出力す
るようにせよ。メッセージの内容は各自で考
えること。例えば、郵便物の重さが0.75㎏なら
ば、速達料金370円と出力する。また、郵便
物の重さが5.0㎏ならば、例えば、「重量オー
バー」と出力する。
【3】次の(1),(2)の順にプログラムを完成させよ。
(1)キーボードから二桁以下の正の整数を配列に
入力し、その中から偶数のみを1行に4個づつの形
式で複数行にわたって出力せよ。ただし、入力する
データの個数は99個以下とし、入力するデータの
最後には -999 を入力するものとする(ただし、この
-999 はデータには含めない)。
(2)(1)で出力した数値の個数、それらの合計及び
平均値を出力せよ。ただし、平均値は小数点以下
3桁目を切り捨てて、小数点以下2桁まで出力せよ。
さらに、各値と平均値との差を二乗した値の合計及
び平均値も同様に出力せよ。なお、出力は各自が
最適と思う形式で行え。
第13回目終了
次回は試験となります。
短い間でしたが、
よくがんばりました。