ページ 1 / 1
複数の関数の使い方
Posted: 2015年11月07日(土) 23:20
by アカネ
関数の勉強をしているのですが、多少省略しておりますが三角形の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;
}
Re: 複数の関数の使い方
Posted: 2015年11月07日(土) 23:27
by みけCAT
アカネ さんが書きました:関数をまたいで面積を求めるのに、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;
}
Re: 複数の関数の使い方
Posted: 2015年11月07日(土) 23:37
by box
コード:
#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;
}
Re: 複数の関数の使い方
Posted: 2015年11月08日(日) 00:31
by box
コード:
#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: 複数の関数の使い方
Posted: 2015年11月08日(日) 10:33
by アカネ
色々なコードありがとうございます。
参考になりました。