プログラミング演習2004

第11回 [6月29日、H.16(‘04)]
関数(1)
今日のメニュー
1
2
3
4
5
前回の課題
前回の宿題
いろいろな関数の演習
課題
宿題
PE04-11.ppt
前回の課題
次の頁に示すような、10人の学生の学籍
番号、英語・数学・国語の得点データがあ
る。これらのデータを2次元配列の初期値
として与え、以下の内容を見やすく出力す
るプログラムを作成せよ。
・各学生の番号、各科目の得点、合計点
・全員の各科目及び合計点の平均点
ファイル名は enA-****.c
提出はいつもと同様、リスト印刷とファイル転送
ファイル名:hwA-****.c
前回の宿題 [提出はいつもの通り]
◎今日の課題で、以下の出力例のように、各学生の
3科目の平均点、全員についての平均点を小数点以
下2桁まで出力せよ。(各学生の平均点は1次元配
列を利用せよ。赤い部分が今回の宿題の部分)
学籍番号 英語 数学 国語 合計点
平均点
1023
63
71
68
202
67.33
1026
49
28
51
128
42.67
1038
80
63
85
228
76.00
:
:
:
:
1132
81
89
75
245
81.67
平均点
67.3 62.1 72.1
201.5 67.17
• 締め切り: 7月26日(土) 午後1時(厳守)
int a[11][5] = {
{ 1023, 63, 71, 68,
{ 1026, 49, 28, 51,
{ 1038, 80, 63, 85,
{ 1055, 75, 60, 84,
{ 1076, 69, 79, 92,
{ 1084, 96, 88, 81,
{ 1092, 63, 52, 67,
{ 1104, 53, 68, 72,
{ 1126, 44, 23, 46,
{ 1132, 81, 89, 75,
{
0, 0, 0, 0,
double av[10]={0.0},
int i, j;
0}, ,を忘れない
0},
0},
0},
0},
0},
0}, ;を忘れない
0},
0},
0},
0}
};
kav[6]={0.0};
//各自の合計得点と平均点を計算する
double型
av[i]
for( i=0; i<10; i++) {
a[i][4]=a[i][1]+a[i][2]+a[i][3];
a
av[i]=a[i][4]/3.0;
[0][1][2][3][4]
[0]
[1]
}
[2]
/* 各科目と合計の総和と平均 */
:
for ( j=1; j<=4; j++) { [8]
[9]
for ( i=0; i<=9; i++) [10
全
]
a[10][j] += a[i][j];
番 英 数 国 合て
号 語 学 語 計の
kav[j] = a[10][j]/10.0;
総 総 総 総平
均
和
}
和 和 和
kav
kav[5] = kav[4]/3.0;
[0][1][2][3][4][5]
printf(
double型av[i]
" 番号 英語 数学 国語 合計点 平均点
\n");
a
[0][1][2][3][4]
[0]
for( i=0; i<10; i++) { [1]
for ( j=0; j<=4; j++) [2]
:
printf("%6d",a[i][j]);
[8]
printf("%9.2f\n",av[i]);[9]
[10
}
]
全
番 英 数 国 合て
/*各科目と合計の平均点出力*/
号 語 学 語 計の
平
平
平
平
平
printf("平均点 ");
均
均 均 均 均
for ( j=1; j<=4; j++)
kav
printf("%6.1f", kav[j]);
[0][1][2][3][4][5]
課題・宿題の提出について
・配列の添字のミスが大変多い!
int a[10][4] → a[0][0]~a[9][3]まで
→ a[10][j] a[i][4] を使おうとしている
・配列の初期化をしていない
→ printf( ) でキーボードから入力している
・配列の内容の出力は大体できていた。
・平均点の為の double型の配列について
→ 1次元配列 av[5] をわざわざ2次元配列で
av[5][1] や av[1][5] としている。
→ 要素の数が1なのに、存在しないav[i][1]を
利用しようとしている。 正しくは av[i][0]
課題・宿題の提出について
.平均点を小数点以下まで表示していない
・各科目の平均点を求めるとき、配列kav[6]を使
わずに、a[10][j](jは1~4)に合計を入れて
おき、出力するとき10.0で割っても良い。
for ( j=1; j<=4; j++)
printf("%6.1f", a[10][j]/10.0);
・式の中に定数を書く場合、整数型か浮動小数点型
を明白にする。 nが整数型なら、 n/3は整数型、
n/3.0は浮動小数点型、 aが浮動小数点型なら、
a/3は3を3.0に変換し、 a/3.0 と見なされる。
・学籍番号・氏名の出力忘れが多くなった。
今日の課題
(1)List6-1を参考に演習6ー1(118頁)
(2)List6-2を参考に演習6ー2(118頁)
(3)List6-3を参考に演習6ー3(119頁)
List6-6を参考に演習6ー4(121頁)
(4)List6-7,8を参考に演習6ー5(123
頁)
(5)演習6ー6(125頁)
ファイル名は enB-****.c
提出はいつもと同様、リスト印刷とファイル転送
#include <stdio.h>
int minof( int x, int y) {
演習6-1の関数の中身を記述
}
int min3( int x, int y, int z) {
演習6-2の関数の中身を記述
}
int cube( int x) {
演習6-3の関数の中身を記述
}
int pow4( int x) {
演習6-4の関数の中身を記述
}
void alert( int no) {
演習6-5の関数の中身を記述
}
void hello( void ) {
演習6-6の関数の中身を記述
}
int main(void) {
int na, nb, nc;
/*演習6-1,6-2の場合*/
/*整数 na, nb, nc を入力する*/
printf("小さい方の値は %d です。\n",
minof( na, nb) );
printf("3数中の最小値は %d です。\n",
min3( na, nb, nc) );
・・・・・・
今回の宿題
(1)教科書の114頁~129頁を良く読んで
復習する。
(2)教科書の120頁~145頁を良く読んで
予習する。
(3)今日の課題が未完成の場合、完成して
提出する。 ファイル名:hwB-****.c
• 締め切り: 7月3日(土) 午後1時(厳守)