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

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

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

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Q&A

解決済

1回答

1009閲覧

c言語、関数について

JetSzero

総合スコア8

C

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

0グッド

0クリップ

投稿2021/11/10 05:43

c

1#define _CRT_SECURE_NO_WARNINGS 2#include<stdio.h> 3float menseki(int x, int y, int z) { 4 return (x + y) * z / 2.0; 5} 6int main(void) { 7 int num1, num2, num3; 8 float kei; 9 printf("上辺を入力してください。\n"); 10 scanf("%d", &num1); 11 printf("下辺を入力してください。\n"); 12 scanf("%d", &num2); 13 printf("高さを入力してください。\n"); 14 scanf("%d", &num3); 15 16 kei=menseki(num1, num2, num3); 17 printf("台形の面積は%fです。\n", kei); 18}

上記のプログラムを実行すると、小数点以下が表示されないときがあるのですが、どこが間違っているのでしょうか?
解答お願いします。

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

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

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

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

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

y_waiwai

2021/11/10 05:45

どういうときに表示されないんでしょうか
JetSzero

2021/11/10 05:49

ごめんなさい。 文章間違えました。 「(x + y) * z / 2.0」の式がint型になっているので、戻り値に正しい値が入らないと言われました。 なので、この式をfloat型に修正するにはどうしたらいいのでしょうか>
JetSzero

2021/11/10 05:55

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> float menseki(int x, int y, int z) { float gokei; gokei=(x + y) * z / 2.0; return (gokei); } int main(void) { int num1, num2, num3; float kei; printf("上辺を入力してください。\n"); scanf("%d", &num1); printf("下辺を入力してください。\n"); scanf("%d", &num2); printf("高さを入力してください。\n"); scanf("%d", &num3); kei=menseki(num1, num2, num3); printf("台形の面積は%fです。\n", kei); } このように変更してみたのですが、これだとさっきの式はfloat型になりますか?
fana

2021/11/10 05:58

> 「(x + y) * z / 2.0」の式がint型になっている そんなことないと思うけど.
JetSzero

2021/11/10 06:00

大学の課題でやってるのですが、僕も何故それで再提出なのかわからなくて、、、 「(x + y) * z / 2」だとint型になったりします?
fana

2021/11/10 06:03

> 「(x + y) * z / 2」 それならintです. 「こういう入力のときは出力はこうなるんだけど,この入力だと出力がこうなる」っていう具体的な例を示した方が話が早いと思うのですが.
fana

2021/11/10 06:08

> 僕も何故それで再提出なのかわからなくて、、、 もしも「小数点以下が表示されないときがある」と言っているのが提出先なのであれば, 状況把握のためにどんな入力のときにそうなるのかを知りたいから入力例を教えてくれ,と訊けばどうでしょうか.
dameo

2021/11/11 13:03 編集

x,y,zの大きさによってはint型の上限値を超えてしまいます。返す値がfloat型である場合は、最初の計算からfloatであった方がいいでしょう。 foat fx =x; float fy = y; float fz = z; return (fx + fy) * fz / 2.0; などとすれば、それらの懸念を払拭することができます。暗黙の型変換を考慮すると上記は float fx = x; return (fx + y) * z / 2; や return ((float)x + y) * z / 2; でも同じです。
guest

回答1

0

ベストアンサー

int型ではなく全ての変数をfloat型に設定し直すべきだと思います。

余談ですが、int型は「四捨五入」ではなく、小数点以下がどんな数値であろうと省きます。

投稿2021/11/13 15:47

Egg-Man

総合スコア38

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問