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

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

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

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

Q&A

解決済

3回答

21067閲覧

1からNまでの二乗和を求める

ISARIA

総合スコア19

C

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

0グッド

0クリップ

投稿2015/05/03 15:16

1からNまでの二乗和を求めるプログラムを作れ、という課題をやっているのですが、完成したと思いコンパイルし実行してみると、=0 という答えが返ってきました。

コンパイルした時、警告:関数は値を返すべき(関数 tasu(int))と表示されていました。
以下がそのソースコードです。
どこが違っているかと、その解説も出来たらお願いします!

#include<stdio.h>

int jijo(int a)
{
return a*a;
}

int tasu(int N)
{
int s=0;
for(int i=0;i<=N;i++)
{
s=s+jijo(i);
return s;
}
}

int main(void)
{
printf("1からNまでの二乗和を求める。\n");

int n=0; printf("N="); scanf("%d",&n); printf("1^2+2^2+……+N^2=%d",tasu(n));

}


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

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

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

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

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

guest

回答3

0

ベストアンサー

lang

1int tasu(int N) 2{ 3 int s=0; 4 for(int i=0;i<=N;i++) 5 { 6 s=s+jijo(i); 7 // return s;//ここで関数を抜けてしまうので 8 } 9 return s; //ここに移動する。 10}

ちなみに今回のように
「動作がなんかおかしい」のを何とかする(デバッグ)方法で、
原始的な方法に、「printfを各所に仕込む」というのがあります。

たとえば今回の場合、

lang

1//(他にも怪しいと思うところにprintf()を仕込んでいる) 2int tasu(int N) 3{ 4 int s=0; 5 for(int i=0;i<=N;i++) 6 { 7 s=s+jijo(i); 8 printf("足した。\n"); 9 return s; 10 } 11}

とか書いておけば
「N=2以上で実行したのに「足した」が一回しかでねぇぞ」
「あれforループが一回しか回ってないな」
と、起きている問題がより具体的になります。

投稿2015/05/03 15:34

編集2015/05/03 15:50
ozwk

総合スコア13521

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

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

ISARIA

2015/05/03 15:56

ありがとうございます! これからは、バンバンprintf使って間違ってるとこ探していきます!
ozwk

2015/05/03 16:06

まあ普通はデバッガ使うんですけどね。 簡単に言うとプログラムの処理を追うツールです。 「この行に来たら一時停止する」とかできます。
guest

0

tasu関数の中のreturnの場所が間違っています。これではループせず、すぐにmain関数に帰っていってしまいます。ですのでreturnをfor文の外に出してあげましょう。

投稿2015/05/03 15:32

huuzyu

総合スコア11

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

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

ISARIA

2015/05/03 15:55

ありがとうございます!
guest

0

lang

1#include<stdio.h> 2 3int jijo(int a) { 4 return a * a; 5} 6 7int tasu(int n) { 8 int s = 0; 9 for (int i = 0; i <= n; i++) { 10 s += jijo(i); 11 } 12 return s; 13} 14 15int main(void) { 16 printf("1 から N までの二乗和を求める。\n"); 17 18 int n = 0; 19 printf("N="); 20 scanf("%d",&n); 21 22 // プログラムでループ 23 printf("%d\n", tasu(n)); 24 // 数列の和の公式を利用 25 printf("%d\n", (n + 1) * n * (2 * n + 1) / 6); 26}

プログラムでループさせて足し算して行く方法だけでなく、
数列の和の公式で求めた値も表示させています。

投稿2015/05/04 00:32

katoy

総合スコア22324

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問