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

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

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

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

5回答

5764閲覧

c言語 等比数列

hatenapc

総合スコア11

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

1クリップ

投稿2015/11/23 16:15

編集2015/11/24 02:47

解決済
ここまで書いたのですが意味不明な数字がでます。
#include<stdio.h>
int main(void)

{
int i,n;
double a,r,z,y;

printf("a"); scanf("%lf",&a); printf("n"); scanf("%d",&n); printf("r"); scanf("%lf",&r); for(i=0; i<=n-1; i++ ) { z=z*r; y=a*z; printf("%f\n",y); } return 0;

}

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

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

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

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

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

ikuwow

2015/11/24 01:51

エラーメッセージが出ているのであれば、そちらの記載もお願い致します。また、コードはMarkdown記法でシンタックスハイライトしていただけると助かります。
guest

回答5

0

ベストアンサー

zを初期化していないので不正な値になっているのだと思います。C言語では変数を定義しただけでは初期化されず、ゴミデータが格納されていることがあります。
forループに入る前にzを初期化(0ではなく1を代入)すれば良いでしょう。

投稿2015/11/23 16:59

編集2015/11/23 17:05
catsforepaw

総合スコア5938

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

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

KiyoshiMotoki

2015/11/23 17:01

0ではなく、1ですね。 0で初期化すると、  z=z*r; が必ず0になってしまいますので。
catsforepaw

2015/11/23 17:05 編集

おっと、そうでした。コードをよく読まずに適当なことを書いてしまいました。ご指摘ありがとうございます。
catsforepaw

2015/11/23 17:07

ご指摘通りに回答の方を修正しました。
hatenapc

2015/11/24 02:44

初期化を忘れていたために変な値が表示されていたようです。ありがとうございます!
guest

0

課題内容をそのまま書いたのでは、回答は得にくいとおもいます。

現時点でどんなコードを書いたか、どこで困っているかをしめすと、
回答 or アドバイスが得られると思います。

投稿2015/11/23 16:19

katoy

総合スコア22324

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

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

hatenapc

2015/11/23 16:30

アドバイスありがとうございます。 早速追記させていただきました。どうかご回答よろしくお願いします。
guest

0

zを1で初期化したとしても、現状最初に出力されるのがaではなくarになります。
計算の順番を変える等の対処が必要です。

投稿2015/11/23 18:23

swordone

総合スコア20651

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

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

0

コードはもう書けたとおもいます。
参考になるかはわかりませんが、
質問文のコードをベースに私なりに書いてみました。

  • 変数の宣言時に、初期値を設定するようにしました。
  • 計算結果の表示書式を工夫しました。
  • 変数の演算子の間に SPACE を入れました。

c

1#include<stdio.h> 2 3int main(void) 4{ 5 int n = 0; 6 double a = 0.0; 7 double r = 0.0; 8 double y = 0.0; 9 double z = 0.0; 10 11 printf("a: "); 12 scanf("%lf", &a); 13 printf("n: "); 14 scanf("%d", &n); 15 printf("r: "); 16 scanf("%lf", &r); 17 18 z = 1.0; 19 for (int i = 0; i <= n; i++) { 20 y = a * z; // i 項目 a * r * r ... (r を i 回乗算する) 21 printf("%2d:\t%12.6f\n", i, y); 22 z = z * r; 23 } 24 return 0; 25}

実行例:

$ gcc 1.c $ ./a.out a: 1 n: 10 r: 2 0: 1.000000 1: 2.000000 2: 4.000000 3: 8.000000 4: 16.000000 5: 32.000000 6: 64.000000 7: 128.000000 8: 256.000000 9: 512.000000 10: 1024.000000 $ ./a.out a: 1 n: 10 r: 0.5 0: 1.000000 1: 0.500000 2: 0.250000 3: 0.125000 4: 0.062500 5: 0.031250 6: 0.015625 7: 0.007812 8: 0.003906 9: 0.001953 10: 0.000977

投稿2015/11/24 14:09

katoy

総合スコア22324

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

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

hatenapc

2015/11/25 03:47

なるほど!とてもわかりやすいコードをありがとうございます!
guest

0

a,n,rを入力。

aを表示
arを表示
arrを表示
:
ですよね。

これを同じ式で表示できればループが使えそうですよね。

では、
aを表示
a=ar
aを表示
a=a
r
aを表示
a=ar
aを表示
a=a
r
aを表示

とすれば解決できそうですよね。

投稿2015/11/24 00:03

maiko0318

総合スコア876

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問