コンパイルしてみると警告が出ているのが分かります。
C言語の歴史的経緯から引数の型を省略するとint
とみなされます。
gcc -Wall -o test20230901 test20230901.c
test20230901.c:3:1: warning: parameter names (without types) in function declaration
3 | double Pyramid(a, b, h);
| ^~~~~~
test20230901.c: In function ‘Pyramid’:
test20230901.c:15:8: warning: type of ‘a’ defaults to ‘int’ [-Wimplicit-int]
15 | double Pyramid (a, b, h)
| ^~~~~~~
test20230901.c:15:8: warning: type of ‘b’ defaults to ‘int’ [-Wimplicit-int]
test20230901.c:15:8: warning: type of ‘h’ defaults to ‘int’ [-Wimplicit-int]
Compilation finished at Fri Sep 1 21:53:52
関数の引数がintとみなされるということなので,関数の中にprint文を一時的に入れてみます。
c
1#include <stdio.h>
2
3double Pyramid(a, b, h);
4
5int main(void) {
6 double a = 5.1, b = 3.5, h=7.8; //a:底辺の高さa b:底辺の高さh:高さ
7
8 printf("底辺aの長さ%.1fcm. 底辺の長さ%.1fcm高さ%.1fcm\n",a,b,h);
9 printf("この四角錐の体積は%.2fcm^3\n", Pyramid(a,b,h));
10
11 return 0;
12}
13
14
15double Pyramid (a, b, h)
16{
17 printf("a=%d,b=%d,h=%d\n", a, b, h);
18 return a * b * h / 3.0;
19}
結果は次の通りです。
底辺aの長さ5.1cm. 底辺の長さ3.5cm高さ7.8cm
a=-1875338208,b=1888981664,h=0
この四角錐の体積は0.00cm^3
どうもh
が0とみなされているようです。
関数の引数の型をdoubleと指定します。
c
1#include <stdio.h>
2
3double Pyramid(double a, double b, double h);
4
5int main(void) {
6 double a = 5.1, b = 3.5, h=7.8; //a:底辺の高さa b:底辺の高さh:高さ
7
8 printf("底辺aの長さ%.1fcm. 底辺の長さ%.1fcm高さ%.1fcm\n",a,b,h);
9 printf("この四角錐の体積は%.2fcm^3\n", Pyramid(a,b,h));
10
11 return 0;
12}
13
14
15double Pyramid (double a, double b, double h)
16{
17 return a * b * h / 3.0;
18}
うまく結果が出るようです。
底辺aの長さ5.1cm. 底辺の長さ3.5cm高さ7.8cm
この四角錐の体積は46.41cm^3