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

このQ&Aのポイント
  • C言語を学習し始めた者です。三角形の3辺を入力し、その面積を出すプログラムを書きましたが、面積の計算が正しく行われない問題があります。
  • プログラムの問題の原因を特定するために、コードを確認しました。面積の計算式が正しくありません。必要な変数の初期化が行われていないため、計算結果が正しくないのです。
  • 修正するために、変数の初期化を正しく行う必要があります。また、入力の前に変数を初期化し、その後に面積の計算式を正しく記述することも重要です。
回答を見る
  • ベストアンサー

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

こんにちは。 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"); } }

質問者が選んだベストアンサー

  • ベストアンサー
  • ottimisto
  • ベストアンサー率72% (8/11)
回答No.2

入力の後に計算式を書きましょう。 s=(a+b+c)/2; S=sqrt(s*(s-a)*(s-b)*(s-c)); は、scanfの後です。

qqlily
質問者

お礼

ありがとうございます!

その他の回答 (3)

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.4

3辺の組合せが三角形を構成する条件は、 「3辺の和の半分が正である」ことではありません。 1)3辺とも正 2)2辺の和が、他の1辺より大きい この2つです。

qqlily
質問者

お礼

ありがとうございます!

  • maiko0318
  • ベストアンサー率21% (1483/6970)
回答No.3

sとSは紛らわしいので一方しか使わないようにしたらいいよ。

qqlily
質問者

お礼

そうします!ありがとうございます!

  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.1

入力と計算の順番が逆。 三角形の長さを入力してから面積を計算すること。 あと、s*(s-a)*(s-b)*(s-c)が正であることを確認してから、sqrt(s*(s-a)*(s-b)*(s-c))を計算しないとエラーになることがある。

qqlily
質問者

お礼

ありがとうございます!

関連するQ&A

  • ヘロンの公式を作ったプルグラムなのですが、プログラムの間違いを教えてください。

    プログラムの間違いを教えてください ヘロンの公式を作ったプログラムなんですが・・・ #include <stdio.h> #include <math.h> void main(void) { float a,b,c,s,x; printf("三角形の三辺の長さを入れてください\n"); printf("a="); scanf("%f",&a); printf("b="); scanf("%f",&b); printf("c="); scanf("%f",&c); s=(a+b+c)/2; x= sqrt(s*(s-a)*(s-b)*(s-c)); printf("\n%f",x); }

  • 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++でのプログラムについての質問です

    このような二次関数の解を求めるプログラムを作成したのですが、自作関数solveをvoid solve(double, double, double)のように変更し同じ動作をするように変更したいです どのようにへんこうすればよいでしょうか #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言語でのプログラミングがsqrtのところで常にエラーしてしまいます。どこがおかしいのか、おしえてください。 問・三角形の三辺の長さを入力し、ヘロンの公式を利用して面積を求めなさい。 #include <stdio.h> main() { double a,b,c,s,S; printf("Enter 3 numbers"); scanf("%lf %lf %lf",&a,&b,&c); s=(a+b+c)/2; S=sqrt(s*(s-a)*(s-b)*(s-c)); printf("area = %f\n",S); } [EOF] 常に表示されるエラー (1)In fuction `main': (2)type mismatch in implicit declaration for built-in function `sqrt' (3)undefined reference to `sqrt' お願いします。

  • 虚数解の表示

    Ax^2+Bx+Cの形の二次関数の解を計算するプログラムです #include <stdio.h> #include <math.h> int main(void) { double a,b,c,d,x1,x2,real,image; printf("A="); scanf("%lf",&a); printf("B="); scanf("%lf",&b); printf("C="); scanf("%lf",&c); if(a==0){x1=-c/b; printf("X=%5.2lf\n",x1); } if(a!=0.0){d=sqrt(pow(b,2.0)-4*a*c); if(d<0.0){ real=(-b)/(2*a); image=sqrt(-d)/(2*a); printf("実数=%5.2lf\n",real); printf("虚数=±%lfi\n",image);} else if(fabs(d)<0.0){ x1=(-b)/(2*a); printf("X=%5.2lf\n",x1);} else if(d>0.0){ x1=(-b+sqrt(d))/(2*a); x2=(-b-sqrt(d))/(2*a); printf("X1=%5.2lf\n",x1); printf("X2=%5.2lf\n",x2);} } return 0;} 判別式d<0、d>0、d=0で分けています 判別式dが負になるとき(虚数解の部分)はそのままではsqrtが使えないので、-dを入れてみたのですがうまくいきません どのように修正すればよいのかご教示願います よろしくお願いします

  • 平均を求めるプログラムを作ったのですが答えが0.0

    としか出ません。 #include<stdio.h> void main (void) {   double a; double b;   double c; printf("Aを入力する"); scanf("%lf",&a); printf("Bを入力する"); scanf("%lf",&b); c=(2*a*b)/(a+b); printf("平均値は"); printf("%8.6lf",c); } というプログラムを作ったのですが、プログラムはコンパイルするのですが出てくる答えは0.000000しか出ません。ほかにもよく0.0000という答えが出ることがあります。原因を教えていただけませんでしょうか。 

  • プログラムの作成

    Cで、キ-ボ-ドから整数を1個(mとする)、実数を1個(xとする)それぞれ入力し、 S=Σ(n=0からmまで)1/2n+1×(x-1/x+1)^2n+1 の値を求めるプログラムを作ってみたのですが、あってるかどうかわかりますか? #include<stdio.h> #include<math.h> main() { double y=0; int i,m,x; printf(\" Input m: \") scanf(\"%lf\", &m); printf(\" Input x: \") scanf(\"%lf\", &x); for(i=0; i <= m; i++) { y += 1/(2*i+1)*pow((x-1)/(x+1),2*i+1) } printf(\" S = %d\n\", y) }

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

    こんにちは。 C言語を学習し始めた者です。 入力した円をユーロとドルに替えるというプログラムで、下のように書きました。 しかし、実行結果が、何円でも、0.00ドル、0.00ユーロになってしまいます。 間違いを教えてください #include <stdio.h> main() { double Y,E,D; E=Y/132.12; D=Y/101.48; printf("金額(円)を入力せよ:",Y); scanf("%lf",&Y); printf("%lf円は%.2lfユーロになります。\n",Y,E); printf("米ドルでは、%.2lfドルです。\n",D); }

  • 三角形OABの面積を求めるプログラム

    三角形OABの面積を求めるプログラムを作りました(課題ですがw)。が、うまく動かないんです。 どこが間違っているか教えてください。(VC++6.0) /*三角形OABの面積を求めるプログラム*/ #include <stdio.h> #include <math.h> void main(){ float ax,ay,bx,by,s; printf("点Aの座標を入力してください。\n"); scanf("%f%f",&ax,&ay); printf("点Bの座標を入力してください。\n"); scanf("%f%f",&bx,&by); s=(1/2)*abs(ax*by-ay*bx); printf("三角形OABの面積は%fです。\n",s); } ◇点A(ax,ay) 、点B(bx,by) 面積の公式s=(1/2)*|ax*by-bx*ay| と与えられています。 また、警告の意味もわからないんで、できればお願いします。

  • ソースの確認をお願いします

    No736058で質問した者です。 あのあとやってみたんですが、「解なし」としか出てきません。なぜなんでしょうか、教えてください。 /*二次方程式の解*/ #include<stdio.h> #include<math.h> main() { double a,b,c,d,e; printf("y=a*x^2+b*x+cとするとき\n"); printf("aに実数値を入力してください。\n"); scanf("%f",&a); printf("bに実数値を入力してください。\n"); scanf("%f",&b); printf("cに実数値を入力してください。\n"); scanf("%f",&c); e=b*b-4*a*c; if(e>=0) { d=(-b+sqrt(e))/2*a; printf("%f\n",d); } else { printf("実数解なし"); } } お願いします。

専門家に質問してみよう