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

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

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

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Q&A

解決済

2回答

386閲覧

VineLinux Leafpadでの計算プログラムでの少数の扱い

aiueo12345

総合スコア41

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

0グッド

0クリップ

投稿2018/05/16 11:53

前提・実現したいこと

VineLinuxでLeafpadを用いてプログラムを書いています。
その内容は、一次方程式の文字にそれぞれ数字を代入し未知数xの値を表示させるというものです。
ただし、a,bに虚数や無理数は入れないこととします。
書いたプログラムは以下です。

#include <stdio.h> int main(void) { int a,b; printf("一次方程式 ax + b = 0\n"); printf("a,bを入力してください。\n"); printf("a="); if(a%1==0) { scanf("%d",&a); } else { scanf("%f",&a); } printf("b="); if(b%1==0) { scanf("%d",&b); } else { scanf("%f",&b); } if(a==0) { printf("解なし。\n"); } else if(b%a==0) { printf("x=%d\n",-b/a); } else if(b%a!=0) { prinf("x=%f\n",(double)-b/a); } return 0; } ```             』 ### 発生している問題・エラーメッセージ

この計算をさせると、解が出るときに限定して言えば、 -b/a という計算が出てきます。
a,bそれぞれに整数を入れて解が小数になるときに関しては克服できたのですが、a,bの少なくとも一方に小数が入った時に正しい計算結果が出ません。
どこをどう変えればよいでしょうか。

### 該当のソースコード ```ここに言語名を入力 ソースコード

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答2

0

ベストアンサー

C

1if(a%1==0){ 2 scanf("%d",&a); 3} 4else { 5 scanf("%f",&a); 6}

aは未初期化なのでaの値を使って何か判定しようとしても無意味です。bに関しても同様。また、int型で宣言しているので%fで格納してもint型になります。

最初からfloat型にしておけば良いでしょう。解無しでもinfになるだけなので差し支えないのでは?

C

1#include <stdio.h> 2 3int main(void) 4{ 5 float a,b; 6 printf("一次方程式 ax + b = 0\n"); 7 printf("a,bを入力してください。\n"); 8 printf("a="); 9 scanf("%f",&a); 10 printf("b="); 11 scanf("%f",&b); 12 printf("x=%f\n", -b/a); 13 14 return 0; 15} 16

投稿2018/05/16 12:11

hayataka2049

総合スコア30933

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

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

aiueo12345

2018/05/17 04:39

回答ありがとうござました。 floatにしておいて整数を代入しても差し支えないんですね! また機会があればよろしくお願いします_(._.)_
guest

0

if(a%1==0)
if(b%1==0)

未初期化の変数の使用
まずこれをどないかしましょう


scanf("%f",&a);
scanf("%f",&b);

a,bはintのはずですが、これではどもなりません。

だいたい、このコードはワーニング出まくると思うんですが。

投稿2018/05/16 12:01

編集2018/05/16 12:05
y_waiwai

総合スコア87719

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問