float型の関数hitotsumaeについて

このQ&Aのポイント
  • float型の関数hitotsumaeは、与えられた引数xを受け取り、xそのものを返す関数です。
  • 関数hitotsumaeは、main関数内で複数回呼び出されており、引数として与えられたxの値によって結果が異なります。
  • このプログラムは、指定されたxの値と正解の値を比較し、等しいかどうかを判定しています。
回答を見る
  • ベストアンサー

bit?static?unsigned?

1年前に出された問題です。 いまだに解けずに、どうすればいいのか・・・ ****** 関数hitotsuumae()を作ってプログラムを完成させよ。 printf文で同じ値が出れば正解である。 main内部を変更してはならない。広域変数を使用してはならない。 ****** #include <stdio.h> #include <stdlib.h> float hitotsumae(float); int main() { float x; x = 1.10; printf("%f = 0.000000\n", hitotsumae(x)); x = 2.20; printf("%f = 1.100000\n", hitotsumae(x)); x = 3.14; printf("%f = 2.200000\n", hitotsumae(x)); x = 5.55; printf("%f = 3.140000\n", hitotsumae(x)); x = 2.71; printf("%f = 5.550000\n", hitotsumae(x)); x = 1.41; printf("%f = 2.710000\n", hitotsumae(x)); exit(0); } float hitotsumae(float x) { //static?unsigned? x < 1; return x; } <<とやるとエラーが出ます。 シフトは関係ないのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

問題自体が問題ですね。 #1さんの回答のようなことをするのが出題の意図なのだろうけど。 float hitotsumae(float x) {  if(x == 1.10)    return 0;  if(x == 2.20)    return 1.10; ・・・・・・以下略 } でも要求仕様を満たしますね。 私なら意図しない正答の方を評価します。 それにstaticを使用するのは本来の使用方法ではないし処理系によっては結果が違ってきますから。

izupawapuro
質問者

お礼

ひとまず一番しっくりきたのでBAにさせていただきました。

その他の回答 (2)

  • wormhole
  • ベストアンサー率28% (1619/5654)
回答No.3

>ちなみにFIFOとはなんでしょう? 知らない単語はまず自分で調べるくらいしないかな。 http://ja.wikipedia.org/wiki/FIFO

izupawapuro
質問者

お礼

今後気をつけたいとおもいます。 ご回答ありかどうございます!

  • wormhole
  • ベストアンサー率28% (1619/5654)
回答No.1

>シフトは関係ないのでしょうか? シフトは関係ないです。 floatやdoubleにシフト演算子は使えませんし。 static変数を駆使してみてください。 でもまぁ、がんばって解く内容の問題でもないと私は思いますが。 FIFOを覚えた方が有用だと思う。

izupawapuro
質問者

お礼

回答ありがとうございます。 確かに問題の意図がわからず混乱していました。 staticも考えてみます

izupawapuro
質問者

補足

ちなみにFIFOとはなんでしょう?

関連するQ&A

  • どんな数字を入力してもaverage = 0.000000になるのは何故ですか? (プログラム初心者)

    どこがおかしくて計算結果がおかしくなるのか、具体的に指摘して頂けると幸いです。 #include<stdio.h> #include<stdlib.h> #include<math.h> float daritu(int a, int b){ float average; average = a / b; return 0; } main() { float k; int j; k = daritu(j, 13); scanf("%d", &j); printf("average = %f\n", &k); return 0; }

  • unsigned int型について

    C言語初心者です。 unsigned int型に関する質問です。 --------------------------------- #include <stdio.h> int main(void) { unsigned int in1 = 10; unsigned int in2 = -10; unsigned char ch1 = 10; unsigned char ch2 = -10; printf("in1 = %d\n", i); printf("in2 = %d\n", i); printf("ch1 = %d\n", ch1); printf("ch2 = %d\n", ch2); return 0; } --------------------------------- 上記のプログラムを作成して実行すると、結果は以下の通りです。 [実行結果] in1 = 10; in2 = -10; ch1 = 10; ch2 = 246; 変数in2の値を表示した結果に関してですが、 unsigned int型にも関わらず負の値「-10」が表示されるのは 何故でしょうか?

  • C言語の実数型の足し算

    C言語初心者です。関数の勉強していて、実数型計算に出くわしました。 #include <stdio.h> float add(float a, float b) { return a+b; } int main(void) { float x=10.5,y=20.3; printf("%f %f\n",x,y); printf("%f\n",add(x,y)); return 0; } としたら、 10.500000 20.299999 30.799999 という結果になりました。今のところint型でずーっと勉強していたので、20.3の20.299999表記が怪しく感じられ、結果も同様に怪しく感じられます。どうして、10.5+20.3=30.8とすっっきり表示してくれないのでしょうか。

  • C言語 unsigned 表示

    #include<stdio.h> int count_bits(unsigned x){ int count=0; while(x){ if(x&1U){ count++; } x>>=1; } return count; } int int_bits(void){ return(count_bits(~0U)); } unsigned rrotate(unsigned x1 ,int n){ int bits=int_bits(); n%=bits; return(n? (x1>>n)|(x1<<(bits-n)):x1); } int main (void){ unsigned nx,b; b=rrotate(nx,2); printf("%u\n",b); return(0); } 3221225476や1073741829と表示されることがあります。 入力値を4で割った数を表示するには、どうしたらよいでしょう・ 御指摘お願いします。

  • 乱数

    #include<stdio.h> #include<stdlib.h> #include<time.h> int main(void) { double n,end; printf("いくつ以上の値が出たら終了しますか?:"); scanf("%lf",&end); srand((unsigned)time(NULL)); for( ; ; ){ n=(double)rand(); printf("%f\n",n); if(n>=end) break; } return 0; } これなんですが、このまま実行すると.00000になってしまいます。 自分的には0.~にしたいのですが、どう変えればいいでしょうか? 回答お願いします。

  • C言語による浮動小数点表示

    #include<stdio.h> #include<math.h> main() { float a=1.5*pow(2,-15); unsigned char *e; e=(unsigned char *)&a; printf("a=%02x,%02x,%02x,%02x\n",*(e+3),*(e+2),*(e+1),*(e+0)); } というプログラムで a=38,40,00,00 という結果がでたのですが これは何を表しているのでしょうか? よろしくおねがいします

  • static と externについて

    以下のようなプログラムを組んでいます。 //main.h static int hoge; void someOperation(); //hoge.cpp #include "main.h" extern int hoge; void someOperation() { hoge = 15; } //main.cpp #include <stdio.h> #include "main.h" extern int hoge; int main() { someOperation(); printf("%d\n",hoge); return 0; } このプログラムを実行したのですが、自分の予想した15という出力ではなく、不定値になるようなのです。 自分の予想では、someOperationで操作するhogeも、main内で操作するhogeも同じになるようにと思いexternをつけているのですが、なにがまずいのでしょうか? ご存知の方、ご教授お願いします。

  • コンパイルすると‥‥

    C言語です。 emacsでC言語のプログラムを作りました。 #include<stdio.h> int main() { float x; printf("データを入力してください\n"); scanf("%f",&x); printf("%fを受け取りました\n",x); return 0; } といった簡単なプログラムです。 これをコンパイルすると 画像のようなものが表示されて どうしたら良いのか困ってます。 僕が思うにもはやプログラムに問題があるのではなく パソコンの設定に問題があるのかな? と思っているのですがどうしたら良いのかがわかりません。。。 分かる方、よろしくお願いします。

  • 複素数の絶対値について

    このプログラムでx2[i]y2[i]の絶対値の2乗がほしいんですけどどうすればよろしいで しょうか?? #include <stdio.h> #include <stdlib.h> #include <math.h> #define PI 3.14159265358979323846 /*省略*/ /* FFT main routine */ int fft(n, x, y) /*省略*/ /*** Main Program ***/ #define N 256 int main(argc, argv) int argc; char *argv[]; { FILE *fp; int i; static float x1[N], y1[N], x2[N], y2[N], x3[N], y3[N]; if ((fp = fopen(c1.txt, "r")) ==NULL){ printf ("File Open Error \"%s \" file.\n", c1.txt); exit(1); } for (i = 0; i < N; i++) { fscanf(fp, "%f", &x1[i]); x2[i] = x1[i] ; y1[i] = y2[i] = 0; } if (fft(N, x2, y2)) return EXIT_FAILURE; for (i = 0; i < N; i++) { x3[i] = x2[i]; y3[i] = y2[i]; } if (fft(-N, x3, y3)) return EXIT_FAILURE; printf(" Original data Fourier Transformed Inverse Transformed\n"); for (i = 0; i < N; i++) printf("%4d | %6.3f %6.3f | %6.3f %6.3f | %6.3f %6.3f\n", i, x1[i], y1[i], x2[i], y2[i], x3[i], y3[i]); return EXIT_SUCCESS; }

  • 数値の入力について

    C言語です。 #include <stdio.h> #include <stdlib.h> unsigned long input(void); void main(void){ while(1){ printf("%d\n",input()); } } unsigned long input(void){ unsigned long input; do{ printf("入力(1~4294967294 exit=0>"); scanf("%lu",&input); if(input==0) exit(0); while (getchar() != '\n') {} }while ( ( input < 1 )||( 4294967294 < input ) ); return input; } 以上をコンパイルし、実行すると不具合が起こります。 (1)範囲外の数値を入力しても繰り返しされない。 (2)文字を入力しても繰り返しされない。 どうすれば改善されますか? 定義域一杯に使うのはよくないことなのでしょうか? 環境はWindows XP、Borland C++ 5.5.1です。 あと、このコンパイラではlong long型は使用できないのでしょうか? よろしくお願いします。

専門家に質問してみよう