Introduction to the C Programming Language

Slides:



Advertisements
Similar presentations
While 迴圈 - 不知重複執行次數
Advertisements

CSIM, PU C Language Introduction to the C Programming Language 重覆敘述 (for,while,break,continue) 適合重複性的計算或判斷.
親愛的老師您好 感謝您選用本書作為授課教材,博碩文化準備本書精選簡報檔,特別摘錄重點提供給您授課專用。 說明: 博碩文化:
“八皇后”问题 崔萌萌 吕金华.
Loops.
C语言程序设计 第八章 函数.
第2章 高级编程的硬件基础 主要内容 计算机硬件组成 80x86微机系统 Turbo C编译方式 BIOS和DOS调用.
第一章 程序设计入门.
Introduction to the C Programming Language
C语言程序设计 课程 第5章 数组 主讲:李祥 博士、副教授 单位:软件学院软件工程系.
第一章 C语言概述.
函數 授課:ANT 日期:2009/3/24.
選擇排序法 通訊一甲 B 楊穎穆.
C的發展史 C程式初體驗 C程式設計基本注意事項 上機實習課程
第3章 顺序结构程序设计 本章要点: 格式化输出函数──printf() 格式输入函数——scanf() 字符输出函数——putchar()
函數 授課:ANT 日期:2011/3/28.
Chap 10 函数与程序结构 10.1 函数的组织 10.2 递归函数 10.3 宏定义 10.4 编译预处理.
If … else 選擇結構 P27.
Chap 2 用C语言编写程序 2.1 在屏幕上显示 Hello World! 2.2 求华氏温度 100°F 对应的摄氏温度
Introduction to the C Programming Language
Introduction to the C Programming Language
STRUCTURE 授課:ANT 日期:2010/5/12.
计算概论 第十八讲 C语言高级编程 结构与习题课 北京大学信息学院.
Function.
第12章 從C到C++語言 12-1 C++語言的基礎 12-2 C++語言的輸出與輸入 12-3 C++語言的動態記憶體配置
程式撰寫流程.
程序设计专题一 结构化程序设计与递归函数 主讲教师: 刘新国.
源码分析教程5部曲之2——C标准库概览 讲师:杨振平 博客地址:blog.csdn.net/yangzhenping
QQ: 李祥 QQ: 欢迎多种方式的学习交流,祝大家学有所成.
第7章 编译预处理 本章要求: 本章重点: 本章难点: 掌握用#define定义无参数宏和带有参数宏定义和调用方法;
Introduction to the C Programming Language
Chap 3 分支结构 3.1 简单的猜数游戏 3.2 四则运算 3.3 查询自动售货机中商品的价格.
Introduction to the C Programming Language
C语言 程序设计基础与试验 刘新国、2012年秋.
期中考试成绩分布 《程序设计》-2017年秋.
計數式重複敘述 for 迴圈 P
第3章 顺序结构程序设计 为了让计算机处理各种数据,首先就应该把源数据输入到计算机中;计算机处理结束后,再将目标数据信息以人能够识别的方式输出。C语言中的输入输出操作,是由C语言编译系统提供的库函数来实现。 3.1 格式化输出——printf()函数 3.2 格式化输入——scanf()函数.
2.1 C语言的数据类型 2.2 常量与变量 2.3 变量赋初值 2.4 各类数值型数据间的混合运算 2.5 C语言的运算符和表达式
第5讲 结构化程序设计(Part II) 周水庚 2018年10月11日.
第七章 函数及变量存贮类型 7.1 函数基础与C程序结构 7.2 函数的定义和声明 7.3 函数的调用 7.4 函数的嵌套与递归
第九章 预处理命令.
C语言概述 第一章.
程式結構&語法.
1.2 C语言程序的结构与书写规则 一、 C语言程序的总体结构
Introduction to the C Programming Language
Instructor:Po-Yu Kuo 教師:郭柏佑
C语言程序设计 教案 崔武子制作
函式庫補充資料.
Oop8 function函式.
Chap 5 函数 5.1 计算圆柱体积 5.2 使用函数编写程序 5.3 变量与函数.
Chap 5 函数 5.1 计算圆柱体积 5.2 数字金字塔 5.3 复数运算.
程式的時間與空間 Time and Space in Programming
輸出與輸入(I/O).
第十四章 若干深入问题和C独有的特性 作业: 函数指针 函数作参数 函数副作用 运算 语句 位段 存储类别 编译预处理
C语言程序设计 李祥 QQ:
第2章 数据类型、运算符与表达式 本章要点: 基本数据类型 常量和变量 算术运算符和算术表达式 关系运算符和关系表达式
第三章 基本的輸出與輸入函數 (Basic Output & Input Function)
第4章 顺序结构程序设计 为了让计算机处理各种数据,首先就应该把源数据输入到计算机中;计算机处理结束后,再将目标数据信息以人能够识别的方式输出。C语言中的输入输出操作,是由C语言编译系统提供的库函数来实现。 4.1 格式化输出——printf()函数 4.2 格式化输入——scanf()函数.
第3章 最简单的C程序设计 3.1 顺序程序设计举例 3.2 数据的表现形式及其运算 3.3 C语句 3.4 数据的输入输出.
Introduction to the C Programming Language
第二章 数据类型、运算符和表达式 §2.1 数据与数据类型 §2.2 常量、变量和标准函数 §2.3 基本运算符及其表达式 目 录 上一章
第18讲 从C到C++ 计算机与通信工程学院.
Introduction to the C Programming Language
C/C++基礎程式設計班 C語言入門、變數、基本處理與輸入輸出 講師:林業峻 CSIE, NTU 3/7, 2015.
C/C++基礎程式設計班 陣列 講師:林業峻 CSIE, NTU 3/14, 2015.
第一次上機考參考答案 僅供參考,同學可自行再想更好的方法..
Chap 10 函数与程序结构 10.1 圆形体积计算器 10.2 汉诺塔问题 10.3 长度单位转换 10.4 大程序构成.
Introduction to the C Programming Language
函式庫補充資料 1.
隨機函數.
Presentation transcript:

Introduction to the C Programming Language Preprocessor (前端處理器)

Preprocessor (前端處理器) Preprocessor (前端處理器)主要之三項功能: 巨集 #define 指令 常數代換 字串代換 定義簡易巨集 包含檔案 (include) : 將某個檔案包含於目前的檔案下工作, 通常包含進來的檔案都以 h 為副檔名, 如: stdio.h, stdlib.h等 #include <檔案名稱> #include “檔案名稱” 條件式編譯 (在此不介紹) 以「#」開頭的前置處理指令,之所以會稱為”前置處理”,是因為在為這些指令被編譯之前就會先進行處理,再把處理後的結果與程式碼一起送給編譯器編譯。 在此僅討論前兩項 以「#」開頭的前置處理指令,之所以會稱為”前置處理”,這是因為在為這些指令在編譯之前就會先進行處理,再把處理後的結果與程式碼一起送給編譯器編譯。 條件式編譯在藍色書的ch13.3

#define前置處理器 #define可方便將常用的常數、字串替換成一個自訂的識別名稱。亦可取代簡單的函數。 習慣上識別名稱會大寫,且名稱之間不能有空格。 好辨識!! 替換 #define  識別名稱  代換標記 這兒不可以加分號 替換常數,簡單函數範例1 取代簡單函數範例2 在#define後面所使用的「識別名稱」,是用來替換後面的「代換標記」。

#include前置處理器 #include除了可以含括C語言提供的標頭檔之外,也含括入我們自己所寫的標頭檔。 #include <標頭檔.h> /*C語言提供的標頭檔*/ #include ”檔案名稱” /*自己的檔案*/

範例一 : #define 利用 #define 方式撰寫輸入圓周半徑計算圓面積 define 使用方式 巨集與函數的差異? #define PI 3.1415929 #define Area(r) PI * (r) * (r) /*定義巨集Area(r)*/ void main() { int r; printf("Enter radius : "); scanf(" %d", &r); printf("The area = %10.4f \n", Area(r)); } define 使用方式 巨集與函數的差異? pre1.c 巨集:假設程式裡會使用到巨集十次,在compiler就會產生十段相同的程式碼 vs 函數:無論程式裡呼叫函數幾次,只會有一段程式碼出現 因此在選擇使用函數或是巨集的同時,也需要程式設計師在時間與空間中做出取捨:選擇巨集佔用的記憶體較多,但是程式的控制權不用移轉,因而程式執行的速度較快;選擇函數程式碼較短,佔用的記憶體較少,但是程式的控制權要交給函數使用,所以執行速度會較慢

範例二: #define 利用 #define 方式撰寫判斷輸入數值為奇數或偶數 #define odd(x) ((x) % 2 ==1) ? 1 : 0 void main() { int x; printf("Enter one integer value : "); scanf(" %d", &x); if( odd(x)) printf("%d is odd number. \n", x); else printf("%d is even number. \n", x); } pre2.c

範例三: #define #define TRUE 1 #define FALSE 0 依照輸入數值列出其平方值, 若數值小於50時, 則程式結束 #define TRUE 1 #define FALSE 0 #define SQ(x) (x)*(x) /*定義巨集SQ(x)*/ void main() { int num; int again = 1; printf("\1: Program will stop if input value less then 50. \n"); while(again) printf("\1: Please input number ==> "); scanf("%d", &num); printf("\2: The square for this number is %d \n", SQ(num)); if(num >= 50) again = TRUE; else again = FALSE; } system("pause"); 注意: 先乘除後加減 Ex: SQ(num+1)?? pre3.c 注意:先乘除後加減 Ex: SQ(num-1)

範例四:使用巨集的常見錯誤 #include <stdio.h> #include <stdlib.h> #define SQUARE(X) X*X /* 定義巨集SQUARE(X)為X*X */ int main(void) { int n; printf("Input an integer:"); scanf("%d",&n); printf("%d*%d=%d\n",n+1,n+1,SQUARE(n+1)); /* 印出n+1的平方 */ system("pause"); return 0; }

範例四: #include 使用定義在conio.h內的clrscr()函數 清除螢幕函數 #include <conio.h> void main() { clrscr(); } 清除螢幕函數

範例五: #include 使用自訂的標頭檔 area.h #define PI 3.14 #define CIRCLE(r) ((PI)*(r)*(r)) #define RECTANGLE(length,height) ((length)*(height)) #define TRIANGLE(base,height) ((base)*(height)/2.) pre5.c #include <stdio.h> #include<stdlib.h> #include "D:\bcs_code\area.h" int main() { float base,height; printf("Please input triangle base:"); scanf("%f",&base); printf("Please input triangle height"); scanf("%f",&height); printf("Triangle area: %.2f\n",TRIANGLE(base,height)); system("pause"); return 0; } 注意事項: 1.範例5中的area.h檔必須存在d槽上/*因為pre5.c檔中,要呼叫自訂的標頭檔設的路徑*/ 2.若在pre5.c檔中,改寫成#include “area.h” 方法一:則請將area.h檔存在TC環境設定裡的函式庫(c:\tc\include\) 方法二:看使用者將自定的標頭檔存放在哪個資料夾下,則去TC環境設定函式庫路徑裡增加路徑 Ex: 將area.h放在c:\temp\,所以要將TC環境設定函式庫路徑增加上 ,c:\temp\ 這樣才找得到此自定的標頭檔

C語言標頭檔 alloc.h assert.h bios.h conio.h ctype.h dir.h dos.h errno.h fcntl.h float.h graphics.h io.h limits.h math.h mem.h process.h setjmp.h share.h signal.h stdarg.h stddef.h stdio.h stdlib.h string.h time.h values.h alloc.h 配置記憶體的檔頭 time.h 系統時間的檔頭 … conio.h 一些輸入輸出的檔頭 math.h 數學函數的檔頭 … dos.h DOS模式下用到的檔頭 string.h 字串函數的檔頭 …

範例六: 常用函數介紹 簡易數學函數使用 #include <math.h> int main() { double x = 8.0; printf("\2: exp(x) is --> %f \n", exp(x)); printf("\2: log(x) is --> %f \n", log(x)); printf("\2: log10(x) is --> %f \n", log10(x)); printf("\2: sqrt(x) is --> %f \n", sqrt(x)); system("pause"); return 0; } 數學函數:(要include<math.h>檔頭) exp(x) 指數函數,計算x的指數值 sqrt(x) 平方根函數,計算非負數x的平方根值 log(x) 自然對數函數,計算x的自然對數值

範例七:應用亂數函數設計猜數字遊戲 #include <stdlib.h> #include <time.h> int main() { int num, guess, count=0; srand(time(0)); num =rand()%80+ 1; do printf("Enter your guess (1-80) : "); scanf("%d", &guess); count ++; if( guess > num ) printf(" Too high ...\n"); else if( guess < num) printf(" Too low ... \n"); else printf(" Bingo ! \n"); } while (( guess != num) && ( count < 5)); {if (guess != num) printf(" Too bad. The number is %d \n", num); else printf(" You are lucky !! \n");} system("pause"); return 0; } pre6.c