• ベストアンサー

配列のプログラム作成

【質問】 次の処理を行うプログラムを作成します。 (1)10個の要素を持つ一次配列dat[10]を宣言します (2)dat[0]に0、dat[1]に1をセットします (3)dat[2]以降の要素には、前の2つの要素の和を計算し入力します (4)配列の各要素の値を表示します 【プログラム作成例】 dat[ 0] = 0 dat[ 1] = 1 dat[ 2] = 1 dat[ 3] = 2 dat[ 4] = 3 dat[ 5] = 5 dat[ 6] = 8 dat[ 7] = 13 dat[ 8] = 21 dat[ 9] = 34 上記の解答は下記の通りなのですが、下記以外の解答方法を教えてはいただけないでしょうか? C言語に詳しい方よろしくお願いいたします。 #include <stdio.h> main() { int i, dat[10]; dat[0] = 0; dat[1] = 1; for (i=2; i<10; i++) { dat[i] = dat[i-2] + dat[i-1]; } for (i=0; i<10; i++) { printf ("dat[%2d] = %2d\n", i, dat[i]); } return (0); }

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

  #include <stdio.h> int func(int *dat, int i) { if(!i) return dat[i] = 0; if(i == 1) return dat[i] = 1; return dat[i] = func(dat, i - 1) + func(dat, i - 2); } void print(int *dat, int i) { if(!i){ printf("%d\n", dat[i]); return; } print(dat, i - 1); printf("%d\n", dat[i]); return; } int main(void) { int dat[10]; func(dat, 9); print(dat, 9); return 0; }  

その他の回答 (3)

  • aris-wiz
  • ベストアンサー率38% (96/252)
回答No.4

関数分け、エラーチェックなど C言語でやったほうが良い基本的な部分を追加してみるとか。 #include <stdio.h> #define MAXARRAYLEN (10) typedef enum {  OK = 0,  NG_ARRAY,  NG_SIZE, }ret_e; static char* errmsg[] ={  "Success.",  "Invalid Array.",  "Invalid Size.", }; ret_e init_dat( int *dat, size_t size ) {  if( !dat ){   return NG_ARRAY;  }  if( size < 2 ){   return NG_SIZE;  }  dat[0] = 0;  dat[1] = 1;  return OK; } ret_e calc_dat( int *dat, size_t size ) {  size_t i;  if( !dat ){   return NG_ARRAY;  }  if( size < 2 ){   return NG_SIZE;  }  for (i=2; i<size; i++) {   dat[i] = dat[i-2] + dat[i-1];  }  return OK; } ret_e print_dat( int *dat, size_t size ) {  size_t i;  if( !dat ){   return NG_ARRAY;  }  if( size < 2 ){   return NG_SIZE;  }  for (i=0; i<size; i++) {   printf ("dat[%2d] = %2d\n", i, dat[i]);  }  return OK; } int main( int argc, char* argv[] ) {  ret_e ret;  int dat[MAXARRAYLEN];  ret = OK;  ret = init_dat( dat, MAXARRAYLEN );  if( ret!=OK ){  fprintf( stderr, "init_dat() faild, %s\n", errmsg[ret] );   return 1;  }  ret = calc_dat( dat, MAXARRAYLEN );  if( ret!=OK ){   fprintf( stderr, "calc_dat() faild, %s\n", errmsg[ret] );   return 2;  }  ret = print_dat( dat, MAXARRAYLEN );  if( ret!=OK ){   fprintf( stderr, "print_dat() faild, %s\n", errmsg[ret] );   return 3;  }  return 0; } この様な共通でやったほうが良いものは、 このプログラムに限らず、これからの物にも反映できますので、 いままでにもらったアドバイスを参考に、 自分で別解答を考えてみてはどうでしょう?

回答No.3

   ちょっと訂正 void print(int *dat, int i) { if(i < 0) return; print(dat, i - 1); printf("%d\n", dat[i]); return; }  

  • rabbit_cat
  • ベストアンサー率40% (829/2062)
回答No.1

そのプログラムが一番普通だとは思いますが。 #include <stdio.h> #include <math.h> int main(void) {  int i, dat[10];  for (i=0; i<10; i++) {   dat[i] = 1.0/2.23607 * (pow(1.618034, i) - pow(-1.618034, -i)) + 0.5;  }  for (i=0; i<10; i++) {   printf ("dat[%2d] = %2d\n", i, dat[i]);  }  return (0); } とか。

関連するQ&A