C語言有關函式淺析

爽爽子禿頭小生活發表於2020-12-19

大家好,我是爽爽子,小菜雞一名,今天分享一下函式希望對大家有幫助。

分析思路
1.定義
2.格式
3.函式怎麼使用

首先我還是把函式分了幾個板塊

1.函式的定義
2.實參和形參的區別
3.返回值
4.宣告+呼叫
5.函式的巢狀+遞迴

1.函式的定義

在這裡插入圖片描述

int str (int n)
{
    return sum;//注意sum的型別和形參n是一種型別(否則返回值失效)可以找pta的程式碼自己試一試
}

2.實參和形參的區別

大家對這一塊分不太清
實參:實參可以是常量、變數、表示式、函式等,無論實參是何種型別的資料,在進行函式呼叫時,它們都必須有確定的值,以便把這些值傳送給形參,所以應該提前用賦值、輸入等辦法使實參獲得確定值。(就是主函式有的值)
形參:接受實參的值,然後在函式中執行
注意的是:形參實參要注意同一種性質,並且只能是實參把數值給形參(數值傳遞成功實參和形參就沒有半點關係)

上一組程式碼
在這裡插入圖片描述
實參和形參一樣

#include<stdio.h>
int str(int n);
int main()
{
    int n;
    scanf("%d",&n);
    int f;
    f = str(n);
    printf("%d",f);
}
int str(int n)
{
    int i,s = 1;
    int sum = 0;
    for( i = 1; i <= n;i++)
    {
        s = s * i;
        sum = sum + s;
    }
    return sum;
}

在這裡插入圖片描述
實參和形參不相等`

#include<stdio.h>
int str(int n);
int main()
{
    int a;
    scanf("%d",&a);
    int f;
    f = str(a);
    printf("%d",f);
}
int str(int n)
{
    int i,s = 1;
    int sum = 0;
    for( i = 1; i <= n;i++)
    {
        s = s * i;
        sum = sum + s;
    }
    return sum;
}

在這裡插入圖片描述

經過驗證實參形參相同沒有什麼影響!!!
過程分析:先對a進行賦值,a為實參,然後a的值賦值給形參n,形參在通過函式的薰陶,return出一個值,然後這個值就是主函式的f(也可以說a起到提醒的作用,提醒n你要過來複制我了,n相當於傳遞的作用,然後經過運算得出f(x)的值)

3.返回值

返回值在板塊二說的挺明白了,現在就是區分有的函式有返回值,有的函式沒有

#include <stdio.h>

int a()
{
printf("function a called\n");
}

int b()
{
// printf("function b called\n");
}

int c()
{
//int c = 1 + 2;
}

int main()
{
int a1 = a();
int b1 = b();
int c1 = c();

printf("a1=%d, b1=%d, c1=%d\n", a1, b1, c1);
}

不同編譯器出現的情況可能不同,由於歷史原因這個玩意解釋不了,我們就姑且記住,函式可以沒有返回值用void main就可以(不過大家可以試一試這個程式碼我用CB最後的值不是0就是1)

4.宣告+呼叫

宣告格式:
在這裡插入圖片描述
呼叫格式:在這裡插入圖片描述
例題在下一板塊

5.函式的巢狀+遞迴

求1!+2!+…+9!+10!

#include <stdio.h>

//求階乘
long factorial(int n){
    int i;
    long result=1;
    for(i=1; i<=n; i++){
        result *= i;
    }
    return result;
}

// 求累加的和
long sum(long n){
    int i;
    long result = 0;
    for(i=1; i<=n; i++){
        //在定義過程中出現巢狀呼叫
        result += factorial(i);
    }
    return result;
}

int main(){
    printf("1!+2!+...+9!+10! = %ld\n", sum(10));  //在呼叫過程中出現巢狀呼叫
    return 0;
}

在這裡插入圖片描述

嘿嘿一些小小知識點,其實不會的還是大家對於函式理解,我是把它當成數學題來解決在這裡插入圖片描述
嗚嗚嗚,爽爽子已經盡力了,如果還是看不明白。。。。爬爬爬

相關文章