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

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

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

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

Q&A

解決済

4回答

2168閲覧

pow文を使わずに計算したい

forza

総合スコア21

C

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

0グッド

0クリップ

投稿2019/02/07 07:34

powを理解するために下記のことをpowを使用せずにfor文で表したいと考え

for (k = 0; k < 20; ++k) x=2; e += pow(x, k) ;

このようなfor文を作ってみたのですがpowを用いた時と異なる値が出てきました。
どのような修正が必要なのでしょうか?
ご回答宜しくお願いします。

for(k=0;k<=20;k++){ for(i=0;i<=k;i++){ x=2; e1=e1*x; } e+=e1; }

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

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

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

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

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

guest

回答4

0

ベストアンサー

e1をループごとに初期化する必要があるのではないかと思います。

C

1 for(k=0;k<=20;k++){ 2 e1 = 1; 3 for(i=0;i<=k;i++){ 4 x=2; 5 e1=e1*x; 6 } 7 e+=e1; 8 }

投稿2019/02/07 07:40

maisumakun

総合スコア145184

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

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

forza

2019/02/07 07:48

ご回答有難う御座います。 ご指摘の通り初期化を行うと希望に近い値が出てきました。 勉強になりました。
guest

0

C

1for (k = 0; k < 20; ++k) 2 x=2; 3 e += pow(x, k) ;

こっちはe += pow(x, k);のkはループしてるものではないです。
こっちのfor文でループしているのは

C

1for (k = 0; k < 20; ++k) 2 x=2;

ここだけです。

C

1 for(k=0;k<=20;k++){ 2 for(i=0;i<=k;i++){ 3 x=2; 4 e1=e1*x; 5 } 6 e+=e1; 7 }

こっちはfor文をちゃんと囲んでいるので全体がループされていますね。
ただ、iのループが1回多い気がしますが。

投稿2019/02/07 07:43

dice142

総合スコア5158

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

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

maisumakun

2019/02/07 07:45

おっと、読み間違えた!
dice142

2019/02/07 07:48

maisumakun様のご指摘が質問者様の本題だったようです!
forza

2019/02/07 07:50

dice142様 ご回答有難う御座いました。 for文をしっかり理解していなかったことがわかり、丁寧なご説明のお陰でとても勉強になりました。
guest

0

質問文のコードを私が誤解しているかもしれませんが、pow を使うコードと使わないコードを書いてみました。
rr.c

c

1#include <stdio.h> 2#include <math.h> 3 4#define COUNT (5) 5 6int main(void) { 7 int e = 0; 8 for (int k = 0; k < COUNT; ++k) { 9 e += pow(2, k); 10 printf("%d\n", e); 11 } 12 printf("\n"); 13 14 e = 0; 15 for (int k = 0; k < COUNT; ++k) { 16 e = e * 2 + 1; 17 printf("%d\n", e); 18 } 19 printf("\n"); 20 21 e = 1; 22 for (int k = 0; k < COUNT; ++k) { 23 e = e * 2; 24 printf("%d\n", e - 1); 25 } 26} 27

実行例
イメージ説明

投稿2019/02/07 16:52

編集2019/02/07 16:56
katoy

総合スコア22324

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

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

0

for (k = 0; k < 20; ++k) x=2; e += pow(x, k) ; ↓括弧が抜けていませんか? for (k = 0; k < 20; ++k) { x=2; e += pow(x, k); }

あと、e1が初期化されていません。

投稿2019/02/07 07:46

moonphase

総合スコア6621

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

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

forza

2019/02/07 07:51

ご回答有難う御座います。 e1の初期化が原因でした。お教え頂き感謝申し上げます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問