天天看點

C語言-數組

1. 數組介紹

C語言的數組是一個同類型資料的集合,主要用來存儲一堆同類型的資料。

程式裡怎麼區分是數組?

[ ]

這個括号是數組專用的符号. 定義數組、 通路數組資料都會用到。

數組的定義文法:

int data[10];  <資料類型> <資料名稱>[常量-整數-資料數量];

定義一個int類型的數組,數組的名稱是data,長度是10,所占空間大小:4*10 位元組。           

特點:

1.    通路數組成員的時候:下标是從0開始的。int data[10];  下标 (0~9)
2.    數組隻是支援在定義的時候進行整體指派。
3.    數組定義的時候,[]裡隻能填常量。數組在定義之後就無法更改大小。
4.    數組的空間是連續的—記憶體。
5.    數組的名稱就是數組空間的首位址。
6.    數組初始化時,如果沒有指派,那麼數組空間裡的資料是未知的---局部變量。
7.    數組初始化時,隻要給一個空間指派,剩餘空間都自動初始化為0---局部變量。           

數組練習1: 定義一個數組、列印出數組裡的資料

#include <stdio.h>
int main()
{
    char i;
    int data[10]={12,13,14,15}; //下标
    int a[5];
    for(i=0;i<10;i++) //0~9
    {
        printf("data[%d]=%d\n",i,data[i]);
    }
    for(i=0;i<5;i++) //0~4
    {
        printf("a[%d]=%d\n",i,a[i]);
    }
    return 0;
}           

數組練習2: 從鍵盤上讀取5個資料存放到數組裡,在順序列印、逆序列印

#include <stdio.h>
int main()
{
    int i;
    int data[5]={0}; //下标
    //從鍵盤上讀取5個資料存放到數組裡
    printf("請輸入5個資料:");
    for(i=0;i<5;i++)
    {
        scanf("%d",&data[i]); //兩種: 空格 、 回車-換行
    }
    
    for(i=0;i<5;i++)
    {
        printf("data[%d]=%d\n",i,data[i]);
    }
    
    for(i=4;i>=0;i--)
    {
        printf("data[%d]=%d\n",i,data[i]);
    }
    return 0;
}           

2. 數組定義文法與注意事項

1. 數組的名稱是數組元素的首位址。(數組的名字就是位址)
2. 數組隻能在初始化的時候進行整體指派。比如:  int a[100]={10,20,30};
3. 數組的下标通路是從0開始的。比如: int a[10];  下标範圍: a[0] ~ a[9] 
4. 數組名稱雖然是位址,但是這個位址是不能偏移、也不能自增自減,也不能改變指向。
   int a[10];   
   int b[10];
   a++、a--;  //錯誤的
   a=b;      //錯誤的
   a[0]=b[0]; // 正确
5. 如果數組是局部變量,初始化沒有指派的情況下,成員是随機值。
   比如: int a[10];  printf("%d\n",a[0]);
   初始化的時給數組進行指派,那麼沒有指派的下标是什麼值?
   比如:  int a[10]={1,2,3}; printf("%d\n",a[6]); //0
6. 數組定義的時候(C89), 數組的下标裡的大小隻能填常量。 
    比如: 
    int a[]; //錯誤的,定義數組必須填大小
    int size=10; int a[size]; //錯誤的,定義數組隻能填常量。
    int b[100]; //正确
    #define SIZE 100  int a[SIZE]; //正确           

3. 案例: 計算平均值

要求: 定義數組,從鍵盤上錄入5個浮點類型資料存放到數組,計算平均值和最大、最小值,輸出到螢幕上。

#include <stdio.h>
int main()
{
    int i;
    float sum=0;
    float data[5];
    float max=0;
    float min=100;
    printf("請輸入5個資料:");
    /*1. 輸入資料*/
    for(i=0;i<5;i++)
    {
        scanf("%f",&data[i]);
    }
    /*2. 處理資料*/
    for(i=0;i<5;i++)
    {
        sum+=data[i]; //累加
        if(data[i]>max)max=data[i];
        if(data[i]<min)min=data[i];
    }
    printf("平均值:%.1f\n",sum/5.0);
    printf("最大值:%.1f\n",max);
    printf("最小值:%.1f\n",min);
    return 0;
}           

4. 案例:求和

要求: 定義數組,從鍵盤上錄入5個整數資料,求和,輸出結果。

#include <stdio.h>
int main()
{
    int i;
    int sum=0;
    int data[5];
    printf("請輸入5個資料:");
    /*1. 輸入資料*/
    for(i=0;i<5;i++)
    {
        scanf("%d",&data[i]);
    }
    /*2. 處理資料*/
    for(i=0;i<5;i++)
    {
        sum+=data[i]; //累加
    }
    printf("和:%d\n",sum);
    return 0;
}           

5. 案例: 判斷資料範圍

要求: 定義數組,從鍵盤上錄入10個整數資料,計算裡面大于5、大于10資料的數量,輸出結果。

#include <stdio.h>
int main()
{
    int i;
    int data[10];
    int cnt_10=0,cnt_5=0;
    printf("請輸入10個資料:");
    for(i=0;i<10;i++)
    {
        scanf("%d",&data[i]);
    }
    //處理資料
    for(i=0;i<10;i++)
    {
        if(data[i]>5)cnt_5++;
        if(data[i]>10)cnt_10++;
    }
    printf("cnt_5=%d\n",cnt_5);
    printf("cnt_10=%d\n",cnt_10);
    return 0;
}           

6. 案例: 冒泡排序-整數數組

從鍵盤上錄入10個資料,進行冒泡排序. 大到小排序。

#include<stdio.h>
int main()
{
    //從鍵盤上錄入5個資料,進行冒泡排序.  大到小排序。
    int a[5];
    int i,j;
    int tmp;
    printf("錄入5個資料:");
    for(i=0;i<5;i++)
    {
        scanf("%d",&a[i]);
    }
    
    for(i=0;i<sizeof(a)/sizeof(a[0])-1;i++) //排序次數
    {
        for(j=0;j<sizeof(a)/sizeof(a[0])-1-i;j++)  //排序的過程
        {
            if(a[j]>a[j+1])
            {
                tmp=a[j];
                a[j]=a[j+1];
                a[j+1]=tmp;
            }   
        }
    }

    for(i=0;i<sizeof(a)/sizeof(a[0]);i++)
    {
        printf("%d ",a[i]);
    }
    printf("\n");
    return 0;
}           

7. 字元串數組

7.1 字元串特點

1. 字元串本身就是字元數組。比如:char a[10]="123";
2. 正常字元串使用雙引号括起來的。 比如:char a[10]="123";
3. 字元串以'\0' 作為結束符号。
4. 字元數組一定是字元串? 不一定。 比如: char a[]={12,3,4,5,5};
           

7.2 字元串定義

#include<stdio.h>
int main()
{
    char buff1[10]={'1','2','3','\0','4','5','6','\0','7'};
    
    char buff2[]={'1','2','3','\0'};
    char buff3[]="123";

    printf("%d\n",sizeof(buff2)); //4
    printf("%d\n",sizeof(buff3)); //4
    return 0;
}           

7.3 計算字元串長度

#include <stdio.h>
#include <string.h>

int main()
{
    char buff[100];
    int cnt=0;
    printf("請鍵盤上錄入字元串:");
    scanf("%s",buff); // 不可以錄入空格

    while(buff[cnt]!='\0')
    {
        cnt++;
    }
    printf("cnt=%d\n",cnt);
    return 0;
}           

繼續閱讀