c语言六 数组

数组

当我们需要遇到类似:统计某公司100个员工的平均工资时,如果用变量来存储这些数据(int a,

b,c,d......),虽然这非常麻烦,且易错。这时用数组x[0],x[1],x[2],x[3]......就简单多了。

在程序设计中,使用x[0]、x[1]、x[2]……x[n]表示的一组具有相同数据类型的变量集合称为数组x,数组中的每一项称为数组的元素,每个元素都有对应的下标(n),用于表示元素在数组中的位置序号,该下标是从0开始的(这是超级重点)。

数组可分为一维数组,二维数组,三维数组,四维数组。(二维及以上称为多维数组)

定义方式

(引用/对数组中的元素开辟了一块内存空间)

int array[5];
//类型说明符 数组名 [常量表达式];
//类型说明符表示数组中所有元素的类型,常量表达式指的是数组的长度,也就是数组中存放元素的个数。
//记住,数组用的是整数

数组初始化

(赋值)

//1直接对数组中的所有元素赋值
int array_1[5]={1,2,3,4,5};
/*
	定义了5个元素,分别为且值为:array_1[0]=1;   array_1[1]=2;   array_1[2]=3;
								array_1[3]=4;   array_1[4]=5;
	没有array_1[5],原因是起点是0,而且如果有那不像是变量吗?还像数组吗?
*/



//2只对数组中一部分的元素进行赋值
int array_2[5]={1,2,3};
/*
	在上述代码中,定义了一个int类型的数组,但在初始化时,只对数组中的
	前三个元素进行了赋值,其它元素的	值会被默认设置为0。
*/

//3对数组全部元素赋值,但不指定长度
int array_3[]={1,2,3,4,5};
/*
	在上述代码中,数组i中的元素有4个,系统会根据给定初始化元素
	的个数定义数组的长度,因此,数组i的长度为4。
*/

注意:

1、数组的下标是用方括号括起来的,而不是圆括号。

2、数组名的命名同变量名的命名规则相同。

3、数组定义中,常量表达式的值可以是符号常量,例如下面的定义是合法的。

int a[N]; //假设预编译命令#define N 4, 下标是符号常量 

统计公司5名成员的总工资和平均工资,

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int people[5]={1,2,3,4,5};
    int i,sum=0;					//这个for循环配合sum+=是个小精髓来着
    for(i=0;i<5;i++)				//要记!!!!
    {
        sum+=people[i];
    }
    printf("总工资: %d\n平均工资: %d\n",sum,sum/5);
    system("pause");
}

输出公司5名员工的工资情况

#include <stdio.h>
#include <stdlib.h>
int main ()
{
    int people[5]={2,3,4,5,6};
    int i;
    for(i=0;i<5;i++)
    {
        printf("people[%d]的工资为:  %d\n",i+1,people[i]);
    }
    system("pause");
}

公司工资最高是多少?

#include <stdio.h>
#include <stdlib.h>
int main ()
{
    int people[5]={3,4,5,6,7};
    int i,max=0;
    for(i=0;i<5;i++)
    {
        if(people[i]>max)
        {
            max=people[i];
        }
    }
    printf("%d\n",max);
    system("pause");
}

排列公司员工工资,由小到大

原理:冒泡排序

在冒泡排序的过程中,不断地比较数组中相邻的两个元素,较小者向上浮,较大者往下沉,整个过程和水中气泡上升的原理相似,接下来,分步骤讲解冒泡排序的整个过程,具体如下:

第一步,从第一个元素开始,将相邻的两个元素依次进行比较,直到最后两个元素完成比较。如果前一个元素比后一个元素大,则交换它们的位置。整个过程完成后,数组中最后一个元素自然就是最大值,这样也就完成了第一轮的比较。

第二步,除了最后一个元素,将剩余的元素继续进行两两比较,过程与第一步相似,这样就可以将数组中第二大的数放在倒数第二个位置。

第三步,依次类推,持续对越来越少的元素重复上面的步骤,直到没有任何一对元素需要比较为止。

#include <stdio.h>
#include <stdlib.h>
int main ()
{
    int x[5]={5,78,13,54,56};
    int i,j,a=0,b;
    
    
    printf("排序前:   ");
    for(b=0;b<5;b++)
    {
        printf("%d\t",x[b]);
    }
    printf("\n");
    
    
    for(i=0;i<5-1;i++)				//5个元素,冒泡排序每轮一次比较得一个"最大数"
    {								//剩下最后一个没法比较,也不需要比较
        for(j=0;j<5-1-i;j++)		//所以第一个for循环表示轮数
        {							//而里面的for循环表示没一轮进行比较的次数
            if(x[j]>x[j+1])
            {						//第1轮 对应4次比较
                a=x[j];				//第2轮 对应3次比较
                x[j]=x[j+1];		//第3轮 对应2次比较
                x[j+1]=a;           //第4轮 对应1次比较  
            }						//看到细节没有恰好相反,好好记吧,年轻人
        }
    }
    
    
    printf("排序后:   ");
    for(b=0;b<5;b++)
    {
        printf("%d\t",x[b]);
    }
    printf("\n");
    system("pause");
}

二维数组

二维数组的引用/定义方式

//类型说明符 数组名 [常量表达式1][常量表达式2];
int a[3][4];       //3行4列  共12个元素

二维数组的初始化/赋值方式

int a[2][3]={{1,2,3},{4,5,6}};
/*
	1、按行给二维数组赋初值。在上述代码中,等号后面有一对大括号,大括号中
	的第一对括号代表的是第一行的数组元素,第二对括号代表的是第二行的数组元素。
*/


int a[2][3] = {1,2,3,4,5,6};
/*
	2、将所有的数组元素按行顺序写在一个大括号内。在上述代码中,二维数组a
	共有两行,每行有三个元素,其中,第一行的元素依次为1、2、3,第二行元素依次为4、5、6。
*/


int b[3][4] = {{1},{4,3},{2,1,2}};
/*
	3、对部分数组元素赋初值。在上述代码中,只为数组b中的部分元素进行了赋
	值,对于没有赋值的元素,系统会自动赋值为0
	b[3][4]={{1,0,0,0},
			 {4,3,0,0},
			 {2,1,2,0}}
*/

int a[][3] = {1,2,3,4,5,6};
/*
	系统会根据固定的列数,将后边的数值进行划分,自动将行数定位2。
	如果对全部数组元素置初值,则二维数组的第一个下标可省略,但第二个下标不能省略。
*/

二维数组的应用

#include <stdio.h>
#include <stdlib.h>
int main()
{					// 语 数 英
    int people[5][3]={{78,46,84},//李
                      {98,46,78},//张
                      {84,51,74},//陈
                      {12,96,45},//刘
                      {78,95,99}};//林
    printf("个人总成绩:\n");
    int i,j,nSore;
    for(i=0;i<5;i++)
    {
        nSore=0;
        for(j=0;j<3;j++)
        {
            nSore+=people[i][j];         
        }
        switch(i)
        {
            case 0:
                {
                    printf("李同学的总成绩为: %d\n",nSore);
                    break;
                }
            case 1:
                {
                    printf("张同学的总成绩为: %d\n",nSore);
                    break;
                } 
             case 2:
                {
                    printf("陈同学的总成绩为: %d\n",nSore);
                    break;
                }
             case 3:
                {
                    printf("刘同学的总成绩为: %d\n",nSore);
                    break;
                }
              case 4:
                {
                    printf("林同学的总成绩为: %d\n",nSore);
                    break;
                }
        }
    }
    
    for(i=0;i<3;i++)
    {	
        nSore=0;
        for(j=0;j<5;j++)
        {
            nSore+=people[j][i];
        }
        switch(i)
        {
                case 0:
                {
                    printf("小组语文总分为: %d\t小组语文平均分为: %d\n",nSore,nSore/3);
                    break;
                }
                case 1:
                {
                    printf("小组数学总分为: %d\t小组数学平均分为: %d\n",nSore,nSore/3);
                    break;
                }
                case 2:
                {
                    printf("小组英语总分为: %d\t小组英语平均分为: %d\n",nSore,nSore/3);
                    break;
                }   
        }
    }
    system("pause");
    return 0;
}                            

多维数组

多维数组的定义与二维数组类似,其语法格式具体如下:

数组类型修饰符  数组名  [n1][n2][n3];

定义一个三维数组的示例代码如下:

int x[6][7][8];

上面的这个例子,定义了一个三维数组,数组的名字是x,数组的长度为3,每个数组的元素又是一个二维数组,这个二维数组的长度是4,并且这个二维数组中的每个元素又是一个一维数组,这个一维数组的长度是5,元素类型是int。

多维数组在实际的工作中使用不多,并且使用方法与二维数组相似,这里不再做详细地讲解,有兴趣的读者可以自己学习。

posted @ 2022-10-12 23:42  追梦的那些孩子  阅读(29)  评论(0编辑  收藏  举报