Chapter 6 函數.

Slides:



Advertisements
Similar presentations
第一單元 建立java 程式.
Advertisements

親愛的老師您好 感謝您選用本書作為授課教材,博碩文化準備本書精選簡報檔,特別摘錄重點提供給您授課專用。 說明: 博碩文化:
第1单元 操作系统概论 第一节 绪论 操作系统定义.
C語言中可變参數的用法——va_list、va_start、va_arg、va_end参數定義
C语言程序设计 第八章 函数.
第4章 鏈結串列(Linked Lists) 4-1 動態記憶體配置-(6) 4-2 鏈結串列的基礎-(7)
第一章 程序设计入门.
Introduction to the C Programming Language
第5章 函数与模块化设计 学习目的与要求: 掌握函数的定义及调用方法 理解并掌握参数的传递方法 理解函数的嵌套与递归调用
Do.For.While.正三角.倒正三角.倒九九乘法表
選擇排序法 通訊一甲 B 楊穎穆.
C 程式設計— 指標.
Chap 10 函数与程序结构 10.1 函数的组织 10.2 递归函数 10.3 宏定义 10.4 编译预处理.
If … else 選擇結構 P27.
程序讲解 第一题: 将指定文件的m行到n行字符写到显示屏上,m和n值从键盘输入。 运行时输入及结果: please enter m,n:
Introduction to the C Programming Language
STRUCTURE 授課:ANT 日期:2010/5/12.
第七章 函数 目录 有参的加法函数的开发 函数定义的一般形式 函数参数和函数的值 函数的调用
Function.
程式撰寫流程.
SQL Stored Procedure SQL 預存程序.
C语言程序设计 李祥.
程序设计专题一 结构化程序设计与递归函数 主讲教师: 刘新国.
Chapter 7 指標.
Methods 靜宜大學資工系 蔡奇偉副教授 ©2011.
第5章 堆疊(Stacks) 5-1 堆疊的基礎 5-2 堆疊的表示法 5-3 堆疊的應用 - 運算式的計算與轉換
第四章 C 语言中的输入和输出.
期中考试成绩分布 《程序设计》-2017年秋.
計數式重複敘述 for 迴圈 P
程式設計實習課(四) ----C 函數運用----
第5讲 结构化程序设计(Part II) 周水庚 2018年10月11日.
第七章 函数及变量存贮类型 7.1 函数基础与C程序结构 7.2 函数的定义和声明 7.3 函数的调用 7.4 函数的嵌套与递归
第一單元 建立java 程式.
Chapter 5 複合資料型態.
第1章 概述 本章要点: C语言程序结构和特点 C语言程序的基本符号与关键字 C语言程序的编辑及运行 学习方法建议:
C++ 程式設計 基礎篇 張啟中 Chang Chi-Chung.
|07 函數.
C语言大学实用教程 第5章 函数与程序结构 西南财经大学经济信息工程学院 刘家芬
C语言复习2----函数.
Introduction to the C Programming Language
Oop8 function函式.
指標
Chap 5 函数 5.1 计算圆柱体积 5.2 使用函数编写程序 5.3 变量与函数.
Chap 5 函数 5.1 计算圆柱体积 5.2 数字金字塔 5.3 复数运算.
7.1 C程序的结构 7.2 作用域和作用域规则 7.3 存储属性和生存期 7.4 变量的初始化
輸出與輸入(I/O).
C程序设计.
C qsort.
第二章 类型、对象、运算符和表达式.
Introduction to the C Programming Language
Pthread.
第四章 C 语言中的输入和输出.
授课老师:龚涛 信息科学与技术学院 2016年3月 教材:《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
挑戰C++程式語言 ──第9章 函數.
本节内容 指针类型.
Introduction to the C Programming Language
第4章 鏈結串列(Linked Lists) 4-1 動態記憶體配置-(6) 4-2 鏈結串列的基礎-(7)
程式語言.
C/C++基礎程式設計班 C語言入門、變數、基本處理與輸入輸出 講師:林業峻 CSIE, NTU 3/7, 2015.
Programming & Language Telling the computer what to do
第6章 嵌入式软件开发基础.
Introduction to the C Programming Language
C/C++基礎程式設計班 陣列 講師:林業峻 CSIE, NTU 3/14, 2015.
Chap 10 函数与程序结构 10.1 圆形体积计算器 10.2 汉诺塔问题 10.3 长度单位转换 10.4 大程序构成.
C語言程式設計 老師:謝孟諺 助教:楊斯竣.
本节内容 指针类型 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Introduction to the C Programming Language
函式庫補充資料 1.
隨機函數.
方法(Method) 函數.
Presentation transcript:

Chapter 6 函數

簡介 函數功能 參數的傳遞 函數原型 變數存活周期 自動變數、靜態變數、全域變數

C的函數 敘述句的集合 定義在文件範圍 擁有獨一無二的名子 使用大括號包括起來 進行某一明確定義的操作 或許有輸入參數 或許會回傳值

Example #include <stdio.h> #include <stdlib.h> float avg(int n, int m) { return (n + m) / 2.0; } int main(int argc, char *argv[]) { int n1, n2; printf("Enter the 1st number:"); scanf("%d", &n1); printf("Enter the 2nd number:"); scanf("%d", &n2); printf("The average is %.2f\n", avg(n1, n2)); system("pause"); return 0;

參數的傳遞 參數僅傳值不傳址 函數將接收到每個參數的複本 原始參數將不受影響 結果的傳遞也是傳值 a = b + avg(c,d);

void 關鍵字 使用在函數不需要回傳值 作法 void f( int x, float y) {…} 使用在不需參數的函數 void f2(void){ printf( "Welcome to ..."); } … f2 ();

Example #include <stdio.h> #include <stdlib.h> void print_ints(int num[], int n) { int i; if (n <= 0) return; for (i = 0; i < n; ++i) { if (i > 0) printf(","); printf("%d", num[i]); } int main(int argc, char *argv[]) { int a[] = {1, 2, 3, 4, 5}; print_ints(a, 5); system("pause"); return 0;

使用函數 傳入的參數型別需要先定義且不得違反 編譯器可以抓出型態不符合的錯誤 使用函數必須事先定義 但是必須提供相關資訊 C++ 和 Java 也相同

函數原型 函數具有幾個要點 署名(名字+ 參數型別) 回傳型態 定義明確的使用方法 為函式庫的基礎要素

Example #include <stdio.h> #include <stdlib.h> float avg(int, int); /* 函式原型*/ int main(int argc, char *argv[]) { int n1, n2; printf("Enter the first number:"); scanf("%d", &n1); printf("Enter the second number:"); scanf("%d", &n2); printf("The average is %.2f\n", avg(n1, n2)); system("pause"); return 0; } float avg(int n, int m) { return (n + m) / 2.0;

Example /* file myfun.h */ float avg(int, int); … /* file myfun.c */ float avg(int n, mt m) { return (n + m) / 2.0; } /* file mymain.c */ #include <stdio.h> #include "myfun.h" int main(int argc, char *argv[]) { avg(x, y) return 0;

變數存活周期 那裡可看見這個變數 三種狀況: 區域有效 或 區塊有效 檔案有效 全域有效

區域有效 區塊內有效 (一對大括號) 函數內 迴圈和判斷 該變數直到區塊結束才失效

檔案有效 宣告在任何函數之外 在同一個檔案的任何地方都看見

Example #include <stdio.h> #include <stdlib.h> int i = 3; /* 檔案有效*/ int main(int argc, char *argv[]) { int j; printf(“%d\t”, i); // ←i 檔案有效 for (j = 0; j < i; ++j) { int i = 99; // ←i 區域有效 printf("%d\t", i); { int i = j; // ←i 區域有效 } system("pause"); return 0; // 3 99 0 99 1 99 2

自動變數(auto) 存放在程式的堆疊中 存在任何在區塊內變數 每次進入區塊內會重新分配位址跟初始值

Example #include <stdio.h> #include <stdlib.h> int count() { auto int n = 0; return ++n; } int main(int argc, char *argv[]) { int i; for (i = 0; i < 5; ++i) printf("%d ", count()); system("pause"); return 0; }// 1 1 1 1 1

靜態變數(static) 居住在一個特別資料區 必須定義在區塊外面 僅一次初始化 (Static) data segment 如 檔案變數 就在程式剛啟動

Example #include <stdio.h> #include <stdlib.h> int count() { static int n = 0; return ++n; } int main(int argc, char *argv[]) { int i; for (i = 0; i < 5; ++i) printf("%d ", count()); system("pause"); return 0; }// 1 2 3 4 5

全域變數(extern ) 又叫程式變數 可以在不同程式原始檔之間存取 定義一個檔案變數 定義全域變數需要使用 extern 關鍵字 不需要 static 關鍵字 定義全域變數需要使用 extern 關鍵字 static + file scope = private to the file

Example /* file1.c */ int i = 10; /* global */ static int j = 20; /* private */ int get_j(void) { return j; } /* file2.c */ #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { extern int i; /* extern optional for funtions: */ int get_j(void); printf("i == %d\n", ++i); //i=11 printf("j == %d\n", get_j()); //j=20 system("pause"); return 0;

總結 函數 函數是有名字的敘述句集合 C 參數採傳值呼叫 變數存活週期區域 隱藏資訊的好幫手 statics 或許需要參數 或許有回傳值 區域, 檔案, 程式 隱藏資訊的好幫手 statics