最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言初階之?dāng)?shù)組詳細(xì)介紹

 更新時(shí)間:2021年12月30日 10:51:04   作者:build小春寶  
大家好,本篇文章主要講的是C語言初階之?dāng)?shù)組詳細(xì)介紹,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽

插入排序講解

#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),通俗來說二維數(shù)組就是一維數(shù)組的數(shù)組,二維數(shù)組的每個(gè)元素都是一個(gè)一維數(shù)組

int arr[5][5];
//二維數(shù)組

我們之前在九九乘法表提到的行列思想,在這里可以用上了,第一個(gè)5代表這個(gè)二維數(shù)組有五行,第二個(gè)5代表二維數(shù)組每行有五列,接下來用簡(jiǎn)單的圖畫來解釋

?我們學(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ù)組的訪問

二維數(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ù)組

接下來便是我們今天的主菜,字符數(shù)組

字符數(shù)組和字符串

C語言標(biāo)準(zhǔn)中并沒有字符串類型,這也使得與字符串有關(guān)的操作總是需要字符串函數(shù)來進(jìn)行,字符數(shù)組大多數(shù)情況下就是用來儲(chǔ)存字符串的,但字符數(shù)組有時(shí)候并不能看做字符串。

字符串是以\0為結(jié)束標(biāo)志
char a[5]={'a','b','c','d','e'};
這里的字符數(shù)組a里并沒有\(zhòng)0,強(qiáng)行以字符串形式打印會(huì)出錯(cuò)

?當(dāng)我們沒有對(duì)字符數(shù)組初始化,并且以字符形式輸入的時(shí)候,忽略了\0,也會(huì)出現(xiàn)這種狀況,當(dāng)然大多數(shù)情況下我們還是可以把字符數(shù)組當(dāng)成字符串來用的

字符數(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è)庫函數(shù),接下來使用這兩個(gè)專門用來字符輸入輸出的函數(shù)來進(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;
}

接下來使用puts,gets兩個(gè)庫函數(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ù)我來簡(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ù)

將下來把我們的所學(xué)知識(shí)全部串起來,完成下面的字符串排序

#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)下來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語言初階之?dāng)?shù)組詳細(xì)介紹的文章就介紹到這了,更多相關(guān)C語言數(shù)組內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 關(guān)于C++11的統(tǒng)一初始化語法示例詳解

    關(guān)于C++11的統(tǒng)一初始化語法示例詳解

    C++之前的初始化語法很亂,有四種初始化方式,而且每種之前甚至不能相互轉(zhuǎn)換,但從C++11出現(xiàn)后就好了,所以這篇文章主要給大家介紹了關(guān)于C++11的統(tǒng)一初始化語法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。
    2017-10-10
  • C語言關(guān)鍵字auto與register及static專項(xiàng)詳解

    C語言關(guān)鍵字auto與register及static專項(xiàng)詳解

    這篇文章主要解釋了c語言中什么是數(shù)據(jù)類型,什么是變量,他們的真正含義是什么。分析了屬性關(guān)鍵字auto,register和static的用法
    2022-07-07
  • Qt實(shí)現(xiàn)抽獎(jiǎng)小游戲的三種方式

    Qt實(shí)現(xiàn)抽獎(jiǎng)小游戲的三種方式

    本文主要介紹了Qt實(shí)現(xiàn)抽獎(jiǎng)小游戲的三種方式,主要包括while循環(huán),定時(shí)器,線程這三種方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10
  • 淺析C++模板類型中的原樣轉(zhuǎn)發(fā)和可變參數(shù)的實(shí)現(xiàn)

    淺析C++模板類型中的原樣轉(zhuǎn)發(fā)和可變參數(shù)的實(shí)現(xiàn)

    可變參數(shù)模板(variadic templates)是C++11新增的強(qiáng)大的特性之一,它對(duì)模板參數(shù)進(jìn)行了高度泛化,能表示0到任意個(gè)數(shù)、任意類型的參數(shù),這篇文章主要介紹了C++可變參數(shù)模板的展開方式,需要的朋友可以參考下
    2022-08-08
  • C語言 奇偶排序算法詳解及實(shí)例代碼

    C語言 奇偶排序算法詳解及實(shí)例代碼

    這篇文章主要介紹了C語言 奇偶排序算法詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • C語言中經(jīng)socket接收數(shù)據(jù)的相關(guān)函數(shù)詳解

    C語言中經(jīng)socket接收數(shù)據(jù)的相關(guān)函數(shù)詳解

    這篇文章主要介紹了C語言中經(jīng)socket接收數(shù)據(jù)的相關(guān)函數(shù)詳解,分別為recv()函數(shù)和recvfrom()函數(shù)以及recvmsg()函數(shù)的使用,需要的朋友可以參考下
    2015-09-09
  • 如何用C寫一個(gè)web服務(wù)器之I/O多路復(fù)用

    如何用C寫一個(gè)web服務(wù)器之I/O多路復(fù)用

    本文主要介紹了如何用C寫一個(gè)web服務(wù)器之I/O多路復(fù)用,本次選擇了 I/O 模型的優(yōu)化,因?yàn)樗欠?wù)器的基礎(chǔ),這個(gè)先完成的話,后面的優(yōu)化就可以選擇各個(gè)模塊來進(jìn)行,不必進(jìn)行全局化的改動(dòng)了。
    2021-05-05
  • 圖解C++的STL之stack和queue,輕松理解數(shù)據(jù)結(jié)構(gòu)

    圖解C++的STL之stack和queue,輕松理解數(shù)據(jù)結(jié)構(gòu)

    聚焦?C++?的?STL?中的?stack?和?queue,讓數(shù)據(jù)結(jié)構(gòu)變得簡(jiǎn)單有趣!?通過圖解的方式,我們將輕松理解這兩個(gè)重要的數(shù)據(jù)結(jié)構(gòu),準(zhǔn)備好開啟?STL?學(xué)習(xí)之旅了嗎?讓我們一起探索?stack?和?queue?的奧秘吧!
    2024-03-03
  • C++設(shè)計(jì)模式之享元模式

    C++設(shè)計(jì)模式之享元模式

    這篇文章主要介紹了C++設(shè)計(jì)模式之享元模式,本文講解了什么是享元模式、享元模式代碼實(shí)例、享元模式的優(yōu)點(diǎn)等內(nèi)容,需要的朋友可以參考下
    2014-10-10
  • C語言規(guī)避野指針的方法流程

    C語言規(guī)避野指針的方法流程

    野指針就是指針指向的不是一個(gè)有效(合法)的地址,在程序中,如果訪問野指針,可能會(huì)造成程序的崩潰,這篇文章主要介紹了C語言如何規(guī)避野指針,需要的朋友可以參考下
    2024-03-03

最新評(píng)論

化州市| 平泉县| 新昌县| 微博| 青浦区| 延津县| 临武县| 阆中市| 南江县| 泊头市| 巴南区| 荣成市| 庆安县| 五寨县| 阿合奇县| 澎湖县| 定日县| 穆棱市| 紫阳县| 分宜县| 和林格尔县| 桐柏县| 诸暨市| 当涂县| 陆良县| 浦东新区| 怀化市| 汽车| 通许县| 迭部县| 尚志市| 绥江县| 赫章县| 兴和县| 石首市| 鄄城县| 金阳县| 阿勒泰市| 云林县| 太湖县| 建昌县|