• 締切済み

プログラミングC

下のプログラミングを考えてますが、できません。どなたか教えてください。 1 関数 atof を拡張して,次のような科学記号を扱えるようにせよ。 123.45e-6 ← これは,123.45 × ( 10 の -6 乗 ) のことである。ここで,浮動小数点の直後には,e や E と符号の付きうる指数部が続いてもよいとする。 2. 改行で区切られた複数の数 (最大100個まで) の平均を表示するプログラムを 1.で作成した atof を利用する形で、作成せよ。ただし、一つの行に複数の数がある場合は考慮しなくてよい。

みんなの回答

  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.4

こんにちは atofを自作するという事でしょうか。 暇つぶしに作ってみました。 #include <math.h> #include <stdio.h> #include <stdlib.h> double atof2(char a[]) {   int i,j,k,l,m,n ;   i = 0 ;   if ( a[i] == '-' ){     j = -1 ;     i ++ ;   } else {     j = 1 ;   }   k = 0 ;   l = 0 ;   while ( a[i] != 'e' && a[i] != 'E' && a[i] != '\0' ){     if ( a[i] >= '0' && a[i] <= '9' ){       k *= 10 ;       k += a[i] - '0' ;       l *= 10 ;     } else if ( a[i] == '.' ){       l = 1 ;     } else {       printf("Error %s",a);       return 0.0 ;     }     i ++ ;   }   if ( l == 0 ){     l = 1 ;   }   if ( a[i] != '\0' ){     i ++ ;     if ( a[i] == '-' ){       m = -1 ;       i ++ ;     } else {       m = 1 ;     }     n = 0 ;     while ( a[i] != '\0' ){       if ( a[i] >= '0' && a[i] <= '9' ){         n *= 10 ;         n += a[i] - '0' ;       } else {         printf("Error %s",a);         return 0.0 ;       }       i ++ ;     }   }   return pow(10.0,(double)m*n)*j*k/l ; } 手元にコンパイラが無いのでまともに動くかは不明です。

  • jmh
  • ベストアンサー率23% (71/304)
回答No.3

この atof() 自体が自作ではないでしょうか? 「プログラミング言語C」(K&R)ってゆう本に、(stdlib.h のでない素朴な) atof() が載ってます。そして、1と同一の演習問題があります。 その答えが載ってる本もあります。たぶん「Cアンサー」そのまんまのタイトルだったような気がします。 2は、stdin から1行読む関数を既に作ってたら、教えてください。gets() とかを使っても良いですか?

回答No.2

まず、123.45e-6という表記についてですが、 1.2345e-4でないと科学的ではないですよね。 少なくとも数学的な記法ではないと思いますし、 そもそも、科学記号というのかどうか… とりあえず、方針だけ。 1については eかEを探してやり、その前後を 以下の式に代入します。  A * 10^B この例は AeB(AEB)という数に対するものです。 あとは拡張元の関数の性質を考えてみてください。 2は簡単ですよね。 数値の入力の際に1で作った関数を使えばよいだけです。 あとはC言語の基本どおりに作れます。 このごろ大学などの課題っぽい質問が多いなぁ、 と思い、方針しか書いておりません。あしからず。

toratora11
質問者

補足

すいませんが、全く先に進まない状態が続いてます。 プログラムを教えていただけないでしょうか?

  • liar_adan
  • ベストアンサー率48% (730/1515)
回答No.1

1)拡張しなくても、atofはその書式を扱えますよ。 2)これは行単位のファイル入力ができれば、すぐにできます。 行単位のファイル入力をするには、 fgets()かgets()を使います。

関連するQ&A