C語(yǔ)言初階之?dāng)?shù)組詳細(xì)介紹
插入排序講解
#include<stdio.h> int main() { int arr[8] = { 1,2,3,4,6,7,10 }; int i = 0; int sz = sizeof(arr) / sizeof(arr[0]); int n = 0; scanf("%d", &n); for (i = 0; i < sz - 1; i++) if (n < arr[i]) //找到插入位置 break; for (int j = sz - 1; j > i; j--) arr[j ] = arr[j-1]; //每個(gè)位置向后移一位 arr[i] = n; //將n插入到數(shù)組中 for (int j = 0; j < sz; j++) printf("%d ", arr[j]); //打印結(jié)果 return 0; }
上面這個(gè)程序可以實(shí)現(xiàn)往有序數(shù)組插入數(shù)的功能,而插入排序就相當(dāng)于往有序的數(shù)組中不斷的插入新的數(shù),以上述的程序?yàn)榛A(chǔ),即可實(shí)現(xiàn)插入排序功能
#include<stdio.h> int main() { int arr[8] = { 4,55,66,8,4,1,3,2}; int i = 0; int j; int sz = sizeof(arr) / sizeof(arr[0]); for (i = 1; i < sz; i++) { //循環(huán)插入數(shù)據(jù) int num = arr[i]; for (j = 0; j < i; j++) //前i項(xiàng)順序不正確道破循環(huán) if (arr[i]< arr[j]) break; for (int x=i; x > j; x--) //全部右移 arr[x] = arr[x- 1]; arr[j] =num; //插入數(shù)據(jù) } for (i = 0; i< sz; i++) printf("%d ", arr[i]); return 0; }
每一次循環(huán)都是一次插入,同樣有這兩層循環(huán)的特點(diǎn)。
二維數(shù)組
二維數(shù)組是一維數(shù)組的延伸和發(fā)展,二維數(shù)組是一維數(shù)組的嵌套,類似兩層for循環(huán),通俗來(lái)說(shuō)二維數(shù)組就是一維數(shù)組的數(shù)組,二維數(shù)組的每個(gè)元素都是一個(gè)一維數(shù)組
int arr[5][5]; //二維數(shù)組
我們之前在九九乘法表提到的行列思想,在這里可以用上了,第一個(gè)5代表這個(gè)二維數(shù)組有五行,第二個(gè)5代表二維數(shù)組每行有五列,接下來(lái)用簡(jiǎn)單的圖畫來(lái)解釋
?我們學(xué)習(xí)二維數(shù)組的時(shí)候,以第一種形式了解即可,但要是想深究,那么就得了解第二種形式
二維數(shù)組的初始化
在學(xué)習(xí)一維數(shù)組的時(shí)候我們可以省略數(shù)組長(zhǎng)度,由編譯器自行補(bǔ)充 那么二維數(shù)組可以嗎? 答案是可以,二維數(shù)組的行可以省略,但是列不可以,因?yàn)閭€(gè)數(shù)確定,列數(shù)確定,行數(shù)也可以確定 如 int arr[][4]={1,2,3,4,5,6,7,8}; int arr[][4]={{1,2,3},{},{4,5}}; 第一種方法大家應(yīng)該可以理解 第二種方法就是利用了二維數(shù)組的性質(zhì),每一行都可以看成是一個(gè)一維數(shù)組 {}里的元素就是這一行的元素
二維數(shù)組的訪問(wèn)
二維數(shù)組和一維數(shù)組一樣,數(shù)組下標(biāo)都是從零開始的,下面簡(jiǎn)單的教大家打印一個(gè)二維數(shù)組
#include<stdio.h> int main(){ int arr[4][4] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 }; for (int i = 0; i < 4; i++) { int j = 0; for (j = 0; j < 4; j++) printf("%2d ", arr[i][j]); printf("\n"); } return 0; }
是不是和打印九九乘法表的程序很類似呢,同樣的,二維數(shù)組也離不開兩層循環(huán),由此可見兩層循環(huán)的重要性,至于二維數(shù)組的深一層使用,等我們講解掃雷和三子棋的時(shí)候就會(huì)有所了解
n維數(shù)組
n維數(shù)組實(shí)際上是對(duì)n-1維數(shù)組的拓展和延伸,按照研究二維數(shù)組的思維就可以一步一步的研究了
字符數(shù)組
接下來(lái)便是我們今天的主菜,字符數(shù)組
字符數(shù)組和字符串
C語(yǔ)言標(biāo)準(zhǔn)中并沒(méi)有字符串類型,這也使得與字符串有關(guān)的操作總是需要字符串函數(shù)來(lái)進(jìn)行,字符數(shù)組大多數(shù)情況下就是用來(lái)儲(chǔ)存字符串的,但字符數(shù)組有時(shí)候并不能看做字符串。
字符串是以\0為結(jié)束標(biāo)志 char a[5]={'a','b','c','d','e'}; 這里的字符數(shù)組a里并沒(méi)有\(zhòng)0,強(qiáng)行以字符串形式打印會(huì)出錯(cuò)
?當(dāng)我們沒(méi)有對(duì)字符數(shù)組初始化,并且以字符形式輸入的時(shí)候,忽略了\0,也會(huì)出現(xiàn)這種狀況,當(dāng)然大多數(shù)情況下我們還是可以把字符數(shù)組當(dāng)成字符串來(lái)用的
字符數(shù)組的輸入輸出
字符數(shù)組的輸入方式大致分為兩種字符形式輸入和字符串形式輸入
字符形式輸入輸出
//實(shí)現(xiàn)輸入輸出之前我們需要用字符數(shù)組作為容器 #include<stdio.h> int main() { char arr[5] = { 0 }; for (int i = 0; i < 5; i++) scanf("%c", &arr[i]); for (int i = 0; i < 5; i++) printf("%c", arr[i]); return 0; }
之前提到了getchar和putchar兩個(gè)庫(kù)函數(shù),接下來(lái)使用這兩個(gè)專門用來(lái)字符輸入輸出的函數(shù)來(lái)進(jìn)行
#include<stdio.h> int main() { char arr[5] = { 0 }; for (int i = 0; i < 5; i++) arr[i] = getchar(); for (int i = 0; i < 5; i++) putchar(arr[i]); return 0; }
字符串輸入輸出
#include<stdio.h> int main() { char arr[40] = { 0 }; scanf("%s", arr); printf("%s\n", arr); return 0; }
接下來(lái)使用puts,gets兩個(gè)庫(kù)函數(shù)
#include<stdio.h> int main() { char arr[40] = { 0}; gets(arr); puts(arr); return 0; } //順帶一提,puts在打印完字符串之后會(huì)自動(dòng)換行
字符串函數(shù)的簡(jiǎn)單使用
之前也提到了字符串的操作往往需要使用字符串函數(shù),除了上述函數(shù)之外我們之前函數(shù)篇介紹的字符串函數(shù)我來(lái)簡(jiǎn)單教大家使用一下
#include<stdio.h> #include<string.h> int main() { char arr[10] = { 0 }; strcpy(arr, "abc");//字符串拷貝,將abc拷貝到arr中 strcat(arr, "def");//字符串追加,將def追加到arr的\0之后 int len = strlen(arr);//求字符串長(zhǎng)度,不包括\0 int cmp = strcmp(arr, "abcdef");//字符串比較,第一個(gè)大于第二個(gè)字符串返回大于零的數(shù), //等于返回0,小于返回小于零的數(shù) printf("%d %d", len, cmp); printf("%s\n", _strupr(arr));//將字符串全部大寫 printf("%s\n", _strlwr(arr));//將字符串全部小寫 return 0; }
?根據(jù)注釋就可以推算結(jié)果,當(dāng)然我這里的打印字符串也使用了利用函數(shù)返回值的特點(diǎn)
綜合使用字符串函數(shù)
將下來(lái)把我們的所學(xué)知識(shí)全部串起來(lái),完成下面的字符串排序
#include<stdio.h> include<string.h> int main() { char arr[5][20] = { "tiger","pander","eleplant","rabbit","lion" };//聲明并初始化二維字符數(shù) //組arr int i, j,flag; //i,j循環(huán)變量,flag為判斷二維數(shù)組是否有序 //的變量 char t[20] = { '\0' }; for (i = 0; i < 5; i++) //打印二維字符數(shù)組,以字符串形式 puts(arr[i]); printf("以上為未排序的二維字符數(shù)組\n"); // 給程序打印結(jié)果進(jìn)行解釋 for (i = 0; i < 4; i++) { flag = 1; for (j = 0; j < 4; j++) { if (strcmp(arr[j], arr[j + 1]) > 0) { //若前一個(gè)字符串的ascll值大于 //后一個(gè)字符串,則進(jìn)行字符串位置交換 strcpy(t, arr[j]); strcpy(arr[j], arr[j+1]); strcpy(arr[j + 1], t); flag = 0; } } if (flag) //若一輪循環(huán)下來(lái)flag仍然等于1,則 //未進(jìn)行位置互換,此時(shí)打破循環(huán),減少?zèng)]必要的操作 break; } for (i = 0; i < 5; i++) //打印氣泡法排序后的二維字符數(shù)組,以字符串形式 puts(arr[i]); return 0; }
總結(jié)
到此這篇關(guān)于C語(yǔ)言初階之?dāng)?shù)組詳細(xì)介紹的文章就介紹到這了,更多相關(guān)C語(yǔ)言數(shù)組內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
c/c++那些你一定會(huì)出錯(cuò)的數(shù)組筆試題匯總
這篇文章主要給大家匯總介紹了關(guān)于c/c++那些你一定會(huì)出錯(cuò)的數(shù)組筆試題,除了基本數(shù)據(jù)類型之外,其余的都作為類對(duì)象,包括數(shù)組,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-10-10C語(yǔ)言中無(wú)符號(hào)數(shù)和有符號(hào)數(shù)之間的運(yùn)算
C語(yǔ)言中有符號(hào)數(shù)和無(wú)符號(hào)數(shù)進(jìn)行運(yùn)算默認(rèn)會(huì)將有符號(hào)數(shù)看成無(wú)符號(hào)數(shù)進(jìn)行運(yùn)算,其中算術(shù)運(yùn)算默認(rèn)返回?zé)o符號(hào)數(shù),邏輯運(yùn)算當(dāng)然是返回0或1了。下面通過(guò)一個(gè)例子給大家分享C語(yǔ)言中無(wú)符號(hào)數(shù)和有符號(hào)數(shù)之間的運(yùn)算,一起看看吧2017-09-09C++實(shí)現(xiàn)線程同步的四種方式總結(jié)
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)線程同步的四種方式,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C++有一定的幫助,需要的可以參考一下2022-11-11c語(yǔ)言實(shí)現(xiàn)把文件中數(shù)據(jù)讀取并存到數(shù)組中
下面小編就為大家?guī)?lái)一篇c語(yǔ)言實(shí)現(xiàn)把文件中數(shù)據(jù)讀取并存到數(shù)組中。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-12-12C語(yǔ)言操作符進(jìn)階教程(表達(dá)式求值隱式類型轉(zhuǎn)換方法)
這篇文章主要為大家介紹了C語(yǔ)言操作符進(jìn)階教程(表達(dá)式求值隱式類型轉(zhuǎn)換方法)2022-02-02C語(yǔ)言深入淺出講解順序表的實(shí)現(xiàn)
線性表是最簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu),而順序表又是最簡(jiǎn)單的線性表,其基本思想是用一段地址連續(xù)的儲(chǔ)存單元依次存儲(chǔ)線性表的數(shù)據(jù)元素,比如我們常用的一維數(shù)組,下面代碼實(shí)現(xiàn)了順序表的定義以及基本操作2022-04-04