C语言数组(上)

数组介绍

数组可以存放多个同一类型数据。数组也是一种数据类型,是构造类型。传递是以引用的方式传递(即传递的是地址)。

案例:
一个养鸡场有6只鸡,它们的体重分别是 3kg,5kg,1kg,3.4kg,2kg,50kg 。请问这六只鸡的总体重是多少?平均体重是多少?

#include<stdio.h> 

void main(){
	double a[6];//定义数组
	a[0] = 3; 
	a[1] = 5; 
	a[2] = 1; 
	a[3] = 3.4; 
	a[4] = 2;
	a[5] = 50;  
	
	double sum =0.0;
	double avg =0.0;
	
	//遍历数组
	int i;
	for(i=0;i<=5;i++){
		sum +=a[i];// 累加 
	} 
	avg = sum / 6; 
	printf("总体重=%.2f 平均体重=%.2f",sum,avg);
}

在这里插入图片描述

数组的大小

#include<stdio.h> 

void main(){
	double a[6];//定义数组
    printf("数组大小=%d\n",sizeof(a)); //一个 double 占用8个字节,6*8 
	int aSize = sizeof(a) / sizeof(double);
	printf("数组包含double的数量=%d",aSize);
}

**加粗样式**

用程序计算数组的大小的作用:便于维护。

一个养鸡场有6只鸡,它们的体重分别是 3kg,5kg,1kg,3.4kg,2kg,50kg 。请问这六只鸡的总体重是多少?平均体重是多少?

#include<stdio.h> 

void main(){
	double a[6];//定义数组
	a[0] = 3; 
	a[1] = 5; 
	a[2] = 1; 
	a[3] = 3.4; 
	a[4] = 2;
	a[5] = 50;  
	
	double sum =0.0;
	double avg =0.0;
	
	//遍历数组
	int i,arrLen;
	arrLen = sizeof(a) / sizeof(double);
	for(i=0;i<=arrLen;i++){//当前面数组元素变动时,这里不用改动
		sum +=a[i];// 累加 
	} 
	avg = sum / 6; 
	printf("总体重=%.2f 平均体重=%.2f",sum,avg);
}

在这里插入图片描述

数组定义和内存布局

数组的定义

数据类型 数组名 [数组大小];
int a [5]; // a数组名,类型int,[5]大小,即a数组最多存放5个int数据赋初值 a[0]= 1 ; a[1]= 30; ......

说明:
(1)数组名就代表该数组的首地址,即a[0]地址。
(2)数组的各个元素是连续分布的,假如 a[0]地址0x1122,a[1]地址= a[0]的地址+int字节数(4)=0x1122+4=0x1126,后面a[2]地址 =a[1]地址+ int字节数(4)=0x1126+4=0x112A,依次类推。

访问数组元素

数组名[下标]比如:你要使用a数组的第三个元素a[2],下标是从0开始计算。

案例

从终端循环输入5个成绩,保存到double数组,并输出。

#include<stdio.h>

void main(){
	double arr[5];
	int arrLen =sizeof(arr)/sizeof(double);
	int i;
	for(i=0;i<arrLen;i++){
		printf("\n 请输入一个小数:");
		scanf("%lf",&arr[i]);
	}
	//输出整个数组 
	printf("\n==================\n");
	for(i=0;i<arrLen;i++){
		printf("arr[%d] = %.2f\n",i,arr[i]);
	} 	
}

在这里插入图片描述

3种初始化方法

//第一种
int arr1[3];
arr1[0]=100;
arr1[1]=200;
arr1[2]=300;

//第二种
int arr2[3]={4,5,6};

//第三种
int arr3[]={7,8,9};//直接给值可以不用给定数组的大小,系统可以自动识别

数组使用注意事项和细节

(1)数组是多个相同类型数据的组合,一个数组一旦声明/定义了,其长度是固定的,不能动态变化。
(2)数组创建后,如果没有赋值,则遵守如下规则
全局数组默认值О
非全局数组初值是机器垃圾值(即:原来系统分配给这块空间的值)

(3)使用数组的步骤1.定义数组﹖给数组各个元素赋值3使用数组,也可以一步到位。
(4)数组的下标是从0开始的,不是从1开始。
(5)数组下标必须在指定范围内使用,编译通过,在运行时会因为数组越界而异常中断:比如int arr [5]有效下标为0-4。
(6)C的数组属构造类型,是引用传递(传递的是地址),因此当把一个数组传递给一个函数时/或者变量,函数/变量操作数组会影响到原数组。

#include<stdio.h>

void f1(int arr[]){
	printf("\nf1中arr的地址=%p",arr);
	arr[0]=arr[0]+1;//第一个数加了1 
}

void main(){
	int arr[3]={3,4,5};
	int i;
	printf("\nmain中arr的地址=%p",arr);
	
	//数组默认是以地址传递(传递指针)
	f1(arr);
	
	//遍历 main 函数中的 arr
	for(i=0;i<3;i++){
		printf("\narr[%d]=%d\n",i,arr[i]);//4 4 5
	} 
}

在这里插入图片描述

数组应用案例
(1)创建一个char类型的26个元素的数组,分别放置’A-Z‘。使用for循环访问所有元素并打印出来。提示:字符数据运算’A’+1 ->‘B’。

#include<stdio.h> 

void main(){
	char arr[26];
	int i;
	for(i=0;i<26;i++){
		arr[i] = 'A' +i;
	}
	for(i=0;i<26;i++){
		printf("%c",arr[i]);
	}
}

在这里插入图片描述
(2)请求出一个数组的最大值,并得到对应的下标。

#include<stdio.h>

void main(){
	int arr[] = {0,5,10,8,9,100};
	int arrLen =sizeof(arr) / sizeof(int);
	int max =arr[0];
	int maxIndex =0;
	int i;
	for(i=1;i<arrLen;i++){
		//如果发现比 max 大的数 ,就把大的数赋值给 max 
		if(arr[i] > max){
			max = arr[1];
			maxIndex = i;
		}
	}
	printf("max = %d maxIndex = %d",max,maxIndex);
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值