分段函式 (sdut oj)

SwordsMan98發表於2017-01-27


分段函式

Time Limit: 1000MS Memory Limit: 65536KB



Problem Description

函式是一種特殊的對映,即數集到數集的對映。對於給定的每個自變數都能給出一個確定的值,這是一件多麼牛的事情呀。其實不是函式牛,而是因為它具有這種性質我們的數學家才這麼定義了它。函式有很多型別,雖然本質都是對映,但為了方便研究和應用,數學家們做了很多分類。比如線性函式,非線性函式,隨機函式,還有一些具有特殊性質的函式等等。

今天我們要關注的是分段函式,所謂分段就是對於整個定義域來說,函式的值域是不連續的。很明顯的一個就是絕對值函式,類似於y=|x|,(x,y屬於R)。不連續是按照自變數的連續變化函式值的變化不連續而已,但函式仍然不離不棄的給了每個自變數一個值。

總之,函式就是按照規則對自變數進行操作得到相應的值。而程式裡的函式就更牛了,它可以對我們的輸入(自變數)進行各種我們想做的操作,最後得到輸出(值),很好玩吧。

今天,就希望你能用程式裡的函式實現數學裡的分段函式,加油哦。

這個分段函式長得是這個樣子的:

F(x) = log2(x)    0<x<10
       = |x|+sin(x) x<0
       =0             x=0
       =x^2          x>=10 

 

Input

輸入包含多組。
第一行給出資料的組數T
接下來T行每行一個實數X

 

Output

輸出T行,每行一個函式值,四捨五入保留到小數點後兩位。
希望你能根據函式的表示式,對於給定的每個自變數不離不棄的計算出它的值。

 

Example Input

4
0
10
5
-1


Example Output

0.00
100.00
2.32
0.16

Hint

log2(x)是以2為底x的對數.

Author








參考程式碼



#include<stdio.h>
#include<math.h>
double f(double x)
{
    double y;
    if(x > 0 && x < 10)
    {
        y = log2(x);
    }
    else if(x < 0)
    {
        y = fabs(x) + sin(x);
    }
    else if(x == 0)
    {
        y = 0.0;
    }
    else
    {
        y = x * x;
    }
    return y;
}
int main()
{
    double x;
    int t;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%lf",&x);
        printf("%.2lf\n",f(x));
    }
    return 0;
}


相關文章