今日目標 複習進度 小考及作業 題目練習.

Slides:



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

电子成绩单项目实现.
File Access 井民全製作.
Chapter 5 遞迴 資料結構導論 - C語言實作.
Chapter 5 迴圈.
Visual C++ introduction
簡易C++除錯技巧 長庚大學機械系
列舉(enum).
程序设计II 第三讲 字符串处理.
String C語言-字串.
保留字與識別字.
101北一女中 資訊選手培訓營 妳不可不了解的指標 Nan.
C語言簡介 日期 : 2018/12/2.
類別(class) 類別class與物件object.
SQL Stored Procedure SQL 預存程序.
CLASS 5 指標.
Java 程式設計 講師:FrankLin.
字符串和字符数组 字符串的输入和输出 字符串的基本操作
JAVA 程式設計與資料結構 第四章 陣列、字串與數學物件.
Chap3 Linked List 鏈結串列.
|12 結構與列舉型態.
程式設計實習課(四) ----C 函數運用----
第一單元 建立java 程式.
数组 梁春燕 华电信息管理教研室.
陣列(Array).
|07 函數.
網路安全管理報告 緩衝區溢位攻擊 學生:吳忠祐 指導教授:梁明章.
輸入&輸出 函數 P20~P21.
第十章 指標.
第九章 字串.
第一次Labview就上手 參考書籍: LabVIEW for Everyone (Jeffrey Travis/Jim Kring)
語法:結構 實作:Analog in (VR、光敏+七段顯示電壓) 簡報:廖崇義
CH05. 選擇敘述.
期末考.
緩衝區溢位攻擊 學生:A 羅以豪 教授:梁明章
撰寫MATLAB基礎財務程式 柯婷瑱.
第7章 指標 7-1 指標的基礎 7-2 指標變數的使用 7-3 指標運算 7-4 指標與陣列 7-5 指向函數的指標.
挑戰C++程式語言 ──第8章 進一步談字元與字串
函式庫補充資料.
C语言的特点 1. C程序由许多函数组成 2. C程序必须有且只有一个主函数main( ) 3. 函数用“{”和“}”表示起点和终点
C qsort.
C程序设计.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
第二章 Java语法基础.
挑戰C++程式語言 ──第7章 輸入與輸出.
流程控制:Switch-Case 94學年度第一學期‧資訊教育 東海大學物理系.
Pthread.
第14章 結構與其他資料形式.
陣列與結構.
10115: Automatic Editing ★★☆☆☆
北一女中 資訊選手培訓營 妳不可不了解的指標 Nan.
11058: Encoding ★☆☆☆☆ 題組:Problem Set Archive with Online Judge
實習八 函式指標.
第四章 陣列、指標與參考 4-1 物件陣列 4-2 使用物件指標 4-3 this指標 4-4 new 與 delete
作業系統實習課(二) -Scheduler-Related System Calls-
Programming & Language Telling the computer what to do
Chapter 6 函數.
C 程式設計— 字元與字串 台大資訊工程學系 資訊系統訓練班.
10791: Minimum Sum LCM ★★★☆☆ 題組:Problem Set Archive with Online Judge
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
字串 第10章 part I 8/30/2019.
String類別 在C語言中提供兩種支援字串的方式 可以使用傳統以null結尾的字元陣列 使用string類別
Array(陣列) Anny
第三章 流程控制 程序的运行流程 选择结构语句 循环结构语句 主讲:李祥 时间:2015年10月.
C語言程式設計 老師:謝孟諺 助教:楊斯竣.
台大資訊工程學系 資料系統訓練班 第119期 吳晉賢
Unix指令4-文字編輯與程式撰寫.
方法(Method) 函數.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
InputStreamReader Console Scanner
Presentation transcript:

今日目標 複習進度 小考及作業 題目練習

個人化你的Dev-C++ 一個美好的編輯器

舒服最重要~微調Dev-C++

一般設定

顯示設定

語法配色

右鍵貼上測資 – 快速編輯模式

簡易漂亮縮排法 同一區塊的程式敘述對齊 若B區塊包含於A區塊,則B區塊往後縮排一單位 EX for(i=0;i<n;i++){ a[i]=i; if(a[i]==i){ a[i]=0; } }

了解程式區段、區域變數與全域變數 當區域變數與全域變數 糾結在一起

程式區塊 C以 { statement; } 來表示一塊塊的程式區塊,在許多語法中會也與其串接 Ex if(true) do sth. // 只做這件事 if(true){ do sth1. // 做了這些事 do sth2. }

區域變數的作用範圍 C是區塊式結構的程式語言,每個由大括弧所組成的區塊都是一個獨立的結構。 區塊內的變數又稱為區域變數,所能作用的範圍只有該區塊內。

區域變數的作用範圍 { int x,y; x=1; y=2; } int x; x=?; y=2; Question 1: 第一個x與第二個x一樣嗎 Question 2: 第二個y存在嗎?

區域變數的好處 1. 只存活於自己作用的區段,不會在不需要的區段出現,也不會有誤用的情況。 2. 區段結束後記憶體會自動釋放。 3.除錯容易

全域變數 在函數之外宣告的變數被稱為全域變數。 全域變數自宣告後, 一直存在,直到程式結束為止。 在整個程式中, 一個全域變數的名稱只能被宣告一次。 全域變數的作用範圍從宣告處開始,直到檔案的結束。

全域變數的作用範圍 void Function(){ x=2; } int x; int main(){ x=1; return 0; } Question: 這樣的程式會通過編譯嗎?

全域變數的好處 1.減少函數輸入的引數 2.能使用較大的記憶體

變數常犯的錯誤 當區域變數與全域變數有相同的名稱時,編譯器並不會出現編譯錯誤,但常常會因此而出問題。 int n; int main(){ int n; scanf(“%d”,n); }

各類迴圈 1+1+1+….+1=N*1

while while(判斷式){ 程式敘述; ... } 是 迴圈內程式敘述 檢察判斷式 是否為真 否 執行迴圈之後的敘述

do…while do { 程式敘述; ... }while(判斷式); 迴圈內程式敘述 是 迴圈內程式敘述 檢察判斷式 是否為真 否 執行迴圈之後的敘述

for for(起始式;判斷式;運算式){ 程式敘述; … } 起始式 迴圈內程式敘述 是 檢查判斷式 是否為真 運算式 否 執行迴圈之後的敘述

break; 與 continue; 在迴圈敘述中,break;會直接跳出迴圈,執行迴圈之後的程式敘述。 而continue;則是會直接跳到該次迴圈的最尾端(PS.若為for迴圈仍會執行運算式)

陣列 型態 陣列名稱[元素個數]; 宣告時元素個數要為常數,盡量不要以變數當作元素個數。 陣列占用的是連續的記憶體。 EX: int array[1000]; array[0] array[1] array[2] … Array[n-1]

多維陣列 多維陣列占用的依然是連續的記憶體 EX: int A[100][100]; … A [n-1] A[0][0] … A [0][m-1] A[1][0] … A [1][m-1]

指標 指向變數的型態 *指標名稱; 一種指向記憶體位置的變數

取位置的& 要對一般變數找到其在記憶體上的位置,只需在變數的前加上&即可。 &不能加在指標的前面,&指標,代表指標在記憶體上的位置。 EX: int a=2; int *ptr; ptr=&a;

取值的* 要對一個指標找到其在記憶體上變數的值,只需在指標的前加上*即可。 *不能加在一般變數的前面,否則會編譯錯誤。 EX: int a; int *ptr; ptr=&a; *ptr=2;

指標的型態 指標只是指向記憶體的一個變數,型態對其來說並不重要 會影響到的只有取值以及運算的時候。

指標NULL不可以取值 NULL不指向任何地方,故不會有值,所以對NULL取值的話會記憶體存取錯誤。

陣列與指標 陣列所用的是一段連續的記憶體,而陣列的另外一個含意就是指向記憶體的指標。 例如有一個陣列A[m],則A指向變數A[0]的位置,A+i指向A[i]的位置,又如有一個陣列A[m][n],則A指向A[0][0]的位置,A+i*n+j指向A[i][j]的位置。 但不可以將陣列像一般指標一樣指向其他的記憶體。

函數 為依據每次的引數進行相同操作,並回傳結果的一個程式區塊。 若回傳值型態為void時不須回傳任何東西。 回傳值型態 函數名稱(型態1 引數1,型態2 引數2,…){ … return 回傳值; } 為依據每次的引數進行相同操作,並回傳結果的一個程式區塊。 若回傳值型態為void時不須回傳任何東西。

遞迴函數 遞迴函數是呼叫自己的函數 通常會將問題切割成許多小問題在交由函數繼續遞回下去解決 EX int FAB(int x){ if(x==1) return 1; else if(x==2) return 2; return FAB(x-1)+FAB(x-2); }

遞迴常見的問題 1. 函數沒有回傳值 2. 遞迴沒有結束條件 3. 遞迴的引數出錯 4. 遞迴使用了不同函式的變數 5. 變數名稱與全域函數相同 6. 邊界回傳值不正確 (以上感謝silentvow學長整理)

qsort() qsort( 第一個元素的指標, 元素的個數, 每個元素所占用的byte數, 比較函式);

qsort() int cmp( const void* a元素的指標, const void* b元素的指標){ int *A=(int*)a; int *B=(int*)b; 若a的順位在b前面回傳負值; 若a的順位在b後面回傳正值; 若a的順位跟b一樣回傳0; }

字串 C的字串以字元(char型態)陣列表示 並以字元’\0’表示字串結束 需要注意開char陣列時要多留一個位置給’\0’

gets與puts char *gets( char *str ); 讀入字元直到換行或EOF(讀完一整行) 會回傳讀入字串的位置 若讀到EOF會回傳NULL int puts( char *str ); 印出一字串並換行 若印出成功回傳一非負整數 若印出失敗回傳EOF

strcmp與strncmp 比較兩字串 若兩字串相同則回傳0 若str1的字典順序較小回傳一負整數 若str1的字串順序較大回傳一正整數 int strcmp( const char *str1, const char *str2 ); 比較兩字串 若兩字串相同則回傳0 若str1的字典順序較小回傳一負整數 若str1的字串順序較大回傳一正整數 int strncmp( const char *str1, const char *str2, size_t count ); 與strcmp相同,不過只比較前count個字元

strcpy與strncpy char *strcpy( char *dest, const char *src ); char *strncpy( char *to, const char *from, size_t count ); strcpy是將一個字串複製到另外一個字串 而strncpy是將一個字串的前count個字元複製到另一個字串,但需要注意的是,複製過去後並不會補上’\0’

strtol long strtol( const char *start, char **end, int base ); 當end變成NULL時,代表已經取完了

strlen size_t strlen( char *str ); strlen會回傳字串的長度 需要特別注意放入的指標不可以是NULL EX char str[]=“hello”; len=strlen(str);

memset void* memset( void* buffer, int ch, size_t count ); 注意:只能用來初始化0或-1 (想想計概的表示法) EX memset(array,0,sizeof(array));

作業

題目練習 UVa Online Judge http://uva.onlinejudge.org/ Q272,Q458,Q494 翻譯 http://www.csie.ntu.edu.tw/~b97115/luckycat/