首页 > 代码库 > c语言--数组&排序

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;}

 

//初始化为0int 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.初始化&遍历

//二维数组初始化//初始化方式 1int 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;}//初始化方式 2int 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 10int 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 9int 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;}

 

c语言--数组&排序