tft每日頭條

 > 圖文

 > c語言數組常用方法

c語言數組常用方法

圖文 更新时间:2024-07-23 22:16:20

前面了解了c 語言的基礎部分,下面在對它進行一個深入的了解吧!

c語言數組常用方法(C語言知識幹貨系列)1

數組1,一維數組

數組是用來幹嘛的呢?就像我們之前所說的變量一樣,它是用來存儲數據的。那它和變量存儲數據有什麼不同呢?

顯然一個變量隻能保存一份數據,在程序數據量小的情況下,使用起來比較方便。但是對于大規模的數據,單純的變量就有點單薄了,對付大規模的數據,我們需要更強大的數據類型,将衆多的變量凝聚在一起,也就構成了數組。

簡單的來說,數組就是同一類型數據的集合,下面就是定義的簡單數組并對其進行初始化:

int a[5]={10,20}; //部分初始化 int a[5]={[4]=20,[2]=10} //指定初始化 float c=['A']; int m,g[10]; //若數組和變量的類型一緻,可以放在一起定義

下面通過一個綜合的小案例來加深一下對數組的基本操作。

//要求:由用戶輸入5個整數,保存到數組中,并按逆序打印所有元素。程序如下: #include<stdio.h> int main(){ int i,a[5]; printf("Please enter 5 integers:\n"); for(i=0;i<5; i) scanf("%d",&a[i]); //将i作為下表值,給數組元素賦初值 printf("Print array elements in reverse order:\n"); for(i=4;i>=0;--i) printf("%d",a[i]); //将i作為下标值,打印數組元素值 return 0; }

最後呢,對于數組的操作我們一定要切記不要越界訪問,以免訪問到數組之外的内存區域。

2,數組作為函數參數

C 語言允許将數組作為函數的參數,即可以将數組名作為函數的實參進行傳遞。可以在參數名後面加上中括号的形式,表示該參數是一個數組類型。如下就是一個以數組為參數的函數PArray:

void PArray(int arr[]){ for(int i=0;i<5;i ){ arr[i]*=10; printf("%d ",arr[i]); } }

3,字符數組

C 語言中,幾乎所有的數據類型都可以被定義為數組。由于數組可以用來存儲字符串,因此字符數組在C 語言中的運用極為廣泛。

雖然C 語言中沒有字符串這種數據類型,但它的運用卻極為普遍,比如我們入手的第一個程序"hello world"。注意到,它是用雙引号括起來的一段字符序列。另外,字符串還有一個重要的特征:字符串必須以空字符(用轉義字符'\0'表示)作為結尾。即使是字符串常量,也會隐含地擁有這個空字符。例如:

"abc" //這個字符串是由4個字符構成的,即字符a、b、c以及空字符,它的大小為4個字節

那我們是否會想,如何才能将"abc" 這個字符串存儲到數組中呢?

//方法1:字符式存儲 char str[4]={'a','b','c','\0'}; //全部初始化方式 char str[4]={'a','b','c'}; //鑒于空字符的ASCII碼值為0,也可采用部分初始化的方式 //方法2:字符串式存儲 char str[4]="abc"; //在實際編程中為了避免數組的長度不夠這樣的問題,我們通常建議采用下面這種方式進行賦值: char str[]="abc";

在看了上述方法2之後,可能我們就在想如何才能得到一個字符串的長度是嗎?

對于字符串,它除了有大小之外,還有長度的概念。我們這裡就簡單的區分一下:

字符串的大小指的是字符串所占内存的字節數,使用sizeof()庫函數計算得出,而字符串長度則是指字符串中有效字符的個數,用strlen()庫函數計算得出。所謂有效字符,就是除去作為結尾标記的空字符以外的字符。

4,二維數組

啊,五環,你比六環少一環~,顧名思義,二維數組就是在一維數組的基礎上多了一維,簡單的說就是多了一個"[ ]"。

至于對二維數組的初始化,與一維數組的初始化類似,下面就提一下行初始化方式:

float score[3][3]={ {88.5,86.5,96}, //第1行 {88.5,86.5,96}, //第2行 {88.5,86.5,96}, //第3行 }

前面說過一維數組可以作為函數參數,那類比一下,二維數組肯定也可以作為參數來進行函數調用。與一維數組作為函數參數時需要在參數名跟上一對中括号類似,二維數組需要兩對中括号,其中第一對中括号用于表示第一維的大小,其值可以被省略,即使用空中括号形式;第二對中括号用于表示第二維的大小,其值不可被省略,即必須指明第二維的大小。下面是一個打印二維數組所有元素的函數例子:

void printScore(float s[][4],int len){ for(int i=0;i<len;i ){ for(int j=0;j<4;j ) printf("%6.2f",s[i][j]); //以6字符寬度、保留2位小數的格式打印 printf("\n"); //打印一行元素後進行換行 } }

最後,我們可以用這樣的思想來理解一下C 語言中的數組:

由普通元素(變量)構成的數組,是一維數組,即一維數組是普通元素(變量)的數組。

由一維數組構成的數組,是二維數組,即二維數組是一維數組的數組。

由二維數組構成的數組,是三維數組,即三維數組是二維數組的數組。

.......

理解了數組的嵌套,再去理解指針與數組的關系,就會比較輕松了 ~ ~

實踐中回顧(總結)

理解并掌握數組,會為後面的知識擴展打下堅實的基礎。而真正掌握數組不能光靠理論知識,而是要更多的去實踐,比較經典的題目有矩陣轉置和冒泡排序,下面就用一個經典的冒泡排序算法的實現來對數組的知識進行回顧。

編寫程序,在數組中保存1~100的10個随機整數,對數組進行升序排序,并将排序後的數組元素打印輸出,代碼如下:

#include <stdio.h> #include <stdlib.h> #include <time.h> //冒泡排序 void bubble(int a[], int len) { int i, j, tmp; //1外層循環會執行 len - 1 次,表示共進行 len - 1 輪的比較過程 for (i = 0; i < len - 1; i) { /*内層循環用于完成每一輪的比較過程。 它會從待排序序列中的第一個元素開始,逐個和後面的元素進行比較。另外, 随着外層循環中i 值的不斷自增,表達式“len - 1-i”會使内層循環的 執行次數逐漸減少,這相當于把每輪完成後的最大值元素從待排序序列中排除*/ for (j = 0; j < len - 1 - i; j) { if (a[j]> a[j 1]) //檢查前一個元素是否比後一個元素大 //如果是,就進行兩個元素的值的互換 { tmp = a[j]; //将前一元素值賦給 tmp a[j] = a[j 1];//将後一個元素值賦給前一個元素 a[j 1] = tmp;// 将 tmp 值賦給後一個元素 } } } } int main() { int i, arr[10]; //設置随機數種子 srand(time(NULL)); //通過循環獲取 10 個随機數,并将其保存到數組arr中 for (i = 0; i < 10; i) arr[i] = rand() % 100 1; //調用 bubble 函數進行冒泡排序,參數 1 為數組 arr,參數 2 為數組arr 的長度 bubble(arr, 10); //打印輸出排序後數組中的各元素值 for (i = 0; i < 10; i) printf("%d ", arr[i]); return 0; }

好了,經過上面的回顧,大家是否對C 語言中的數組有了一個更深的印象了呢?

持續分享中······

作者:博客園丨Charmchin

寫在最後:對于準備學習C/C 編程的小夥伴,如果你想更好的提升你的編程核心能力(内功)不妨從現在開始!

編程學習書籍分享:

c語言數組常用方法(C語言知識幹貨系列)2

編程學習視頻分享:

c語言數組常用方法(C語言知識幹貨系列)3

整理分享(多年學習的源碼、項目實戰視頻、項目筆記,基礎入門教程)

歡迎轉行和學習編程的夥伴,利用更多的資料學習成長比自己琢磨更快哦!

對于C/C 感興趣可以關注小編在後台私信我:【編程交流】一起來學習哦!可以領取一些C/C 的項目學習視頻資料哦!已經設置好了關鍵詞自動回複,自動領取就好了!

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关圖文资讯推荐

热门圖文资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved