C语言练习02-数组

一、求最值

已知数组元素为{33,5,22,44,55},找出数组中的最大值并打印在控制台

cpp 复制代码
#include<stdio.h>
#include<math.h>

int main()
{
	int arr[] = {33,5,22,44,55};
	int max = arr[0];
	int len = sizeof(arr) / sizeof(int); 
    //注意:sizeof(arr)计算的是数组所占内存空间的总大小
    //计算数组长度时,应该用数组所占内存空间总大小除以数组类型的内存
    //比如:sizeof(arr)/sizeof(int)
	for(int i = 0; i < len; i++)
	{
		if(arr[i] > max)
		{
			max = arr[i];
		}
	}
	printf("%d\n",max);
	return 0;
}

二、数组求和

生成10个1~100之间的随机数存入数组,要求数据不能重复

1)求出所有数据的和

2)求所有数据的平均数

3)统计有多少个数据比平均值小

cpp 复制代码
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<time.h>

int main()
{
	int arr[10] = {0};
	int i = 0;
	int sum = 0;
	int num = 0;
	int Num = 0;
	srand((unsigned int) time(NULL));
	
	//存入数据
	for(i = 0; i < 10; i++)
	{
		int ret = rand() % 100 + 1;
		arr[i] = ret;
	}
	
	//打印数据
	for(int j = 0;j < 10;j++)
	{
		printf("%d ",arr[j]);
	}
	printf("\n");
	
	//求和
	for(int j = 0;j < 10;j++)
	{
		sum = sum + arr[j];
	}
	printf("和为%d ",sum);
	
	//求平均数
	num = sum / 10;
	printf("平均数等于%d",num);
	return 0;
	
	//统计
	for(int j = 0;j < 10;j++)
	{
		if(arr[j] < num)
		{
			Num++;
		}
	}
	printf("有%d个数比平均数小",Num);
}

三、反转数组

cpp 复制代码
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<time.h>

int main()
{
	int arr[] = {2,4,6,8};
	int len = sizeof(arr)/sizeof(int);
	for(int i = len - 1;i >= 0;i--)
	{
		printf("%d ",arr[i]);
	}
	return 0;
}

四、打乱数组中数据的顺序

cpp 复制代码
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<time.h>

int main()
{
	int arr[] = {2,4,6,8};
	int len = sizeof(arr)/sizeof(int);
	srand(time(NULL));
	int ret = rand() % len;
	for(int i = 0;i < len;i++)
	{
		int temp = arr[i];
		arr[i] = arr[ret];
		arr[ret] = temp;
	}
	for(int i = 0;i < len;i++)
	{
		printf("%d ",arr[i]);
	}
	return 0;
}

五、数组常见算法1-基本查找/顺序查找

cpp 复制代码
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<time.h>

int main()
{
	//查找8,若存在则返回其索引值,若不存在,则返回-1
	int arr[] = {2,4,6,8,10};
	int len = sizeof(arr)/sizeof(int);
	for(int i = 0;i < len;i++)
	{
		if(arr[i] == 8)
		{
			printf("%d",i);
		}
	}
	return -1;
}

六、数组常见算法2-二分查找

前提:数据必须按顺序排列

cpp 复制代码
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<time.h>

int BinarySearch(int arr[],int num)
{
	int min = 0;
	int len = sizeof(arr) / sizeof(arr[0]);
	int max = len - 1;
	int mid = (min + max) / 2;
	while(true){
		if(min > max)
		{
			return -1;
		}
		//如果数字在mid的左边,则舍弃右边数字,max变为mid-1
		if(num < arr[mid])
		{
			max = mid - 1;
		}
		//如果数字在mid的右边,则舍弃左边数字,min变为mid+1
		if(num > arr[mid])
		{
			min = mid + 1;
		}
		//如果num和mid索引上的数字相同,则返回mid
		if(num == arr[mid])
		{
			return mid;
		}
	}
	
}

int main()
{
	int arr[] = {2,4,6,8,10};
	int num = 8;
	printf("%d",BinarySearch(arr,num));
	
}

七、冒泡排序法

cpp 复制代码
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<time.h>

	
int main()
{
	int arr[] = {7,4,9,3,5,1};
	int len = sizeof(arr) / sizeof(int);
	for(int i = 0;i < len - 1;i++)
	{
		for(int j = 0;j < len - 1 - i;j++)
		{
			if(arr[j] > arr[j+1])
			{
				int temp = arr[j];
				arr[j] = arr[j+1];
				arr[j+1] = temp;
			}
		}
	}
	for(int i = 0;i < len;i++)
	{
		printf("%d ",arr[i]);
	}
	
}
相关推荐
仰泳的熊猫2 分钟前
LeetCode:98. 验证二叉搜索树
数据结构·c++·算法·leetcode
Python智慧行囊15 分钟前
图像处理(三)--开运算与闭运算,梯度运算,礼帽与黑帽
人工智能·算法·计算机视觉
前端小L16 分钟前
动态规划的“细节魔鬼”:子序列 vs 子数组 —— 最长重复子数组
算法·动态规划
草莓熊Lotso18 分钟前
《算法闯关指南:优选算法--二分查找》--19.x的平方根,20.搜索插入位置
java·开发语言·c++·算法
杨福瑞22 分钟前
C语言数据结构:算法复杂度(1)
c语言·开发语言·数据结构
sali-tec24 分钟前
C# 基于halcon的视觉工作流-章46-不匀面划痕
人工智能·算法·计算机视觉·c#
yuniko-n1 小时前
【力扣 SQL 50】连接
数据库·后端·sql·算法·leetcode
淘晶驰AK1 小时前
主流的 MCU 开发语言为什么是 C 而不是 C++?
c语言·开发语言·单片机
胖咕噜的稞达鸭1 小时前
算法入门:专题二---滑动窗口(长度最小的子数组)更新中
c语言·数据结构·c++·算法·推荐算法
深盾科技4 小时前
C/C++逆向分析实战:变量的奥秘与安全防护
c语言·c++·安全