第15講 多次元配列を送ることによって年間成績一覧表を作成する
第6話 年間成績一覧表の完成!
実行画面
を実現するプログラム例
#include<stdio.h>
#include<stdlib.h>
void f(char n,int p[3][42][8]);
void g(int p[3][42][8]);
void h(int p[3][42][8]);
int main(){
int n,p[3][42][8];
for(n=0;n<3;n++)f(n,p);
g(p);
h(p);
printf("プロジェクト終了\n");
}
void f(char n,int p[3][42][8]){
int i,j;
for(i=0;i<5;i++){
for(j=0;j<5;j++){
p[n][i][j]=rand()%100;
}
}
}
void g(int p[3][42][8]){
int i,j,k,w;
for(i=0;i<3;i++){
for(j=0;j<5;j++){
w=0;
for(k=0;k<5;k++){
w+=p[i][j][k];
}
p[i][j][5]=w;
}
}
for(i=0;i<3;i++){
for(j=0;j<6;j++){
w=0;
for(k=0;k<5;k++){
w+=p[i][k][j];
}
p[i][5][j]=w;
}
}
}
void h(int p[3][42][8]){
int i,j,k,w;
for(i=0;i<3;i++){
printf("%d学期\n",i+1);
printf("番号 国語 社会 数学 理科 英語 合計 平均\n");
for(j=0;j<5;j++){
if(j+1<10)printf(" 0%d ",j+1);
if(j+1>=10)printf(" %d ",j+1);
for(k=0;k<6;k++){
if(p[i][j][k]<10)printf("0%d ",p[i][j][k]);
if(p[i][j][k]>=10)printf("%d ",p[i][j][k]);
}
printf("%.1f ",(float)p[i][j][5]/5);
printf("\n");
}
printf("合計 ");
for(k=0;k<6;k++){
if(p[i][5][k]<10)printf("0%d ",p[i][5][k]);
if(p[i][5][k]>=10)printf("%d ",p[i][5][k]);
}
printf("%.1f \n",(float)p[i][5][5]/5);
printf("平均 ");
for(k=0;k<6;k++){
printf("%.1f ",(float)p[i][5][k]/5);
}
printf(" %.1f ",(float)p[i][5][5]/25);
printf("\n");
printf("\n");
printf("\n");
}
printf("年間成績\n");
printf("番号 国語 社会 数学 理科 英語 合計 平均\n");
for(i=0;i<5;i++){
if(i+1<10)printf(" 0%d ",i+1);
if(i+1>=10)printf(" %d ",i+1);
for(j=0;j<6;j++){
w=0;
for(k=0;k<3;k++){
w+=p[k][i][j];
}
printf("%.1f ",(float)w/3);
}
printf(" %.1f ",(float)w/15);
printf("\n");
}
printf("合計");
for(j=0;j<6;j++){
w=0;
for(k=0;k<3;k++){
w+=p[k][5][j];
}
printf("%.1f ",(float)w/3);
}
printf(" %.1f ",(float)w/15);
printf("\n");
printf("平均 ");
for(j=0;j<6;j++){
w=0;
for(k=0;k<3;k++){
w+=p[k][5][j];
}
printf("%.1f ",(float)w/15);
}
printf(" %.1f ",(float)w/75);
printf("\n");
}
完成成績一覧表
本当はこの後、
各生徒の最高点・最低点・5段階評価、
各教科の最高点・最低点
等も入れていく予定でしたが、
すでに頭が大混乱しています。
全体を見通してから、
コーティングを始めれば良かったのですが、
見通しのないまま勘で進めてしまったため、
これ以上動きをとるのは、
難しくなりました。
最高点など表示させるには、
int型にしたp[3][42][8]をfloat型に変更したり、
合計点算出の段階で、
配列のp[3][42][8]に値を入れたり、
してやり直さなければなりません。
「あなたは大変優秀です。」
をもちろんfloat型の配列p[3][42][8]に収納させることはできませんが、
評価に対応する数字を入力しておいて、
if文を使えば、
その課題は解決できますので、こちらはそれほど困難ではないでしょうが。
さらに、出席番号を配列p[3][42][8]に収納しなかったために、
ますますコードが複雑になって、
混迷の度合いを深めてしまいました。
でも、きっと皆さんは、
もっときれいに組んでいて、
各生徒の最高点・最低点・5段階評価、
各教科の最高点・最低点
等を組み込むことは、
おそらく容易に出来るでしょうから、
是非とも挑戦してみて下さい。
第16講では、
24,48,12,59,36
等のデータを
12,24,36,48,59
小さい順に並べ直したり、
59,48,36,24,12
大きい順に並べ直したりすることに挑戦します。
これは、成績順に並べ直して順番を付けるときなどに、
活かせます。
初心者のための excel 2016 マクロ VBA 入門講義 基礎から応用まで
vc++ c言語 c++ 入門 初心者 基礎から応用まで
eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門
数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
本サイトトップへ