合計 昨日 今日

円の面積と円周を求めるプログラムを作っています。

フォーラムルール
フォーラムルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Name: masuter
[URL]
Date: 2017年5月15日(月) 17:19
No: 1
(OFFLINE)

 円の面積と円周を求めるプログラムを作っています。

現在、次の課題が出ています。

課題2(2)(2-2.c)
以下を満たすプログラムを完成させよ。
(1)半径 r の値(float型)を引数として受け取り,円の面積S(float型)を計算して返す関数float circle_S(float r)を定義。
(2)半径 r の値(float型)を引数として受け取り,円周の長さL(float型)を計算して返す関数float circle_L(float r)を定義。
(3)上記2つの関数内で,引数として渡された値をチェックし,負の場合は特別な値として-1を返して,main関数でエラーメッセージを表示すること。
(4)main関数でrを入力し,上記2つの関数を呼び出して面積と円周を表示。円周率PIはdefineで3.14159と定義しておくこと。
 <実行例>
半径rを入力してください: 10
面積Sは314.159(cm2)です.
円周Lは62.831(cm)です.

ほぼ完成しているのですが、(3)が分かりません。各関数で半径の値をチェックして半径 < 0ならば -1 を返すというところまではできました。けど、その値をどうやってmain関数内で受け取ってエラーメッセージを表示すればいいのか分かりません。
コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <stdio.h>
 
#define PI 3.14159;
 
float Circle_S(float r) {
    if (r < 0) {
        return -1;
    }
    float result1 = 0;
    result1 = r*r*PI;
    return result1;
}
float Circle_L(float r) {
    if (r < 0) {
        return -1;
    }
    float result2 = 0;
    result2 = r*2*PI;
    return result2;
}
int main() {
    float radius = 0;
    float result1 = 0;
    float result2 = 0;
    printf_s("半径を入力してください\n>");
    scanf_s("%f",&radius);
    result1 = Circle_S(radius);
    result2 = Circle_L(radius);
    printf_s("面積S = %f \n\n円周L = %f\n", result1, result2);
       return 0;
}

Name: 白い変人
[URL]
Date: 2017年5月15日(月) 17:31
No: 2
(OFFLINE)

 Re: 円の面積と円周を求めるプログラムを作っています。

Circle_S,Circle_L共に、エラーの際には-1を返すという仕様なのですから、-1が返却された場合にエラーメッセージを表示すれば良いだけだと思いますけどね。

ただ返却値がfloat型である事を考慮すると、コンパイラに依っては、正確に-1と判定されるのかどうかは、明言出来ない場合があるという事を考慮すると、負数の場合にエラーメッセージを表示するという仕様にすればこの問題は回避可能かと。

以下、修正例。

コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int main() {
    float radius = 0;
    float result1 = 0;
    float result2 = 0;
    printf_s("半径を入力してください\n>");
    scanf_s("%f",&radius);
    result1 = Circle_S(radius);
    result2 = Circle_L(radius);
 
    //ここから
 
    if(result1<0.0f || result2<0.0f){
        printf("エラーだよ。");
        return 1;
    }
 
    //ここまで
 
 
    printf_s("面積S = %f \n\n円周L = %f\n", result1, result2);
       return 0;
}

Name: box
[URL]
ハッカー(262,140 ポイント)
Date: 2017年5月16日(火) 01:10
No: 3
(OFFLINE)

 Re: 円の面積と円周を求めるプログラムを作っています。

コード[C]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <stdio.h>
 
#if 0
#define PI 3.14159;     // 最後のカンマは不要
#endif
#define PI 3.14159
 
float Circle_S(float r)
{
    // この辺の余分な変数定義や初期化は不要で、単に面積の値を返せばよい
    // その方がプログラムが簡単になる
    // 同じ結果を得るんだったら、コード量が少ない方がよいと思う
    // float result1 = 0;
    // result1 = r*r*PI;
    // return result1;
    return (r < 0) ? -1 : PI * r * r;
}
 
float Circle_L(float r)
{
    // 上に同じ
    // float result2 = 0;
    // result2 = r*2*PI;
    // return result2;}
    return (r < 0) ? -1 : 2 * PI * r;
}
 
int main(void){
    // ここの初期化も不要。定義だけしておけばよい
    // float radius = 0;
    // float result1 = 0;
    // float result2 = 0;
    float radius, area, round;
 
    printf("半径rを入力してください: ");
    scanf("%f", &radius);
    if (((area = Circle_S(radius)) == -1) || ((round = Circle_L(radius)) == -1)) {
        printf("半径の値がおかしい\n");
    }
    else {
        printf("面積Sは%.3f(cm2)です.\n", area);
        printf("円周Lは%.3f(cm)です.\n", round);
    }
    return 0;
}
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。


Return to C言語何でも質問掲示板

オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[6人]