C語言學習筆記(八)--數組

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() { 
   float score[10];
   int i;
   printf("please input scores:\n");
   for (i=0;i<10;i++)               /*數組下標爲0~9*/
      scanf("%f",&score[i]);       /*依次輸入每個數組元素*/
   printf("\n");
   for(i=0;i<10;i++)
   printf("the %d score %f\n",i+1,score[i]);
}

一般需要一次訪問數組元素時,往往使用循環來實現,在循環時應特別注意數組的下標和循環的次數等問題,防止出現下標越界的錯誤。

3.3一維數組的初始化:數組類型 數組名[數組長度]={數組元素值};

例如下面的語句:
int a[3]={1,2,3};

注意:

1.定義是可以給數組全部元素賦初值,例如:

float f[3]={1,2,3};

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

float f[3]={1,2};

這樣的話,程序自動從低到高給數組元素賦值,其餘的元素值爲0.

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

int a[] = {1,2,3};

4.特別注意的是,數組初始化的賦值方式只能用於數組在定義的同時賦值,在定義之後只能一個一個的賦值,例如下面就是錯誤的:
int a[4];

a={1,2,3,4}

例子代碼:

#include "stdio.h"
main() {
  int i;
  int a[10]={1,2,3,4,5,6,7,8,9,10};              /*全部初始化*/
  int b[]={1,2,3,4,5,6,7,8,9,10};                /*全部初始化時,可省略元素的個數*/
  int c[10]={1,2,3,4,5};            /*部分初始化,其餘元素的個數爲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() { 
float score[N];
int count[4]={0,0,0,0};
int i;
float rate1,rate2;
for(i=0;i<N;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<N;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( ){
    int  i , j , a[M][N] ;
    for(i=0 ;  i<M ;  i++)                  /*外循環控制行*/
       for(j=0 ;  j<N;  j++)               /*內循環控制列*/
         scanf("%d" , &a[i][j]);
   printf("array a is :\n");
   for(i=0 ;  i<M ;  i++){
       for(j=0 ;  j<N ;  j++)
         printf("%d ",  a[i][j]) ;
    printf("\n");  
       }
}

4.3二維數組的初始化

1.可以將所有數據寫在一個大括號內,以逗號分隔,按數組元素在內存中的順序對二維數組賦值:

int a[2][3]={1,2,3,4,5,6}

2.也可以對數組的每個元素賦值,將二維數組的每一行寫在一個花括號內:int a[2][3]={{1,2,3},{4,5,6}};

3.也可以對數組部分賦值:int a[2][3]={1,2,3,4};相當於:

int[2][3]={{1,2,3},{4}};

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

二維數組初始化例子代碼:

#include "stdio.h"
main() {
  int a[][3]={1,2,3,4,5,6};     /*全部初始化的時候可以省略第一維*/
  int b[2][3]={{1,2,3},{4,5,6}};   /*不可寫成 int b[2][3]={{1,2,3}{4,5,6}};的形式*/
  int c[3][3]={{1},{2},{3}};
  int d[3][3]={{2},{0},{4}};  /*第二行的元素空時不可省略{}和{}內的0*/
  int e[3][3]={{0,1},{0,0,3},{4}};   /*對一列中的其他值賦值時,不可省略前面的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.判斷迴文。

發佈了61 篇原創文章 · 獲贊 109 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章