(7)数组-7.1

数组本质上是一种容器
1.数组本质上是一种容器(放东西的东西),特点:
  .其中所有的元素具有相同的数据类型.
  .一旦创建不能改变大小.
  .数组中的元素在内存中是连续依次排列的.
2.有效的下表范围:
  .编译器和运行环境都不会检查数组下标是否越界,无
  论对数组单元做读还是写.
3.可以定义长度为0的数组,例如:int a[0]; 但是没有
  用,没有有效的下标.时
4.数组实例:
  写一个程序,输入数量不确定的[ 0-9 ] 范围内的整数,统计每一种数字出现的次数,输入-1表示结束.[ 1-1.cpp ]
  分析:在输入整数的同时就对数进行判断即可,不需要将存入的整数保存,对输入的每个数字的次数可用数组表示,数组的下标可用当前输入的数字.

#include <stdio.h>

int main()
{
	int cnt, number[cnt];
	int flag;
	printf("Please input a number!\n");
	scanf("%d", &cnt);
	printf("Please input your numbers of 0-9!\n");	

	
	for(int i=0; i<cnt; i++)
	{
		scanf("%d", &number[i]);	
		if((number[i]<0 && number[i]!=-1) || number[i]>9)
		{
			printf("\tError,Please input this number again!\n");
			i--;
		}
		else if(number[i] == -1)
		{
			flag = 1;
			break;
		}

	}

	for(int i=0; i<=9; i++)
	{
		if(flag == 1)
			break;
		else
		{
			int a[9] = {0};
			for(int j=0; j<cnt; j++)
			{
				if(number[j] == i)
					a[i]++;
			}
			printf("%d出现的次数:%d\n", i, a[i]);
		}
	}	

	return 0;
}

课程给出的代码:

#include <stdio.h>

int main()
{
	const int number = 10;
	int x;
	scanf("%d", &x);
	int count[number];
	
	for(int i=0; i <number; i++)
	{
		count[i] = 0;
	}
	
	while(x != -1)
	{
		if(x>=0 && x <=9)
			count[x]++;
		scanf("%d", &x);
	}

	for(int i=0; i<number; i++)
	{
		printf("%d:%d\n", i, count[i]);
	}

	return 0;
}

5.数组的集成初始化时的定位 [ Only C99 ].(但是
  gcc编译不能通过)[1-2.cpp]
  int a[10] = { [0] =2, [2]=3, 6, };
  .用[n]在初始化数据中给出定位;
  .没有定位的数据接在前面的位置后面;
  .其他的位置补0;
  .可以不给出数组的大小,让编译器算;
  .特别适合初始化数据稀疏的数组;

#include <stdio.h>


int main()
{
	int a[4]={
		[0]=1, [3]=4};
	{
		int i;
		for(i=0; i<4; i++)
			printf("%d\t", a[i]);
	}
	return 0;
}

6.数组的大小
 .sizeof()给出整个数组所占内存的大小,单位是字节,而数组中元素的个数:
   sizeof(a) / sizeof( a[0] )
 .sizeof(a[0])给出数组中单个元素的大小,于是相除就得
 到了数组单元个数.
 .这样的代码,一旦修改了数组中初始数据的个数,计算
 个数的公式 sizeof(a) / sizeof( a[0] ) 仍然正确.
 [ 1-3.cpp ]
 习惯:70-80年代数组初始化最后一个元素多出一个
 ',',但是对编译没有任何影响.

#include <stdio.h>
	
int main()
{
	/*int a[]={
		1,2,3,4,5,6,7,8,9,0,
		};
	*/
	int a[]={
		1,2,3,4,5,6,
		};

	printf("%d\n", sizeof(a)/sizeof(a[0]));

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值