C programming.

Slides:



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

基本概論 Basic concepts.
C语言程序设计 主讲教师 :张群燕 电话:
电子成绩单项目实现.
第4章 條件判斷與迴圈 Java 2 程式設計入門與應用.
第一章 C语言概述 计算机公共教学部.
JAVA 程式設計 資訊管理系 - 網路組.
编译原理上机实习
補充: Input from a text file
程設一.
程設一.
程式語言的基礎 Input Output Program 世代 程式語言 第一世代 Machine language 第二世代
程式設計概論 1.1 程式設計概論 程式語言的演進 物件導向程式 程式開發流程 1.2 C++開發工具
第一章 C语言概述.
課程名稱:程式設計 授課老師:________
struct 可以在同一個名稱下擁有多種資料型態。使用struct能讓資料的存取和處理更為靈活。
Visual C++ introduction
物件導向程式設計 (Object-Oriented rogramming)
列舉(enum).
String C語言-字串.
第3章 語法入門 第一個Java程式 文字模式下與程式互動 資料、運算 流程控制.
101北一女中 資訊選手培訓營 妳不可不了解的指標 Nan.
Java程式概觀.
1. 檔案File  開新New  檔案Empty File (再另存新檔D:\hello.c)
C語言簡介 日期 : 2018/12/2.
生物資訊程式語言應用 Part 3 Perl Language.
類別(class) 類別class與物件object.
C 語言簡介 - 2.
安裝JDK 安裝Eclipse Eclipse 中文化
重點 資料結構之選定會影響演算法 選擇對的資料結構讓您上天堂 程式.
Java 程式設計 講師:FrankLin.
本章中將會更詳細地考慮有關重複的概念,並且會 介紹for和do…while等兩種用來控制重複的敘述 式。 也將會介紹switch多重選擇敘述式。 我們會討論直接和迅速離開某種控制敘述式的 break敘述式,以及用來跳過重複敘述式本體剩餘 部份的continue敘述式。 本章會討論用來組合控制條件的邏輯運算子,最後.
JAVA 程式設計與資料結構 第四章 陣列、字串與數學物件.
Data Structure.
Chap3 Linked List 鏈結串列.
程式設計實習課(四) ----C 函數運用----
第一單元 建立java 程式.
第1章 概述 本章要点: C语言程序结构和特点 C语言程序的基本符号与关键字 C语言程序的编辑及运行 学习方法建议:
JAVA 程式設計 資訊管理系 - 網路組.
輸入&輸出 函數 P20~P21.
第十章 指標.
第一次Labview就上手 參考書籍: LabVIEW for Everyone (Jeffrey Travis/Jim Kring)
期末考.
撰寫MATLAB基礎財務程式 柯婷瑱.
挑戰C++程式語言 ──第8章 進一步談字元與字串
保留字與識別字.
第八章 指標 (Pointer).
C qsort.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
第二章 Java语法基础.
挑戰C++程式語言 ──第7章 輸入與輸出.
流程控制:Switch-Case 94學年度第一學期‧資訊教育 東海大學物理系.
陣列與結構.
#include <iostream.h>
第二章 Java基本语法 讲师:复凡.
北一女中 資訊選手培訓營 妳不可不了解的指標 Nan.
反覆迴圈、陣列、副程式 靜宜大學資管系 楊子青
反覆迴圈、陣列、副程式 靜宜大學資管系 楊子青
MultiThread Introduction
第四章 陣列、指標與參考 4-1 物件陣列 4-2 使用物件指標 4-3 this指標 4-4 new 與 delete
C/C++基礎程式設計班 C語言入門、變數、基本處理與輸入輸出 講師:林業峻 CSIE, NTU 3/7, 2015.
Programming & Language Telling the computer what to do
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
String類別 在C語言中提供兩種支援字串的方式 可以使用傳統以null結尾的字元陣列 使用string類別
Array(陣列) Anny
C語言程式設計 老師:謝孟諺 助教:楊斯竣.
Introduction to the C Programming Language
Unix指令4-文字編輯與程式撰寫.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
InputStreamReader Console Scanner
Presentation transcript:

C programming

程式語言分類 第一代 機器語言 第二代 低階語言 第三代 高階語言(程序導向語言) 第四代 極高階語言(物件導向語言) 第五代 自然語言 EX: 組合語言 第三代 高階語言(程序導向語言) EX: FORTRAN、COBOL、PASCAL、Ada、C、BASIC、Perl 第四代 極高階語言(物件導向語言) EX: C++、JAVA、VB、PHP、C#、Python、smalltalk 第五代 自然語言 EX: LISP、PROLOG

C語言的編譯流程 載入階段 執行階段 compiler linker loader Source code Object code Execute code RAM 執行 .obj檔 .exe檔 (binary code) Compiler: 將高階程式翻譯成組合語言程式 Assembler :將組合語言程式轉譯成obj Linker: 連結函式庫 Loader: 載入到memory 載入階段: 將靜態宣告載入,ex: int a[10]; 執行階段: 執行動態宣告, ex: int* a = new int[10];

scanf()、gets() 輸入整數: 輸入字元: 輸入字串: [法一] char c; scanf(&c); [法二] scanf(“%c”,&c); &: 表示先去RAM取一個位址 char a[80]; gets(a);

printf %d 整數 int %f 浮點數 float(6位)、double(14位) %c 字元 char %s 字元陣列 char* a 、char a[] 固定數值顯示兩位 EX1: EX2: EX3: float(6位)、double(14位) 超過時最後一位四捨五入 C++才有string 固定顯示小數後兩位

練習 kb_basic_inputOutput (float)

Operator (運算子) operator 結合性 優先權 () [] -> . 左結合 高 低 ! ~ ++ -- *(指標) &(取址) 右結合 * / % + - << (左移) >> (右移) < > <= >= == != & (AND) ^ (XOR) | (OR) && (且) || (或) ?: = += *= /= %=

Operator 的執行順序 Ex1 Ex2 Note: 先考量「優先權」再考量「結合性」

精確度 EX1 EX2 Ex1: 若a,b改成float => 0.500000

++、-- 前置加: 後置加: Ex1: Ex2:

8進制、16進制

ASCII碼 字母的ASCII碼: A = 65 B = 66 …… a = 97 b = 98 ….. Ex:

Loops For 語法: 無限迴圈

Loops while 語法: 成立 不成立

練習

break 如何不執行完迴圈就先行離開? Ex: 「break」 執行到第5次就離開迴圈

continue 如何不執行完迴圈內部程式碼就執行下一次迴圈? Ex: 「continue」 只會印出4次(∵第二次迴圈時沒印)

example

if、else 用途:條件判斷,用在2選1的情況 語法: Ex : 1 不是做case1就是做case2 2

else if 用途:條件判斷,用在n選1的情況(n>=3) (搭配if、else使用) 語法: 4選1, 依序從case1判斷至case4 若case1成立則離開,不會再判斷下面的case2~case4

字串轉整數 仍可轉化成功

練習 kb_basic_CountGR

練習 kb_basic_CountGR_v2

Array(陣列) 宣告 宣告+給值 如:欲儲存整數10、2、6至陣列 須給定陣列大小 (JAVA不能給定大小) int陣列不用加結束位元

Array(陣列) 宣告+給值 如:欲儲存字串「abc」至陣列 [寫法一] [寫法二] char陣列須加結束位元

strlen() 取得陣列內的元素個數(不含結束字元)

sizeof() sizeof() 「取得陣列宣告的大小」 x 「陣列元素type大小」 Note: int陣列內的元素大小為4 bytes char陣列內的元素大小為1 byte

陣列 VS 字串 EX: d陣列的內容? strlen(d) = ? (3) d陣列的空間大小至少需多大才能儲存字串 「a」 ? 1 2

exmaple

整數轉字串

合併整數與字串

練習 kb_sprintf

練習 kb_sprintf_v2

二維陣列 儲存方式:row major 宣告: 宣告+給值: 3列4行 => 如何儲存?

二維陣列 – 儲存多個字串 2個字串 每個字串最長為10 長度=6 Why?

Exmaple 將二維陣列a的內容印出

練習 kb_array_2DimArray1

練習 kb_getIP

變數的可視範圍 區域變數:在function外的變數 全域變數:在function內的變數 區域變數(local variable) 全域變數(global variable) 可視範圍

全域變數 vs 區域變數 全域變數 是否可如此宣告? 區域變數 g = ??????

Function(函數、副程式) 型態 函數名稱(參數1, 參數2, ….) { //你的程式碼 return 型態值; } 回傳int型態資料: 不回傳資料:

Example 建立一個add函數(副程式)來執行兩數相加的功能 Function建立 Function使用

Call by value 將外部變數值代入function內,並在function內對其變數值進行運算。

陣列與函數 若修改s陣列第一個元素的值 sum陣列內容是否會改變???

練習 kb_function1

練習 kb_oddSum_evenSum

Function的擺放位置 若不使用Header(標頭檔) Project結構: Function須放置在主程式上面, 主程式:main.cpp Function須建立在主程式上面

Function的擺放位置 若使用Header(標頭檔) Project結構: 僅須確保Function標頭檔在主程式上面 主程式:main.cpp Function標頭檔需在主程式上面 副程式:qq.cpp 標頭檔:qq.h

Function的好處 可模組化你的程式 程式的可閱讀性提高 主程式雜亂 主程式乾淨

練習 kb_function2_v1

練習 kb_function2_v2

Macro(巨集) Macro = 簡易的function 語法: Ex: 名稱習慣全大寫 定義一個圓面積公式 定義一個取得兩數較小值的公式

Example result = ?

練習 kb_macro1

Function回傳值的應用 說明: 當Function的代入參數為位址時,可將回傳 值做為錯誤回報用途

練習 kb_function3

Pointer(指標) 陣列 位址 指標 宣告: 宣告+給值: EX: or s為一個char型態的指標變數 如何利用指標來實現此陣列 ? 陣列 位址 指標 宣告: 宣告+給值: or s為一個char型態的指標變數 EX: 如何利用指標來實現此陣列 ? 法一: 法二:

Pointer(指標) 輸出: s 給位址印出值 (印出S位址之後的所有值,一直到結束位元為止) Note:欲得知指標所指的data長度 用strlen mem內容 x a b c \0 mem位址 0x00 0x01 0x02 0x03 0x04 0x05 s

Pointer(指標) 如何取得位址? 利用「&」運算子 EX1: EX2: memory X a 0x16 p *p 用&取得dd變數的位址 再多加一個*來取值 EX2: memory X a 0x16 p *p

Pointer(指標) 令int a[3] = { 0, 1, 2 },int* p =a; 令char a[3] = “ABC”,char* p=a; a 1 2 Q:如何經由指標p來取得a[1]的值? p Sol: *(p+1) a A B C Q:如何經由指標p來印出a[1]之後的所有值? (即印出B、C) Sol: printf(“%s”, p+1); p

練習 kb_pointer_practice_accessCharInt

example EX: *p++其值? (sol) ∵ *與++優先權相同且右結合 ∴ *(p++) ∵ ++為後繼加 ∵ ++為後繼加 ∴ 會先取得*p的值再指到下一個位址 a 1 2 p a 1 2 p

Call by value (for C)

Call by address (for C)

Call by reference (for C++)

HW11(pointer_findPos)

字串與指標 一個字串: 多個字串: 不浪費 DD 字串個數 字串的最大長度 s 浪費 s+1 c o m p u t e \0 r i n

字串與指標 S S+1 *S *(S+1) 取得S[]的index位址 取得S[]的index位址內的值 (∵char* ∴值=址) 印出字串 取得s[0]的值 取得s[1]的值

動態產生一維陣列 動態產生int a[n] ? 令n=10 C語言: C++: 錯誤寫法: 刪除: 動態生成陣列的話需用指標

練習 kb_pointer_practice_malloc

動態產生二維陣列 動態產生二維陣列 (10x20) 刪除二維陣列 (10xN)

練習 kb_pointer_practice_accessStr

HW12(pointer_reverseStr)

Structure(結構) 定義: 變數名稱 node age name next int char* struct node*

Structure(結構) 靜態宣告: 動態宣告:

練習 kb_struct_practice_node

Example for structure h 10 john 18 ken NULL n1 n2 填充node資訊 決定header位置 印出 list內所有data

HW13(struct_createLinklist)

可得上列binary search tree Structure(結構) 如何利用structure建立binary search tree ? 50 30 70 10 依序輸入50 30 70 10 可得上列binary search tree

Struct for BST