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

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

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

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

Q&A

2回答

1246閲覧

c言語 うまくソートができません

taro2233

総合スコア13

C

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

0グッド

1クリップ

投稿2018/10/30 15:51

関数の中で入力したn,m,k,がどれも1>=0の時、その中で最小のものに40をかけて値引きをするプログラムを組んでいます。n=1,m=2,k=3の時は-40されて正しい結果が得られるのですが、n=3,m=2,k=1の時は-120されてしまいます。おそらくソートが正しくできていないのだと思います。どのように修正すればいいのでしょうか?

lang

1#include <stdio.h> 2#include <math.h> 3 4int main(void) { 5 void TotalPrice(int, int, int, int*, int*, int*); 6 int n, m, k, C, Tax, S; 7 8 printf("肉の数"); 9 fflush(0); 10 scanf("%d", &n); 11 printf("豆の数"); 12 fflush(0); 13 scanf("%d", &m); 14 printf("あめの個数"); 15 fflush(0); 16 scanf("%d", &k); 17 18 TotalPrice(n, m, k, &C, &Tax, &S); 19 printf("税抜き価格=%d円\n", C); 20 printf("消費税=%d円\n", Tax); 21 printf("税込み価格=%d円\n", S); 22 23 return (0); 24} 25 26void TotalPrice(int x, int y, int z, int *a, int *b, int *c) 27{ 28 29 30 31 if (x > 0 && y > 0 && z > 0) { 32 int i, j, jmin, datamin; 33 int data[3] = { x,y,z }; 34 for (i = 0; i < 2; i++) { 35 datamin = data[i]; 36 jmin = i; 37 38 for (j = i + 1; j < 3; j++) { 39 if (data[j] < jmin) { 40 jmin = j; 41 datamin = data[j]; 42 43 } 44 45 } 46 data[jmin] = data[i]; 47 data[i] = datamin; 48 } 49 50 51 *a = ((120 * x) + (100 * y) + (250 * z) )- (40 * data[0]); 52 *b = (((120 * x) + (100 * y) + (250 * z)) - (40 * data[0])) * 0.08; 53 *c = *a + *b; 54 } 55 else { 56 57 *a = (120 * x) + (100 * y) + (250 * z); 58 *b = ((120 * x) + (100 * y) + (250 * z)) * 0.08; 59 *c = *a + *b; 60 61 } 62 63} 64

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

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

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

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

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

guest

回答2

0

まず処理の中でソートしてませんし、そもそもソートの必要なないですね。
今やっている処理が中途半端なソートっぽいものと最小値を求めるのが混ざってしまっているようです。
最小値を求める処理に変更し、最後の計算処理も最小値を使うようにしてみました。
修正部分のみ抜粋(動作未確認)

c

1 datamin = data[0]; 2 for (i = 1; i < 3; i++) { 3 if (data[i] < datamin) { 4 datamin = data[i]; 5 } 6 } 7 8 *a = ((120 * x) + (100 * y) + (250 * z) )- (40 * datamin); 9 *b = (((120 * x) + (100 * y) + (250 * z)) - (40 * datamin)) * 0.08;

投稿2018/10/30 23:39

ttyp03

総合スコア16998

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

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

0

c

1if (data[j] < jmin) {

data[j]はデータ,それに対してjminは配列の添字と比較対象が異なっています.
どう修正すればよいかは考えてみてください.

投稿2018/10/30 16:13

hiroCSJT

総合スコア93

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問