C言語[ポインタ変数を使用したプログラムの修正]

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
すし郎

C言語[ポインタ変数を使用したプログラムの修正]

#1

投稿記事 by すし郎 » 2年前

目的:「いくつかの間違いを修正し、適切な実行結果を出す。」
以下のプログラムのどこを変えればよいのか、修正部分について教えてください。
#include <stdio.h>
int main(void){

double data[]={1.6,5.3,-1.5,8.2,1.7,-4.0,1.8,1.6};
double *p;

p=data;

while(*p>0){
printf("%0.1f\n",*p);
(*p)++;
}

return 0;
}

以下の3つを修正してみましたが、実行結果で数字が∞に出てきてしまいます。
5行目:修正前「&p」→修正後「*p」
10行目:前「%0.1d」→後「%0.1f」
11行目:前「p++」→後「(*p)++」

box
記事: 2002
登録日時: 13年前

Re: C言語[ポインタ変数を使用したプログラムの修正]

#2

投稿記事 by box » 2年前

修正の一例です。

コード:

#include <stdio.h>

int main(void)
{
    double data[] = { 1.6, 5.3, -1.5, 8.2, 1.7, -4.0, 1.8, 1.6, 0 };
    double *p;

    for (p = data; *p; p++) {
        printf("%0.1f\n", *p);
    }
    return 0;
}
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

box
記事: 2002
登録日時: 13年前

Re: C言語[ポインタ変数を使用したプログラムの修正]

#3

投稿記事 by box » 2年前

11行目:前「p++」→後「(*p)++」
これが最悪の改修です。
これは、配列の先頭要素である1.6を出力した後、
「その値に1を加え」た値を

コード:

while (*p > 0)
である間ずっと出力し続けますので、
1.6
2.6
3.6
4.6
...
と無限に出力されます。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

すし郎

Re: C言語[ポインタ変数を使用したプログラムの修正]

#4

投稿記事 by すし郎 » 2年前

ご指摘ありがとうございます!!

返信

“C言語何でも質問掲示板” へ戻る