A 回答 (8件)
- 最新から表示
- 回答順に表示
No.8
- 回答日時:
Σ(シグマ)で総和を求める関数を作りたい?
return n + (n - 1) * (n / 2); /* 直接総和を返す */
↓
(n^2 + n) / 2
ですよね? 思わず笑わせていただきました。
if は必要ないですよ。 どうしても使いたいという場合は、「ながら」あなたの解答で良いんじゃないでしょうか。
/* txz.c Σf(n) test program
* execution: ./txz 5
* compile: gcc txz.c -o txz
*/
#include <stdio.h> /* for printf() */
#include <stdlib.h> /* for atoi() */
int f(int);
int main(int argc, char *argv[]) {
int temp;
temp = atoi(argv[--argc]);
printf("f(%d) = %d\n", temp, f(temp));
return 0;
}
int f(int n) {
// if (n <= 1)
// return 1;
// else
return n + (n - 1) * n / 2;
}
No.7
- 回答日時:
(全くの憶測で、ハズシているとは思いますが、もしやってことも・・無いか?)
>>「n の総和を求める」という日本語の意味が分かりません.
>これは無視してください自分でも説明出来ないので
「無視」して、かつ、質問者様が課題?を理解していない、または、課題を正しく質問文にできなかった(失礼)と仮定して・・。
>コメント内の関数を作りたいのですが・・・
コメントの外を含めて int sum() という関数を作り直してみました(分離独立?して関数 f() も)。
・関数 sum() で、n を 1 から 5 までとして、関数 f( n ) を呼び出し、その戻り値を積算(◆)するものを作ってみました。
☆nが5のとき(机上計算で)結果はいくつになるのが正解?でしょうか?。下では32となります。
#include <stdio.h>
int f( int iVal )
{
if( iVal == 1 ) return( 1 ); // 「たまたま」機能的には、次の行でOK
return( iVal + ( iVal - 1 ) * ( iVal / 2 ) );
}
int sum( int iOwari )
{
int n, iSum = 0; // 「和」を求める場合に必要な初期化
for( n = 1; n <= iOwari; n++ ){
iSum += f( n ); // ◆
}
return( iSum );
}
void main()
{
printf( "f(%d) 総和 = %d\n", 5, sum( 5 ) );
}
注:インデントに全角空白を用いています。コピペ後、タブに一括変換して下さい。
No.6
- 回答日時:
>いやいや、fとΣで示されたコメント内の定義を忠実に実装するなら
う~~ん、そうなんですけどねえ(笑)。
ただ、コメントのタイトルには
>/* nの総和を求める関数 */
って書いてある(笑)。
f(n)の総和を求めるのとnの総和を求めるんじゃ偉い違いです(苦笑)。
前者だと、確かに高階関数辺り使わないとメンド臭いんですよね(笑)。
Cだと関数ポインタかよ(笑)。ANSI Common Lispなんかじゃ鼻クソホジってる間に記述できるんですが。
No.5
- 回答日時:
いやいや、fとΣで示されたコメント内の定義を忠実に実装するなら
int sum(int n, int (*f)(int)) {
if (n>1) {
return f(n) + sum(n-1, f);
} else if (n==1) {
return f(1);
} else {
return 0;
}
}
でしょう。
返り値の型は勝手にintとしました。
nが0以下の場合は定義が与えられていないので、これも勝手に0としました。
No.4
- 回答日時:
あるいは、単に再帰したいだけか。
/* ここから */
int sum(int n) {
if (n == 1) {
return 1;
} else {
return n + sum(n - 1);
}
}
/* ここまで */
No.3
- 回答日時:
1~nまでの総和を求める関数の場合
nの値が偶数のときは
(1+n)*(n/2)
で合計が計算できます。しかし、nの値が奇数のときは上手くいきません。あたなのプログラムの
n + (n - 1) * (n / 2);
の部分はこの式を勘違いしたのでしょうか?
ちなみに1~5までの和を求めるプログラムの一部を示しますので、参考にしてください。
int sum=0;
for(int i=1;i<=5;i++){
sum+=i;
}
printf("%d\n",sum);
No.1
- 回答日時:
「n の総和を求める」という日本語の意味が分かりません.
コメントを見る限り「f(1)~f(n) の総和を求める」ということでしょうか? もしそうなら, あなたが書いた関数の中で f を全く呼び出していないのはなぜでしょうか?
あるいは「1~n の総和を求める」であったとしても, あなたの書いた関数は正しくありません.
>>「n の総和を求める」という日本語の意味が分かりません.
これは無視してください
自分でも説明出来ないので
>>コメントを見る限り「f(1)~f(n) の総和を求める」ということでしょうか?
コメントの関数を計算したいのです
>>あなたの書いた関数は正しくありません.
どうすればいいのでしょう?
コメント内の関数を作りたいのですが・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語階乗の総和を求める 2 2023/03/04 23:31
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# プログラムの時、フローチャートはどうなりますか?図でお願いします。 int main(void) { 1 2022/10/01 22:45
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- C言語・C++・C# C言語 3 2022/11/09 13:27
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語 エラーの原因がわからな...
-
比較回数と交換回数表示について
-
複数桁10進数の*桁目だけを抽出...
-
nCmの関数
-
構造体の勉強中です 合計点の高...
-
C言語 配列と関数の練習問題
-
[C言語] 関数を利用する計算
-
実数の整数部,小数部の取得
-
C言語での引数の省略方法
-
数字列を3桁ごとにカンマで区切...
-
アスタリスクでダイヤ型を作る
-
覆面算のプログラムが分かりません
-
C言語の基礎 . 2乗値の差につ...
-
c言語
-
プログラミング
-
【C++】関数ポインタの使い方
-
毎回違う乱数を生成するにはど...
-
if と配列の組み合わせ
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
「指定されたキャストは有効で...
-
C言語 配列と関数の練習問題
-
複数桁10進数の*桁目だけを抽出...
-
(int *)の意味
-
if と配列の組み合わせ
-
ラップ関数とはどんなものですか?
-
卒業研究でよく分からないとこ...
-
【C++】関数ポインタの使い方
-
c言語
-
足して100になるような乱数のア...
-
C言語初心者です、、、お助けく...
-
数字列を3桁ごとにカンマで区切...
-
C言語 エラーの原因がわからな...
-
実数の整数部,小数部の取得
-
課題でつまってます・・・
-
商と剰余を同時に求める(C言語)
-
C言語の配列をC++のvectorに高...
-
std::set<int> で、ある値が何...
おすすめ情報