【質問】
次の処理を行うプログラムを作成します。
(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;
}
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;
}
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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) google formsを使ったタスク依頼フォーム作成におけるご相談 1 2023/06/22 15:55
- その他(プログラミング・Web制作) pandasでまとめてインデックスを削除するにはどうすればいいですか? たとえば、以下のプログラムで 1 2022/07/31 23:09
- UNIX・Linux Linuxについて質問です。 以下のような設定をしたMakefileを作成するにはどう記述すればよい 1 2023/02/03 20:10
- MySQL MYSQL エラー 2 2022/10/18 11:37
- Java JaneStyleのスレッドが見れなくなった 1 2023/06/10 08:02
- その他(プログラミング・Web制作) Fortranでの出力ファイル 2 2023/03/21 21:25
- UNIX・Linux サーバー間のデータコピー(データ形式とデーターフォーマットの変換あり。一定間隔で処理) 2 2023/08/22 22:15
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- C言語・C++・C# C言語 3 2022/10/04 15:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語での引数の省略方法
-
「指定されたキャストは有効で...
-
#define _CRT_SECURE_NO_WARNIN...
-
複数桁10進数の*桁目だけを抽出...
-
(int *)の意味
-
卒業研究でよく分からないとこ...
-
ラップ関数とはどんなものですか?
-
if と配列の組み合わせ
-
C言語初心者です、、、お助けく...
-
【C++】関数ポインタの使い方
-
アスタリスクで正方形
-
インライン展開されているか確...
-
構造体の勉強中です 合計点の高...
-
異なる文字列のマッチングを、D...
-
数字列を3桁ごとにカンマで区切...
-
C言語 配列と関数の練習問題
-
C言語で三目並べをするプログラ...
-
入力を待たずにstdinの監視をし...
-
ファイルから読みこむ方法
-
課題でつまってます・・・
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
複数桁10進数の*桁目だけを抽出...
-
#define _CRT_SECURE_NO_WARNIN...
-
ラップ関数とはどんなものですか?
-
卒業研究でよく分からないとこ...
-
【C++】関数ポインタの使い方
-
実数の整数部,小数部の取得
-
std::set<int> で、ある値が何...
-
C言語 エラーの原因がわからな...
-
c言語
-
system関数がうまくいかない
-
C++でvectorにテキストファイル...
-
acceptをalarmでタイムアウトさ...
-
if と配列の組み合わせ
-
return 1L
-
「{ } で囲むだけ」は正しい?
-
(マルチスレッド)_beginthrea...
-
PowerShellがうまくいかない
-
このプログラミング誰か教えて...
おすすめ情報