Introduction to the C Programming Language

Slides:



Advertisements
Similar presentations
CSIM, PU C Language Introduction to the C Programming Language 重覆敘述 (for,while,break,continue) 適合重複性的計算或判斷.
Advertisements

C++语言程序设计教程 第5章 构造数据类型 第6章 C++程序的结构.
C语言程序设计 主讲教师 :张群燕 电话:
Introduction 基本概念 授課老師:蕭志明
Loops.
第一章 C语言概述 计算机公共教学部.
程序设计基础知识.
C语言程序设计 第八章 函数.
第4章 鏈結串列(Linked Lists) 4-1 動態記憶體配置-(6) 4-2 鏈結串列的基礎-(7)
Linked List Operations
第一章 程序设计入门.
C语言程序设计 课程 第5章 数组 主讲:李祥 博士、副教授 单位:软件学院软件工程系.
第5章 函数与预处理 《 C语言程序设计》 (Visual C++ 6.0环境) 本章导读
第一章 C语言概述.
由C程序结构所知,一个完整的C语言程序是由一个且只能有一个main()函数(又称主函数)和若干个其他函数组合而成的。而前面各章仅学习main()函数的编程,本章将介绍其他函数的编程,包括其他函数的定义、调用、参数传递及变量的作用域等。
Chap 10 函数与程序结构 10.1 函数的组织 10.2 递归函数 10.3 宏定义 10.4 编译预处理.
If … else 選擇結構 P27.
C 程式設計— 語言簡介 台大資訊工程學系 資訊系統訓練班.
Chap 2 用C语言编写程序 2.1 在屏幕上显示 Hello World! 2.2 求华氏温度 100°F 对应的摄氏温度
Introduction to the C Programming Language
C++ 程式設計— 語言簡介 台大資訊工程學系 資訊系統訓練班.
第七章 函数 目录 有参的加法函数的开发 函数定义的一般形式 函数参数和函数的值 函数的调用
Function.
第 6 章 函式.
程式撰寫流程.
Chap 8 指针 8.1 寻找保险箱密码 8.2 角色互换 8.3 冒泡排序 8.4 电码加密 8.5 任意个整数求和*
第八章 函数.
第5章 堆疊(Stacks) 5-1 堆疊的基礎 5-2 堆疊的表示法 5-3 堆疊的應用 - 運算式的計算與轉換
第7章 编译预处理 本章要求: 本章重点: 本章难点: 掌握用#define定义无参数宏和带有参数宏定义和调用方法;
Introduction to the C Programming Language
6 使用者函數 6.1 函數定義 宣告函數 呼叫函數 呼叫多個函數 6-6
C语言 程序设计基础与试验 刘新国、2012年秋.
期中考试成绩分布 《程序设计》-2017年秋.
第5讲 结构化程序设计(Part II) 周水庚 2018年10月11日.
第七章 函数及变量存贮类型 7.1 函数基础与C程序结构 7.2 函数的定义和声明 7.3 函数的调用 7.4 函数的嵌套与递归
第4章 顺序程序设计.
第7章 陣列與指標 7-1 陣列的基礎 7-2 一維陣列的處理 7-3 二維與多維陣列的處理 7-4 陣列的函數參數
第1章 概述 本章要点: C语言程序结构和特点 C语言程序的基本符号与关键字 C语言程序的编辑及运行 学习方法建议:
C语言概述 第一章.
Chapter 2 & Chapter 3.
1.2 C语言程序的结构与书写规则 一、 C语言程序的总体结构
函数 概述 模块化程序设计 基本思想:将一个大的程序按功能分割成一些小模块, 特点: 开发方法: 自上向下,逐步分解,分而治之
Introduction to the C Programming Language
Oop8 function函式.
Chap 5 函数 5.1 计算圆柱体积 5.2 使用函数编写程序 5.3 变量与函数.
Chap 5 函数 5.1 计算圆柱体积 5.2 数字金字塔 5.3 复数运算.
程式的時間與空間 Time and Space in Programming
7.1 C程序的结构 7.2 作用域和作用域规则 7.3 存储属性和生存期 7.4 变量的初始化
第十四章 若干深入问题和C独有的特性 作业: 函数指针 函数作参数 函数副作用 运算 语句 位段 存储类别 编译预处理
C程序设计.
第5章 函 数.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
第7章 程序的结构 四、生存期与存储属性 五、extern关键字与外部连接属性 六、static关键字与内部连接属性.
Introduction to the C Programming Language
第三章 基本的輸出與輸入函數 (Basic Output & Input Function)
#include <iostream.h>
Ch07. 函式.
本节内容 指针类型.
Introduction to the C Programming Language
第七章  数 组.
第4章 鏈結串列(Linked Lists) 4-1 動態記憶體配置-(6) 4-2 鏈結串列的基礎-(7)
第三章 高级函数特性.
第18讲 从C到C++ 计算机与通信工程学院.
05 方法. 05 方法 5.1 方法 在一個較大型的程式中,通常會將具有特定功能或經常重複使用的程式,撰寫成獨立的小單元,稱為「方法」(Method),並賦予方法一個名稱,當程式需要時就可以呼叫此方法來執行該段特定程式。(此種重複使用的程式小單元在其他語言中可能稱為程序、副程式或函式, Visual.
基本資料型態 變數與常數 運算子 基本的資料處理 授課:ANT 日期:2014/03/03.
Chap 10 函数与程序结构 10.1 圆形体积计算器 10.2 汉诺塔问题 10.3 长度单位转换 10.4 大程序构成.
第三章 流程控制 程序的运行流程 选择结构语句 循环结构语句 主讲:李祥 时间:2015年10月.
本节内容 指针类型 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Q1(a) 小偉打算編寫一個程序。該程序把兩個44的表內的數字相加。表3內的數字是由表1和表2應格子內的數字相加而成。例如:
C语言基础学习 从外行到入门.
Presentation transcript:

Introduction to the C Programming Language Function (函數)

Function (函數) Function 即是副程式(sub-program,或 subroutine) 避免重複寫相同的程式碼, 節省coding 時間 可重複使用該程式碼 增加程式的可讀性與可維護性, 降低主程式之複雜性 開發較大應用程式時, 可分割成數個不同功能的function, 由不同的程式設計師分工完成 符合結構化語言之特性 尚有一些程式語言, 將副程式分為兩類 : 副程式 : 處理指定功能之程序過程 函數式 : 負責計值運算並傳回結果

Function語法規則 語法規則 : function_type function_name (parameter, parameter…) { parameters declarations; statements; } 例: char func(p1, p2) int p1; char p2;

函數與主程式間之架構 合法之架構 錯誤之架構 主程式 函數 1 函數 2 主程式 函數 1 函數 2 主程式 函數 1 函數 2 主程式

範例一 比較使用者所輸入兩整數之大小 int a, b; { 函式呼叫 void larger_value(a,b) if(a < b) printf("\2: The larger value is %d \n", b); else if(a > b) printf("\2: The larger value is %d \n", a); else printf("\2: Two values are equal. \n"); } void main() int i, j; printf("\1: Please input 2 values. \n ==> "); scanf("%d %d, &i, &j); larger_value(i,j); 函式呼叫

Function注意事項 函數名稱依照識別字的規則命名. 每個函數各自獨立, 可相互呼叫. 所有函數語法地位一律平等. 參數列式呼叫函數時需要與主程式間作資料或位置的傳遞, 若無資料需要傳遞時, 則可省略參數列, 但不可省略小括號. 若函數須傳回數值時, 則敘述中必有一條傳回敘述, 語法規則為 : return (運算式) return 為關鍵字 運算式可為常數, 變數或算數運算式 return 除了可把函數內的值傳回呼叫程式外, 同時具有令函數結束, 返回呼叫程式之功能.

範例二 輸入一數值 n, 求出 1 至 n 的連乘 (示範函數傳回數值給呼叫程式) void main() 函式呼叫 (無參數傳遞) { long fact(void); long f; f = fact(); printf("The factorial = %ld \n", f); } long fact(void) int i,n; long f=1; printf("Enter one value : "); scanf("%d", &n); for( i=1; i<= n; i++) f *= i; return(f); 函式呼叫 (無參數傳遞) 參數列中無資料 傳回值

範例三 輸入一數值 n, 求出 1 至 n 的連乘 (示範由呼叫程式傳遞一數值給函數, 函數計算後將結果傳回給呼叫程式) void main() { int n; long f; long fact(int); printf("Enter one value : "); scanf("%d", &n); f = fact(n); printf("The factorial of %d = % ld \n", n, f); } long fact( int n) int i; long f = 1; for (i =1; i <= n; i++) f *= i; return (f); 函式呼叫 (參數傳遞) 參數列中傳遞之參數 傳回值

範例四 – (共2頁) 計算輸入之三個整數的 gcd 與 lcm. void main() { int gcd(int, int); int lcm(int, int); int a, b, c; printf("Enter three integer values : "); scanf("%d %d %d", &a, &b, &c); printf("The gcd of %d %d %d is %d \n", a, b, c, gcd(gcd(a,b), c)); printf("The lcm of %d %d %d is %d \n", a, b, c, lcm(lcm(a,b), c)); }

範例四 – 續 接上頁 int gcd(int x, int y) { int 4; while (y != 0) r = x % y; x = y; y = r; } return(x); int lcm(int x, int y) return(x * y / gcd(x,y));

範例五 輸入半徑資料計算圓面積 void main() { float area(int); int r; float a; printf("Enter radius : "); scanf("%d", &r); a = area (r); printf("Circle area = %10.4f \n", a); } float area(int r) float pi = 3.14159; return(pi * r * r);

範例六 (共 2 頁) 輸入一系列數字, 以函數方式求出最大值與最小值, 將最大值,最小值與數字總和列印出來 int min(x,y) { if( x<= y) return x; else return y; } int max(x,y) if(x <= y)

範例六 – 續 接上頁 void main() { int num, value, i; int tmpmax = -1000; int tmpmin = 1000; int sum = 0; printf("\1: Please input the number of data ==> "); scanf("%d", &num); for( i=1; i <= num; i++) printf("\1: input value %d ==> ", i); scanf("%d", &value); tmpmin = min(value, tmpmin); tmpmax = max(value, tmpmax); sum += value; } printf("\2: The maximun is %d \n", tmpmax); printf("\2: The minimum is %d \n", tmpmin); printf("\2: The sum is %d \n", sum);

陣列資料傳遞 – 範例一 利用函數方式, 將陣列中的最小值傳回 int minimum(var) int var[5]; { min = var[0]; for( i=0; i<=4; i++) if(var[i] < min) min = var[i]; return min; } void main() int array[5]; int minimum_value; int i; for( i =0; i<5; i++) printf("\1: input value %d ==> ", i+1); scanf("%d", &array[i]); minimum_value = minimum(array); printf("\2: The minimum value is %d \n", minimum_value);

陣列資料傳遞 – 範例二 (共2頁) 利用函數方式將二維陣列各列的前三元素平均值, 放在最後一個元素位置 void main() { int num[3][4] = { {88, 29,91, 0}, {86, 84, 90, 0}, {77, 65, 70, 0}}; void average(); int i, j; average(num, 3); for( i=0; i<3; i++) printf("\2: "); for( j=0; j<4; j++) printf("%5d", num[i][j]); printf("\n"); }

陣列資料傳遞 – 範例二 (續) 接上頁 void average(var, length) int var[][4], length; { int sum, i, j; for( i=0; i<length; i++) sum = 0; for( j=0; j<4; j++) sum += var[i][j]; var[i][3] = sum / 3; }

參數之區域觀念 全面性變數(Global variable) : 宣告在主程式區域外的變數, 可在程式中任何區域中存取該變數. 區域性變數(Local variable) : 宣告在主函數區域中或函數區域中的變數, 只在該宣告的區域中有效. 離開該區域則視為未定義變數, 各區域中的區域變數互不相干.

參數之儲存類別 C語言提供四個關鍵字 : auto, extern, static, register 靜態變數(Static variable) : 只要程式繼續執行, 不因函數的結束而消失, 該變數所配置的記憶體空間與數值依然存在. 外部變數(Extern variable) : 如上頁提及宣告在主程式區域外的變數為全面性變數, 也稱為外部變數. 外部靜態變數 : 只提供同一程式檔中的所有函數存取, 其他程式檔中的函數則無法使用. 暫存器變數(Register variable) : 為加速程式的執行速度, 可將區域性變數或正式參數宣告為暫存器變數.

範例一 : 區域性變數宣告使用 void main() { int sum(void); int i; for (i=1; i<=3; i++) printf("%dth time = %d \n", i, sum()); } int sum(void) int x=0; x++; return(x);

範例二 : 靜態性變數宣告使用 靜態變數宣告 void main() { int sum(void); int i; for (i=1; i<=3; i++) printf("%dth time = %d \n", i, sum()); } int sum(void) static int x=0; x++; return(x); 靜態變數宣告