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

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

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

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

Q&A

解決済

2回答

1281閲覧

。まったくわかりません。

nishimuu

総合スコア18

C

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

2グッド

0クリップ

投稿2018/10/10 03:44

編集2018/10/11 00:47

log n

発生している問題・エラーメッセージ

n = 1000のとき
r(n) = -5.907755e+000
n = 10000のとき
r(n) = -8.210340e+000
n = 100000のとき
r(n

for(j = 1; j <= M; j++){
b += 1/j;
}
printf("n = 10000のとき\n");
printf("r(n) = %e\n",b - log(M));

for(k = 1; k <= O; k++){
c += 1/k;
}
printf("n = 100000のとき\n");
printf("r(n) = %e\n",c - log(O));

}

### 試したこと これはまだ途中ですが、出てきた計算結果が近似値と全く違います。 ### 補足情報(FW/ツールのバージョンなど) 私のコードの間違いと解答例を教えてください。
Paalon, tachikoma👍を押しています

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

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

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

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

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

yumetodo

2018/10/10 03:48

teratailにはソースコードをハイライトする機能があるのでそれを使ってください。さっぱり読めません。あとインデント。
tiitoi

2018/10/10 03:49

コードはインデックスが崩れてしまいますので、 ```コード``` と囲ってください。質問はあとからでも編集できます。
nishimuu

2018/10/10 04:06

すいません。初心者でテラテイルの使い方がまだよくわかっていなくて・・・
guest

回答2

0

ベストアンサー

C

for(i = 1; i<= N; i++){
a += 1/i;
}

C言語では、int / int は int になります。
つまり、2以上のiについて 1/i は常に0です。

演算対象の片方をdouble型にして計算してください。

C

1for(i = 1; i<= N; i++){ 2 a += 1.0/i; 3}

質問の評価について

瞬間風速では -5 まで評価が落ちてしまっていました。
内容と言うより、単に質問の書き方が良くなかったように思います。

次の点に注意されると良いかと。

  • タイトルを適切に

タイトルは質問内容を的確に表すものにしてください。
今回のタイトルには必要な情報が一切含まれていないだけでなく、丸投げな感も与えます。

  • コードブロックを使う

見づらい質問は、回答者に配慮しない身勝手な印象を与えます。
(指摘後に修正されているので、単に知らなかっただけかと思いますが)

  • 地雷ワード

『私のコードの間違いと解答例を教えてください。』
宿題なのに解答例を求めたらダメだろ、と多くの人が感じるかと。

必要以上に低評価を食らっても損しかないので、次回以降気を付けてみてください。
ヘルプに目を通しておくとなお良いでしょう。teratailヘルプ - 質問するときのヒント

コードの書き方について

teratailには、コードを見やすく表示する機能があります。
質問編集画面を開き、コードを選択した状態で<code>ボタンを押してください。
C

投稿2018/10/10 03:50

編集2018/10/10 08:29
LouiS0616

総合スコア35660

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

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

nishimuu

2018/10/10 04:11

なぜint/intだとおかしな数字になるのでしょうか?
LouiS0616

2018/10/10 04:12

int/intはintを返すと言語仕様で決まっているからです。 正数同士の除算の場合は、小数点以下切り捨てになるはずです。
nishimuu

2018/10/10 09:32

ありがとうございました。
LouiS0616

2018/10/10 09:40

いや、『宿題であることを伏せろ』という意味では無かったのですが... 解答(狭義にはそのまま動くコード) を求めるのがまずいんであって、宿題のアドバイスを常識的な範囲で求めるのは問題ないんじゃないでしょうか。
guest

0

簡潔に書くなら関数化したほうがよいですね。

c

1#include <cassert> 2#include <math.h> 3#include <stdio.h> 4 5/** 6 @brief オイラー定数を num_terms 項まで計算する。 7 @param n 計算する項数 8 @return オイラー定数 9 */ 10double calcEulerConstant(int num_terms) 11{ 12 assert(n >= 1); 13 14 double sum = 0; 15 for (int i = 1; i <= n; ++i) { 16 sum += 1. / i; 17 } 18 19 return sum - log(n); 20} 21 22int main() 23{ 24 int num_terms[] = {1000, 10000, 100000, 1000000, 10000000, 100000000}; 25 for (int i = 0; i < sizeof(num_terms) / sizeof(num_terms[0]); ++i) 26 printf("r(%d) = %.15f\n", max[i], calcEulerConstant(max[i])); 27}
r(1000) = 0.577715581568206 // 3桁まで一致 r(10000) = 0.577265664068165 // 4桁まで一致 r(100000) = 0.577220664893106 // 4桁まで一致 r(1000000) = 0.577216164900715 // 5桁まで一致 r(10000000) = 0.577215714898951 // 6桁まで一致 r(100000000) = 0.577215669900188 // 8桁まで一致

Wolframe Alpha の答え

0.577215664901532860606512090082402431042159335939923598805

投稿2018/10/10 04:07

編集2018/10/10 04:09
tiitoi

総合スコア21956

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問