質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

5回答

566閲覧

この問題ではどの数式を使うんですか?

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2020/05/07 00:50

編集2020/05/07 01:01
わかるかたいたらどのような数式を使うのか教えてください。** 次の数列でn番目の数を算出する関数sum7()を作成しなさい。 ただし、引数nが1~20以外の場合、または、引数n1,n2が1~9以外の場合、算出結果は0とし、失敗:0を返す。 また、メイン関数は記述しないこと。 <数列> n1,n2,n3,n4・・・ 前の2つの値を加算すると次の値となる数列です。 3番目の数:n3 ・・・ 1番目の数:n1と2番目の数:n2を加算した結果 5番目の数:n5 ・・・ 3番目の数:n3と4番目の数:n4を加算した結果 <関数仕様> 定義:int sum7 (int n1, int n2, int n,unsigned int *result); 第一引数:n1の数 第二引数:n2の数 第三引数:整数 第四引数:算出結果 戻り値:成功 0以外 失敗0 <ファイル名> Cソースコード:sum7.c ヘッダファイル:sum7.h <実行例> n1 = 2, n2 = 3, n = 5 の場合、算出結果は13 n1 = 1, n2 = 9, n = 10 の場合、算出結果は327 途中まで作成したコードです "main.c" #include "sum7.h" int main(void) { int count1; //n1 int count2; //n2 int num=5; //整数 unsigned int sum=0; //算出結果 for (count1 = 1, count2 = 1; count1<10,count2 < 10; count1++, count2++) { sum=sum7(count1, count2, num, &sum); } printf("%d\n", sum); return 0; } "sum7.c" #include "sum7.h" int sum7(int n1, int n2, int n, unsigned int* result) { if (20 < n || 9 < n1 || 9 < n2) { printf("error\n"); return 0; } else { return *result = (n1 - 1) + (n2 - 2); } } "sum7.h" #pragma once #ifndef SUM7 #include <stdio.h> int sum7(int n1, int n2, int n, unsigned int* result); #endif // !SUM7 実行結果が15です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tacsheaven

2020/05/07 01:08

ソースコードを記述する際はマークダウン記法を使ってください。 使用する数列自体はフィボナッチ数列で合っています。 フィボナッチ数列は n>=3 のときに、 p[n] = p[n-2] + p[n-1] となる数列ですから、3 以上の位置にある値を知るには、その前の値を「すべて」知る必要があります
coco_bauer

2020/05/07 01:17

質問のタイトルが「どの数式を使うんですか」となっていますが、どんな回答を期待しているのでしょうか? どんなところが判らないのかを具体的に書かないと、回答を得られないと思います。 ちなみに、n1=1,n2=1ならばフィボナッチ数列になりますが、n1とn2は任意の数を与えることができるのでフィボナッチ数列にはなりません。 問題に「また、メイン関数は記述しないこと」と書かれているのに、プログラムに”int main(void)”とあるのは、減点の対象になるかもしれません。問題をよく読んで、素直に回答しましょう。
guest

回答5

0

C

1int sum7(int n1, int n2, int n, unsigned int* result) { 2 if (20 < n || 9 < n1 || 9 < n2) { 3 printf("error\n"); 4 return 0; 5 } else { 6 return *result = (n1 - 1) + (n2 - 2); 7 } 8}

フィボナッチ数列になっていないし、仕様を満たしてもいない。

これ↓でどうだ。

C

1#include <stdio.h> 2 3int sum7(int n1, int n2, int n, unsigned int* result) { 4 // 引数nが1~20以外の場合、または、引数n1, n2が1~9以外の場合、 5 if ( n < 1 || n > 20 || 6 n1 < 1 || n1 > 9 || 7 n2 < 1 || n2 > 9 ) { 8 // 算出結果は0とし、失敗:0を返す。 9 *result = 0; 10 return 0; 11 } 12 13 if ( n == 1 ) { 14 *result = n1; 15 return 1; 16 } 17 if ( n == 2 ) { 18 *result = n2; 19 return 1; 20 } 21 // コタエ = ひとつ前のコタエ + ふたつ前のコタエ 22 unsigned int x, y; 23 if ( sum7(n1, n2, n-1, &x) && sum7(n1, n2, n-2, &y) ) { 24 *result = x+y; 25 return 1; 26 } 27 *result = 0; 28 return 0; 29} 30 31// おためし 32int main() { 33 unsigned int result; 34 if ( sum7(2, 3, 5, &result) ) { 35 printf("2,3,5 -> %d\n", result); 36 } 37 if (sum7(1, 9, 10, &result)) { 38 printf("1,9,10 -> %d\n", result); 39 } 40}

投稿2020/05/07 01:58

編集2020/05/07 05:00
episteme

総合スコア16612

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

わかるかたいたらどのような数式を使うのか教えてください。

与えられた式の通り、素直に処理すればいいだけかと思います。

(n1 - 1) + (n2 - 2)は何を意図したものでしょうか。

投稿2020/05/07 01:36

maisumakun

総合スコア146018

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

問題を解決することができました、ありがとうございます。

投稿2020/05/15 06:16

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2020/05/15 06:18

解決法を初心者にわかるよう詳しく書いてください。
guest

0

nm = (B^(m-1)(n2-An1)-A^(m-1)(n2-Bn1))/(B-A),
where A and B are the solutions of the quadratic equation, x^2 - x - 1 = 0, which are (1 +- sqrt(5)) / 2.

投稿2020/05/07 10:59

majiponi

総合スコア1722

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

考え方の参考にしてください。
書き方は一般的ではありませんし、ファイル分割もしていませんから。

C

1int sum7(int n1, int n2, int n, unsigned int *result) 2{ 3 int r; 4 if (n < 1 || n > 20 || n1 < 1 || n1 > 9 || n2 < 1 || n2 > 9) r = 0; 5 else if (n == 1) r = n1; 6 else if (n == 2) r = n2; 7 else while (--n > 1) r = n1 + n2, n1 = n2, n2 = r; 8 return *result = r; 9} 10 11#include <stdio.h> 12 13int main(void) 14{ 15 unsigned int result; 16 if (sum7(1, 1, 1, &result)) printf("(1,1,1) %u\n", result); 17 if (sum7(1, 1, 2, &result)) printf("(1,1,2) %u\n", result); 18 if (sum7(1, 1, 3, &result)) printf("(1,1,3) %u\n", result); 19 if (sum7(2, 3, 5, &result)) printf("(2,3,5) %u\n", result); 20 if (sum7(1, 9, 10, &result)) printf("(1,9,10) %u\n", result); 21 if (sum7(9, 9, 20, &result)) printf("(9,9,20) %u\n", result); 22}

ヘッダファイルの二重インクルード防止ですが、#ifndef だけでは
不十分で、#ifndef SUM7_H のあとに #define SUM7_H が必要です。

質問を編集して、ソースコードを選択し、<code>ボタンを押してください。

投稿2020/05/07 07:52

編集2020/05/07 15:47
kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問