数组和二维数组

目录

1.为什么需要数组?

2.数组的介绍

3.数组的基本使用

数组的定义

数组单独访问

数组的遍历

数组的动态初始化

4.数组和函数

5.二维数组

什么时候用二维数组

 怎么定义二维数组

二维数组初始化 

二维数组的遍历

1.为什么需要数组?

只要大量数据不关心数字名称的时候 :计算1-100的和

学生成绩管理 :分数

协议 int openCMD={0xdf,0x11,0xfe,0x3e,0x64};

2.数组的介绍

数组是数据的集合: 1-100

数组的数据是同类型的 :1到100都是整数

数组的地址是连续的

3.数组的基本使用

数组的定义

类型——如int

数组名(命名规则和变量名一样)——如array

数组大小——如[100]

没有初始化的数组——int array[100];

部分初始化的数组——int array1[100]={0};

完全初始化的数组——int array2[3]={1,2,3};    

数组单独访问

   数组通过下标来引用当中的某个元素
    array[0];外国人喜欢从零开始
    数组的[] 只有在定义一个数组的时候才表示数组的大小,其余情况,都表示下标访问数组!!!!!

数组的遍历

数组大小的计算:sizeof(a)/sizoef(a[0])

#include <stdio.h>

/*
1.数组初始化  int b[5] = {0};//(建议一般这么定义)
2.数组打印for
3.数组大小计算:sizeof(a)/sizeof(a[0])
*/

int main()
{
	int i;
	int a[5];//不初始化数组
	
	int b[5] = {0};//部分初始化数组(建议一般这么定义)
	
	int array[5] = {1,2,3,4,5};//完全初始化数组
	
	for(i=0;i<sizeof(a)/sizeof(a[0]);i++){
		a[i] = i + 100;
	}
	puts("a数组初始化完毕,请指示!");
	for(i=0;i<sizeof(a)/sizeof(a[0]);i++){
		printf("%d ",a[i]);
	}
	puts("a数组打印完毕");
	
	
	for(i=0;i<sizeof(b)/sizeof(b[0]);i++){
		printf("%d ",b[i]);
	}
	puts("b数组打印完毕");
	
	for(i=0;i<sizeof(array)/sizeof(array[0]);i++){
		printf("%d ",array[i]);
	}
	puts("array数组打印完毕");
	return 0;
	
}

数组的动态初始化

  int data[5]={0};

  for(i=0;i<5;i++){
        printf("请输入第%d个数:\n",i+1);
        scanf("%d",&datas[i]);
  }

4.数组和函数

实际参数的表示方法:数组当做参数,传递的是数组的首地址(第一个数组元素的地址或者数组名)

形式参数为数组:数组中括号的数组大小无效;中括号此时仅作为该参数是一个数组首地址的说明;函数中对数组的操作,除了带一个数组首地址以外,一般还需要一个代表数组个数的实际参数。

作业
    1. 要求输入10个数,找出最大数以及最大数的下标
    2. 封装冒泡排序的函数
    3. 封装选择排序的函数

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

//#define N  5

/*
	数组作为传参时,传递的是一个地址,地址传递表达方式:
	1.int *array  2.int array[]
*/

//初始化数组
void initArray(int *array,int arrayLen)
{
	int i;
	
	for(i=0;i<arrayLen;i++){
		printf("请输入第%d个数据\n",i+1);
		scanf("%d",&array[i]);
	}
}

//遍历数组
void printArray(int array[],int arrayLen)
{
	int i;
	
	puts("打印输入数据");
	for(i=0;i<arrayLen;i++){
		
		printf("%d ",array[i]);
		
	}
	putchar('\n');
}

//数组冒泡排序法  从大到小
void maoPaoArray(int array[],int arrayLen)
{
	int i;
	int j;
	int tmp;
	
	for(i=0;i<arrayLen-1;i++){
		for(j=0;j<arrayLen-1-i;j++){
			//从小到大  if(array[j] > array[j+1])
			if(array[j] < array[j+1]){
				tmp = array[j];
				array[j] = array[j+1];
				array[j+1] = tmp;
			}
		}
		
	}
	puts("冒泡法从大到小");
	for(i=0;i<arrayLen ;i++){
		printf("%d ",array[i] );
	}
	putchar('\n');
}

//数组选择排序法  从小到大
void xuanZheArray(int array[],int arrayLen)
{
	
	int i;
	int j;
	int tmp;
	
	for(i=0;i<arrayLen-1;i++){
		for(j=i+1;j<arrayLen;j++){
			//从小到大  if(array[i] > array[j])
			if(array[i] > array[j]){
				tmp = array[i];
				array[i] = array[j];
				array[j] = tmp;
			}
		}
		
	}
	
	puts("选择排序法从小到大");
	for(i=0;i<arrayLen ;i++){
		printf("%d ",array[i] );
	}
	putchar('\n');
}

//数组值的计算:大小,和,平均值
void  jiSuanArray(int array[],int arrayLen)
{
	int max;
	int maxXiaBiao = 0;
	int min;
	int minXiaBiao = 0;
	int sum = 0;
	float get;
	int i;
	
	
	max = min = array[0];
	for(i=0;i<arrayLen;i++){
		
		if(max < array[i]){
			max = array[i];
			maxXiaBiao = i;
		}
		if(min > array[i]){
			min = array[i];
			minXiaBiao = i;
		}
		sum += array[i];
	}
	get = (float)sum/arrayLen;
	printf("max=%d,下标是%d\n",max,maxXiaBiao);
	printf("min=%d,下标是%d\n",min,minXiaBiao);
	printf("sum=%d,get=%f\n",sum,get);

}

int main()
{
	int max;
	int min;
	float get;
	int arrayLen;
	int array[5]; //数组大小动态分配(赋值)
	/*int num;
	int *array = NULL;//防止野指针
	
    printf("需要录入的数据?\n");
    scanf("%d",&num);

    array = (int *)malloc(sizeof(int) * num);//开辟空间
    memset(array,0,sizeof(int) * num);//空间初始化
	*/
	arrayLen = sizeof(array)/sizeof(array[0]);
	
	initArray(array,arrayLen);
	printArray(array,arrayLen);
	maoPaoArray(array,arrayLen);
	xuanZheArray(array,arrayLen);
	jiSuanArray(array,arrayLen);
	
	return 0;
}

5.二维数组(其实就是特殊一点的一维数组)

什么时候用二维数组

场景


表示

 怎么定义二维数组

二维数组初始化 

1.按行列初始化

2.没有明确行列,类似一维数组

3.部分赋初值

二维数组的遍历

for循环的嵌套

#include <stdio.h>

/*
二维数组是特殊的一维数组
二维数组=矩阵
*/

int main()
{
	int a[6]={1,2,3,4,5,6};
	//二维数组是特殊的一维数组
	int array[2][3]={1,2,3,4,5,6};
	
	int array1[2][3]={{11,22,33},{44,55,66}};
	
	int i;
	int j;
	//数组a的遍历
	for(i=0;i<sizeof(a)/sizeof(a[0]);i++){
		printf("%d ",a[i]);
	}
	putchar('\n');
	puts("一维数组a的遍历完毕");
	
	//二维数组array的遍历
	for(i=0;i<2;i++){
		for(j=0;j<3;j++){
			printf("%d %d %d\n",i,j,array[i][j]);
		}
		putchar('\n');
	}
	puts("二维数组array的遍历完毕");
	
	//二维数组array1的遍历
	for(i=0;i<2;i++){
		for(j=0;j<3;j++){
			printf("%d %d %d\n",i,j,array1[i][j]);
		}
		putchar('\n');
	}
	puts("二维数组array1的遍历完毕");

	return 0;
	
}

二维数组和函数

#include <stdio.h>
//练习:有3x4矩阵,初始化它并输出,然后求最大值并输出

//初始化二维数组
void initArray(int array[][4],int hang,int lie)
{
	int i,j;
    for(i=0;i<hang;i++){
		for(j=0;j<lie;j++){
			printf("请输入第%d行,第%d列的数据\n",i+1,j+1);
            scanf("%d",&array[i][j]);
        }
    }
}

//遍历数组 (和初始化二维数组差不多)
void printArray(int array[][4],int hang,int lie)
{
	int i,j;
    for(i=0;i<hang;i++){
		for(j=0;j<lie;j++){
			
            printf("%d ",array[i][j]);
        }
        putchar('\n');//好看,显示出像矩阵
    }
}

//求数组最值
void zhuiDaArray(int array[][4],int hang,int lie)
{
	int i,j;
    int max;
    int maxHang,maxLie;
       
    max = array[0][0];
    
    for(i=0;i<hang;i++){
		for(j=0;j<lie;j++){
			if(max < array[i][j]){
				max = array[i][j];
                maxHang = i+1;
                maxLie = j+1;
            }
            
        }
    }
    printf("数组最大值是第%d行,第%d列的%d\n",maxHang,maxLie,max);
   
}

void zhuiXiaoArray(int array[][4],int hang,int lie)
{
	int i,j;
	int min;
    int minHang,minLie;
    
    min = array[0][0];
    
    for(i=0;i<hang;i++){
		for(j=0;j<lie;j++){
            if(min > array[i][j]){
				min = array[i][j];
                minHang = i+1;
                minLie = j+1;
            }
        }
    }
    printf("数组最小值是第%d行,第%d列的%d\n",minHang,minLie,min);
}

int main()
{
	int array[3][4];
    
	initArray(array,3,4);
    printArray(array,3,4);
    zhuiDaArray(array,3,4);
    zhuiXiaoArray(array,3,4);
	system("pause");
	return 0;
}
请输入第1行,第1列的数据
1
请输入第1行,第2列的数据
2
请输入第1行,第3列的数据
3
请输入第1行,第4列的数据
0
请输入第2行,第1列的数据
5
请输入第2行,第2列的数据
6
请输入第2行,第3列的数据
3
请输入第2行,第4列的数据
8
请输入第3行,第1列的数据
9
请输入第3行,第2列的数据
4
请输入第3行,第3列的数据
5
请输入第3行,第4列的数据
6
1 2 3 0
5 6 3 8
9 4 5 6
数组最大值是第3行,第1列的9
数组最小值是第1行,第4列的0
请按任意键继续. . .

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值