學習C語言的函數

 
學習函數
       主要學習函數的用法。首先討論爲什麼要使用函數,然後詳細討論內置函數和自定義函數以及函數的結構,最後討論函數調用以及函數的返回值。
       函數可以把相對獨立的某個功能抽象出來,使之成爲程序中的一個獨立實體。可以在同一個程序或其他程序中多次重複使用
函數機制的優點
Ø         使程序變得更簡短而清晰
Ø         有利於程序維護
Ø         可以提高程序開發的效率
Ø         提高了代碼的重用性
函數的兩種類型:內置函數和自定義函數
       內置函數:
Ø       由C語言系統提供;
Ø       用戶無須定義,也不必在程序中作類型說明;
Ø       只需在程序前包含有該函數定義的頭文件;
內置函數
頭文件
用途
double sqrt(double x)
math.h
計算x的平方根
double pow(double x, double y)
計算x的y次冪
double ceil(double x)
求不小於x的最小整數,並以double形式顯示
double floor(double x)
求不大於x的最大整數,並以double形式顯示
int toupper(int x)
ctype.h
如果x爲小寫字母,則返回對應的大寫字母
int tolower(int x)
如果x爲大寫字母,則返回對應的小寫字母
int rand(void)
stdlib.h
產生一個隨機數
void exit(int retval)
終止程序
內置函數sqrt 和pow 示例:
#include <stdio.h>
#include 
<math.h>
void main()
{
   
int x=1;
   
double squareroot,power;
   
while(x <= 10)
   
{
squareroot
=sqrt(x);
power
=pow(x,3);
printf(
" %d的平方根:%3.2f %d的立方:%5.0f  ",
                x,squareroot,x,power);
x
++;
   }

}
 
輸出:
1的平方根: 1.00        1的立方:    1
 2的平方根: 1.41        2的立方:    8
 3的平方根: 1.73        3的立方:   27
 4的平方根: 2.00        4的立方:   64
 5的平方根: 2.24        5的立方: 125
 6的平方根: 2.45        6的立方: 216
 7的平方根: 2.65        7的立方: 343
 8的平方根: 2.83        8的立方: 512
 9的平方根: 3.00        9的立方: 729
10的平方根: 3.16       10的立方: 1000
Press any key to continue////
內置函數ceil和floor示例
#include <stdio.h>
#include 
<math.h>
void main()
{       
         printf(
"==============floor()=========");
         printf(
"  floor(99.1) = %f  ",floor(99.1));
         printf(
" floor(-99.1) = %f ",floor(-99.1));
         printf(
" floor(99.9) = %f ",floor(99.9));
         printf(
" floor(-99.9) = %f ",floor(-99.9));
         printf(
" ==============ceil()==========");
         printf(
"  ceil(99.1) = %f ",ceil(99.1));
         printf(
" ceil(-99.1) = %f ",ceil(-99.1));
         printf(
" ceil(99.9) = %f ",ceil(99.9));
         printf(
" ceil(-99.9) = %f ",ceil(-99.9));
}

輸出:
==============floor()=========
 floor(99.1) = 99.000000
 floor(-99.1) = -100.000000
 floor(99.9) = 99.000000
 floor(-99.9) = -100.000000
 
==============ceil()==========
 ceil(99.1) = 100.000000
 ceil(-99.1) = -99.000000
 ceil(99.9) = 100.000000
 ceil(-99.9) = -99.000000
Press any key to continue
toupper和tolower示例
#include<stdio.h>
#include
<ctype.h>
void main()
{
char msg1,msg2,to_upper,to_lower;
printf(
"請輸入一個小寫字母:");
msg1
=getchar();
to_upper
=toupper(msg1);
printf(
"轉換爲大寫:%c ",to_upper);
printf(
"請輸入一個大寫字母:");
fflush(stdin);
msg2
=getchar();
to_lower
=tolower(msg2);
printf(
"轉換爲小寫:%c ",to_lower);
}
 
請輸入一個小寫字母:d
轉換爲大寫:D
請輸入一個大寫字母:E
轉換爲小寫:e
Press any key to continue
內置函數rand示例
#include<stdio.h> 
#include
<stdlib.h> 
//#include<time.h>
void main() 

       
int i; 
       printf(
"產生 10 個 0 到 99 之間的隨機數序列: "); 
       
//srand((unsigned)time(NULL));
       for(i=0; i<10; i++
             printf(
"%d ", rand() % 100); 
       printf(
" ");
}
 
產生 10 個 0 到 99 之間的隨機數序列:
44 73 26 58 37 94 27 42 28 90
Press any key to continue
自定義函數:
Ø       用戶在程序中根據需要而編寫的函數;
Ø         函數名的命名規則和變量命名一樣。注意儘量能夠表達出正確的意義,如果說一個變量命名重在說明它“是什麼”的話,則一個函數重在說明它要“做什麼”。比如一個函數要實現兩數相加,則可以命名爲AddTwoNum,這樣有助於閱讀。
Ø         函數參數。格式爲:int AddTwoNum(int a,int b ) 注:兩個或多個參數類型相同時,並不能同進聲明。例如:AddTwoNum(int a, b )//是錯誤的。
Ø         在C語言中,不允許一個函數定義在另一個函數體內。如:
Void A()
{
        Void B()         //錯誤,函數B定義在函數A體內。
        {…..
        }
…..
}
函數原型
函數原型說明在形式上與函數頭部類似,最後加一個分號。原型說明中參數表裏的參數名可以不寫(只寫參數類型)
#include <stdio.h>
float count (int, int);
void main()
{
   . . .
   . . .
}
float co nt(int x,int y)
{
 . . .
}
函數調用
Ø         通過在程序中使用函數名稱,可以執行函數中包含的語句,這稱爲調用函數
Ø         函數之間允許相互調用,也允許嵌套調用
Ø         函數還可以自己調用自己,稱爲遞歸調用
示例:
#include<stdio.h>
void AreaOfRect();
void AreaOfTriangle();
void AreaOfRound();
void main()
{
       
int select;
       
do {
            printf(
" 0、退出  1、長方形  2、三角形  3、圓形 ");
            printf(
"請選擇功能:");
            scanf(
"%d",&select);
            
if(select == 0)     break;
      
switch(select) {
            
case 1 : AreaOfRect(); break//長方形
            case 2 : AreaOfTriangle(); break//三角形
            case 3 : AreaOfRound(); break//圓形
           default : printf("輸入有誤,請在 0~4 之間選擇。 ");
          }

      }
while(1);
}

void AreaOfRect() 
{
        
int x,y; 
        printf(
"請輸入長方形的長:"); 
        scanf(
"%d",&x);
        printf(
"請輸入長方形的寬:"); 
        scanf(
"%d",&y);
        printf(
"面積爲:%d ",(x * y)); 
}
 
void AreaOfRound()
{
      
int r; 
      printf(
"請輸入圓形的半徑:"); 
      scanf(
"%d",&r);
      printf(
"面積爲:%d ",3.14*r*r); 
}

void AreaOfTriangle()
{
        
int x,y; 
        printf(
"請輸入三角形的底:"); 
        scanf(
"%d",&x);
        printf(
"請輸入三角形的高:"); 
        scanf(
"%d",&y);
        printf(
"面積爲:%d ",(x * y)/2); 
}
 
 
函數返回值
C 語言中的 return 語句用於向調用函數返回值,語法如下:
             return (<表達式>);
Ø       C語言中的函數至多可以返回一個值,不能返回多個值;
Ø        返回值的數據類型必須與函數原型中返回值的數據類型匹配;
Ø        當遇到 return 語句時,函數執行將終止。程序控制流將立即返回調用函數;
示例:
#include <stdio.h>
int get_age();
void main()
{
     
int age1, age2, age3;
     age1 
= get_age();
     age2 
= get_age();
     age3 
= get_age();
     
if ( (age1 > age2) && (age1 > age3))
         printf(
" 年齡爲 %d 的人最大 ", age1);
     
else if( (age2 > age1) && (age2 > age3))
         printf(
" 年齡爲 %d 的人最大 ", age2);
     
else if( (age3 > age1) && (age3 > age2))
         printf(
" 年齡爲 %d 的人最大 ", age2);
}

int get_age()
{
    
int age;
    printf(
" 請輸入年齡: ");
    scanf(
"%d",&age);
    
return age;
}

函數的結構包括:返回值類型、函數名、參數列表、函數體
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章