複数の関数の使い方

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

複数の関数の使い方

#1

投稿記事 by アカネ » 8年前

関数の勉強をしているのですが、多少省略しておりますが三角形の3辺の長さa,b,cを入力して、面積を求めたいのですが、
関数をまたいで面積を求めるのに、8行目と9行目の部分のreturnからareaの関数にいき、面積を求める方法が分かりません。
よろしくお願いします。

コード:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

double sqre(double a, double b, double c)
{

	if (a + b > c&&c > abs(a - b)) return (a, b, c);

	else printf("三角形ではない\n"); return 0;
}

double area(int a, int b, int c)
{
	int s;
	s = (a + b + c / 2);

	return s;
}

int main(void)
{
	int a, b, c;

	printf("A");
	scanf("%d",a);

	printf("B");
	scanf("%d",b);

	printf("C\n");
	scanf("%d",c);

	printf("三角形の面積は%lfです。\n", area(a, b, c));

	return 0;

}

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 複数の関数の使い方

#2

投稿記事 by みけCAT » 8年前

アカネ さんが書きました:関数をまたいで面積を求めるのに、8行目と9行目の部分のreturnからareaの関数にいき、面積を求める方法が分かりません。
area関数は「8行目と9行目の部分のreturn」より下にあるので、C++ならばまずプロトタイプ宣言をしなければいけません。
C言語ではプロトタイプ宣言をする必要は(警告をエラーとして扱うなどの特殊な状況でなければ)ありませんが、した方がいいです。

プロトタイプ宣言をしたら、普通に関数を呼び出すだけでいいでしょう。

ついでに他の場所も修正してみました。

コード:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

double area(int a, int b, int c); /* プロトタイプ宣言 */

double sqre(double a, double b, double c)
{

	/* stdlib.hのabs関数で実数の絶対値を求めることはできません */
	if (a + b > c&&c > fabs(a - b)) return area(a, b, c); /* 普通に関数を呼び出す */

	else printf("三角形ではない\n"); return 0;
}

double area(int a, int b, int c)
{
	int s;
	/* この式で三角形の面積は求まりませんが、省略しただけですよね? */
	s = (a + b + c / 2);

	return s;
}

int main(void)
{
	int a, b, c;

	/* scanfでデータを読み込むには、ポインタを渡さなければいけません */
	printf("A");
	scanf("%d",&a);

	printf("B");
	scanf("%d",&b);

	printf("C\n");
	scanf("%d",&c);

	/* printf(系の)関数でdouble型の値を出力するには、%lfではなく%fを用いるべきです */
	printf("sqre関数の戻り値は%fです。\n", sqre(a, b, c)); /* せっかくなのでsqre関数を呼んでみる */
	printf("三角形の面積は%fです。\n", area(a, b, c));

	return 0;

}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

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

Re: 複数の関数の使い方

#3

投稿記事 by box » 8年前

コード:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int check(int a, int b, int c)
{
    return a > 0 && b > 0 && c > 0 && a + b > c && b + c > a && c + a > b;
}

double area(int a, int b, int c)
{
    double s;

    if (check(a, b, c)) {
        s = (a + b + c) / 2.0;
        return sqrt(s * (s - a) * (s - b) * (s - c));
    }
    else {
        printf("not triangle\n");
        exit(1);
    }
}

int main(void)
{
    int a, b, c;

    printf("A=");
    scanf("%d", &a);

    printf("B=");
    scanf("%d", &b);

    printf("C=");
    scanf("%d", &c);

    printf("三角形の面積は%fです。\n", area(a, b, c));
    return 0;
}
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

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

Re: 複数の関数の使い方

#4

投稿記事 by box » 8年前

コード:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

double area(int a, int b, int c)
{
    double s;

    s = (a + b + c) / 2.0;
    return sqrt(s * (s - a) * (s - b) * (s - c));
}

void check(int a, int b, int c)
{
    if (a > 0 && b > 0 && c > 0 && a + b > c && b + c > a && c + a > b) {
        printf("面積=%f\n", area(a, b, c));
    }
    else {
        printf("not triangle\n");
    }
}

int main(void)
{
    int a, b, c;

    printf("A=");
    scanf("%d", &a);

    printf("B=");
    scanf("%d", &b);

    printf("C=");
    scanf("%d", &c);

    printf("cheking a, b and c...\n"), check(a, b, c);
    return 0;
}
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

アカネ

Re: 複数の関数の使い方

#5

投稿記事 by アカネ » 8年前

色々なコードありがとうございます。

参考になりました。

閉鎖

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