C语言基础知识--数组

数组:是一种容器,可以用来连续存储同种数据类型的多个值,可以通过索引或下标访问其中的元素。

数据类型  数组名[长度] ={数据值,数据值,数据值......}

 当定义完成一组数组后,想要将其中的数据拿出来,需要先找到要拿哪一个位置的数据,这就是索引,索引就是数组的一个编号,也叫做角标,下标,编号。

在创建数组时,[ ]不能使用变量,只能使用常量或者宏定义。

  数组中元素的访问:

  /*定义一个长度为5 的数组,并进行初始化:12345
完成下列要求;
  1.获取索引为0,2,4的元素,并求和
  2.把最后一个索引上的元素修改为10*/
#include<stdio.h>
int main()
{
	int arr[5] = { 1,2,3,4,5 };
	int num1 = arr[0];
	int num2 = arr[2];
	int num3 = arr[4];
	int arr2 = num1 + num2 + num3;
	printf("%d\n", arr2);
	printf("修改前arr[4]为:%d\n", arr[4]);
	arr[4] = 10;
	printf("修改后arr[4]为:%d\n", arr[4]);
	return 0;
}

数组只能够整体初始化,不能被整体赋值,只能使用循环从第一个逐个遍历赋值。

内存:软件在运行时用力临时存储数据的

内存地址:内存中每一个小格子的编号

 eg1:最大值

#include<stdio.h>
int main() 
{/*已知数组元素为33,5,22,33,55
	找出数组中的最大值并打印在控制台*/
	int arr[] = { 33,5,22,33,55 };
	int max = arr[0];
	int sz = sizeof(arr) / sizeof(arr[0]);
	for(int i=0;i<sz;i++)
	{
		if (max < arr[i])
		{
			max = arr[i];
		}	
	}printf("%d\n", max);
	return 0;
}

 

eg2: 数组求和

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main() 
/*生成10个1到100的随机数字存入数组,并求出所有数据的和*/
	int arr[10] = { 0 };
	srand(time(NULL));
	int sz = sizeof(arr) / sizeof(arr[0]);
    int sum = 0;
	for (int i = 0; i < sz; i++)
	{
		arr[i] = rand() % 100 + 1;
        sum = sum + arr[i];
		printf("%d  ", arr[i]);

	}  
	printf("\n"); 
	printf("%d\n", sum);
	return 0;
}

eg3:反转数组

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void printARR(int arr[], int sz);

int main()
{
	/*键盘录入5个数据,完成以下功能
	1.遍历数组
	2.反转数组
	3.再次遍历*/
	int arr[5] = { 0 };
	int  sz = sizeof(arr) / sizeof(arr[0]);
	for (int i = 0; i < sz; i++)
	{
		printf("请输入第%d个数据\n", i + 1);
		scanf_s("%d", &arr[i]);
	}
	//遍历数组
	printARR(arr, sz);
	//反转数组
	int i = 0;
	int j=sz-1;//i j是索引,不是数据;
	while (i<j)
	{
		int temp = arr[i];
		arr[i]=arr[j];
		arr[j] = temp;
		i++;
		j--;
	}
	//将反转后的数组输出
	printf("\n");
	printARR(arr, sz);

}


void printARR(int arr[], int sz)
{
	for (int i = 0; i < sz; i++)
	{
	    printf("%d  ", arr[i]);
	}
}

 

 数组中的常见算法

折半查找

提高了查找效率

eg:容易出错的点在于mid和min,max都是索引,num为需要查找的数字,在比较大小时,要使用arr[mid]=num;mid的取值是在循环里面的,因为会随着循环变换。

可以看出二分查找适用的是一组有顺序的数据

#include<stdio.h>
int erfensearch(int arr[], int sz, int num);
int main()
{
	/*数组的二分查找*/
	int arr[] = { 12,22,34,56,67,99 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	int num=34;
	int index = erfensearch(arr, sz, num);
	printf("%d\n", index);
}
int erfensearch(int arr[], int sz, int num)
{
	int min = 0;
	int max = sz - 1;

	while (min <= max)
	{
	    int mid = (min + max) / 2;
		   if (arr[mid] < num)
		   {
		     min = mid + 1;
		   }
		   else if (arr[mid]  > num)
		   {
			 max = mid - 1;
		   }
		   else
		     return mid;
     }
}

3. 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值