- ベストアンサー
配列のプログラム作成
【質問】 次の処理を行うプログラムを作成します。 (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); }
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#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)
関数分け、エラーチェックなど 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; } この様な共通でやったほうが良いものは、 このプログラムに限らず、これからの物にも反映できますので、 いままでにもらったアドバイスを参考に、 自分で別解答を考えてみてはどうでしょう?
- yaemon_2006
- ベストアンサー率22% (50/220)
ちょっと訂正 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)
そのプログラムが一番普通だとは思いますが。 #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); } とか。