1 / 36

# 第十二章 - PowerPoint PPT Presentation

I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.

## PowerPoint Slideshow about '第十二章' - rod

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

### 第十二章

• 數字函數
• 此類函數主要是一些常用的數學函數
• 定義在<math.h>標頭檔
• C提供之數學函數
• pow(), sqrt(), exp()
• log(), log10()
• ceil(), floor()
• fabs(), ldexp()
• fmod(), modf()

• pow(x, y)
• 主要是計算x的y次方
• 如：

pow(4, 3)

• 當x = 0且y <= 0，或者是x < 0且y不是一整數時，則表示定義域錯誤，如pow(0, -2)或pow(-2, 2.5)
• 範例ex12-1a.c

//* File name: ex12-1a.c */

#include <stdio.h>

#include <math.h>

#include <stdlib.h>

int main()

{

double x, y;

printf("Enter x^y: ");

scanf("%lf^%lf", &x, &y);

printf("Ans is %.2f", pow(x, y));

}

• sqrt(x)
• 主要是計算x的開根號，其中x為double型態，且x>=0
• 如：

sqrt(100)

• 範例ex12-1b.c

/* File name: ex12-1b.c */

#include <stdio.h>

#include <math.h>

#include <stdlib.h>

int main()

{

double x;

printf("Enter a number: ");

scanf("%lf", &x);

printf("sqrt(%.2f) is %.2f", x, sqrt(x));

}

• exp(x)
• 主要是計算指數ex
• 如：

exp(10)

• 範例ex12-1c.c

/* File name: ex12-1c.c */

#include <stdio.h>

#include <math.h>

#include <stdlib.h>

int main()

{

int i;

double x;

for(i = 0; i <= 10; i++)

printf("exp(%2d) = %8.2f\n", i, exp(i));

}

• log(x)
• 主要是計算loge(x)，其中x > 0
• 如：

log(10)

• 範例ex12-1d.c

/* File name: ex12-1d.c */

#include <stdio.h>

#include <math.h>

#include <stdlib.h>

int main()

{

int i;

double x;

for(i = 10; i <= 100; i += 10)

printf("log(%3d) = %.2f\n", i, log(i));

}

• log10(x)
• 主要是計算log10(x)，其中x > 0
• 如：

log10(10)

• 範例ex12-1e.c

/* File name: ex12-1e.c */

#include <stdio.h>

#include <math.h>

#include <stdlib.h>

int main()

{

int i;

double x;

for(i = 10; i <= 100; i += 10)

printf("log10(%3d) = %.2f\n", i, log10(i));

}

• ceil(x)
• 主要是計算大於等於x的最小整數
• 如：

ceil(2.5)

ceil(-2.5)

• 範例ex12-1f.c

/* File name: ex12-1f.c */

#include <stdio.h>

#include <math.h>

#include <stdlib.h>

int main()

{

double x;

printf("Enter a number: ");

scanf("%lf", &x);

printf("ceil(%f) = %.2f", x, ceil(x));

}

• floor(x)
• 主要是計算小於等於x的最大整數
• 如：

floor(2.5)

floor(-2.5)

• 範例ex12-1g.c

/* File name: ex12-1g.c */

#include <stdio.h>

#include <math.h>

#include <stdlib.h>

int main()

{

double x;

printf("Enter a number: ");

scanf("%lf", &x);

printf("floor(%f) = %.2f", x, floor(x));

}

• fabs(x)
• 主要是計算x的絕對值
• 如：

fabs(-2.5)

• 範例ex12-1h.c

/* File name: ex12-1h.c */

#include <stdio.h>

#include <math.h>

#include <stdlib.h>

int main()

{

double x;

printf("Enter a number: ");

scanf("%lf", &x);

printf("|%f| = %.2f", x, fabs(x));

}

• ldexp(x, y)
• 主要是計算x * 2y
• 如：

ldexp(4, 2)

• 範例ex12-1i.c

/* File name: ex12-1i.c */

#include <stdio.h>

#include <math.h>

#include <stdlib.h>

int main()

{

double x = 10;

int y = 3;

printf("ldexp(%.2f, %d) = %.2f\n", x, y, ldexp(x, y));

}

• fmod(x, y)
• 主要是計算 x / y 的餘數，所得結果與x同號；若y為0，則結果為0
• 如：

fmod(3, 2) = 1

fmod(-3, 2) = -1

• 範例ex12-1j.c

/* File name: ex12-1j.c */

#include <stdio.h>

#include <math.h>

#include <stdlib.h>

int main()

{

double x, y;

printf("Enter x/y: ");

scanf("%lf/%lf", &x, &y);

printf("fmod(%f, %f) = %f", x, y, fmod(x, y));

}

• modf(x, double *ip)
• 主要是將x劃分為整數部份與小數部份，此兩部份與x同號；modf函數將整數部份存於*ip，並傳回小數部份
• 如：

y = modf(123.456, &ip)

• 範例ex12-1k.c

/* File name: ex12-1k.c */

#include <stdio.h>

#include <math.h>

#include <stdlib.h>

int main()

{

double x, y, ip;

printf("Enter a double number: ");

scanf("%lf", &x);

y = modf(x, &ip);

printf("y = %f\n", y);

printf("ip = %.0f\n", ip);

}

• 亂數相關函數
• 此類函數在於產生亂數之用
• 定義在<stdlib.h>標頭檔
• 常見的亂數函數
• rand()
• srand()

• rand 函數
• 此函數相當於一亂數產生器，函數執行後會傳回一個介於0~32767間的整數
• 範例ex12-2a.c

/* File name: ex12-2a.c */

#include <stdio.h>

#include <stdlib.h>

int main(void)

{

int i;

puts("<<Random list>>");

for(i = 0; i < 10; i++)

printf("%d\n", rand());

}

• srand 函數
• 此函數用以重設rand函數執行時所需之亂數種子
• 範例ex12-2c.c
srand 函數

/* File name: ex12-2c.c */

#include <stdio.h>

#include <stdlib.h>

int main(void)

{

int i, seed;

scanf("%d", &seed);

srand(seed);

puts("<<Random list>>");

for(i = 0; i < 10; i++)

printf("%d\n", rand());

}

• 資料型態轉換函數
• 此類函數是將某一型態的資料轉變為另一型態，如：字串->整數、字串->浮點數、整數->字串…等
• 定義在<stdlib.h>標頭檔
• 常見的資料型態轉換函數
• atoi()
• atof()
• Itoa()

• atoi 函數
• 此函數可將字串轉換為整數型態的資料
• 其語法如下：

y = atoi(string);

• 範例ex12-3a.c

/* File name: 12-3a.c */

#include <stdio.h>

#include <stdlib.h>

int main()

{

char string[10];

int result;

printf("Enter a string: ");

gets(string);

result = atoi(string);

printf("After atoi transfer: %d\n", result);

}

• atof 函數
• 此函數可將字串轉換為浮點數型態的資料
• 其語法如下：

y = atof(string);

• 範例ex12-3b.c

/* File name: ex12-3b.c */

#include <stdio.h>

#include <stdlib.h>

int main()

{

char string[10];

double result;

printf("Enter a string: ");

gets(string);

result = atof(string);

printf("After atof transfer: %lf\n", result);

}

• itoa 函數
• 此函數可將整數轉換為字串型態的資料
• 其語法如下：

• 範例ex12-3c.c

/* File name: 12-3c.c */

#include <stdio.h>

#include <stdlib.h>

void main(void)

{

char string[20];

printf("Enter a number: ");

scanf("%d", &x);