C++の宿題で・・・

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

C++の宿題で・・・

#1

投稿記事 by AIR » 14年前

[1] 質問文
 [1.1] どこが間違っているのか知りたい
 [1.2] ヘロンの公式を使い、三角形の面積を求めよ

コード:

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

double areatri(double a,double b,double c)
{
	double S=(a+b+c)/2;
	return sqrt(S*(S-a)*(S-b)*(S-c));
}

int main()
{
	double a,b,c;
	printf("三角形の3辺の長さを入力してください:");
	scanf("%lf %lf %lf",&a,&b,&c);
	printf("面積は%lfです\n",areatri);
	return(0);
}
 [1.3] 結果の面積が0.000000になってしまう(エラーは出ません)
 [1.4] アドレス演算子を使ってみたりして試行錯誤してみたのですがいかんせん上手くいきません・・・
   エラーが出ないためどこかで簡単なミスをしていると思うのですがどうしてもわかりません。
   去年C言語を習いその復習なのですが、まだ関数の扱いを上手く理解できていません・・・
   どうかお力添えをよろしくお願いします

[2] 環境  
 [2.1] OS : Windows7
 [2.2] コンパイラ名 : VC++ 2008
[3] その他
 ・C言語は配列、関数、構造体は学んであります。C++は今年から学ぶのでまだあまりわかりません。
 ・もしこの質問方法に不備があれば、それも教えてもらえるとありがたいです。

YuO
記事: 947
登録日時: 15年前
住所: 東京都世田谷区

Re: C++の宿題で・・・

#2

投稿記事 by YuO » 14年前

関数の呼び出しは,「関数名 ( 引数 )」という形をとります。
areatri関数を正しく呼び出す様にする必要があります。
# 関数名だけだと,その関数へのポインタとして扱われます。

AIR

Re: C++の宿題で・・・

#3

投稿記事 by AIR » 14年前

コード:

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

double areatri(double *a,double *b,double *c)
{
	double S=(*a+*b+*c)/2;
	return sqrt(S*(S-*a)*(S-*b)*(S-*c));
}

int main()
{
	double a,b,c;
	printf("三角形の3辺の長さを入力してください:");
	scanf("%lf %lf %lf",&a,&b,&c);
	printf("面積は%lfです\n",areatri(&a,&b,&c));
	return(0);
}
こういうことでしょうか?結果が出るようになりました!
今から計算が合っているか確かめてみます。ありがとうございました!

beatle
記事: 1281
登録日時: 14年前
住所: 埼玉
連絡を取る:

Re: C++の宿題で・・・

#4

投稿記事 by beatle » 14年前

解決になっていますが、areatriの引数をポインタにする必要はありません。ポインタにしないほうが一般的です。
なぜなら、areatri関数の中では引数の値を変更しないからです。

コード:

double areatri(double a,double b,double c)
{
    double S=(a+b+c)/2;
    return sqrt(S*(S-a)*(S-b)*(S-c));
}
areatri関数の引数を値渡しに変更しましたので、呼び出し側も改造します。

コード:

areatri(a,b,c)

AIR

Re: C++の宿題で・・・

#5

投稿記事 by AIR » 14年前

そうなんですか・・・間違いを正していただきありがとうございます!

non
記事: 1097
登録日時: 15年前

Re: C++の宿題で・・・

#6

投稿記事 by non » 14年前

printfは%lfでなく%fです。
non

AIR

Re: C++の宿題で・・・

#7

投稿記事 by AIR » 14年前

了解です!たびたび指摘していただきありがとうございます!

閉鎖

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