C语言入门-数组

今天十月一日,上午看阅兵激情澎湃,但是下午还是要继续写C语言,前面的这块很简单

int number[100];

scanf("%d",&number[i]);

一、定义数组

  1. <类型> 变量名称[元素数量]
  2. 元素数量必须是整数

数组特点

  1. 所有的元素具有相同的数据类型
  2. 一旦创建,就不能改变大小
  3. (数组中的元素在内存中是连续以此排序的)

二、数组例子

写一个程序,输入数量不确定的[0,9]范围内的整数,统计每一种数字出现的次数,输入-1表示结束

通常用到数组都是下面的步骤:

#include <stdio.h>

int main(void)
{

	// 数组的大小
	const int number = 10;
	int x;
	// 定义数组
	int count[number];
	int i;

	// 初始化数组
	for (i = 0; i < number; i++)
	{
		count[i] = 0;
	}

	scanf("%d",&x);
	while( x != -1){
		if(x >= 0 && x <= 9){
			// 数组参与运算
			count[x] ++;
		}
		scanf("%d",&x);
	}

	// 遍历数组输出
	for (i = 0; i < number; i++)
	{
		printf("%d:%d\n",i,count[i]);
	}

	return 0;
}

三、数组运算

数组的集成初始化

int a[] = {2,4,6,7,1,3,5,9,11,13,23,14,32};

集成初始化时定位

	int a[10] = {[0] = 2,[2] = 3,6};

	int i;
	for (i = 0; i < 10; ++i)
	{
		printf("%d\t",a[i]);
	}
	// 2       0       3       6       0       0       0       0       0       0
  1. 用[n]在初始化数据中给出定位
  2. 没有定位的数据接在前面的位置后面
  3. 其他位置的值补零
  4. 也可以不给出数组大小,让编译器算
  5. 特别适合初始数据稀疏的数组

数组大小

  1. sizeof给出整个数组所占据的内容的大小,单位是字节
sizeof(a)/sizeof(a[0]);
  1. sizeof(a[0])给出数组中单个元素的大小,于是相除就得到了数组的单元个数
  2. 这样的代码,一旦修改数组中的初始的数据,不需要修改遍历的代码

数组的赋值

  1. 数组变量本身不能被赋值
  2. 要把一个数组的所有元素交给另一个数组,必须采用遍历

四、数组中查找元素

数组作为函数参数时,往往必须再用另一个参数来传入数组的大小

数组作为函数的参数时:

  1. 不能在[]中给出数组的大小
  2. 不能再利用sizeof来计算数组的元素个数
#include <stdio.h>

int main(void)
{
	int a[] = {2,32,};
	int x;
	int loc;
	printf("请输入一个数字:\n");
	scanf("%d",&x);


	loc = search(x,a,sizeof(a)/sizeof(a[0]));
	if (loc != -1)
	{
		printf("%d在第%d个位置上\n",x,loc);
	}else{
		printf("%d不存在\n",x);
	}
	return 0;
}

int search(int key,int a[],int length)
{
	int ret = -1;
	int i;
	for (i = 0; i < length; i++)
	{
		if (a[i] == key)
		{
			ret = i;
			break;
		}
	}
	return ret;
}

五、素数

判断是否能被已知的且<x的素数整除

#include <stdio.h>

int main(void)
{
	const int number = 10;
	int prime[10] = {2};
	int count = 1;
	int i = 3;
	while(count < number){
		if (isPrime(i,prime,count))
		{
			prime[count++] = i;
		}

		// 进行调试
		{
			printf("i=%d \tcnt=%d\t",count );
			int i;
			for (i = 0; i < number; i++)
			{
				printf("%d\t",prime[i]);
			}
			printf("\n");
		}
		i++;
	}

	for ( i = 0; i < number; i++)
	{
		printf("%d",prime[i]);
		if ( (i+1)%5)
		{
			printf("\t");
		}else{
			printf("\n");
		}
	}
	return 0;
}


int isPrime(int x,int knownPrimes[],int numberofKnowPrimes)
{
	int ret = 1;
	int i;
	for (i = 0; i <numberofKnowPrimes ; i++)
	{
		if ( x % knownPrimes[i] == 0)
		{
			ret = 0;
			break;
		}
	}
	return ret;
}

六、二维数组

int a[3][5]
// 通常可以理解为a是一个3行5列的矩阵

二维数组的遍历

for(i = 0; i<3; i++){
    for(j = 0; j<5; j++){
        a[i][j] = i * j;
    }
}

// a[i][j]是一个int,表示第i行第j列上的单元

二维数组的初始化

int a[][5] = {
    {0,2,},{2,};
  1. 列数是必须给出的,行数可以有编译器来定
  2. 每行一个{},逗号分隔
  3. 最后的逗号可以存在
  4. 如果省略,表示补零

相关文章

一.C语言中的static关键字 在C语言中,static可以用来修饰局...
浅谈C/C++中的指针和数组(二) 前面已经讨论了指针...
浅谈C/C++中的指针和数组(一)指针是C/C++...
从两个例子分析C语言的声明 在读《C专家编程》一书的第三章时...
C语言文件操作解析(一)在讨论C语言文件操作之前,先了解一下...
C语言文件操作解析(三) 在前面已经讨论了文件打开操作,下面...