第10講 社員が自分に命令することを繰り返す(関数の再帰的使用)

第7話 社員が自分に命令を繰り返すことによる等差数列の積の計算

c++
等差数列の積を求めるプログラム解答例
#include<stdio.h>
int f(int a,int b,int c);
int main(){
  int a,b,c;
  printf("初項=");
  scanf("%d",&a);
  printf("末項=");
  scanf("%d",&b);
  printf("交差=");
  scanf("%d",&c);
  printf("初項%d、末項%d、交差%dのときの等差数列の積=",a,b,c);
  printf("%d\n",f(a,b,c));
}
int f(int a,int b,int c){
  int w;
  if(b-c>=a){
    w=b*f(a,b-c,c);
  }
  else{
    return(a);
  }
  return(w);
}


では、第10講最後の課題のための
準備課題を考えてください。
第6講第5話で作ったプログラム
C言語
を実現するプログラムは、2次元配列を使えば
#include<iostream>
using namespace std;
int main(){
  int i,j;
  for(i=0;i<10;i++){
    for(j=1;j<11;j++){
      if(10*i+j<10){
        cout<<"00"<<10*i+j<<" ";
      }
      else{
        if(10*i+j<100){
          cout<<"0"<<10*i+j<<" ";
        }
        else{
          cout<<10*i+j<<" ";
        }
      }
    }
    cout<<endl;
  }
}

を2つの添え字付き名前を持った箱(2次元配列)と
printfを用いて書き直してください。
解答例は30行下。





























解答例
#include<stdio.h>
int main(){
  int i,j,a[10][10];
  for(i=0;i<10;i++){
    for(j=0;j<10;j++){
      a[i][j]=10*i+j+1;
    }
  }
  for(i=0;i<10;i++){
    for(j=0;j<10;j++){
      if(a[i][j]<10)printf("00%d ",a[i][j]);
      if(a[i][j]>=10 && a[i][j]<100)printf("0%d ",a[i][j]);
      if(a[i][j]==100)printf("%d",a[i][j]);
    }
    printf("\n");
  }
}
C言語
さて、第10講の最後の課題
すなわち、専門用語なしのC言語 C++入門第1部
の最後の課題です。
第1部最終課題ですから、
難度は非常に高いですよ。
粘り強く考えてください。
ただし、まだ、配列を渡すことは学習していませんので、
グローバル配列を
冒頭で宣言するという条件付きにしたいと思います。
さらに、ヒントとして関数は
2つのタイプを用意することを付け加えておきたいと思います。
#include<stdio.h>
int a[10][10];
void f(int i);
void g(int i,int j);
     ・
     ・
     ・
では、がんばって最終課題に取り組んでください。




第6話へ 第8話へ

a

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