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

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

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

#1

投稿記事 by masuter » 11ヶ月前

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

課題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関数内で受け取ってエラーメッセージを表示すればいいのか分かりません。

コード: 全て選択

#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;
}

白い変人

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

#2

投稿記事 by 白い変人 » 11ヶ月前

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

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

以下、修正例。

コード: 全て選択

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;
}
 

box
記事: 1688
登録日時: 7年前

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

#3

投稿記事 by box » 11ヶ月前

コード: 全て選択

#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;
}
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

返信

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