こちらのプログラムの書き方がわかりません。教えてください。
整数 a, b, c を引数とし,2次方程式 a x^2 + b x + c = 0 の判別式を計算して戻り値する関数 int discriminant( int a, int b, int c ) を 作成せよ.
さらに,main 関数においてキーボードから a, b, c を受け取り, 「a x^2 + b x + c = 0 の実数解の個数は?個です」のような表示 をするプログラムを作成せよ.ただし,関数 discriminant からの戻り値を用いて実数解の個数を求めること.
a は 0 でないと仮定してよい.
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答5件
0
学校の課題ですかね。とりあえずこれで。
#include <stdio.h> int discriminant(int a, int b, int c){ return b * b - 4 * a * c; } int main(){ int a, b, c; scanf("%d", &a); scanf("%d", &b); scanf("%d", &c); if(discriminant(a,b,c) > 0){ printf("%dx^2 + %dx + %d = 0 の実数解の個数は2個です\r\n",a,b,c); }else if(discriminant(a,b,c) == 0){ printf("%dx^2 + %dx + %d = 0 の実数解の個数は1個です\r\n",a,b,c); }else{ printf("%dx^2 + %dx + %d = 0 の実数解の個数は0個です\r\n",a,b,c); } }
投稿2018/11/02 14:57
総合スコア1085
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
CなのかC#なのかわからなかったので、中間のC++で書きました。(C++17 + boost 1.68.0)
C++
1#include <boost/multiprecision/cpp_int.hpp> 2#include <iostream> 3 4template <typename T> T discriminant(const T &a, const T &b, const T &c) 5{ 6 return b * b - 4 * a * c; 7} 8 9int main() 10{ 11 boost::multiprecision::cpp_int a, b, c; 12 while (!(std::cin >> a >> b >> c)) { 13 std::cin.clear(); 14 std::cin.ignore(); 15 } 16 auto d = discriminant(a, b, c); 17 auto n = d > 0 ? 2 : d == 0 ? 1 : 0; 18 std::cout << a << u8" x^2 + " << b << u8" x + " << c 19 << u8" = 0 の実数解の個数は " << n << u8" 個です。" 20 << std::endl; 21 return 0; 22}
メモリが許す限り、どんなに大きい数であっても対応しています。
投稿2018/11/01 12:24
総合スコア21733
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
テストはしていませんがこれでどうでしょうか.
また, わからない部分は適宜調べてください.
C
1#include <stdio.h> 2#include <string.h> 3#include <stdlib.h> 4#include <math.h> 5 6 7// 標準入力から数値を取得 8int 9get_value_from_stdin(char *msg) { 10 char buf[256]; 11 12 do { 13 char *p; 14 15 if(msg != NULL) printf("%s", msg); 16 17 memset((void *)buf, '\0', sizeof(buf)); 18 fgets((char *)buf, sizeof(buf) - 1, stdin); 19 20 // 改行文字の削除(なくてもいい) 21 if((p = strchr(buf, '\r')) != NULL || (p = strchr(buf, '\n')) != NULL) *p = '\0'; 22 } while(strlen(buf) == 0); 23 24 return (int)strtol((const char *)buf, NULL, 10); 25} 26 27 28// 判定式 29int 30discriminant(int a, int b, int c) { 31 double delta = pow(b, 2.0) - (4.0 * a * c); 32 33 if(delta > 0.0) return 2; 34 else if(delta == 0.0) return 1; 35 36 return 0; 37} 38 39 40int 41main(int argc, char *argv[]) { 42 int a, b, c; 43 44 45 a = get_value_from_stdin("a = "); 46 47 if(a == 0) { 48 // TODO: エラーメッセージなど. 49 return -1; 50 } 51 52 b = get_value_from_stdin("b = "); 53 c = get_value_from_stdin("c = "); 54 55 56 printf("a = %d, b = %d, c = %d\n", a, b, c); 57 printf(" 実数解の個数 = %d\n", discriminant(a, b, c)); 58 59 return 0; 60}
投稿2018/11/01 07:59
総合スコア85
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
投稿2018/11/01 03:46
総合スコア5545
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。