• ベストアンサー

C言語で数字の符号を取る関数は?

ponntaの回答

  • ベストアンサー
  • ponnta
  • ベストアンサー率17% (31/179)
回答No.1

普通にyを調べてマイナスだったら0から引けばいいのでは? if(y<0)x = -x; みたいにすればいいんじゃないかな? 関数でなければいけなければ自分で巻数化すればいいし・・・ float Sign(float x,float y) { if(y<0)x = -x; return x; } みたくしくちゃえば

osamu326
質問者

お礼

なるほど。簡単ですね。 目からウロコが取れました。 有難うございました。

関連するQ&A

  • C言語の質問

    Fortran言語にはsign(x,y)の関数があります、つまりxの絶対値をもち、かつyの符号をもつ値を生成する関数です。 C言語にこのような関数をも使いたいのですが、調べてみるとcopysignという関数がありました、関数の機能説明もFortaranのsignと同じとなっています。しかしながら、実際にCのソースファイルにcopysignを使うと、ビルド時に、「error C3861: 'copysign': 識別子が見つかりませんでした」のエラーが出てきました。また宣言時に「#include <math.h>も入れています。  どちら様がご存知ならば教えていただければ幸いなことです。  宜しくお願い致します!<^ ^>!!!

  • 2次関数の符号がわかりません

    「2次関数 y=ax^2+bx+c(aは0でない)のグラフがある.  そのグラフの頂点のx,y座標は共に正で,グラフは上に凸である. a,b,c,b^-4acの符号を調べよ.」という問題について質問です. (考え)まず,2次関数y=ax^2+bx+cを平方完成し, y=a(x^2+bx/a)+c =a(x+b/2a)^2+c-b^2/4a       このグラフが上に凸なのでa<0     頂点のx座標が正なので b/2a<0     a<0なので,b>0     頂点のy座標が正なので +c-b^2/4a>0     -b^2/4a>0 よってc≧0     b^2-4ac>0 こうなると,a,bの符号はわかりますが,cは0か正かわかりません. どうすれば区別できますか? (解答にはc:0とあります)

  • C言語の関数に関する質問ですが

    C言語の初心者です。よろしくお願いいたします。 授業でこのような演習が出ました。 演習:実数x を入力したときの最大値を求めるプログラムを作れ. 実数x を入力すると,x; -x; x2; xの絶対値の平方根 の中で一番大きい値を答える プログラムを作れ(ファイル名はmax.c とする). 表示は以下のようにする. Input x: -0.5 【Enter】 Answer is 0.707107. #include<stdio.h> #include<math.h> double max(double a, double b){ if( a > b) return a; else return b; } int main(void) { double x,y; printf(\"Input x: \"); scanf(\"%lf\",&x); y = max (x,-x); y = max (y,x*x); y = max (y,sqrt(fabs(x))); printf(\"Answer is %f.\\n\",y); } このように書けばうまく実行できますが、関数の中に関数を使えないでしょうか。うまく言えないですが、たとえば、以下のように書いてみましたが、うまく実行できません。どう直したらいいでしょうか、お忙しい中教えていただけたらうれしいです。 #include <stdio.h> #include <math.h> int max(double a,double b) { if (a<b) return b; else return a;} int main(void) { double x,result; printf(\"Input x:\"); scanf(\"%lf\",&x); result=max(max(x,-x),max(pow(x,2),sqrt(fabs(x)))); printf(\"%.2f\",result); return 0; } よろしくお願いいたします!!

  • FortranプログラムからC言語で実装された関数を呼ぶには?

    Windows Vista Home PremiumにFTN95をインストールしたPCにて、Fortranのプログラミングをし始め、「Cpad for Salford FTN77」を利用してプログラミングをしています(FORTRAN77・Fortran90ともに)。FTN95でのFortranプログラミングに際し、FortranプログラムからC言語で実装された関数を呼ぶには、どのように対処すれば可能になりますでしょうか? ユーザーガイドによれば、「Fortranプログラム中に、C_EXTERNALという宣言をした関数は、Cの関数と同じくアクセスできるようになり、C側では、#extern <返り値>関数名(引数)を与えれば、Cの関数として呼び込むことができる。」とのことがかかれています。 実際に使っているファイルをいくつか書き出します。 <D:\fortran\sample.f> C_EXTERNAL WRITE 'WriteFile' : INTEGER*4 INTEGER*4 RESULT RESULT=WRITE() write(*,*) result return end <D:\fortran\sample.c> #extern int Writefile(int); <C:\Program Files\Silverfrost\FTN95\ftn95c.bat> ftn95.exe %1 %2 %3 %4 %5 %6 %7 %8 %9 /link ちなみに、「Cpad for Salford FTN77」での実行/設定/実行/コンパイル時のパラメータは「/link /dreal」です。もちろんftn95.exeへのパスは通してあります。何が問題でしょうか? 何分初心者ですので、拙い質問かと思いますが、何卒ご教示願います。

  • C言語教えてください。

    (1)二次方程式y=a*x*x+b*x+cについて、a=1.0,b=2.0,c=3.0として、x=1.1,2.2,3.3,4.4のときのyをもとめる計算を行い、式と係数値とxと対応するyの値を表示するプログラムを作成せよ。 (2)xを与えて、xの2乗、3乗を計算し、xと対応する結果を表示するプログラムを作成せよ。なお、x=3,5,7,9とする。

  • C言語の課題がわからないです。

    課題がわからないので質問します。 問題は 以前作成したグラフィックスインタプリタ cg.c を元にして,画像ファイルを貼り付ける機能を実装せよ.ただし,次の関数を定義すること. 画像のサイズを調べるためのアクセス関数 int PbmGetWidth(Pbm *pbm) および int PbmGetHeight(Pbm *pbm): pbm->width,pbm->height を返す. 画像を貼り付けるための関数 void PutImage(Pbm *pbm, int x, int y, char *filename):画像(ファイル名 filename )を座標(x,y)に貼り付ける. 以前作成したグラフィックスインタプリタ cg.c を元にして,画像ファイルを貼り付ける機能を実装せよ.ただし,次の関数を定義すること. 画像のサイズを調べるためのアクセス関数 int PbmGetWidth(Pbm *pbm) および int PbmGetHeight(Pbm *pbm): pbm->width,pbm->height を返す. 画像を貼り付けるための関数 void PutImage(Pbm *pbm, int x, int y, char *filename):画像(ファイル名 filename )を座標(x,y)に貼り付ける. 命令ファイルはこんな感じです。 clear 0 line 60 120 260 120 1 line 160 20 160 220 1 circle 110 70 40 1 circle 210 170 40 1 image 180 50 c.pbm image 210 30 c.pbm image 210 70 sign.pbm image 240 50 sign.pbm 貼り付けられる画像 c.pbm P1 10 11 0000000000 0001111000 0011111100 0111001110 0110000110 0110000000 0110000110 0111001110 0011111100 0001111000 0000000000 プログラムを書いたのですが、間違ってるところをお願いします。

  • 【二次関数】グラフと係数の符号

    二次関数y=ax^2+bx+cのグラフである。次の符号を言え。 2a+b という問題がありました。二次関数の式で2a+bであらわせるものって何かあったでしょうか? 解説していただけると助かります。

  • Fortranでの記号「./」について

    Fortran 90で書かれた数値計算プログラムを、より専門的な言語に書き換える作業を行っています。 Fortranを学んだことがないのでインターネット等で関数の意味や書式を調べながら作業しているのですが、 「X./Y」という式の意味がわからずに困っています。 単純に「X/Y」とはどう違うのでしょうか。 初歩的な質問で申し訳ありませんが、よろしくお願いします。

  • 6次関数のグラフから各係数の符号を知る方法

    6次関数y=f(x)=ax^6+bx^5+cx^4+dx^3+ex^2+fx+g のグラフがxy平面に描かれているとします。そのグラフから各係数の符号を、計算しないで視覚的に知る方法を考えたいのです。 x≒0のとき、y≒ex^2+fx+gなので、(0,f(0))の近傍でのグラフの様子から視覚的にe,f,gの符号を知ることができます。 つまり、y軸との交点がy>0なら、g>0。 グラフが右上がりなら、f>0。 グラフが下に凸なら、e>0。 |x|が十分大きいとき、y≒ax^6+bx^5≒a(x+b/6a)^6なので、グラフの大域的な様子から視覚的にa,bの符号を知ることができます。 つまり、大域的に「U字型」の形なら、a>0。 大域的に、いわゆるグラフの「軸」がy軸より左にあれば、b/6a>0。 c,dの符号を視覚的に知るようなアイデアがありましたら教えてください。

  • C言語で表記についの質問です

    C言語です。 exp(x)のテイラー展開を数値計算で求めるプログラムですが、 プログラムでは相対打ち切り誤差をEPSと定義しています。 具体的には double myexp(double x){ double EPS=1e-08; double s=1.0,e=1.0,d; int k; for(k=1;k<=200;k++){ d=s; e=e*x/k; s=s+e; if(fabs(s-d)<EPS*fabs(d)) return s; } と上の様に書かれています。 わからない点は上記のプログラムでEPS=1e-08のeは10の意味をしているでしょうか?EPS=10^-8理解 してよろしいでしょうか? またEPSのeと二つ目のe=1.0は全く異なるものでしょうか。 ご教授よろしくお願いします。