C語言 8-1 公用函式 實習

C語言    8-1 公用函式 實習       
短網址產生器QRCODE產生器
108第X次程式設計實習-課程內容(資一甲)(短網址:https://is.gd/rdbnlG
使用書號04E37-100程式設計實習課本(陳會安編)
=======================================================================================================================

資料原始出處自: https://www.cyut.edu.tw/~ckhung/b/pl/subroutine.php


 function 函數(函式)簡介


 function 函數(函式)簡介
 
若以自動販賣機買飲品為例:   04E37-100 (p.260)
 
買飲品( ){
錢投入幣口;
選擇飲品並按下按鈕;
由下方拿出飲品;
}
 
 
//在主程式執行 進行函式呼叫   主函數main() 是程式執行的開端
int main()
{
   
買飲品(果汁);
買飲品(茶飲);
買飲品(汽水);   //括號中是傳函式的資料 , 即引數(arguments)
     return 0;
}
  
述程式碼是進行函式呼叫 , 在括號中是傳函式的資料 , 即引數(arguments)     


8-1-2內建數學公用函式

內建數學公用函式 P.263
 
需在c 程式開頭匯人標頭檔  #include <math.h>就可使用這些內建數學公用函式。
 
 
線上編輯C語言_程式_網站: onlinegdb>https://www.onlinegdb.com/#
 
內建數學公用函式練習一
/* 使用公用數學函式計算開根號之值 */
#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 語言_亂數的使用
 
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日到現在的時間秒數
來自 <https://webcache.googleusercontent.com/search?q=cache:KdCCZvgynZ8J:https://www.itread01.com/content/1544561673.html+&cd=4&hl=zh-TW&ct=clnk&gl=tw>
 
 
通常我們會搭配使用取餘數符號 % 來做運算,例如我們要取 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";  //指向一個連續資料的開頭   
 
char *str1="ymhs";  //複習上學期所教過// 7-3-3 陣列與指標應用
 
 
需在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];          /* 宣告字元陣列str1str2 */
    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;
}