C/C++基礎程式設計班 陣列 (Array)

Slides:



Advertisements
Similar presentations
第 8 章 数组 计算机科学学院 李淮 Tel QQ
Advertisements

While 迴圈 - 不知重複執行次數
CSIM, PU C Language Introduction to the C Programming Language 重覆敘述 (for,while,break,continue) 適合重複性的計算或判斷.
第一單元 建立java 程式.
C/C++基礎程式設計班 程式撰寫與實例 講師:鄒尚軒, 8/8, 2013.
親愛的老師您好 感謝您選用本書作為授課教材,博碩文化準備本書精選簡報檔,特別摘錄重點提供給您授課專用。 說明: 博碩文化:
“八皇后”问题 崔萌萌 吕金华.
陣列 Array chapter 3 德明科技大學資訊科技系.
迴圈.
TQC+ JAVA全國教師研習會 PLWeb 程式設計練習平台 簡介.
Chapter 5 迴圈.
第4章 鏈結串列(Linked Lists) 4-1 動態記憶體配置-(6) 4-2 鏈結串列的基礎-(7)
C语言程序设计 课程 第5章 数组 主讲:李祥 博士、副教授 单位:软件学院软件工程系.
第十一章 結構.
Do.For.While.正三角.倒正三角.倒九九乘法表
簡易C++除錯技巧 長庚大學機械系
選擇排序法 通訊一甲 B 楊穎穆.
列舉(enum).
If … else 選擇結構 P27.
101北一女中 資訊選手培訓營 妳不可不了解的指標 Nan.
STRUCTURE 授課:ANT 日期:2010/5/12.
计算概论 第十八讲 C语言高级编程 结构与习题课 北京大学信息学院.
C語言簡介 日期 : 2018/12/2.
第5章 堆疊(Stacks) 5-1 堆疊的基礎 5-2 堆疊的表示法 5-3 堆疊的應用 - 運算式的計算與轉換
Introduction to the C Programming Language
算法的基本概念.
Introduction to the C Programming Language
Java 程式設計 講師:FrankLin.
JAVA 程式設計與資料結構 第四章 陣列、字串與數學物件.
Chap3 Linked List 鏈結串列.
計數式重複敘述 for 迴圈 P
程式設計實習課(四) ----C 函數運用----
第一單元 建立java 程式.
Chapter 5 複合資料型態.
第0章作业: 教材P12-练习与实践 1.写出用符号’*’输出描绘汉字”大”的流程图。
陣列(Array).
選擇性結構 if-else… switch-case 重複性結構 while… do-while… for…
陣列
輸入&輸出 函數 P20~P21.
挑戰C++程式語言 ──第8章 進一步談字元與字串
7.1 C程序的结构 7.2 作用域和作用域规则 7.3 存储属性和生存期 7.4 变量的初始化
向量 (vector) 就是典型的一維陣列,而更高維的矩陣,例如矩陣 (matrix) 和張量 (tensor) 則分別是二維和三維的陣列。
C语言程序设计 李祥 QQ:
C qsort.
C++程式設計入門 變數與運算子 作者:黃建庭.
项目1 C程序设计起步 学习目标: 通过该项目你可以知道: C语言的用途。 C语言的基本符号和关键字。 C语言程序的结构及特点。
Introduction to the C Programming Language
陣列與結構.
北一女中 資訊選手培訓營 妳不可不了解的指標 Nan.
選擇性結構 if-else… switch-case 重複性結構 while… do-while… for…
程式設計--linear search 通訊一甲 B 楊穎穆.
第4章 鏈結串列(Linked Lists) 4-1 動態記憶體配置-(6) 4-2 鏈結串列的基礎-(7)
實習八 函式指標.
1757: Secret Chamber at Mount Rushmore
程式設計--Quick Sort 通訊一甲 B 楊穎穆.
第四章 陣列、指標與參考 4-1 物件陣列 4-2 使用物件指標 4-3 this指標 4-4 new 與 delete
迴圈(重複性結構) for while do while.
Programming & Language Telling the computer what to do
C/C++基礎程式設計班 陣列 講師:林業峻 CSIE, NTU 3/14, 2015.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
Array(陣列) Anny
第三章 流程控制 程序的运行流程 选择结构语句 循环结构语句 主讲:李祥 时间:2015年10月.
C語言程式設計 老師:謝孟諺 助教:楊斯竣.
本节内容 指针类型 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Introduction to the C Programming Language
函式庫補充資料 1.
微 處 理 機 專 題 – 8051 C語言程式設計 主題:階乘計算
隨機函數.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
InputStreamReader Console Scanner
Presentation transcript:

C/C++基礎程式設計班 陣列 (Array) 講師:鄒尚軒, 2/4, 2015

課程大綱 迴圈複習 一維陣列 二維陣列 多維陣列

for 迴圈 for (第一次做的事;迴圈繼續的條件;每次做完做的事) 印出下列九九乘法表:

九九乘法 #include <stdio.h> #include <stdlib.h> int main() { int i, j; for (i = 1; i <= 9; i++) { for (j = 1; j <= 9; j++) { printf("%d*%d=%2d ", j, i, i*j); } printf("\n"); system("pause"); return 0;

while 迴圈 while (執行迴圈的條件) 九九乘法 while 版 #include <stdio.h> #include <stdlib.h> int main() { int i, j; i = 1; //初始化i while (i <= 9) { j = 1; //每次外面的迴圈重做就要重新初始化j while (j <= 9) { printf("%d*%d=%2d ", j, i, i*j); j++; } printf("\n"); i++; system("pause"); return 0;

課程大綱 迴圈複習 一維陣列 二維陣列 多維陣列

陣列是什麼 當你想存10個整數的時候? 當你想存100個整數的時候? 那一個變數有十個格子? 10個變數? 勉強可以接受 當你想存100個整數的時候? 100個變數? IMPOSSIBLE 那一個變數有十個格子?  簡單來說,陣列就是一個有很多格子的東西, 可以讓你放進很多個一樣型態的變數

一維陣列的宣告 用途:在記憶體中找出一塊連續的空間來存放 多個相同資料型態的內容 語法:資料型態 陣列名稱[長度] int a[N]; N是一個不變的常數,不可為變數(in C) 索引由 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]是不存在的,亂用會有恐怖的事情發生...

一維陣列的使用 範例:輸入全班3位同學的成績並輸出 比較下列兩個版本程式 思考:如果班上有50位同學的話呢? #include <stdio.h> #include <stdlib.h> int main() { int score1, score2, score3; scanf("%d", &score1); printf("I get %d\n", score1); scanf("%d", &score2); printf("I get %d\n", score2); scanf("%d", &score3); printf("I get %d\n", score3); system("pause"); return 0; } int i; int score[3]; for (i = 0; i < 3; i++ ) { scanf("%d", &score[i]); printf("I get %d\n", score[i]);

一維陣列的使用 使用陣列常搭配使用#define用來定義陣列大小,方便做程 式修改,並配合for迴圈使用 #define OO XX在編譯時,編譯器就會幫你把程式碼中的OO全換 成XX 範例:輸入全班50位同學的成績並輸出 #include <stdio.h> #include <stdlib.h> #define STUDENT 50 int main() { int i; int score[STUDENT]; for (i=0; i < STUDENT; i++) { scanf("%d", &score[i]); printf("I get %d\n",score[i]); } system("pause"); return 0;

一維陣列的應用 範例:輸入班上3位 同學分數,求出它們 的平均值 #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("avg=%lf\n", sum / STUDENT); system("pause"); return 0;

練習 練習一 練習二 如果上面兩個練習不能滿足你.... 延續上頁範例,輸入三位同學成績(假設都不一樣), 印出平均分數後,再印出分數小於平均分數的同學 的號碼(1~3)及分數 練習二 延續上頁範例,在印出上頁結果後,再多印出分數 最高的同學的號碼和分數。 如果上面兩個練習不能滿足你.... int a[10] = {37, 91, 16, 74, 88, 96, 84, 2, 85, 62}; 請將這個陣列依大排到小

課程大綱 迴圈複習 一維陣列 二維陣列 多維陣列

二維陣列的宣告 二維陣列宣告方式 資料型態 陣列名稱[長度 1][長度2]; int a[M][N]; M、N 為整數常數,不可 為變數 邏輯上: a[0][0] … a[0][N-1] a[M-1][0] a[M-1][N-1] 電腦中: 記憶體位址: a a[0][0] … 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 y軸 第0列 第1列 第0行 第1行 第2行 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個位置(=int a[1][3];),而三個各為1,2,3 int a[3][3] = {{1}}; 只有第一個會被設成1,後面都會初始化為0 一旦宣告以後,就無法再進行初始化!

二維陣列的使用 當宣告陣列後,要設定陣列時,就必須一個一 個欄位做設定 int main() { int a[2][2];// = {{1, 2}, {3, 4}}; a[0][0] = 1; a[0][1] = 2; a[1][0] = 3; a[1][1] = 4; return 0; }

二維陣列與巢狀迴圈 範例:使用巢狀迴圈輸出二維陣列內容 #include <stdio.h> #include <stdlib.h> int main() { int a[3][3]={{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; int i, j; for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { printf("%d ", a[i][j]); } printf("\n"); system("pause"); return 0;

二維陣列與巢狀迴圈 範例:輸入不同 兩班三位同學的 分數,並印出成 績 #include <stdio.h> #include <stdlib.h> #define CLASS 2 #define STUDENT 3 int main() { int i, j; int score[CLASS][STUDENT]; // 分別讀入兩班各個數值 for (i = 0; i < CLASS; i++) { printf("班級%d:\n", i+1); for (j = 0; j < STUDENT; j++) { printf("學生%d: ", j+1); scanf("%d", &score[i][j]); } // 分別輸出兩班各個數值 printf("學生%d: %d分\n", j+1, score[i][j]); system("pause"); return 0; 範例:輸入不同 兩班三位同學的 分數,並印出成 績

二維陣列與巢狀迴圈 範例:輸入不同 兩班三位同學的 分數,並印出平 均值 #include <stdio.h> #include <stdlib.h> #define CLASS 2 #define STUDENT 3 int main() { int i, j, sum = 0; int score[CLASS][STUDENT]; // 分別讀入兩班各個數值 for (i = 0; i < CLASS; i++) { printf("班級%d:\n", i+1); for (j = 0; j < STUDENT; j++) { printf("學生%d: ", j+1); scanf("%d", &score[i][j]); } // 計算所有學生分數總合 sum+=score[i][j]; printf("平均:%.2lf\n", (double)sum/(CLASS*STUDENT)); system("pause"); return 0; 範例:輸入不同 兩班三位同學的 分數,並印出平 均值

練習 修改上上頁範例,輸入兩班三位同學後,印出 各班平均 如果練習不能滿足你... 模擬下列矩陣乘法 矩陣B: 1 2 3 5 6 7 5 6 7 8 5 5 4 5 6 矩陣A: 1 2 3 4 5 6 7 8 4 5 6 7 矩陣C: 51 49 56 123 121 140 105 103 119 X =

練習 有個 3*4 的陣列,先試著輸出各列的總和(橫的), 再輸出各行的總和 例如: 先輸出 10 26 22 再輸出 10 13 16 19 A: 1 2 3 4 5 6 7 8 4 5 6 7

課程大綱 迴圈複習 一維陣列 二維陣列 多維陣列

其他多維陣列的使用 三維陣列 四維陣列 以此類推 資料型態 陣列名稱[長度1][長度2][長度3]; 資料型態 陣列名稱[長度1][長度2][長度3][長度4]; 以此類推

其他多維陣列的應用 三維坐標系(xyz) 高維資料處理 等等...

三維陣列範例:輸出兩班三位同學兩科考試成績 #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;

三維陣列練習 續上頁範例,請分別輸出班平均以及全校的各 科平均