納得C言語!
演習問題V 第4問の解答
4 10人分のテスト点数(平均点表示付)
解答プログラム
#include <stdio.h>
// 関数のプロトタイプ宣言
void avg(int a[10][2]);
int main()
{
//int型配列の宣言
int a[10][2];
int b = 0 ,c = 0, d = 0 ;
printf("点数を入力してください\n");
//点数入力
for(b=0;b<10;b++){
printf("%d人目:",b+1);
scanf("%d",&a[b][0]);
//0点未満、101点以上の入力で再度入力を求める
if(a[b][0]<0 || a[b][0]>100){
printf("入力エラー\nもう一度入力してください\n");
b--;
continue;
}
}
//a[b][1]をで初期化
//a[0][1]〜a[9][1]までとなる
for(b=0;b<10;b++){
a[b][1]=1;
}
//順位決定のfor2重ループ
/*
a[b][0]とa[d][0]を比較し後者が小さければ後者の
a[d][1]に1を足す
すべてと比較をするので、小さいほうは常に足され
順位をつけることができる
*/
for(b=0;b<10;b++){
for(d=0;d<10;d++){
if(a[b][0]>a[d][0]){
a[d][1]++;
}
}
}
//点数と順位の表示
for(b=0;b<10;b++){
printf("%d人目->点数:%3d順位:%3d\n",b+1,a[b][0],a[b][1]);
}
avg(a);
return 0;
}
//平均を求める関数
void avg(int a[10][2])
{
int sum = 0,avg = 0, i;
//a[0][0]〜a[9][0]までsumに足していく
for(i=0;i<10;i++){
sum = sum + a[i][0];
}
//平均点を算出
avg = sum / 10;
printf("平均点は%d\n",avg);
//追加で平均点以下を表示する
for(i=0;i<10;i++){
if(a[i][0]<avg){
printf("平均点以下は%d番で\t%d点です\n",i+1,a[i][0]);
}
}
return;
}
解説
数値の入力と順位の決定方法は(3)と同じですね。
平均を求めて表示する自作関数を作ります。
このとき、引数で2次元配列を渡します。
平均値は第7回の例題5、6でやっていますね。
また、配列をforで回してあげて平均と比較し、点数が平均点以下なら表示するようにすれば、追加のプログラムの出来上がり!
ヒントへ | ページのトップへ | [第13回]ポインタへ |