それでは,面積を計算する関数を考えよう.次のような関数が妥当だろう. -4pt
1 #include <stdio.h>
2 #include <math.h>
3
4 double helon(double a, double b, double c); //プロトタイプ宣言
5
6 //===========================================================
7 // メイン関数
8 //===========================================================
9 int main(void)
10 {
11 double hen1, hen2, hen3;
12 double menseki;
13
14 printf("辺1の長さ?\t");
15 scanf("%lf",&hen1);
16 printf("辺2の長さ?\t");
17 scanf("%lf",&hen2);
18 printf("辺3の長さ?\t");
19 scanf("%lf",&hen3);
20
21 menseki = helon(hen1, hen2, hen3);
22
23 if(menseki < -990){
24 printf("入力した辺では,三角形はできません!!!!!\n");
25 }else{
26 printf("面積は,%fです.\n", menseki);
27 }
28
29 return 0;
30 }
31
32 //===========================================================
33 // ユーザー定義関数
34 //===========================================================
35 double helon(double a, double b, double c)
36 {
37 double s, S, test;
38
39 s=(a+b+c)/2;
40 test=s*(s-a)*(s-b)*(s-c);
41
42 if(test <= 0){
43 S = -999.0;
44 }else{
45 S = sqrt(test);
46 }
47
48 return S;
49 }
辺1の長さ? 5.6 辺2の長さ? 8.3 辺3の長さ? 6.8 面積は,18.915076です.
メイン関数 hen1:? hen2:? hen3:? menseki:?
メイン関数 hen1:5.6 hen2:8.3 hen3:6.8 menseki:?
メイン関数 hen1:5.6 hen2:8.3 hen3:6.8 menseki:? 関数helon a:5.6 b:8.3 c:6.8 s:10.35 S:? test:?
メイン関数 hen1:5.6 hen2:8.3 hen3:6.8 menseki:? 関数helon a:5.6 b:8.3 c:6.8 s:10.35 S:? test:357.78
メイン関数 hen1:5.6 hen2:8.3 hen3:6.8 menseki:? 関数helon a:5.6 b:8.3 c:6.8 s:10.35 S:18.91 test:357.78
メイン関数 hen1:5.6 hen2:8.3 hen3:6.8 menseki:18.91
メイン関数 hen1:5.6 hen2:8.3 hen3:6.8 menseki:18.91
いろいろな方法があるが,諸君のこれまでの知識ではグローバル変数を使う方法が良いだ ろう.リスト2に示すように計算結果をグローバル変数に格納する. こうすれば,複数のデータを呼び出し側へ返すことができる.
賢い諸君は,引数もグローバル変数で渡すことができることに気が付くだろう.もちろん,
これも可能であるが,よくないプログラム作法である.グローバル変数は,いかなる関数
からもアクセス可能であるため,思わぬデータが紛れ込む可能性がある.このようなバグ
は非常に分かりにくいので,原因を突き止めるのに大変な量力を要する.したがって,グ
ローバル変数はできるだけ使わないようにしなくてはならない.
1 #include <stdio.h>
2 #include <math.h>
3
4 void info_tri(double a, double b, double c); // プロトタイプ宣言
5 double S, total_len; // グローバル変数
6
7 //===========================================================
8 // メイン関数
9 //===========================================================
10 int main(void)
11 {
12 double hen1, hen2, hen3;
13 double menseki;
14
15 printf("辺1の長さ?\t");
16 scanf("%lf",&hen1);
17 printf("辺2の長さ?\t");
18 scanf("%lf",&hen2);
19 printf("辺3の長さ?\t");
20 scanf("%lf",&hen3);
21
22 info_tri(hen1, hen2, hen3);
23
24 if(S < -990){
25 printf("入力した辺では,三角形はできません!!!!!\n");
26 }else{
27 printf("面積は,%fです.\n", S);
28 printf("周長は,%fです.\n", total_len);
29 }
30
31 return 0;
32 }
33
34 //===========================================================
35 // ユーザー定義関数
36 //===========================================================
37 void info_tri(double a, double b, double c)
38 {
39 double s, test;
40
41 s=(a+b+c)/2;
42 test=s*(s-a)*(s-b)*(s-c);
43
44 if(test<=0){
45 S = -999.0;
46 }else{
47 S = sqrt(test);
48 total_len = a+b+c;
49 }
50
51 }