C/C++基礎程式設計班 程式撰寫與實例 講師:鄒尚軒, 8/8, 2013.

Slides:



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

第一單元 建立java 程式.
Introduction to C Programming
計算機程式語言實習課.
親愛的老師您好 感謝您選用本書作為授課教材,博碩文化準備本書精選簡報檔,特別摘錄重點提供給您授課專用。 說明: 博碩文化:
C/C++基礎程式設計班 陣列 (Array)
TQC+ JAVA全國教師研習會 PLWeb 程式設計練習平台 簡介.
Chapter 5 迴圈.
C语言程序设计 课程 第5章 数组 主讲:李祥 博士、副教授 单位:软件学院软件工程系.
第十一章 結構.
循环结构又称为重复结构:用来处理需要重复处理的问题,它是程序中一种很重要的结构。
Visual C++ introduction
Do.For.While.正三角.倒正三角.倒九九乘法表
簡易C++除錯技巧 長庚大學機械系
選擇排序法 通訊一甲 B 楊穎穆.
Chen Yi Fen The C Language Chen Yi Fen
列舉(enum).
Chap 10 函数与程序结构 10.1 函数的组织 10.2 递归函数 10.3 宏定义 10.4 编译预处理.
If … else 選擇結構 P27.
101北一女中 資訊選手培訓營 妳不可不了解的指標 Nan.
STRUCTURE 授課:ANT 日期:2010/5/12.
1. 檔案File  開新New  檔案Empty File (再另存新檔D:\hello.c)
计算概论 第十八讲 C语言高级编程 结构与习题课 北京大学信息学院.
C語言簡介 日期 : 2018/12/2.
第5章 堆疊(Stacks) 5-1 堆疊的基礎 5-2 堆疊的表示法 5-3 堆疊的應用 - 運算式的計算與轉換
Introduction to the C Programming Language
算法的基本概念.
Java 程式設計 講師:FrankLin.
JAVA 程式設計與資料結構 第四章 陣列、字串與數學物件.
Chap3 Linked List 鏈結串列.
計數式重複敘述 for 迴圈 P
程式設計實習課(四) ----C 函數運用----
第一單元 建立java 程式.
第0章作业: 教材P12-练习与实践 1.写出用符号’*’输出描绘汉字”大”的流程图。
陣列(Array).
選擇性結構 if-else… switch-case 重複性結構 while… do-while… for…
陣列
輸入&輸出 函數 P20~P21.
Introduction to C Programming
C 语言程序设计 程序的循环结构 电大崇信县工作站 梁海亮.
挑戰C++程式語言 ──第8章 進一步談字元與字串
C qsort.
项目1 C程序设计起步 学习目标: 通过该项目你可以知道: C语言的用途。 C语言的基本符号和关键字。 C语言程序的结构及特点。
流程控制:Switch-Case 94學年度第一學期‧資訊教育 東海大學物理系.
函數應用(二)與自定函數.
陣列與結構.
北一女中 資訊選手培訓營 妳不可不了解的指標 Nan.
選擇性結構 if-else… switch-case 重複性結構 while… do-while… for…
Introduction to the C Programming Language
程式設計--linear search 通訊一甲 B 楊穎穆.
1757: Secret Chamber at Mount Rushmore
13194: DPA Number II ★★☆☆☆ 題組:Problem Set Archive with Online Judge
程式設計--Quick Sort 通訊一甲 B 楊穎穆.
第四章 陣列、指標與參考 4-1 物件陣列 4-2 使用物件指標 4-3 this指標 4-4 new 與 delete
適用於多選一 可減少if 與 else配對混淆的錯誤.
C/C++基礎程式設計班 C語言入門、變數、基本處理與輸入輸出 講師:林業峻 CSIE, NTU 3/7, 2015.
Programming & Language Telling the computer what to do
C/C++基礎程式設計班 陣列 講師:林業峻 CSIE, NTU 3/14, 2015.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
C/C++基礎程式設計班 控制敘述 講師:林業峻 CSIE, NTU 3/7, 2015.
Chap 10 函数与程序结构 10.1 圆形体积计算器 10.2 汉诺塔问题 10.3 长度单位转换 10.4 大程序构成.
Array(陣列) Anny
10303: How Many Trees? ★★☆☆☆ 題組:Contest Archive with Online Judge
第三章 流程控制 程序的运行流程 选择结构语句 循环结构语句 主讲:李祥 时间:2015年10月.
C語言程式設計 老師:謝孟諺 助教:楊斯竣.
Unix指令4-文字編輯與程式撰寫.
函式庫補充資料 1.
微 處 理 機 專 題 – 8051 C語言程式設計 主題:階乘計算
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
InputStreamReader Console Scanner
Presentation transcript:

C/C++基礎程式設計班 程式撰寫與實例 講師:鄒尚軒, 8/8, 2013

課程大綱 程式碼格式(Coding Style) 迴圈應用 陣列應用

程式碼格式(Coding Style) 程式碼的格式是撰寫程式最基本的元素 整齊有序的程式碼 讓自己看得懂,讓別人也看得懂 高可讀性(readability) 重要的是整齊的程式碼較容易抓出錯誤,也比較不 容易犯錯 俗話說:「人要衣裝,佛要金裝」,程式碼也要 請記得,如果未來會從事撰寫程式相關工作, 那閱讀你程式碼的人不只你一個

程式碼格式要點 區塊分明 縮排清楚

區塊分明-大 大區塊是指程式碼的基礎架構 下面範例是最基本的程式碼構成 #include <stdio.h> ->引入函式庫 int main() { ->程式進入點 /* 變數宣告 */       /* 主要程式碼 */ return 0; ->程式結束回傳0 }

區塊分明-中 一般來說,我們的程式會分成好幾個部分,各別處理一些事情, 如範例: #include <stdio.h> #include <stdlib.h> #define STUDENT 3 int main() { int i; double sum = 0; int score[STUDENT]; // 分別讀入3個數值 for (i = 0; i < STUDENT; i++) { scanf("%d", &score[i]); } // 計算總和 for ( i = 0; i < STUDENT; i++) { sum+=score[i]; printf("average=%lf\n",sum/STUDENT); system("pause"); return 0; 這樣算兩個區塊, 區塊間可以空行或 註解分清楚各區塊 所負責的事情。

區塊分明-小 最小的區塊是指"{}"所構成的區域 { 和 } 對齊、對應 { 或 } 所在的那行, 就不要有程式碼, 除非是 if {or for{ or while{ 這件事在程式超過螢幕 一頁之後就會顯得很重 要 for (...) { // 區塊1 // 區塊2 // 區塊3 } 很明顯的我們可以分出有三個不同的區塊 for (...) { }}} 這個如何?

縮排清楚 要點: 同一個區塊(同屬同一 對{}範圍)的程式碼, 縮排要一樣 縮排可用 tab 或是空 白,重點是每個距離 要一樣 #include<stdio.h> #include<stdlib.h> #define CLASS 2 #define STUDENT 2 #define SUBJECT 2 int main() { int i,j,k; int score[CLASS][STUDENT][SUBJECT]={20,30,40,50,60,70,80,90}; //分別輸出兩班各個數值 for(i=0;i<CLASS;i++){ printf("班級%d:\n",i+1); for(j=0;j<STUDENT;j++){ printf("學生%d:\n",j+1); for(k=0;k<SUBJECT;k++){ printf("第%d科:%d分\n",k+1,score[i][j][k]); } printf("\n"); system("pause"); return 0; 這是錯誤示範

課程大綱 程式碼格式(Coding Style) 迴圈應用 陣列應用

for 迴圈 用途:當程式需要來回重複執行某一段程式碼 時 語法: for通常用在已知重覆執行次數時。

while 迴圈 用途:當程式需要來回重複執行某一段程式碼時 語法: while通常用在未知重覆執行次數時。 把for中的進入迴圈前要做的事與每跑完一次迴圈會做 的事拿掉,就是while迴圈。 例如:for(; i < 40;) 等於 while(i<40)

範例一 讀取使用者輸入的整 數,直到使用者輸入 0結束,並算出平均。 #include <stdio.h> #include <stdlib.h> int main() { int input, n; double sum; sum = 0; // 累計總和 n = 0; // 累計有多少數字 while (1) { scanf("%d", &input); if (input == 0) break; sum += input; n++; } printf("average: %lf\n", sum/n); system("pause"); return 0; 讀取使用者輸入的整 數,直到使用者輸入 0結束,並算出平均。

練習一 讀取使用者輸入的數字(假設不會大於一百萬), 直到使用者輸入0,輸出最小的數字 提示: 注意:第一次輸入的比較要注意 回憶昨天找最大分數的方法 每次輸入的時候都可以比較 注意:第一次輸入的比較要注意

如果你做完了… 使用者輸入n,印出第1~n項的費氏數列 費氏數列定義: f(1) = f(2) = 1 f(n) = f(n-1)+f(n-2), when n > 2

如果你覺得很無聊… 找出一個數列中,連續數字的最大和 使用者輸入一串連續整數,可為正負,直到輸 入零時結束,並輸出此串數列中,連續數字的 最大和,如果數字都小於0,最大和就為0 例如: 1 3 4 -10 3 4 4 -2 -3 6 0,最大和為 12 1 -5 -5 -5 -5 0,最大和為 1 -6 -4 -3 -5 -1 -3 -4 0,最大和為 0

範例二 使用者輸入正奇數N, 計算等差數列 1+3+5+7+9+....N, 並輸出 1+3+5+...+N=多少 #include <stdio.h> #include <stdlib.h> int main() { int n, i, sum; scanf("%d", &n); sum = 0; // 累計總和 for (i = 1; i <= n; i+=2) { sum += i; if (i != 1) printf("+"); printf("%d", i); } printf("=%d\n", sum); system("pause"); return 0;

練習二 使用者輸入正整數N,計算階層 N! ,並輸出 1*2*3*...*N=多少 階層的定義: 注意:初始化! 如:3!=1*2*3=6 注意:初始化! 12! 就超過 int 範圍,所以不用擔心12!以後出現 奇怪的答案

練習三 雙重迴圈熱身題: 輸入 N 印出 N 列數字,第i列有i個數字,每列 間都是連續數字 輸入:5 輸出:

範例四 計算1~10000間的完 全數 完全數: 6有因數1, 2, 3, 6,除 去自己本身相加為自 己,1+2+3=6 #include <stdio.h> #include <stdlib.h> int main() { int n, i, j, sum; for (i = 1; i <= 10000; i++) { sum = 0; // 每計算一次都要重新歸零 // 只要算1~i-1,因為不包含本身 for (j = 1; j < i; j++) { if (i % j == 0) { // 整除代表j是因數 sum += j; } if (sum == i) printf("%d is perfect number.\n", i); system("pause"); return 0; 計算1~10000間的完 全數 完全數: 6有因數1, 2, 3, 6,除 去自己本身相加為自 己,1+2+3=6 28有因數1, 2, 4, 7, 14, 28,除去本身相 加, 1+2+4+7+14=28

練習四 使用者輸入正整數N,輸出N所有因數 現在你會找1~N之間的所有質數了嗎?

課程大綱 程式碼格式(Coding Style) 迴圈應用 陣列應用

一維陣列的宣告 用途:在記憶體中找出一塊連續的空間來存放 多個相同資料型態的內容 一維陣列宣告語法:資料型態 陣列名稱[長度] int a[N]; N是一個不變的常數,不可為變數 位置由0~N-1,而不是1~N 位置: a a[0] a[1] a[2] … a[N-1] N個欄位

一維陣列的宣告 宣告與初始化方式有很多種: 一旦宣告後,就無法再進行初始化! int a[10] = {0}; 同上面的結果 int a[3] = {1}; 只有第一個會被設成1,後面都會初始化為0 int a[3] = {1, 2, 3, 4}; 編譯會過但程式會壞掉...... int a[]; compile error.... 一旦宣告後,就無法再進行初始化!

一維陣列的使用 在使用宣告好的陣列時,要使用一個陣列中的元素 可以表示成:陣列名稱[索引]。 範例: 「陣列名稱」則是用來表示一塊位置緊密相鄰的記憶體 空間的起始位址 「索引」的功能用來表示該陣列元素是在記憶體空間的 第幾號位置 範例: int a[3]; // 宣告陣列a有3個整數 a[0]=1; // 把a[0]設定為1 a[1]=2; // 把a[1]設定為2 a[2]=3; // 把a[2]設定為3 a[3]是不存在的,亂用會有恐怖的事情發生...

二維陣列的宣告 二維陣列宣告方式 資料型態 陣列名稱[長度1][長度2]; int a[M][N]; M、N 為整數常數,不可為變數 … a[0][N-1] a[1][0] … a[1][N-1] … a[M-1][0] … a[M-1][N-1] N個欄位 N個欄位 N個欄位 M*N個欄位

二維陣列的宣告 利用連續的記憶體空間我們可以: 製作行列的效果(矩陣) 模擬平面座標系(XY座標) 位置: a 第0列 第1列 第0行 第1行 第2行 y軸 a[0][0] (0, 0) a[0][1] (0, 1) a[0][2] (0, 2) a[1][0] (1, 0) a[1][1] (1, 1) a[1][2] (1, 2) x軸

二維陣列的宣告 宣告與初始化方式有很多種: 一旦宣告以後,就無法再進行初始化! int a[10] [10]= {0}; 與一維不同,語法錯誤 int a[][3] = {1, 2, 3}; a只有1*3個位置(=a[1][3]),而三個各為1,2,3 int a[3][3] = {{1}}; 只有第一個會被設成1,後面都會初始化為0 一旦宣告以後,就無法再進行初始化!

範例五 使用者輸入N,假設 N最大為100,接下 來使用者輸入N個數 字,把這N個數字倒 著輸出來 #include <stdio.h> #include <stdlib.h> #define MAX 100 int main() { int i, n; int a[MAX] = {0}; scanf("%d", &n); // 讀入n // 讀進n個數字 for (i = 0; i < n; i++) scanf("%d", &a[i]); // 倒著印 for (i = n-1; i >= 0; i--) printf("%d ", a[i]); system("pause"); return 0; }

練習五 使用者輸入一個英文單字的長度N後,再輸入該 單字,並且倒著印出來 例如: 注意:抓取字元時,使用 scanf(" %c", ...); 有空白

範例六 情境:公館有三家青蛙撞奶,三家都只賣青蛙 撞奶和仙草撞奶 問題:讓使用者可以對各家的飲料評分,評分 後輸出結果

範例六 #include <stdio.h> #include <stdlib.h> #define SHOP 3 #define DRINK 2 int main() { int i, j; int score[SHOP][DRINK] = {0}; //讓使用者輸入評分 for (i = 0; i < SHOP; i++) { printf("店家%d:\n", i+1); for (j = 0; j < DRINK; j++) { printf("飲料%d幾分?", j+1); scanf("%d", &score[i][j]); } //輸出結果 printf("飲料%d:%2d分\n", j+1, score[i][j]); system("pause"); return 0;

練習六之一 延續範例六,把範例六改成輸出各店家飲料的 平均分數

練習六之二 延續範例六,把範例六改成輸出兩種飲料在所 有店家的平均分數

井字遊戲 1 2 3 4 5 6 7 8 9 兩名玩家依序分別輸入畫哪個格子,判斷哪個 玩家先獲勝,或是沒有人贏 例如:依序輸入1 3 4 6 7,輸出玩家一獲勝 1 2 3 4 5 6 7 8 9

最後 記得交作業!明天晚上就是期限了! 作業輸入輸出請符合規定! 然後明天會出作業二! 有問題別害怕,快問吧!