• 締切済み

初心者な質問その4

******************************************** #include <math.h> double heron(double a,double b,double c){ double s,s2; s = a+b+c s /= 2.0; s2 = s*(s-a)*(s-b)*(s-c); if(s2 <= 0.0) return(-1); return sqrt(s2); } ******************************************** 三角形の問題です。(*引数a,b,cは三角形の三辺の長さ(正値)を与える) (1)戻り値(return value)が「-1」である場合何を意味するか (2)戻り値が正の場合、その値は何を意味するか (3)a,b,cに各々5,4,3を与えた場合の戻り値 についてお願いします。

みんなの回答

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.1

(1)その3に回答しましたので、そちらの(1)を参照願います。 (2)戻り値として与えられる値は以下のようになります。 sqrt(s*(s-a)*(s-b)*(s-c)) ただし、s=(a+b+c)/2 この公式は、3角形の面積を求めるものです。 (3)(2)より、6.0になる…はずですが、桁落ちの結果数値が変わる可能性があります。 したがって、この回答は「自信なし」にさせていただきます。

関連するQ&A

  • 初心者な質問その3

    ******************************************** int sankaku(double a,double b,double c){ double s,s2; int flag=0; s = a+b+c s /= 2.0; s2 = s*(s-a)*(s-b)*(s-c); if(s2 <= 0.0) return(-1); if(a==b)flag++; if(b==c)flag++; if(c==a)flag++; return (flag); } ******************************************** 三角形の問題です。(*引数a,b,cは三角形の三辺の長さ(正値)を与えるの) (1)戻り値(return value)が「-1」である場合何を意味するか (2)二等辺三角形の場合の戻り値 (3)正三角形の場合の戻り値 についてお願いします。

  • 関数におけるif文とreturn文について

    ◎1-------------------------------------------- #include<stdio.h> #include<math.h> double maxdt(double a,double b); void disp_sqrt(double n); int main(void) { double mx; mx=maxdt(22.33,44.55); printf("mx=%f\n",mx); disp_sqrt(3.0); disp_sqrt(-6.0); return 0; } double maxdt(double a,double b) { if(a>b) return a; else return b; } void disp_sqrt(double n) { if(n<=0.0) return; printf("%f の平方根=%f\n",n,sqrt(n)); } ----------------------------------------------- ◎2------------------------------------------- #include<stdio.h> #include<math.h> double maxdt(double a,double b); void disp_sqrt(double n); int main(void) { double mx; mx=maxdt(22.33,44.55); printf("mx=%f\n",mx); disp_sqrt(3.0); disp_sqrt(-6.0); return 0; } double maxdt(double a,double b) { if(a>b) return a; else return b; } void disp_sqrt(double n) { if(n<=0.0){ return; printf("%f の平方根=%f\n",n,sqrt(n)); } } ----------------------------------------------- ◎3-------------------------------------------- #include<stdio.h> #include<math.h> double maxdt(double a,double b); void disp_sqrt(double n); int main(void) { double mx; mx=maxdt(22.33,44.55); printf("mx=%f\n",mx); disp_sqrt(3.0); disp_sqrt(-6.0); return 0; } double maxdt(double a,double b) { if(a>b) return a; else return b; } void disp_sqrt(double n) { if(n<=0.0){ return; } else{ printf("%f の平方根=%f\n",n,sqrt(n)); } } -------------------------------------------------- ◎1は参考書を参考に作ったものです。 ◎1は正常に動きます。 以上3つのプログラムで、疑問に思ったのは、関数「void disp_sqrt(double n);」についてなのですが、自分はif文が文が1つでもカッコ{ }を付けたい考えなので、◎1の「void disp_sqrt(double n)」の関数のif文に{}を付けようと思い、まず◎2のように変えたところ、平方根の表示が何も出ませんでした。 return文も文の1つだと考え、◎3のような形は正常に動きました。 return文とprintf文の2つの文があるという考えは間違っているのでしょうか? 後、◎1は何故{ }が無くてもよく、◎2は何も表示されないのでしょうか? 教えていただけると嬉しいです。

  • ax^2+bx+c=0の解を求めたいのですが・・(初歩的です)

    タイトル通り、a、b、cを入力させて、ax^2+bx+c=0の解xを求めたいのですが、結果をどう求めればいいのか、実解・虚数解・重解の場合をどうしたらいいのか、の2点がよくわかりません。 #include<math.h> #include<stdio.h> double sqrt(double a,double b,double c) { return (b*b-4*a*c); } main(void) { double a,b,c,sqrt,ans; do{ printf("ax^2 + bx +c = 0 の解 x を求めます。\n a,b,cを入力してください。\n"); printf("a : "); scanf("%lf",&a); printf("\nb : "); scanf("%lf",&b); printf("\nc : "); scanf("%lf",&c); if(a = 0){ printf("a は0以外を入力してください。\n"); } }while(a = 0); ans = (-b+dist(a,b,c))/(2*a); printf("%lf", ans); printf("\n"); return(0); } 他にも多々ダメな部分があると思いますがご指摘・アドバイス等いただけたらと思います。よろしくお願いします。

  • 書いたプログラムの間違いを教えてください

    こんにちは。 C言語を学習し始めた者です。 「三角形の3辺を入力し、その面積を出す」という課題で、下のように書き、実行しました。 しかし、面積がいつも-0.00になってしまいます。 どの部分が間違っているか教えてください。 #include <stdio.h> #include <math.h> main() { double a,b,c,s,S; s=(a+b+c)/2; S=sqrt(s*(s-a)*(s-b)*(s-c)); printf("三角形の長さを入力:"); scanf("%lf %lf %lf",&a,&b,&c); if(s>0){ printf("面積は%.2lfです。\n",S); } else{ printf("これは三角形ではありません。\n"); } }

  • C言語で直角三角形の斜辺を求めるプログラムについて

    「二辺の長さが与えられているとき、斜辺の長さを求めよ」という問題です。 #include <stdio.h> #include <math.h> #define a 3 #define b 4 int main (void) { double c=0; c=sqrt(a*a+b*b); printf("%f",c); return 0; } visual2010c++で作ったんですが、sqrtに下線がついて、コンパイルエラーしちゃいます。 すんごい初歩的なことなんだと思いますが、どこなのか気づけません。 どなたかよろしくお願いします。

  • 初心者です。

    お世話になっています また、みなさんのお力をお貸しください。 いま、わからないところは、 例:Aに "0000" や "001" や "-01"- や "--1" などの整数以外の入力(マイナスと小数点は、入力可能とする)が  おこなわれた時、にエラーとしてはじきたいのですが、はじけない  です。 /* * ソース名:kadai001.c * ソース機能の説明:入力された二つの文字の比較 */ #include <stdio.h> #include <ctype.h> #define MAX 12 /* 読み込み文字数 */ /* 関数 Maxof() * 機能 入力されたAとBの値の大小関係を表示 * ・AはBより大きい場合 * ・AはBより小さい場合 * ・AはBが同じの場合 * 引数 x Aの値 * y Bの値 * 戻り値 無し */ void Maxof(char *x, char *y) { if (strcmp(x , y) == 0){ /* AはBが同じの場合 */ printf("A(%s)はB(%s)と同じ\n", x, y); } else if (strcmp(x , y) > 0){ /* AはBより大きい場合 */ printf("A(%s)はB(%s)より大きい\n", x, y); } else { /* AはBより小さい場合 */ printf("A(%s)はB(%s)より小さい\n", x, y); } } /* 関数 NuryokuA() * 機能 Aの値の入力を行う * ・エラー1場合 * ・エラー2場合 * ・エラー3場合 * 引数 na Aの値 * 戻り値 0 */ char NuryokuA(char *na) { char temp_na[MAX]; /* Aの値 */ char remit_na; /* 格納する文字の制限 */ do {/* Aの値がエラー文字の場合はループ */ printf("Aの値を入力してください。:"); if (fgets(na, sizeof na, stdin) == NULL) return 1; }while (sscanf(na, " %[-.0123456789] %c", temp_na, &remit_na) != 1 || Error_syori( na ) == 1 || strlen(temp_na) != MAX); return 0; } /* 関数 NuryokuB() * 機能 Bの値の入力を行う * ・エラー1場合 * ・エラー2場合 * ・エラー3場合 * 引数 nb Bの値 * 戻り値 0 */ char NuryokuB(char *nb) { char temp_nb[MAX]; /* Bの値 */ char remit_nb; /* 格納する文字の制限 */ do {/* Bの値がエラー文字の場合はループ */ printf("Bの値を入力してください。:"); fgets(nb, sizeof nb, stdin); }while (sscanf(nb, " %[-.0123456789] %c", temp_nb, &remit_nb) != 1 || strlen(temp_nb) != MAX); return 0; } int main(void) { char A_data[MAX]; /* Aの値 */ char B_data[MAX]; /* Bの値 */ NuryokuA(A_data); NuryokuB(B_data); Maxof(A_data, B_data); return 0; }

  • x^2+2x+1=0

    x^2+2x+1=0をとく関数プログラムです。 うまくできません。どこが間違っているのでしょうか。 教えて下さい。 #include<stdio.h> #include<math.h> void input_keisuu(double a,double b,double c); void solve(double a,double b,double c); int main(void) { double a,b,c; input_keisuu(a,b,c); solve(a,b,c); return 0; } void input_keisuu(double a,double b,double c) { puts("二次関数a*x^2+b*x+c=0を解きます。"); a=1; b=2; c=1; puts("a=1"); puts("b=2"); puts("c=1"); } void solve(double a,double b,double c) { double d; double x; d=b*b-4*a*c; printf("判別式d= %f\n",d); x=(-b+ sqrt(d))/(2*a); printf("二つの解のうち大きい方はx=%f\n",x); }

  • C言語についての質問です

    プログラミング初心者です if関数を使用して二次方程式の解を解くプログムを作成したのですが、この作成した関数をユーザー定義関数を使用しmain 関数の中でユーザー定義関数を呼び出すことにより、 2次方程式の解を求めるプログラムへ変更したいのですが、どのように行えばいいのか分かりません… 私が作成したプログラムはこのようなものになっています #include<stdio.h> #include<stdlib.h> #include<math.h> int main(void) { double a, b, c; /*二次方程式の定数*/ double D, x1, x2, r1, r2; printf("ax^2 + bx + c = 0 の係数 a, b, c を入力してください---> \n"); scanf_s("%lf %lf %lf", &a, &b, &c); printf("2次方程式を解いた結果は次の通りとなる。\n"); if (a == 0.0) { if (b == 0.0) { printf("係数がおかしい\n"); exit(-1); } { x1 = -c / b; printf("解は%f です。\n", x1); exit(0); } } else { D = b * b - 4 * a * c; if (D >= 0) { x1 = (-b + sqrt(D)) / (2.0 * a); x2 = (-b - sqrt(D)) / (2.0 * a); if (D == 0.0) { printf("解は %f です。\n", x1); } else { printf("解は %f と %f です。¥n", x1, x2); } } else { r1 = -b / (2 * a); r2 = sqrt(-D) / (2 * a); printf("解は%.2f+%.2fi と%.2f-%.2fi \n", r1, r2, r1, r2); } } return 0; } よろしくお願いいたします

  • C言語 2次方程式の解を求めるプログラム

    ポインタを使った2次方程式の解を求めるプログラムを作りたいのですが、どこが間違っているのか分かりません。 #include<stdio.h> #include<math.h> int quadEq(int a, int b, int c, double *px1, double *px2) int main() { int a,b,c,s; double x1,x2; printf("?"); scanf("%lf",&a); printf("?"); scanf("%lf",&b); printf("?"); scanf("%lf",&c); if((s=quedEq(a,b,c, &x1, &x2))==2){ printf("%f %f", x1,x2); // 解が二つ } else if(s==1){ printf("%f", x1);// 重解 } else { printf("No real solution");// 虚数解 } } int quadEq(int a, int b, int c, double *px1, double *px2) { int d = b*b-4*a*c; if(d>0){ *px1 = (-b+sqrt(d))/(2*a); *px2 = (-b-sqrt(d))/(2*a); return 2; } else if(d==0) { *px1=-b/2*a; *px2=-b/2*a; return 1; } else { return 0; } } エラーは mondai.c: 関数 ‘quadEq’ 内: mondai.c:5:1: エラー: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before {’ token { ^ mondai.c:26:1: エラー: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token { ^ mondai.c:39:1: エラー: expected ‘{’ at end of input } ^ となりました。括弧の位置の間違いや入れ忘れはないと思うのですが、何か根本的なミスがあるのでしょうか。添削お願いします。

  • 空間上の四面体の体積

    C言語で空間上の四面体の体積を求めるプログラムを作りたいんですが、どうすればいいのかわかりません。 構造体を使って空間上(三次元)の4点A,B,C,Dの座標を定義するのですが。 四面体の求め方もわかりません。ヘロンの公式じゃ求められませんよね(^^; 空間上の三角形の面積を求めるプログラムを作ってみました。 少しでも参考になれば幸いです。 よろしくお願いします。 #include <stdio.h> #include <math.h> int main(void) { double AB, BC, CA, s, m; struct zahyo { double x; double y; double z; }A, B, C; scanf("%lf %lf %lf",&A.x,&A.y,&A.z); scanf("%lf %lf %lf",&B.x,&B.y,&B.z); scanf("%lf %lf %lf",&C.x,&C.y,&C.z); AB=sqrt((A.x-B.x)*(A.x-B.x)+(A.y-B.y)*(A.y-B.y)+(A.z-B.z)*(A.z-B.z)); BC=sqrt((B.x-C.x)*(B.x-C.x)+(B.y-C.y)*(B.y-C.y)+(B.z-C.z)*(B.z-C.z)); CA=sqrt((C.x-A.x)*(C.x-A.x)+(C.y-A.y)*(C.y-A.y)+(C.z-A.z)*(C.z-A.z)); printf("AB=%lf\nBC=%lf\nCA=%lf\n",AB,BC,CA); s=(AB+BC+CA)/2; m=sqrt(s*(s-AB)*(s-BC)*(s-CA)); printf("m=%lf\n",m); return 0; }

専門家に質問してみよう