質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

3回答

168閲覧

欲しい値が出てきません

tyuing112

総合スコア8

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2018/02/27 08:39

編集2018/02/27 11:55

y=x^3-2x^2-3の解を求めるプログラムで下記ののように入力したのですが欲しい値が出てきません どなたか修正お願いします
#include<studio.h>
int main(){
float Ya,Yb,Yc,esp;
float A,B,C;
int i,itr;

printf(“Aの値を入力して下さい\n”);
scanf(“%f”,&A”)
printf(“Bの値を入力して下さい\n”);
scanf(“%f”,&B”)

itr=1000000;
esp=0.00001;

for(i=0;i<itr;i++){
C=(A+B)/2
Ya=(AAA)-(2AA)-3;
Yb=(BBB)-(2BB)-3;
Yc=(CCC)-(2CC)-3;

if(-esp<Yc<esp) {
printf(“解は%f,%f\n”,A,B);
return 0;
}
if(Ya*Yc<0){
B=C;
}
else{
A=c;
}
}
printf(“解は%f,%f\n”,A,B);
return 0;
}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tyuing112

2018/02/27 12:26

二分法を使っています
guest

回答3

0

ベストアンサー

こんにちわ。

他の方も指摘されていますが、提示されたソースコードはコンパイルできません。

以下に問題点を指摘します。

  1. インクルードファイル名は studio.h ではなく stdio.h です。

  2. printf関数の二重引用符が全角になっています。

  3. scanf関数の二重引用符が全角になっています。

  4. scanf関数の最後に;がありません。

  5. scanf(“%f”,&A”) の &Aの右にある二重引用符は不要です。(scanf(“%f”,&B”)も同様)

  6. C=(A+B)/2 の最後に;がありません。

  7. Cを計算する個所ではA,B,Cが実数なので C=(A+B)/2.0; と記述すべきです。

  8. Ya,Yb,Ycを計算する個所で同じ手続きを3回繰り返し書いています。

関数を利用して簡潔に記述すべきです。
9. if(-esp<Yc<esp) の箇所ではコンパイラがプログラマの意図を正確に評価できません。
if(-esp < Yc && Yc < esp) と記述すべきです。
10. A=c; ではなく A=C; が正しいです。

これくらいですかね。

以上の点を修正したコードを示します。

C

1/*include<studio.h> */ 2#include <stdio.h> 3 4float y(float x){ 5 return (x*x*x - 2.0*x*x - 3.0); 6} 7 8int main(){ 9float Ya,Yb,Yc,esp; 10float A,B,C; 11int i,itr; 12 13/*printf(“Aの値を入力して下さい\n”);*/ 14printf("Aの値を入力して下さい\n"); 15/*scanf(“%f”,&A”)*/ 16scanf("%f",&A); 17/*printf(“Bの値を入力して下さい\n”);*/ 18printf("Bの値を入力して下さい\n"); 19/*scanf(“%f”,&B”)*/ 20scanf("%f",&B); 21 22itr=1000000; 23esp=0.00001; 24 25for(i=0;i<itr;i++){ 26 /*C=(A+B)/2*/ 27 C=(A+B)/2.0; 28 /* 29 Ya=(A*A*A)-(2*A*A)-3; 30 Yb=(B*B*B)-(2*B*B)-3; 31 Yc=(C*C*C)-(2*C*C)-3; 32 */ 33 Ya = y(A); 34 Yb = y(B); 35 Yc = y(C); 36 37 /*if(-esp<Yc<esp) {*/ 38 if(-esp < Yc && Yc < esp){ 39 /*printf(“解は%f,%f\n”,A,B);*/ 40 printf("解は%f,%f\n",A,B); 41 return 0; 42 } 43 44 if(Ya*Yc<0){ 45 B=C; 46 }else{ 47 /*A=c;*/ 48 A=C; 49 } 50} 51/*printf(“解は%f,%f\n”,A,B);*/ 52printf("解は%f,%f\n",A,B); 53return 0; 54}

なお、AとBの初期値を入力する際、AとBの間に解があるようにする必要があります。

そうしないと解を求めることができませんので。

以下の実行例ではA=2.0,B=3.0としています。

実行ログを以下に示します。

Aの値を入力して下さい 2.0 Bの値を入力して下さい 3.0 解は2.485580,2.485588

投稿2018/02/28 10:00

srsnsts

総合スコア480

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tyuing112

2018/02/28 13:43

参考になりました ありがとうございます!
guest

0

3次方程式の解ではなく、xに値を入れて求めたyの値で何かをしたいわけですか?

それなら、間違いは変数Cに何も値を入力してないのが原因です。

投稿2018/02/27 09:42

PineMatsu

総合スコア3579

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tyuing112

2018/02/27 12:21

三次方程式の解を求めたいです
guest

0

Cの計算が抜けています。
二分法なのでC = (A + B) / 2;がfor文の直下に必要です。

「;」が抜けていたり「"」が違ったり「C」が小文字だったりという点は別として。

投稿2018/02/27 09:11

HARQ

総合スコア181

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tyuing112

2018/02/27 12:22

ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問