それでは,面積を計算する関数を考えよう.次のような関数が妥当だろう. -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 }