任意の二次方程式(ax^2+bx+c=0)を解くプログラムを作るのですが、以下の条件を満たした方法で作るというものです。
1、関数の引数は、3つの係数と、解の入る変数二つとする。
(計5つの引数をとる。)
いずれかの引数がアドレス渡し(ポインタ)になる。
2、解は関数呼出の時に指定した2つの変数にそれぞれ代入されること。
3、解の表示は関数側ではなく呼出側で行うこと。
4、グローバル変数は使用しない。
一応作ってみたのですがコンパイルすらできません。
初心者なので全くわかりません教えてください。
#include<stdio.h>
#include<math.h>
void solve(double *x, double *y);
int main(void)
{
double x,y;
solve(&x,&y);
return 0;
printf("x=%f\n", x);
printf("y=%f\n", y);
}
void solve(double *x, double *y)
{
doble a,b,c;
puts("二次方程式 a*x^2+b*x+c=0 を解きます");
puts("係数a, b, cを入力してください");
printf("a="), scanf("%lf", a);
printf("b="), scanf("%lf", b);
printf("c="), scanf("%lf", c);
putchar('\n');
double d = b * b - 4 * a * c;
if(d >= 0){
x = (-b + sqrt(d)) / (2 * a);
y = (-b - sqrt(d)) / (2 * a);
}
else
puts("虚数解");
}
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
#include <stdio.h>
#include <math.h>
typedef struct quadratic{
int a;
int b;
int c;
double x0;
double x1;
} QUAD;
int SolveQuad(QUAD *quad)
{
int d = (quad->b) * (quad->b) - 4 * (quad->a) * (quad->c);
if(!(quad->a)){
if(quad->b){
quad->x0 = quad->x1 = -(quad->c) / (quad->b);
return 0;
}
else return -2;
}
if(d < 0) return -1;
if(d == 0){
quad->x0 = quad->x1 = -(quad->b) / 2 / (quad->a);
return 0;
}
quad->x0 = (-(quad->b) + sqrt(d)) / 2 / (quad->a);
quad->x1 = (-(quad->b) - sqrt(d)) / 2 / (quad->a);
return 1;
}
int main(void)
{
QUAD quad;
if(scanf("%d %d %d", &(quad.a), &(quad.b), &(quad.c)) != 3){
puts("入力エラー");
return 1;
}
switch(SolveQuad(&quad)){
case -2: puts("?"); break;
case -1: puts("虚数解"); break;
case 0: printf("x = %f\n", quad.x0); break;
case 1: printf("x = %f, %f\n", quad.x0, quad.x1); break;
}
return 0;
}
No.3
- 回答日時:
Errorの原因
・doubleがdobleになっている。(スペルミス)
・double dが途中で宣言されている。これは、関数の最初で宣言しなければならない。
・solve内のxとyに*がついていない。(ANo.1の指摘1)
Warningの原因
・scanfの引数がポインタになっていない。(ANo.1の指摘2)
この問題の出題意図としては、
a,b,cは関数solveの呼び出し前に準備しておき
関数solveは純粋に方程式を解くだけという気がします。
後は、戻り値で虚数解かどうか判別できるようにしておいた方がよさそう。
int solve(double a, double b, double c, double *x, double *y);
> ★指摘3
> ・double d = b * b - 4 * a * c; の『a * c』は『a + c』でしょうが…。
これは別に間違っていないような。
No.2
- 回答日時:
コンパイルエラーはNo.1さんの通りですね
他の問題点ですがmain関数でreturn 0で終了してしまうのでそのあとにprintfしても意味がないです。
関数の引数は5個という指示ですがsolve関数には2個の引数しかありません
No.1
- 回答日時:
★指摘1
・scanf( "%lf", a ); の『a』は『&a』とアドレスで指定します。
・同様に『b』、『c』も『&b』、『&c』と指定します。
★指摘2
・x = (-b + sqrt(d)) / (2 * a); の部分は『*x = 』と『*』をつけますよ。
・同様に『y』も『*y = 』とします。
★指摘3
・double d = b * b - 4 * a * c; の『a * c』は『a + c』でしょうが…。
補足:
・『printf("a="), 』は『printf("a="); 』という、カンマ文字でもOKですよ。
・最後に、アルゴリズムが正しいかどうかはチェックしていません。
・上記の指摘1~3を直せば、コンパイルは可能ですよ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語でユーザ関数を利用して複素数のべき乗と絶対値の数列を計算するプログラムが作りたいです。 3 2023/01/29 22:13
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# C言語(構造体) 3 2022/07/05 20:08
- C言語・C++・C# LU分解法のピボッティングについて(C言語/gcc-9) 3 2022/07/11 23:10
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
- C言語・C++・C# LU分解法のピボット選択機能実装について(C言語・gcc-9) 1 2022/07/22 15:20
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# C言語のマクローリン展開ローラン展開のコードについて 3 2022/12/15 14:45
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
float型とdouble型の変数の違い...
-
doubleの変数にintとintの割り...
-
c言語で、繰り返し文の中で、0....
-
至急です! マクロ定義で #defi...
-
C言語で-23乗を取り扱うには
-
floating point not loadedとは?
-
C言語の型による処理速度の違い
-
数値を指数部と仮数部に分離したい
-
C 開放してるのにエラー(doubl...
-
int とdoubleの比較
-
関数におけるif文とreturn文に...
-
-1.#IND00 をデバッグしたい
-
C言語を実行すると-infが出てき...
-
doubleは常に%lfとするべきなのか
-
相互相関関数
-
C++で割り算の結果を昇順に出力...
-
C言語でポインタを用いた平均,...
-
配列を戻り値にして逆行列を求...
-
Cで3乗根を求める方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
doubleの変数にintとintの割り...
-
C 開放してるのにエラー(doubl...
-
Cで3乗根を求める方法
-
float型とdouble型の変数の違い...
-
至急です! マクロ定義で #defi...
-
C言語の型による処理速度の違い
-
int とdoubleの比較
-
関数におけるif文とreturn文に...
-
C言語初心者 構造体 課題について
-
c言語のコンパイルエラー canno...
-
C言語 関数プロトタイプ宣言の...
-
C言語を実行すると-infが出てき...
-
float?数字の後にLがつくもの
-
数値を指数部と仮数部に分離したい
-
difftime()について
-
浮動小数点数が表示されないん...
-
たくさんの数の平均を求める方...
-
DWORDの警告
-
-1.#IND00と出てしまうのですが...
おすすめ情報