C語言學習筆記(八)

2021-12-30 00:39:14 字數 4147 閱讀 2142

1陣列

在程式設計過程中我們往往需要處理一批相同型別的資料,如果使用基本型別定義變數來儲存,顯然是不方便的,這是我們就需要使用陣列了。

2陣列特點

1.陣列大小必須是確定的,不能隨機改變的。

2.陣列的元素必須是相同型別的,不允許出現混合型別。

3一維陣列

3.1一維陣列的定義:

型別說明符 陣列名[常量表示式];

例如:int a[10]

陣列的生命需要注意以下幾個問題:

1.陣列的命名規則與變數相同;

2.常量表示式代表的是陣列元素的個數,也就是陣列的長度;

3.陣列的下標是從0開始的,最後乙個元素的下標是陣列長度減1;

4.陣列的定義可以和普通變數一起宣告和定義

float i,j;

3.2一維陣列的引用:陣列名[下標表示式];

例如:int a[5]; a[3]=10;

其中下標表示式可以是任意型別的表示式,但值必須是非負整型的。

陣列分配記憶體空間是連續的空間,位址從低位址到高位址。

例子**:

#include "stdio.h" 

main() ;

例如下面的語句:

int a[3]=;

注意:1.定義是可以給陣列全部元素賦初值,例如:

float f[3]=;

2.也可以只給一部分賦值:

float f[3]=;

這樣的話,程式自動從低到高給陣列元素賦值,其餘的元素值為0.

3.在對陣列的全部元素賦值時,可以不指定陣列的長度,但不能省略:

int a = ;

4.特別注意的是,陣列初始化的賦值方式只能用於陣列在定義的同時賦值,在定義之後只能乙個乙個的賦值,例如下面就是錯誤的:

int a[4];

a= 例子**:

#include "stdio.h" 

main() ;              /*全部初始化*/ 

int b=;                /*全部初始化時,可省略元素的個數*/ 

int c[10]=;            /*部分初始化,其餘元素的個數為0,陣列的長度不可以省略*/ 

int d[10];                    /*沒有賦初值,則陣列元素的值不定,同樣的陣列的長度不可省略*/ 

for (i=0;i<10;i++) 

printf("%d  ",a[i]); 

printf("\n"); 

for (i=0;i<10;i++) 

printf("%d  ",b[i]); 

printf("\n"); 

for (i=0;i<10;i++) 

printf("%d  ",c[i]); 

printf("\n"); 

for (i=0;i<10;i++) 

printf("%d  ",d[i]); 

printf("\n"); 

3.4一維陣列的使用例項

儲存30個學生的成績,檢視各分數段人數,計算出優秀率和及格率,同時輸出所有學生的成績,並對不及格的做出標記。

**:#define  n  30 

#include "stdio.h" 

main() ; 

int i; 

float rate1,rate2; 

for(i=0;i

scanf("%f",&score[i]); 

if (score[i]>=85 &&score[i]<=100)  

count[0]++; 

else if (score[i]>=70) 

count[1]++; 

else if (score[i]>=60) 

count[2]++; 

else 

count[3]++; 

rate1=(float)count[0]/n;    /*計算優秀率和及格率,注意強制型別轉換*/ 

rate2=(float)(n-count[3])/n; 

printf("the number 85-100 %d\n",count[0]);  /*輸出個分數段的人數*/ 

printf("the number 70-84 %d\n",count[1]); 

printf("the number over 60 %d\n",count[2]); 

printf("the number under 60 %d\n",count[3]); 

printf("the good rate %.2f,the fail rate %.2f\n",rate1,rate2);  /*輸出優秀率和及格率*/ 

for (i=0;i

if (score[i]<60)    

printf(" %d  fail,socre is %.1f\n",i+1,score[i]);  /*學號和相應的成績下標之間差1*/ 

else  

printf("%d score is %.1f\n",i+1,score[i]); 

思考練習:

處理20個斐波那契數列;

求陣列的最大值;

氣泡排序;

選擇排序;

二分查詢:

4二維陣列

4.1二維陣列的定義:

資料型別 陣列名[常量表示式1][常量表示式2];

例如:int [30][4];

4.2二維陣列的引用:

陣列名[行下標][列下標];

二維陣列的輸入輸出例子**:

#include "stdio.h" 

#define m  3 

#define n 4 

main( )

2.也可以對陣列的每個元素賦值,將二維陣列的每一行寫在乙個花括號內:int a[2][3]=,};

3.也可以對陣列部分賦值:int a[2][3]=;相當於:

int[2][3]=,};

4.和一維陣列一樣,如果對陣列的全部元素賦值,可以不指定第一維的長度,但是第二維必須指定長度。

二維陣列初始化例子**:

#include "stdio.h" 

main() ;     /*全部初始化的時候可以省略第一維*/ 

int b[2][3]=,};   /*不可寫成int b[2][3]=};的形式*/ 

int c[3][3]=,,}; 

int d[3][3]=,,};  /*第二行的元素空時不可省略{}和{}內的0*/ 

int e[3][3]=,,};   /*對一列中的其他值賦值時,不可省略前面的0*/ 

int i,j; 

printf("output array  a:\n");  /*分行輸出各個陣列的值*/ 

for (i=0;i<2;i++){ 

for (j=0;j<3;j++) 

printf("%d  ",a[i][j]); 

printf("\n"); 

printf("output array  b:\n"); 

for (i=0;i<2;i++){ 

for (j=0;j<3;j++) 

printf("%d  ",b[i][j]); 

printf("\n"); 

printf("output array  c:\n"); 

for (i=0;i<3;i++){ 

for (j=0;j<3;j++) 

printf("%d  ",c[i][j]); 

printf("\n"); 

printf("output array  d:\n"); 

for (i=0;i<3;i++){ 

for (j=0;j<3;j++) 

printf("%d  ",d[i][j]); 

printf("\n"); 

printf("output array  e:\n"); 

for (i=0;i<3;i++){ 

for (j=0;j<3;j++) 

printf("%d  ",e[i][j]); 

printf("\n"); 

4.4二維陣列練習

1.將乙個二維陣列的元素按照矩陣形式輸出。

2.矩陣轉換,行列互換。

5陣列整體練習

1.判斷回文。

摘自 letthinking的專欄

c語言學習筆記八

資料結構的概念 學這東西感覺一下又回到了十年前 資料結構 data structure 資料的組織方式 演算法 資料結構 程式 堆疊 後進先出 示例 include char stack 512 int top 0 void push char c char pull int is empty vo...

c語言學習筆記八

資料結構的概念 學這東西感覺一下又回到了十年前 資料結構 data structure 資料的組織方式 演算法 資料結構 程式 堆疊 後進先出 示例 include char stack 512 int top 0 void push char c char pull int is empty vo...

c語言學習筆記八

資料結構的概念 學這東西感覺一下又回到了十年前 資料結構 data structure 資料的組織方式 演算法 資料結構 程式 堆疊 後進先出 示例 include char stack 512 int top 0 void push char c char pull int is empty vo...