程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言學習筆記(八)--數組

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

編輯:關於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;

 

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

 

數組分配內存空間是連續的空間,地址從低地址到高地址。

 

例子代碼:

 

 

<span style="font-size:18px;">#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]); 

}</span> 

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

 

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}

 

例子代碼:

 

 

<span style="font-size:18px;">#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"); 

}</span> 

3.4一維數組的使用實例

 

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

 

代碼:

 

<span style="font-size:18px;">#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]); 

}</span> 

思考練習:

 

處理20個斐波那契數列;

 

求數組的最大值;

 

冒泡排序;

 

選擇排序;

 

二分查找:

 

4二維數組

 

4.1二維數組的定義:

 

數據類型 數組名[常量表達式1][常量表達式2];

 

例如:int [30][4];

 

4.2二維數組的引用:

 

數組名[行下標][列下標];

 

二維數組的輸入輸出例子代碼:

 

 

<span style="font-size:18px;">#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");   

       } 

}</span> 

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.和一維數組一樣,如果對數組的全部元素賦值,可以不指定第一維的長度,但是第二維必須指定長度。

 

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

 

 

<span style="font-size:18px;">#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"); 

  } 

}</span> 

4.4二維數組練習

 

1.將一個二維數組的元素按照矩陣形式輸出。

 

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

 

5數組整體練習

 

1.判斷回文。

 

摘自 letthinking的專欄

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved