C語言 8-1 公用函式 實習
使用書號04E37-100程式設計實習課本(陳會安編)
=======================================================================================================================
function 函數(函式)簡介
function 函數(函式)簡介
若以自動販賣機買飲品為例: 04E37-100 (p.260)
買飲品( ){
錢投入幣口;
選擇飲品並按下按鈕;
由下方拿出飲品;
}
int main()
{
買飲品(果汁);
買飲品(茶飲);
買飲品(汽水); //括號中是傳入函式的資料 , 即引數(arguments)
return 0;
}
上述程式碼是進行函式呼叫 , 在括號中是傳入函式的資料 , 即引數(arguments)
8-1-2內建數學公用函式
內建數學公用函式 P.263
只需在c 程式開頭匯人標頭檔 #include <math.h>,就可使用這些內建數學公用函式。
內建數學公用函式練習一
/* 使用公用數學函式計算開根號之值 */
#include <stdio.h>
#include <math.h>
int main()
{
double a, ans;
printf("請輸入要開根號之值a=>");
scanf("%lf", &a);
ans = sqrt(a);
printf("要開根號之值 a=%f\n", a);
printf("開根號後值=%f\n", ans);
return 0;
}
內建數學公用函式練習二
/* 使用公用數學函式計算三角形面積 */
#include <stdio.h>
#include <math.h>
int main()
{
double a, b, c, s, area;
printf("請輸入三角形的3個邊長a,b,c =>");
scanf("%lf,%lf,%lf", &a, &b, &c);
s = (a + b + c) / 2.0;
area = sqrt(s*(s-a)*(s-b)*(s-c));
printf("3個邊: a=%f,b=%f,c=%f\n", a, b, c);
printf("三角形面積=%f\n", area);
return 0;
}
內建亂數函式 P.264
內建亂數函式 P.264
C語言中的srand()和rand()函式
標頭檔案: rand和srand包含在標頭檔案中的<stdlib.h>中
只需在c 程式開頭匯人標頭檔 #include <stdlib.h>,就可使用內建公用函式==>rand()和srand()用於產生隨機數。
如:
內建亂數函式練習一
#include<stdio.h>
#include<stdlib.h>
int main()
{
for (int i = 0; i < 10; i++)
{
printf("%d\t", rand());
}
}
將會產生10個不同的隨機數。但rand存在一定的缺陷,它產生的是偽隨機數,所以每次執行時,你都會發現所產生的10個隨機數都是一樣的。
rand 所產生的亂數是一個整數,其值介於 0 到 RAND_MAX 之間(最小是 0,最大則為 RAND_MAX),若想要看 RAND_MAX 的實際數值,可以用 printf 將其輸出後查看。
printf("RAND_MAX = %d\n", RAND_MAX);
解決方式: 此時就需使用srand來設定一個種子,並使用系統時間產生隨機數。 c語言中語句srand( (time(NULL) ) ; 表示設定一個隨機種子,每次執行都能保證隨機種子不同。
而在呼叫 rand 函數之前,要先使用 srand 函數設定初始的亂數種子
EX: /* 設定亂數種子 */
srand( 10) );
#include<stdio.h>
#include<stdlib.h>
int main()
{
/* 設定亂數種子 */
srand( 10) );
for (int i = 0; i < 10; i++)
{
printf("%d\t", rand());
}
printf("RAND_MAX = %d\n", RAND_MAX);
}
srand() 需要一個參數做為種子,以產生一個新的亂數數列,而這個參數我們通常以目前的時間傳入,也就是使用 time() 函數,而 time() 是定義在 time.h 中,
#include <time.h> /* 時間相關函數 */
/* 設定亂數種子 */
srand( time(NULL) );
//srand( (time(NULL) )中time(NULL)函式是得到一個從1900年1月1日到現在的時間秒數
通常我們會搭配使用取餘數符號 % 來做運算,例如我們要取 0-9 的變數,可以寫成 a=rand() % 10,下面我們再看幾個例子:
取 1-10 的亂數 a=(rand() % 10) +1
取 1-100 的亂數 a=(rand() % 100) +1
取 100-1000 的亂數 a=(rand() % 901) +100
再將內建亂數函式練習一修改成以下:
#include<stdio.h>
#include<stdlib.h>
#include <time.h> /* 時間相關函數 */
int main()
{
/* 設定亂數種子 */
srand( time(NULL) );
for (int i = 0; i < 10; i++)
{
printf("%d\t", (rand()%10)+1);
}
printf("\n");
printf("RAND_MAX = %d\n", RAND_MAX);
}
內建字串函式
c 語 言沒有內建字串資料型態 ,字串(string) 是 char字元型態的一維陣列
字串( String )宣告可為字元陣列加一個空字元 (NULL character)
char str1[]={'y','m','h','s','\0'};
char str1[]="ymhs";
char *str1="ymhs"; //指向一個連續資料的開頭
只需在c 程式開頭匯人標頭檔 #include <string.h>,就可使用此內建公用字串函式
字串函式練習一
/* 使用標準函式庫的字串函式 */
#include <stdio.h>
#include <string.h>
int main()
{
char str[15] = "This is a pen."; /* 宣告字元陣列str */
char str1[20], str2[20]; /* 宣告字元陣列str1和str2 */
char str3[30] = "Hi! "; /* 宣告字元陣列str */
printf("str字串內容: \"%s\"\n", str);
printf("str字串的長度: %d\n", strlen(str));
strcpy(str1, "This is a book."); /* 複製到str1字串 */
strcpy(str2, str); /* 複製到str2字串 */
printf("str1字串內容: \"%s\"\n", str1);
printf("str2字串內容: \"%s\"\n", str2);
strcat(str3, str1); /* 連接字串 */
printf("str3字串內容: \"%s\"\n", str3);
if ( strcmp(str1, str2) > 0 ) /* 字串比較 */
printf("str1比較大...");
else
printf("str2比較大...");
return 0;
}