C++(8)--數組array-長度固定

數組及常用算法

  • 1.數組基本概念
  • 2.一維數組
    • 2.1數組的定義
    • 2.2數組初始化
    • 2.3一維數組動態賦初值
    • 2.4一維數組應用實例
    • 2.5一維數組的排序算法
    • 2.6 一維數組元素的刪除和插入
    • array
  • 3.二維數組
    • 3.1數組定義
    • 3.2二維數組的動態賦值

《老九學堂C++課程》《C++ primer》學習筆記。《老九學堂C++課程》詳情請到B站搜索《老九零基礎學編程C++入門》
-------------簡單的事情重復做,重復的事情用心做,用心的事情堅持做(老九君)---------------

1.數組基本概念

什么是數組:數組是一個變量,由數據類型相同的一組元素組成,在內存占一串連續的內存空間。

數組是一個類型:比如int 型的數組,類型就是int []
C++中數組元素必須擁有相同的數據類型加粗樣式

數組基本要素
1.表示符:數組的名稱,用于區分不同的數組(用來表示數組的變量名)
2.數組元素:向數組中存放的數據
3.元素下標:對數組元素進行編號,表明元素在數組中的位置。從0開始,可以通過下標來訪問數組
4.元素類型:數組中元素的數據類型
數組長度固定, 避免數組越界

使用數組的優點: 方便管理需要相同操作的數據

demo1:可以構成數組的一組元素?
在C/C++中可以構成一個數組,在java中不行

198, 98, ‘c’, 230 // 字符在C++中是整形存的
1, 0, true, false, 38, -1 // c++中布爾類型實際是整形

2.一維數組

可以存成數組的情況:學生單門學科的成績,某類商品的單價,某人N個月的工資

2.1數組的定義

定義語法:

datatype arrayName[size];

demo:

int nums[25];
char array_of_name[30];
double curr_salary[35];

const int N = 5;
int nums[N];
nums[0] = 9527;

const int N = 5;
int nums[N];
nums[0] = 9527;

注意:C++中數組的大小可以定義變量,C中不可以可以定義成變量

2.2數組初始化

用大括號初始化元素內容

int years[6] = {2012,2013,2014,2015,2016,2017}; //可以少給元素,但是不能多給
int months[12] = {1, 3, 5, 7}; // 未初始化的元素默認值未0
int days[] = {1,15}; // 不設定數組大小,編譯器自動計算數組大小
int array[] = {} // ?,未知元素個數是不可以的

c++ 11中新的改動:
a.初始化是可以不用等于號;
b.大括號可以為空,默認為所有元素執行置0操作

int days[] {};
float m[100] {};

2.3一維數組動態賦初值

動態從鍵盤錄入信息,賦值給數組

int main(){int N = 5;double scores[N];//for(int i = 0; i < N; i++){for(int i = 0; i < sizeof(scores) / sizeof(double); i++){cout << "請輸入第" << i + 1 << "課程的成績:" ;cin >> scores[i];}for(int i = 0; i < N; i++){cout << scores[i] << endl;}return 0;
}

注意C++中數組沒有.len()的屬性,沒法直接獲得數組的長度。

2.4一維數組應用實例

demo1:一維數組求和,求平均

int main(){
int main(){int nums[7] = {8, 4, 2, 1, 23, 344, 12};int nums_len = sizeof(nums) / sizeof(nums[0]);int sum = 0;double average = 0;for(int i = 0; i < nums_len; i++){cout << nums[i] << " ";sum += nums[i];}average = sum / nums_len;cout << "和為:" << sum << ", 均值為:" << average << endl;return 0;
}

demo2: 找出數組的最大值,最小值

	// 求數組的最大值最小值int min_val = nums[0], max_val = nums[0]; //假設第一個元素為最小值/最大值,其后的元素依次和最大最小比,然后更新最大值/最小值int min_index = 0, max_index = 0;for(int i = 1; i < nums_len; i ++){if(nums[i] < min_val){min_val = nums[i];min_index = i;}if(nums[i] > max_val){max_val = nums[i];max_index = i;}}cout << "最小值為:" << min_val << ", 對應的下標為:" << min_index << endl;cout << "最大值為:" << max_val << ", 對應的下標為:" << max_index << endl;

demo3:定義一個整形數組,找出奇數/偶數元素的個數

	// 定義一個整形數組,找出奇數/偶數元素的個數int odd_count = 0, even_count = 0;for(int i = 0; i < nums_len; i++){if(nums[i] % 2 == 0){even_count += 1;}else{odd_count += 1;}}cout << "偶數有:" << even_count << "個, 奇數有:" << odd_count << "個" <<endl;

demo4:查找數組中是否存在某個元素,如果存在返回元素在數組中的下標,不存在返回-1

	//查找數組中是否存在某個元素,如果存在返回元素在數組中的下標,不存在返回-1int searchNum;int searchIndex = -1;  //初值值是一個不可能達到的值,如果最后他還是這個不可能達到的值,那么就沒找到cout << "請輸出要查找的數字" << endl;cin >> searchNum;for(int i = 0; i < nums_len; i++){if (nums[i] == searchNum){searchIndex = i;break;}}if(searchIndex == -1){cout << "沒有查到要找的數字" << endl;}else{cout << "要查找的數字在數組中的下標為:" << searchIndex << endl;}

2.5一維數組的排序算法

1.冒泡排序
每次相鄰的元素比較,將較大或者較小的元素放著后面,依次比較,較小/較大的數字就會冒到最后面 。

int main(){// 循環輸入5個整形數字,進行降序排列后輸出結果int n = 5;int nums[5] = {};for(int i = 0; i < n; i++){cout << "請輸入數字" << endl;cin >> nums[i];}// 選擇排序法// 每次找剩下元素的最大值/最小(和老師講的有點不一樣,但實質是一樣的)for(int i = 0; i < n; i++){for(int j = i+1; j < n; j++){if(nums[i] < nums[j]){int tmp = nums[i];nums[i] = nums[j];nums[j] = tmp;}}}for(int i = 0; i < n; i++){cout << nums[i] << endl;}

2.選擇排序

int main(){// 循環輸入5個整形數字,進行降序排列后輸出結果int n = 5;int nums[5] = {};for(int i = 0; i < n; i++){cout << "請輸入數字" << endl;cin >> nums[i];}// 選擇排序法// 每次找剩下元素的最大值/最小(和老師講的有點不一樣,但實質是一樣的)for(int i = 0; i < n; i++){for(int j = i+1; j < n; j++){if(nums[i] < nums[j]){int tmp = nums[i];nums[i] = nums[j];nums[j] = tmp;}}}for(int i = 0; i < n; i++){cout << nums[i] << endl;}return 0;
}

2.6 一維數組元素的刪除和插入

數組的大小一旦確定了,就無法改變。

int main(){// 有序數組的插入和刪除//數組的刪除和插入(數組一旦定義,大小不能改變,所以本例子說的是數組的長度遠大于有效存儲元素的個數)double power[99];int powerCount = 0;  // 當前數組中元素的個數power[powerCount++] = 45760;power[powerCount++] = 45770;power[powerCount++] = 45772;power[powerCount++] = 45773;double tmp;for(int i = 0; i < powerCount; i++){for(int j = 1; j < powerCount - i; j ++){if(power[j] < power[j-1]){tmp = power[j];power[j] = power[j-1];power[j-1] = tmp;}}}cout << "排序后的數組為:" << endl;for(int i = 0; i < powerCount; i++){cout << power[i] << "\t";}cout << endl;}
	//插入數字,插入新數字之后數組依舊有序cout << "請輸入要插入的數字" << endl;double insert_power;cin >> insert_power;    // 1. 放在末尾,再排序// 2. 找到第一個比插入數大的元素位置,其后的元素一次往后移動一位int insert_index = powerCount;for(int i = 0; i < powerCount; i++){if(power[i] > insert_power){cout << power[i] << insert_power;insert_index = i;break;}}for(int i = powerCount-1; i >= insert_index; i--){power[i+1] = power[i];}power[insert_index] = insert_power;powerCount+=1;cout << "插入元素后的數組為"<< endl;for(int i = 0; i < powerCount; i++){cout << power[i] << "\t";}
	// 刪除元素,找到要刪除的元素位置,將其后的元素往前移動一位// 沒有判斷相同元素double delete_power;int delete_index = -1;cout << "請輸出要刪除的元素" << endl;cin >> delete_power;for(int i = 0; i < powerCount; i++){if(power[i] == delete_power){delete_index = i;break;}}if(delete_index == -1){cout << "沒有找到要刪除的元素" << endl;}else{for(int i = delete_index; i < powerCount; i++){power[i] = power[i+1];}powerCount-=1;cout << "刪除元素后的數組為"<< endl;for(int i = 0; i < powerCount; i++){cout << power[i] << "\t";}}return 0;
//}

array

用array定義數組與原來的方式定義數組效果是一樣的

#include <array>
int value1[5];
array<int 5> value2;  //至少是c++11才支持

3.二維數組

3.1數組定義

datatype name[rowSize][colSize];
double score[5][3]
int prices[4][4]

3.2二維數組的動態賦值

demo:輸入學生各門課程的成績

在這里插入代碼片int main(){string stu_names[] = {"劉備","關羽", "張飛"};string course_names[] = {"數學", "語文", "英語"};const int ROW = 3;  // sizeof(stu_names) / sizeof(stu_names[0])   雙字名字下可以這么寫,其他情況下不行const int COL = 3;double scores[ROW][COL];for(int i = 0; i < ROW; i++){for(int j = 0; j < COL; j++){cout << stu_names[i] << "的" << course_names[j] << "成績為:";cin >> scores[i][j];}}cout << "\t";for(int i = 0; i < COL; i++){cout << course_names[i] << "\t";}cout << endl;for(int i = 0; i < ROW; i++){cout << stu_names[i] << "\t";for(int j = 0; j < COL; j++){cout << scores[i][j] << "\t";}cout << endl;}return 0;
}
        數學    語文    英語
劉備    1       2       3
關羽    4       5       6
張飛    7       8       9

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/444850.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/444850.shtml
英文地址,請注明出處:http://en.pswp.cn/news/444850.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

關于去蘋果服務器驗證充值的一些看法

前端時間看了下關于app充值驗證發送游戲金幣的好多帖子和文章,也總結了一下app校驗的php代碼:可以參考我的上一封博客: http://blog.csdn.net/pbymw8iwm/article/details/42167125 其中這個帖子回復的大神比較多:點擊打開鏈接 有些人認為拿蘋果的receptdata去驗證,通過返…

終于,我讀懂了所有Java集合——queue篇

Stack 基于Vector實現&#xff0c;支持LIFO。 類聲明 public class Stack<E> extends Vector<E> {} push public E push(E item) {addElement(item);return item; } pop public synchronized E pop() {E obj;int len size();obj peek();removeElementAt(…

IAP-應用內購買流程

成為ios開發者最大的好處就是&#xff0c;你編寫的應用程序會有很多方式可以賺錢。比如&#xff0c;收費版&#xff0c;免費掛廣告版&#xff0c;還有就是程序內置購買。 程序內置購買會讓你愛不釋手&#xff0c;主要有以下原因&#xff1a; 除了程序本身的下載收費以外&#x…

C++(8.5)--Vector容器

向量容器Vector1. 定義/初始化2. 遍歷3. 常用操作vector 迭代器遍歷&#xff0c;sort, reverse,1. 定義/初始化 vector是同一類型對象的集合&#xff0c;被稱作容器。vector實際是一個類模版&#xff0c;可用于保存多種數據類型的數據&#xff08;確定類型的vector 就只能裝同…

關于mysql的change和modify

前端時間要寫個游戲里的郵件系統&#xff0c;定義了一個如下的表結構&#xff1a; CREATE TABLE sysmail (mailid int(20) NOT NULL AUTO_INCREMENT,sendtime int(11) NOT NULL DEFAULT 0,mailtitle varchar(512) COLLATE utf8_bin NOT NULL DEFAULT ,mailcontext varchar(2048…

終于,我讀懂了所有Java集合——map篇

首先&#xff0c;紅黑樹細節暫時擼不出來&#xff0c;所以沒寫&#xff0c;承諾年前一定寫 HashMap &#xff08;底層是數組鏈表/紅黑樹&#xff0c;無序鍵值對集合&#xff0c;非線程安全&#xff09; 基于哈希表實現&#xff0c;鏈地址法。 loadFactor默認為0.75&#xff0…

valgrind工具使用詳解

zz自 http://blog.csdn.net/destina/article/details/6198443 感謝作者的分享&#xff01; 一 valgrind是什么&#xff1f; Valgrind是一套Linux下&#xff0c;開放源代碼&#xff08;GPL V2&#xff09;的仿真調試工具的集合。Valgrind由內核&#xff08;core&#xff09;以…

C++(9)--裸指針、智能指針、引用

指針1.裸指針的基本概念1.1 裸指針的聲明*/初始化&1.2 操作裸指針--間接運算符*1.3 裸指針使用 demo--指向一個簡單變量1.4 空指針--nullptr1.5 特殊指針--void *ptr2.指針和引用--引用定義&3.指針和數組3.1 數組指針的定義3.2 數組指針遞增/遞減操作3.3 指針與數組使用…

關于valgrind的安裝和內存泄露分析

程序的安裝 如果使用的是tar包安裝. valgrind # wget http://valgrind.org/downloads/valgrind-3.9.0.tar.bz2 # tar -jxvf valgrind-3.9.0.tar.bz2 # cd valgrind-3.9.0 # ./autogen.sh # ./configure # make; make install 使用命令: valgrind --tool=memcheck --leak-…

關于mysql的cpu占用高的問題

現在游戲開了泰服 ,發現泰服的cpu占用率總是比繁體或者大陸的高很多,每次都是占用了300%多 top - 15:34:06 up 222 days, 2:51, 2 users, load average: 0.75, 0.73, 0.66 Tasks: 215 total, 1 running, 214 sleeping, 0 stopped, 0 zombie Cpu(s): 52.4%us, 8.5%…

網絡原理知識點匯總

OSI七層模型 vs. TCP/IP 五層模型&#xff08;有時候也說四層&#xff09;及各層協議 七層&#xff1a;物理層&#xff1a;為數據端設備提供傳送數據的通路&#xff0c; IEEE802 數據鏈路層&#xff1a;提供介質訪問和鏈路管理&#xff0c; ARP&#xff0c;MTU 網絡層&#xf…

無限踩坑系列(8)--猿界神猿

計算機一句話冷知識1.GNU2. Unix與C語言3. Linux與git-hub4. c/c 編譯器5. python1.GNU GNU是一個自由的操作系統&#xff0c;其內容軟件完全以GPL方式發布。 GNU&#xff1a;GNU’s Not Unix!的遞歸縮寫 Unix 商業化之后&#xff0c; RMS發起了GNU計劃&#xff0c;在該計劃下…

C++實現md5加密或計算文件的唯一性識別

由于網絡上傳了很多關于C實現md5加密的類&#xff0c;至于那個是原創&#xff0c;我不敢妄加猜測&#xff0c;只是這里我聲明我是轉載的&#xff0c;并支持原創。 對于md5加密算法&#xff0c;我提供兩文件&#xff1a; #ifndef MD5_H #define MD5_H #include <string>…

Crontab的格式

第1列分鐘1&#xff5e;59 第2列小時1&#xff5e;23&#xff08;0表示子夜&#xff09; 第3列日1&#xff5e;31 第4列月1&#xff5e;12 第5列星期0&#xff5e;6&#xff08;0表示星期天&#xff09; 第6列要運行的命令 下面是crontab的格式&#xff1a; 分 時 日 月 星期 要…

leetcode516 最長回文子序列

給定一個字符串s&#xff0c;找到其中最長的回文子序列。可以假設s的最大長度為1000。 示例 1: 輸入: "bbbab" 輸出: 4 一個可能的最長回文子序列為 "bbbb"。 示例 2: 輸入: "cbbd" 輸出: 2 一個可能的最長回文子序列為 "bb"。 …

C++(10)--動態分配內存new,程序的內存分配

動態分配內存1. 動態分配內存1.1使用new分配內存1.2使用delete釋放內存1.3使用new創建動態分配的數組2. 程序的內存分配3.數組與指針案例實踐4.二維數組與指針《老九學堂C課程》《C primer》學習筆記。《老九學堂C課程》詳情請到B站搜索《老九零基礎學編程C入門》-------------…

社交app應用開發 客戶端+服務器源碼

原帖地址&#xff1a;http://www.devdiv.com/iOS_iPhone-想學習移動社交APP的童鞋有福了&#xff0c;圖文展示&#xff0c;附客戶端&#xff0c;服務端源碼。-thread-121444-1-1.html 想學習移動社交APP的童鞋有福了&#xff0c;圖文展示&#xff0c;附客戶端&#xff0c;服務…

leetcode83 刪除排序鏈表中的重復元素

給定一個排序鏈表&#xff0c;刪除所有重復的元素&#xff0c;使得每個元素只出現一次。 示例 1: 輸入: 1->1->2 輸出: 1->2 示例 2: 輸入: 1->1->2->3->3 輸出: 1->2->3 思路&#xff1a;判斷下一個是否相同即可。 /*** Definition for singl…

tcpdump的用法

第一種是關于類型的關鍵字&#xff0c;主要包括host&#xff0c;net&#xff0c;port, 例如 host 210.27.48.2&#xff0c;指明 210.27.48.2是一臺主機&#xff0c;net 202.0.0.0 指明 202.0.0.0是一個網絡地址&#xff0c;port 23 指明端口號是23。如果沒有指定類型&#xff0…