第10講 関数の学習
第1話 関数の実例


関数という言葉を聞いて、苦手意識を持つ必要はまったくありません。
関数というは、部品のことです。
プラモデルのパーツに当たるものです。

関数とは何か説明するために、
C++を今回はWindows上に展開するのではなく、
第8講と同様にコマンドプロンプト上で展開して、
関数を理解してから、
Windows上に戻ることにしましょう。

メモ帳なのワープロソフトで次のようにタイピングして、どこかのフォルダにa.cpp等のファイル名で保存しましょう。
ファイル名ですからaの部分は何でも結構ですが、.cppの部分は必ずこのようにしてください。
.cppは、扱っているファイルの種類がC++のファイルであることを示すものです。
タイピングが面倒な方は、

ダウンロードファイル  a.cpp  をクリックして利用してください。 
     
   ここをクリック  

または、下のコピーペースト用をご利用ください。

#include<stdlib.h>
#include<stdio.h>
char a[20][5];
char b[20][5];
char c[20][5];
int main(void){
  char i;
  char j;
  printf("1学期の成績\n");
  printf("出席番号 国語 社会 数学 理科 英語\n");
  for(i=0;i<20;i++){
    if(i+1<10)printf(" ");
    printf(" %d ",i+1);
    for(j=0;j<5;j++){
      a[i][j]=rand() % 100;
      if(a[i][j]<10)printf(" ");
      printf(" %d ",a[i][j]);
    }
    printf("\n");
  }
  printf("2学期の成績\n");
  printf("出席番号 国語 社会 数学 理科 英語\n");
  for(i=0;i<20;i++){
    if(i+1<10)printf(" ");
    printf(" %d ",i+1);
    for(j=0;j<5;j++){
      b[i][j]=rand() % 100;
      if(b[i][j]<10)printf(" ");
      printf(" %d ",b[i][j]);
    }
    printf("\n");
  }
  printf("3学期の成績\n");
  printf("出席番号 国語 社会 数学 理科 英語\n");
  for(i=0;i<20;i++){
    if(i+1<10)printf(" ");
      printf(" %d ",i+1);
      for(j=0;j<5;j++){
        c[i][j]=rand() % 100;
        if(c[i][j]<10)printf(" ");
        printf(" %d ",c[i][j]);
      }
      printf("\n");
  }
  printf("1年間の合計\n");
  printf("出席番号 国語 社会 数学 理科 英語\n");
  for(i=0;i<20;i++){
    if(i+1<10)printf(" ");
      printf(" %d ",i+1);
      for(j=0;j<5;j++){
      c[i][j]=rand() % 100;
      if((a[i][j]+b[i][j]+c[i][j])<10)printf(" ");
      if(((a[i][j]+b[i][j]+c[i][j])>=10) & (a[i][j]+b[i][j]+c[i][j])<100)printf(" ");
      printf(" %d",a[i][j]+b[i][j]+c[i][j]);
    }
    printf("\n");
  }
  printf("1年間の平均\n");
  printf("出席番号 国語 社会 数学 理科 英語\n");
  for(i=0;i<20;i++){
    if(i+1<10)printf(" ");
      printf(" %d ",i+1);
      for(j=0;j<5;j++){
        c[i][j]=rand() % 100;
        if(((a[i][j]+b[i][j]+c[i][j])/3)<10)printf(" ");
        printf(" %d ",(a[i][j]+b[i][j]+c[i][j])/3);
      }
      printf("\n");
  }
}

(コピーペースト用

#include<stdlib.h>
#include<stdio.h>
char a[20][5];
char b[20][5];
char c[20][5];
int main(void){
char i;
char j;
printf("1学期の成績\n");
printf("出席番号 国語 社会 数学 理科 英語\n");
for(i=0;i<20;i++){
if(i+1<10)printf(" ");
printf(" %d ",i+1);
for(j=0;j<5;j++){
a[i][j]=rand() % 100;
if(a[i][j]<10)printf(" ");
printf(" %d ",a[i][j]);
}
printf("\n");
}
printf("2学期の成績\n");
printf("出席番号 国語 社会 数学 理科 英語\n");
for(i=0;i<20;i++){
if(i+1<10)printf(" ");
printf(" %d ",i+1);
for(j=0;j<5;j++){
b[i][j]=rand() % 100;
if(b[i][j]<10)printf(" ");
printf(" %d ",b[i][j]);
}
printf("\n");
}
printf("3学期の成績\n");
printf("出席番号 国語 社会 数学 理科 英語\n");
for(i=0;i<20;i++){
if(i+1<10)printf(" ");
printf(" %d ",i+1);
for(j=0;j<5;j++){
c[i][j]=rand() % 100;
if(c[i][j]<10)printf(" ");
printf(" %d ",c[i][j]);
}
printf("\n");
}
printf("1年間の合計\n");
printf("出席番号 国語 社会 数学 理科 英語\n");
for(i=0;i<20;i++){
if(i+1<10)printf(" ");
printf(" %d ",i+1);
for(j=0;j<5;j++){
c[i][j]=rand() % 100;
if((a[i][j]+b[i][j]+c[i][j])<10)printf(" ");
if(((a[i][j]+b[i][j]+c[i][j])>=10) & (a[i][j]+b[i][j]+c[i][j])<100)printf(" ");
printf(" %d",a[i][j]+b[i][j]+c[i][j]);
}
printf("\n");
}
printf("1年間の平均\n");
printf("出席番号 国語 社会 数学 理科 英語\n");
for(i=0;i<20;i++){
if(i+1<10)printf(" ");
printf(" %d ",i+1);
for(j=0;j<5;j++){
c[i][j]=rand() % 100;
if(((a[i][j]+b[i][j]+c[i][j])/3)<10)printf(" ");
printf(" %d ",(a[i][j]+b[i][j]+c[i][j])/3);
}
printf("\n");
}

a.cppを好きなフォルダに保存できたらスタート→すべてのプログラム→Micosoft Visual Studio 2010 Express→Visual Studio コマンドプロンプト
の順にクリックした下さい。

あなたが使用しているフォルダが、d:\VC++2010d1であるなら、
コマンドラインからcd VC++2010d1と打ちエンターしてください。

a.cppのおいてあるフォルダにいったら、コマンドラインからcl/EHsc a.cpp
と打ってから、エンターしてください。


の部分が出ていれば成功です。
成功したらコマンドラインからaと打ち
エンターします。
するとのようになると思います。
スクロールして頂いて全体を見ると、
1学期の成績、2学期の成績、3学期の成績、1年間の合計、1年間の平均が出ていることがわかります。
これがプログラム

int main(void){
  char i;
  char j;
  
printf("1学期の成績\n");
  printf("出席番号 国語 社会 数学 理科 英語\n");
  for(i=0;i<20;i++){
    if(i+1<10)printf(" ");
    printf(" %d ",i+1);
    for(j=0;j<5;j++){
      a[i][j]=rand() % 100;
      if(a[i][j]<10)printf(" ");
      printf(" %d ",a[i][j]);
    }
    printf("\n");
  }

  printf("2学期の成績\n");
  printf("出席番号 国語 社会 数学 理科 英語\n");
  for(i=0;i<20;i++){
    if(i+1<10)printf(" ");
    printf(" %d ",i+1);
    for(j=0;j<5;j++){
      b[i][j]=rand() % 100;
      if(b[i][j]<10)printf(" ");
      printf(" %d ",b[i][j]);
    }
    printf("\n");
  }

  printf("3学期の成績\n");
  printf("出席番号 国語 社会 数学 理科 英語\n");
  for(i=0;i<20;i++){
    if(i+1<10)printf(" ");
      printf(" %d ",i+1);
      for(j=0;j<5;j++){
        c[i][j]=rand() % 100;
        if(c[i][j]<10)printf(" ");
        printf(" %d ",c[i][j]);
      }
      printf("\n");
  }

  printf("1年間の合計\n");
  printf("出席番号 国語 社会 数学 理科 英語\n");
  for(i=0;i<20;i++){
    if(i+1<10)printf(" ");
      printf(" %d ",i+1);
      for(j=0;j<5;j++){
      c[i][j]=rand() % 100;
      if((a[i][j]+b[i][j]+c[i][j])<10)printf(" ");
      if(((a[i][j]+b[i][j]+c[i][j])>=10) & (a[i][j]+b[i][j]+c[i][j])<100)printf(" ");
      printf(" %d",a[i][j]+b[i][j]+c[i][j]);
    }
    printf("\n");
  }

  printf("1年間の平均\n");
  printf("出席番号 国語 社会 数学 理科 英語\n");
  for(i=0;i<20;i++){
    if(i+1<10)printf(" ");
      printf(" %d ",i+1);
      for(j=0;j<5;j++){
        c[i][j]=rand() % 100;
        if(((a[i][j]+b[i][j]+c[i][j])/3)<10)printf(" ");
        printf(" %d ",(a[i][j]+b[i][j]+c[i][j])/3);
      }
      printf("\n");
  }

}
でやっていることですが、プログラムが長すぎて非常に読みにくくなっています。

そこで色別のところを部品にして例えば、
int main(void){
  gakki1();
  
gakki2();
  gakki3();
  
goukei();
  heikin();
}
とすると、プログラムが大変見やすくなります。
a.cppを次のように変更してb.cppとして保存し直しましょう。
もちろん、タイピングが面倒な方は、b.cppを好きなフォルダに保存し直してください。

#include<stdlib.h>
#include<stdio.h>
char a[20][5];
char b[20][5];
char c[20][5];
void gakki1(void);
void gakki2(void);
void gakki3(void);
void goukei(void);
void heikin(void);
int main(void){
  gakki1();
  gakki2();
  gakki3();
  goukei();
  heikin();
}

void gakki1(void){
  char i;
  char j;
  printf("1学期の成績\n");
  printf("出席番号 国語 社会 数学 理科 英語\n");
  for(i=0;i<20;i++){
    if(i+1<10)printf(" ");
    printf(" %d ",i+1);
    for(j=0;j<5;j++){
      a[i][j]=rand() % 100;
      if(a[i][j]<10)printf(" ");
      printf(" %d ",a[i][j]);
    }
    printf("\n");
  }
}



void gakki2(void){
  char i;
  char j;
  printf("2学期の成績\n");
  printf("出席番号 国語 社会 数学 理科 英語\n");
  for(i=0;i<20;i++){
    if(i+1<10)printf(" ");
    printf(" %d ",i+1);
    for(j=0;j<5;j++){
      b[i][j]=rand() % 100;
      if(b[i][j]<10)printf(" ");
      printf(" %d ",b[i][j]);
    }
    printf("\n");
  }
}


void gakki3(void){
  char i;
  char j;
  printf("3学期の成績\n");
  printf("出席番号 国語 社会 数学 理科 英語\n");
  for(i=0;i<20;i++){
    if(i+1<10)printf(" ");
    printf(" %d ",i+1);
    for(j=0;j<5;j++){
      c[i][j]=rand() % 100;
      if(c[i][j]<10)printf(" ");
      printf(" %d ",c[i][j]);
    }
    printf("\n");
  }
}


void goukei(void){
  char i;
  char j;
  printf("1年間の合計\n");
  printf("出席番号 国語 社会 数学 理科 英語\n");
  for(i=0;i<20;i++){
    if(i+1<10)printf(" ");
    printf(" %d ",i+1);
    for(j=0;j<5;j++){
      c[i][j]=rand() % 100;
      if((a[i][j]+b[i][j]+c[i][j])<10)printf(" ");
      if(((a[i][j]+b[i][j]+c[i][j])>=10) & (a[i][j]+b[i][j]+c[i][j])<100)printf(" ");
      printf(" %d",a[i][j]+b[i][j]+c[i][j]);
    }
    printf("\n");
  }
}

void heikin(void){
  char i;
  char j;
  printf("1年間の平均\n");
  printf("出席番号 国語 社会 数学 理科 英語\n");
  for(i=0;i<20;i++){
    if(i+1<10)printf(" ");
    printf(" %d ",i+1);
    for(j=0;j<5;j++){
      c[i][j]=rand() % 100;
      if(((a[i][j]+b[i][j]+c[i][j])/3)<10)printf(" ");
      printf(" %d ",(a[i][j]+b[i][j]+c[i][j])/3);
    }
    printf("\n");
  }
}


(コピーペースト用

#include<stdlib.h>
#include<stdio.h>
char a[20][5];
char b[20][5];
char c[20][5];
void gakki1();
void gakki2();
void gakki3();
void goukei();
void heikin();
int main(void){
gakki1();
gakki2();
gakki3();
goukei();
heikin();
}

void gakki1(void){
char i;
char j;
printf("1学期の成績\n");
printf("出席番号 国語 社会 数学 理科 英語\n");
for(i=0;i<20;i++){
if(i+1<10)printf(" ");
printf(" %d ",i+1);
for(j=0;j<5;j++){
a[i][j]=rand() % 100;
if(a[i][j]<10)printf(" ");
printf(" %d ",a[i][j]);
}
printf("\n");
}
}



void gakki2(void){
char i;
char j;
printf("2学期の成績\n");
printf("出席番号 国語 社会 数学 理科 英語\n");
for(i=0;i<20;i++){
if(i+1<10)printf(" ");
printf(" %d ",i+1);
for(j=0;j<5;j++){
b[i][j]=rand() % 100;
if(b[i][j]<10)printf(" ");
printf(" %d ",b[i][j]);
}
printf("\n");
}
}

void gakki3(void){
char i;
char j;
printf("3学期の成績\n");
printf("出席番号 国語 社会 数学 理科 英語\n");
for(i=0;i<20;i++){
if(i+1<10)printf(" ");
printf(" %d ",i+1);
for(j=0;j<5;j++){
c[i][j]=rand() % 100;
if(c[i][j]<10)printf(" ");
printf(" %d ",c[i][j]);
}
printf("\n");
}
}

void goukei(void){
char i;
char j;
printf("1年間の合計\n");
printf("出席番号 国語 社会 数学 理科 英語\n");
for(i=0;i<20;i++){
if(i+1<10)printf(" ");
printf(" %d ",i+1);
for(j=0;j<5;j++){
c[i][j]=rand() % 100;
if((a[i][j]+b[i][j]+c[i][j])<10)printf(" ");
if(((a[i][j]+b[i][j]+c[i][j])>=10) & (a[i][j]+b[i][j]+c[i][j])<100)printf(" ");
printf(" %d",a[i][j]+b[i][j]+c[i][j]);
}
printf("\n");
}
}

void heikin(void){
char i;
char j;
printf("1年間の平均\n");
printf("出席番号 国語 社会 数学 理科 英語\n");
for(i=0;i<20;i++){
if(i+1<10)printf(" ");
printf(" %d ",i+1);
for(j=0;j<5;j++){
c[i][j]=rand() % 100;
if(((a[i][j]+b[i][j]+c[i][j])/3)<10)printf(" ");
printf(" %d ",(a[i][j]+b[i][j]+c[i][j])/3);
}
printf("\n");
}
}




ようするに、
  printf("1学期の成績\n");
  printf("出席番号 国語 社会 数学 理科 英語\n");
  for(i=0;i<20;i++){
    if(i+1<10)printf(" ");
    printf(" %d ",i+1);
    for(j=0;j<5;j++){
      a[i][j]=rand() % 100;
      if(a[i][j]<10)printf(" ");
      printf(" %d ",a[i][j]);
    }
    printf("\n");
  }

の部分を独立させ、部品

void gakki1(void){
  char i;
  char j;
  printf("1学期の成績\n");
  printf("出席番号 国語 社会 数学 理科 英語\n");
  for(i=0;i<20;i++){
    if(i+1<10)printf(" ");
    printf(" %d ",i+1);
    for(j=0;j<5;j++){
      a[i][j]=rand() % 100;
      if(a[i][j]<10)printf(" ");
      printf(" %d ",a[i][j]);
    }
    printf("\n");
  }
}

にしたのです。

void gallo1(void) のvoidや
int main(void)のint等については次回説明したいと思います。
基本的には関数は
int gakki1(int t)
のような形をもっているということを理解して頂ければと思います。
引き渡す値の型戻す値の型とがあるのです。
引数と戻り値といいますが、詳しいことは次回説明いたします。


第9講第8話へ 第2話へ



初心者のためのjava 入門 基礎から応用まで
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第1部
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第2部
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第3部
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすい vb 入門 vba 入門 基礎から応用まで 第1部
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ