c語言--數組&排序

1.數組

數組定義形式: int score[100];

數組下標: 從0開始,score[0],score[1]...score[99];

a[n], a[0].....a[n-1]

 數據類型 標示符[常量表達式]

 1. 數組中的每個元素的類型相同

 2. 數組的長度必須爲常量(長度指的是數組元素個數)

 3. 數組名必須符合標示符定義

 4. 數組下標從0開始

 5. 數組名是一個地址常量,不是變量

 6. 數組中的每個元素是變量

 

數組在內存中佔用的大小 = 數據類型長度 * 數組元素個數

數組訪問不能越界操作!

1.1數組初始化

//完全初始化
//
int main(int argc, const char *argv[])
{
    int a[5]={1,2,3,4,5};
    for (int i=0; i<5; i++) {
        printf("a[%d]==%d\n", i, a[i]);
    }
    
    return 0;
}

 

//不完全初始化
int main(int argc, const char *argv[])
{
    int a[5]={3,6};
    for (int i=0; i< 5; i++) {
        printf("a[%d]==%d\n",i, a[i]);
    }
    return 0;
}

 

//初始化爲0
int main(int argc, const char *argv[])
{
    //int a[5]={};
    int a[5]={0};
    for (int i=0; i<5; i++) {
        printf("a[%d]==%d\n", i,a[i]);
    }
    return 0;
}

 

1.2數組簡單操作

//數組遍歷
int main(int argc, const char * argv[])
{
    int a[10];
    int i;
    for (i=0; i<10; i++) {
        a[i]=i;
    }
    for (i=0; i<10; i++) {
        printf("a[%d]==%d\n", i,a[i]);
    }
    return 0;
}

 

// 倒序操作數組

int main(int argc, const char *argv[])
{
    int a[5];
    for (int i = 4; i >=0; i--) {
        scanf("%d",&a[i]);
    }
    for (int i=0; i<5; i++) {
        printf("a[%d]==%d\n", i, a[i]);
    }
    return 0;
}

 

eg.求學生的平均成績

int main(int argc, const char *argv[])
{
    int total=0;
    float average;
    int a[10];
    for (int i=0; i<10; i++) {
        scanf("%d",&a[i]);
        total+=a[i];
    }
    average = (float)(total/10);
    printf("average == %.2f\n", average);
    
    return 0;
}

 

eg.輸入10個數據, 查找該數據中的最大數,並將其輸出到屏幕上

int main(int argc, const char *argv[])
{
    int a[10];
    int max;
   //輸入數組
    for (int i=0; i<10; i++) {
        scanf("%d", &a[i]);
    }
    max = a[0];
   //循環比較大小
    for (int i=1; i<10; i++) {
        if (a[i]>max) {
            max = a[i];
        }
    }
    printf("The max value is : %d \n", max);
    return 0;
}

 eg.字符數組

//字符數組
// char str[100];
// 每個元素佔用1個字節的空間
//

int main(int argc, const char *argv[])
{
    // 1
    char str[100];
    scanf("%s",str);
    printf("%s\n", str);
    
    // 2
   char str[5]={'a','b','c','d','e'};
    for (int i=0 ; i<5; i++) {
        printf("%c",str[i]);
    }
    putchar('\n'); 

    return 0;
}

 eg.字符數組操作

//字符串
int main(int argc, const char *argv[])
{
    char str[100]="qianfengjiaoyu";
    printf("%s\n", str);
}

/*int main(int argc, const char *argv[])
{
    char str[12]="hello world!";
    //str[12]='\0';
    //printf("%s",str);
    for (int i=0; i<12; i++) {
        printf("%c",str[i]);
    }
    return 0;
}*/

 2.二維數組

eg.初始化&遍歷

//二維數組初始化
//初始化方式 1
int main(int argc, const char *argv[])
{
    int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
    int i, j;
   //遍歷數組
    for (i=0; i<3; i++) {
        for (j=0; j<4; j++) {
            printf("%d ", a[i][j]);
        }
    }
    return  0;
}
//初始化方式 2
int main(int argc,const char *argv[])
{
    int a[3][4]={{1,2,3,4},
                 {5,6,7,8},
                 {9,10,11,12}};
    for (int i=0; i<3; i++) {
        for (int j=0; j<4; j++) {
            printf("%d ",a[i][j]);
        }
        printf("\n");
    }
    printf("\n");
    return 0;
}

 eg.打印楊輝三角(二維數組)

//1
//1 1
//1 2 1
//1 3 3 1
//1 4 6 4 1
//....
/*
    2=1+1
    3=1+2
    3=2+1
    4=1+3
    6=3+3
    4=3+1
    ....
*/

int main(int argc,const char *argv[])
{
    int a[10][10];
    int i, j;
    for (i=0; i<10; i++) {
        //內層循環打印具體每一個數字
        for (j=0; j<=i; j++) {
            //初始化三角圖形左右兩邊 1
            if (j==0 || i==j) {
                a[i][j]=1;
            }
            else
            {
                a[i][j]=a[i-1][j-1]+a[i-1][j];
            }
            printf("%d  ",a[i][j]);
        }
        printf("\n");
    }
    return 0;
}

 

3.數組應用(排序算法)

 

3.1冒泡排序

//冒泡排序: 相鄰兩數比較,大數往後移動,小數往前移動;
//4 5 7 8 9

//  9 7 8 5 4
//第一次排序,交換4次
//  7 9 8 5 4
//  7 8 9 5 4
//  7 8 5 9 4
//  7 8 5 4 9

//第二次排序,交換3次
//  7 8 5 4
//  7 5 8 4
//  7 5 4 8 9

//第三次排序,交換2次
//  5 7 4 8 9
//  5 4 7 8 9

//第四次排序
//  4 5 7 8 9

#define LEN 10

int main(int argc, const char * argv[])
{
    int a[LEN];
    int i, j;
    int temp;
   //遍歷輸入
    for (i=0; i<LEN; i++) {
        scanf("%d",&a[i]);
    }
    for (i = 0; i<LEN-1; i++) {
        for (j=0; j<LEN-1-i; j++) {
            //交換位置
            if (a[j]>a[j+1]) {
                temp = a[j];
                a[j] = a[j+1];
                a[j+1]=temp;
            }
        }
    }
    //遍歷輸出
    for (i=0; i<LEN; i++) {
        printf("%d ",a[i]);
    }
    putchar('\n');
    
    return 0;
}

 3.2選擇排序

//選擇排序

//9 7 8 5 4
//
//第一次排序
//4 7 8 5 9

//第二次排序
//4 5 8 7 9

//第三次排序
//4 5 7 8 9

//第四次排序
//4 5 7 8 9

int main(int argc, const char *argv[])
{
    //int a[5]={9, 7, 8, 5, 4};
    int a[LEN];
    int i,j;
    int k,temp;
    for (i=0; i<LEN; i++) {
        scanf("%d", &a[i]);
    }
    for (i=0; i<LEN-1; i++) {
        k=i;
        for (j=i+1; j<LEN; j++) {
            if (a[k]>a[j]) {
                k=j;
            }
        }
        if (k!=i) {
            temp = a[k];
            a[k] = a[i];
            a[i] = temp;
        }
    }
    for (i = 0; i<LEN; i++) {
        printf("%d ",a[i]);
    }
    putchar('\n');
    return 0;
}

 

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