函數 授課:ANT 日期:2011/3/28.

Slides:



Advertisements
Similar presentations
第1单元 操作系统概论 第一节 绪论 操作系统定义.
Advertisements

“八皇后”问题 崔萌萌 吕金华.
第九章 字串 (String).
项目五——校园一卡通程序功能模块化设计 5-1项目显示查询和退出函数设计.
補充: Input from a text file
第8章 字元與字串處理 8-1 C語言的字元檢查函數 8-2 C語言的字串 8-3 字串的輸入與輸出 8-4 指標與字串
C语言程序设计 第八章 函数.
第一章 程序设计入门.
高级语言程序设计 主讲人:陈玉华.
循环结构又称为重复结构:用来处理需要重复处理的问题,它是程序中一种很重要的结构。
函數 授課:ANT 日期:2009/3/24.
選擇排序法 通訊一甲 B 楊穎穆.
C的發展史 C程式初體驗 C程式設計基本注意事項 上機實習課程
程序设计II 第三讲 字符串处理.
C 程式設計— 指標.
適用於多選一 可減少if 與 else配對混淆的錯誤.
Chap 10 函数与程序结构 10.1 函数的组织 10.2 递归函数 10.3 宏定义 10.4 编译预处理.
C 程式設計— 指標 台大資訊工程學系 資訊系統訓練班.
STRUCTURE 授課:ANT 日期:2010/5/12.
计算概论 第十八讲 C语言高级编程 结构与习题课 北京大学信息学院.
Function.
程序设计期末复习 黎金宁
程式撰寫流程.
Chap 8 指针 8.1 寻找保险箱密码 8.2 角色互换 8.3 冒泡排序 8.4 电码加密 8.5 任意个整数求和*
第5章 堆疊(Stacks) 5-1 堆疊的基礎 5-2 堆疊的表示法 5-3 堆疊的應用 - 運算式的計算與轉換
QQ: 李祥 QQ: 欢迎多种方式的学习交流,祝大家学有所成.
Introduction to the C Programming Language
C语言 程序设计基础与试验 刘新国、2012年秋.
第3讲 C++程序控制结构 3.1 顺序结构 3.2 分支结构 3.3 循环结构 3.4 转向控制 3.5 综合案例分析.
多维数组与指针 用指针变量可以指向一维数组中的元素,也可以指向多维数组中的元素。但在概念上和使用上,多维数组的指针比一维数组的指针要复杂一些。 1. 多维数组元素的地址 先回顾多维数组的性质,可以认为二维数组是“数组的数组”,例 : 定义int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}};
字符串和字符数组 字符串的输入和输出 字符串的基本操作
計數式重複敘述 for 迴圈 P
第三章 顺序结构程序设计 主讲教师 贾月乐 电话:
程式設計實習課(四) ----C 函數運用----
第5讲 结构化程序设计(Part II) 周水庚 2018年10月11日.
第七章 函数及变量存贮类型 7.1 函数基础与C程序结构 7.2 函数的定义和声明 7.3 函数的调用 7.4 函数的嵌套与递归
第4章 顺序程序设计.
C++ 程式設計 基礎篇 張啟中 Chang Chi-Chung.
C语言概述 第一章.
C语言程序设计 教案 崔武子制作
函式庫補充資料.
Oop8 function函式.
C语言的特点 1. C程序由许多函数组成 2. C程序必须有且只有一个主函数main( ) 3. 函数用“{”和“}”表示起点和终点
浙江长征职业技术学院—计算机与信息技术系—相方莉制作
指標
Chap 5 函数 5.1 计算圆柱体积 5.2 使用函数编写程序 5.3 变量与函数.
<编程达人入门课程> 本节内容 字符与字符串 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
C程序设计.
第二章 类型、对象、运算符和表达式.
Introduction to the C Programming Language
第三章 基本的輸出與輸入函數 (Basic Output & Input Function)
隨機數 (亂數) 10後,取餘數 n = rand(); 利用 Code::Block 驗證一下 n = rand() %10; 998
授课老师:龚涛 信息科学与技术学院 2016年3月 教材:《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
挑戰C++程式語言 ──第9章 函數.
Introduction to the C Programming Language
C/C++基礎程式設計班 字元與字串 講師:林業峻 CSIE, NTU 3/14, 2015.
第二章 数据类型、运算符和表达式 §2.1 数据与数据类型 §2.2 常量、变量和标准函数 §2.3 基本运算符及其表达式 目 录 上一章
C/C++基礎程式設計班 C語言入門、變數、基本處理與輸入輸出 講師:林業峻 CSIE, NTU 3/7, 2015.
多重條件選擇敘述
基本資料型態 變數與常數 運算子 基本的資料處理 授課:ANT 日期:2014/03/03.
C/C++基礎程式設計班 陣列 講師:林業峻 CSIE, NTU 3/14, 2015.
C 程式設計— 字元與字串 台大資訊工程學系 資訊系統訓練班.
Chap 10 函数与程序结构 10.1 圆形体积计算器 10.2 汉诺塔问题 10.3 长度单位转换 10.4 大程序构成.
第三章 流程控制 程序的运行流程 选择结构语句 循环结构语句 主讲:李祥 时间:2015年10月.
Q1(a) 小偉打算編寫一個程序。該程序把兩個44的表內的數字相加。表3內的數字是由表1和表2應格子內的數字相加而成。例如:
Introduction to the C Programming Language
函式庫補充資料 1.
隨機函數.
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
Presentation transcript:

函數 授課:ANT 日期:2011/3/28

函數- argc, argv[] 函數呼叫方式 call_by_value call_by_reference ((基本指標)) 數學函數 字元、字串函數 巨集

自訂函數 使用函數的目的:可以利用模組化來簡化主程式。 要自訂函數需要注意的地方:函數的宣告、引數的使用、函數的主題以及傳回值。 為什麼要使用函數,若當我們的程式需要重複使用到某一個功能時我們只要寫一遍就可以不需要重複的寫 還有可以讓整個程式的可讀性變高

宣告方式 void functionName(variable1, variable2) 函數的屬性 函數傳入的值 函數的名稱

#include<stdio.h> #include<stdlib.h> void line(); void line2(); //先前宣告有哪些副函式 int main(){ line(); printf(“我剛呼叫了什麼\n"); line2(); system("pause"); return 0; } void line(){ printf("----分隔線----\n"); void line2(){ printf(“\n\n---!!!-分隔線-!!!---\n\n");

程式的執行流程圖 int main(){ line(); 第一步 printf(“我剛呼叫了什麼\n"); system("pause"); return 0; } 第一步 第二步 第三步 void line(void){ printf("----分隔線----\n"); return; } 第四步

argc, argv 解析用法 argc 是指命令行輸入參數的個數 argv存儲了所有的命令行參數 #include<stdio.h> int main(int argc, char* argv[]) { printf("剛剛輸入了%d個指令\n",argc); printf("剛剛輸入的指令為 : \n%s\n",argv[0]); return 0 ; } 如果在命令行運行一程式,運行命令為:hello.exe hello world 那麼,argc的值是 3,argv[0]是"hello.exe",argv[1]是"hello",argv[2]是"world"

argc, argv 小應用 Q : 想要設計一個小程式,程式目的為”輸入一段文字到一個檔案裡” 命令列格式 Demo

下面為Argc.c的程式碼

函數的參數呼叫方式

基本指標 宣告 一變數 為 一指標, 該變數的值為一記憶体的地址,例如int *ip; ip 為 一變數,如果ip的值為1000,那麼我們可以說 ip指向記憶体其地址為1000。 "&" 是可當做取址運算子,用來表示(或取得)一變數的記憶体地址,例如: int *ip; int x; scanf("%d", &x); ip = &x; &x 即變數 x的記憶体地址,於 scanf("%d ", &x);中,我們欲以輸入方式改變 x的值,或以 x存輸入值。 ip = &x; 即指標變數 ip指向變數 x,或 ip的值為 x的記憶体地址。

#include<stdio.h> #include<stdlib.h> void call_by_value(int b) { b = 200; } void call_by_reference(int *b) //b是一個指標 *b = 200; //* 有”指向”的意思 int main() int a = 100; call_by_value(a); printf("call_by_value : %d\n",a); call_by_reference(&a); //將a的位址傳給call_by_reference printf("call_by_reference : %d\n",a); 一開始,設定變數 a 的值為100 接著 往副程式 call_by_value 傳送參數 a 的值到副程式去 副程式 call_by_value 另外用一個記憶體位址 (b的位址) 來儲存 a 的值 同時改變變數 b 的值,但是沒有做回傳動作,故回到主程式後,主程式列印出變數 a 的值依然會是 100 接續著是往副程式call_by_reference傳送參數 a 的位址到副程式去, 由於副程式在宣告時事先宣告一個指標變數(上一個投影片友介紹了),故其變數內容所存的會是位址, 副程式call_by_reference另外使用一個指標變數,儲存a的記憶體位址, 而副程式 *b 是取 b 所指記憶体位址上的值,也就是 a 的位址上的值 *b = 200 的動作則是將 a 的位址上的值修改為 200 因此做完這些動作後回到了主程式(main) 印出變數 a 的值也就是被改成 200 了。

C程式過程 200 Call by value Call by reference a 100 100 a 的記憶體位址 100 a b Call_by_value - 我們一開始會有宣告一個A記憶體位置來存100,之後呼叫到副函式 程式會在記憶體另外的位置B 複製A的東西過去。 進入副函式 執行的時候把B位置的值改成200 再回到 主程式 ,這時候A是沒有被改變到的 改變到的是B位置的值 所以A的值還是100。 Call_by_reference - 他是把B這個指標只到A的位址 再去修改掉B只到的位址裡面的值100 - > 200了 所以A才會變成200 b 數值 200 記憶體位址 指標變數b

回傳值到主程式 #include<stdio.h> #include<stdlib.h> int divide(int a , int b ) { return(a/b); } int main() int var1 , var2 , result; printf("輸入被除數 : "); scanf("%d",&var1); printf("輸入除數 : "); scanf("%d",&var2); result = divide(var1 , var2); printf("相除結果是 %d \n",result); return 0 ;

常用到的數學函數 #include <math.h> double pow(double x, double y) x的y次方 double sqrt(double x) 求x的平方根 double fabs(double x) 求實數x的絕對值 int abs(int x) 求整數x的絕對值 int rand() 產生一個亂數 sin(x) x以弧度解釋 cos(x) x以弧度解釋 tan(x) x以弧度解釋 一般都必須要先載入 math.h

Sin(x)使用範例

常用的字串函數 #include <string.h> int strcmp(char *s1,*s2) 字串比較 char *strcpy(char *dest, char *src) 字串拷貝 int strlen(char *s1) 字串長度 int atoi(char *s) 字串轉整數 gets(char *s) 讀取一字串 puts(char *s) 輸出一字串 strcmp 比較字串 就是在比較s1與s2兩個字串是否相同 可以用在猜字遊戲上 strcpy 把後面的字串拷貝給前面

常見的字元函數 tolower(ch) ch轉成小寫 toupper(ch) ch轉成大寫 islower(ch) ch 為小寫? isspace(ch) ch 為空白? isdigit(ch) ch 為數字? isalpnum(ch) ch 為文數字? getchar() 讀入一字元

字串函式使用範例

巨集指令 C前置處理器的#define指令除了定義常數,事實上,#define指令是巨集指令,可以定義新關鍵字或使用參數建立巨集函數。 #include <stdio.h> #define SQUARE(x) x*x //自行宣告的巨集 int main() { printf("Square of 10 is %d\n", SQUARE(10)); return 0 ; }

Lab5 寫一個程式,可以讓user去選擇要計算的東西。分三種:1. 面積 2. 數學式 3.畫sin圖 計算面積的是矩形(使用巨集指令)。 計算數學式的有階層 (計算在副程式,結果在主程式印出)。 畫圖型的動作(在副程式執行)。 限制- 使用switch來做選擇,計算過程必須在副函式執行。

說明 Switch(choice){ case 1: printf(“radius : ”); scanf(“%d”,input); circle(); break; case 2: … case 3: }

Lab5 PS:矩形-> 長寬,階層->一個N值,sin圖參考前面的投影片

HW05 寫一個會員查詢系統。 作業限制 – 所有功能需(新增、刪除、查詢)要寫在副程式裡。 一開始程式執行會先作會員登入,在判定是否為會員後,如果不是就做會員新增的動作,如果是就進入會員系統。 其中登入者的身份需要分為、查詢會員、離開系統,並可做重新登入的動作。一般使用者及管理者,管理者登入後會有四種功能。分別為新增會員、刪除會員 一般使用者則只有兩種功能即查詢以及離開系統,離開後可做重新登入。 以上動作需要將變更後的會員資料,就是其名字以及相對應的密碼輸出至檔案。 作業限制 – 所有功能需(新增、刪除、查詢)要寫在副程式裡。

資料格式 一開始就有兩個檔案,分 別為root.txt以及user.txt作為 資料比對用。內容請依照右 圖。。 利用兩個檔案做資料比對以 及新增、 刪除。 Root只能改密碼。

模擬結果 可自行增加功能酌量加分,須註解 此為查詢

模擬結果 此為新增與刪除

作業提示 作業繳交需要將root.txt以及user.txt一起放到壓縮檔裡。 可利用以下函式幫助程式撰寫 字串比較 字串轉整數 讀取/輸出一字串 開寫讀檔 作業繳交需要將root.txt以及user.txt一起放到壓縮檔裡。