国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

【學習筆記】【C語言】函數

2019-11-14 18:50:52
字體:
來源:轉載
供稿:網友

一、 什么是函數

任何一個C語言程序都是由一個或者多個程序段(小程序)構成的,每個程序段都有自己的功能,我們一般稱這些程序段為“函數”。所以,你可以說C語言程序是由函數構成的。

比如你用C語言編寫了一個MP3播放器程序,那么它的程序結構如下圖所示:

clip_image002

二、 函數的定義

1. 定義函數的目的

將一個常用的功能封裝起來,方便以后調用

2. 定義函數的步驟

函數名:函數叫什么名字

函數體:函數是干啥的,里面包含了什么代碼

3. 格式

固定格式(很多語言的函數都是這么寫的)

返回值類型 函數名(形式參數列表)

{

函數體

}

 

舉例

定義一個函數,計算兩個整數的和

sum(int a, int b)

{

int c = a + b;

}

三、 函數調用

sum(10, 11); 引出返回值

說明函數的調用過程

簡述return的作用

四、 函數的參數

1. 形參和實參的基本概念

2. 形參個數和實參一致:sum(10, 11, 12)

3. 參數的傳遞是值傳遞

4. 參數名不能跟函數內的局部變量同名

5. 函數可以沒有參數:設計一個函數返回PI

五、 函數的返回值

1. 返回值的基本概念、return的作用

2. void

3. return

void可以省略return

可以多次使用return

return后面不能有其他語句

4. 函數的弱語法

如果沒有寫返回值類型,默認是int

如果寫了返回值,可以不返回

調用一個沒有定義過的函數

六、 定義函數的步驟

1. 明確函數作用,起一個有意義的函數名稱

2. 明確函數的參數和返回值

3. 舉例:

求兩個整數的和

打印一條橫線

打印N條橫線

七、 函數注意

不能嵌套定義函數

死循環調用,自己調用自己

不能重復定義、可以重復聲明

八、 函數的補充

1. main函數

返回值:0,正常退出;1,異常退出

2. PRintf函數

#include

返回值:字符串的長度

九、 函數的聲明

1. 函數的定義順序

2. 函數的聲明作用:聲明和定義,類似于身份證和人的關系,編譯買機票、鏈接登機

clip_image004

3. 只有函數聲明、沒有定義,編譯警告、鏈接報錯

十、 .h文件和.c文件的分工

1. 單文件的壞處

一個文件的內容太多,不利于閱讀、調試

多人修改同一個文件出問題

公司里面是團隊合作

2. 將sum函數抽取到另一個.c文件中

先直接調用sum函數,編譯警告、鏈接main.c錯誤

#include “sum.c” , 編譯鏈接main.c,運行成功(畫圖分析.o文件中的東西)

如果avr.c中使用sum.c,編譯鏈接main.c,運行程序(畫圖分析出錯原因)

3. 在其他文件中聲明sum函數

int sum(int,int);

編譯鏈接main.c

編譯鏈接sum.c

編譯鏈接main.c sum.c,運行成功

avr.c利用一樣的方法

4. 將int sum(int,int)抽取到另外一個文件中

不抽取聲明的壞處:增加新的函數了

抽取到.c文件中?開發工具會將所有的.c進行編譯鏈接

抽取到.h文件中

5. 抽取步驟總結

.c文件寫函數的定義

.h文件寫函數的聲明

要想用我的函數,請包含我的.h文件

好處分析

十一、 代碼

1.

 1 #include <stdio.h> 2  3 /* 4  1.什么情況下定義函數:添加一個常用的新功能 5   6  2.函數的定義格式 7  返回值類型  函數名(形式參數列表) 8  { 9     函數體10  }11  12  3.定義函數需要明確的東西13  1> 起一個有意義的函數名14  2> 15  */16 17 int printLine()18 {19     printf("-------------/n");20     return 0;21 }22 23 int average(int num1, int num2)24 {25     return (num1 + num2)/2;26 }27 28 int main()29 {30     /*31     printLine();32     33     printLine();34     35     printLine();36      */37     38     int a = 10;39     int b = 9;40     41     int c = average(a, b);42     43     printf("c is %d/n", c);44     45     int a1 = 11;46     int b1 = 20;47     48     int d = average(a1, b1);49     printf("d is %d/n", d);50     51     return 0;52 }

2.

 1 #include <stdio.h> 2 /* 3  參數注意點 4  1.形式參數:定義函數時函數名后面中的參數,簡稱形參 5  2.實際參數:調用函數式傳入的具體數據,簡稱實參 6  3.實參個數必須等于形參個數 7  4.函數體內部不能定義和形參一樣的變量 8  5.如果是基本數據類型作為函數形參,純粹是值傳遞,修改函數內部形參的值,并不會影響外面實參的值 9  6.一個函數可以沒有形參,也可以有無限多個形參10  */11 12 // 形式參數,簡稱形參13 int sum(int num1, int num2)14 {15     // 函數體內部不能定義和形參一樣的變量16     // int num1;17 18     num1 = 50;19 20     return num1 + num2;21 }22 23 /*24  return的作用:25  1> 退出函數26  2> 返回一個具體值給函數調用者27  28  返回值注意點29  1> void代表沒有返回值30  2> 如果沒有明確說明返回值類型,默認是返回int類型31  3> 就算明確聲明了返回值類型,也可以不返回任何值32  33  默認情況下,C語言不允許兩個函數的名稱一樣34  */35 36 char test()37 {38     return 'A';39 }40 41 /*42 void test(int a, int b)43 {44 45 }*/46 47 void test5()48 {49     50 }51 52 /* 偽代碼53 void login(QQ, 密碼)54 {55     // 1.驗證QQ有沒有值56     if (QQ沒有值) return;57     58     // 2.驗證密碼有沒有值59     if (密碼沒有值) return;60     61     // 3.把QQ、密碼發送到服務器62     63 }*/64 65 int test3()66 {67     printf("999999999/n");68 }69 70 // 如果不明確聲明返回值類型,默認就是int類型71 test2()72 {73     printf("888888888/n");74     return 10;75 }76 77 int main()78 {79     int c = test2();80     printf("c=%d/n", c);81     82     test3();83     //test();84     85     /*86     int a = 100;87     int b = 27;88     89     // a、b稱為函數的實際參數,簡稱實參90     int c = sum(a, b);91     92     93     printf("a=%d, b=%d, c=%d/n", a, b, c);*/94 95     return 0;96 }

3.函數練習

 1 /* 2     求兩個整數的差 3     打印一條橫線 4     打印N條橫線 5   6  定義函數的步驟 7  1> 根據函數的作用,起一個有意義的名稱 8  2> 確定函數的形參個數 9  3> 確定函數的返回值10  */11 #include <stdio.h>12 13 void printLines(int n)14 {15     for (int i = 0; i<n; i++)16     {17         printf("-------------------/n");18     }19 }20 21 void printLine()22 {23     printf("-------------------/n");24 }25 26 int minus(int a, int b)27 {28     return a - b;29 }30 31 int main()32 {33     printLines(10);34     //printLine();35     //printf("%d/n", minus(100, 29));36     37     return 0;38 }

4.函數注意點

 1 #include <stdio.h> 2 /* 3  1.默認情況下,不允許有函數的名稱一樣 4  2.函數不能嵌套定義 5  3.函數不能重復定義,但是可以重復聲明 6  4.如果有函數的聲明,沒有函數的定義 7  1> 編譯可以通過,因為編譯器只會檢測語法合不合理,并不會檢測函數有沒有定義 8  2> 鏈接報錯,因為鏈接的時候會檢測函數是否定義 9  10  */11 12 // 函數的聲明13 //void printLine();14 //void printLine();15 //void printLine();16 //void printLine();17 //void printLine();18 //void printLine();19 20 int main()21 {22     void printLine();23     24     printLine();25     return 0;26 }27 28 // 函數的定義29 30 void printLine()31 {32     printf("--------/n");33 }

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新闻| 清原| 芜湖市| 清涧县| 灌阳县| 湖南省| 翁牛特旗| 遵义市| 牡丹江市| 乡宁县| 大化| 兰西县| 木里| 扎囊县| 精河县| 宁城县| 建阳市| 界首市| 当阳市| 天门市| 万年县| 曲阜市| 眉山市| 青河县| 开鲁县| 济宁市| 南皮县| 高要市| 泾源县| 阜新市| 漳浦县| 汕尾市| 仙居县| 蓝田县| 申扎县| 临夏县| 河东区| 九寨沟县| 余江县| 新邵县| 隆尧县|