练习-----数组的各种使用场景

打印数组中的最大值
两个需要注意到的细节

1.循环是不是一定要从0索引开始?

不是的,如果max的默认值记录的是0索引的,循环就可以从1开始,提高效率

2.max的默认值是否可以写为0?

不可以的,如果数组里面所有的数据都是负数,循环结束之后,得到的最大值。,此时会给别人产生误解。max的默认值:一定要是数组中已经存在的数据,一般都是把0索引当做默认值

#include<stdio.h>
int main()
{
    int arr1[] = {33,303,202,202,505};   //定义数组
    int i;   //定义变量,数组的索引
    int max = arr1[0];   //定义一个变量来接收数组的最大值,先假设是数组中的第一个元素
    int length = sizeof(arr1) / sizeof(arr1[0]);   //计算数组的长度  数组长度=总长度/每个元素占用的字节个数
    for (i = 1; i < length; i++)   //循环出数组中的每一个元素
    {
        if(max <= arr1[i])    //判断此时的最大值是否小于等于于此时获取到的元素,否的话不进行操作继续循环
        {
            max = arr1[i];    //是的话将此时获取到的元素赋值给max,因为此时的元素暂时是最大的
        }
    }
    printf("数组中的最大值:%d\n",max);//打印
    return0;
}
将10个1到100的随机数录入数组,并且求和、平均数、小于平均数元素个数(数组内的数不重复)
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int repeat(int num,int arr2[])  //定义一个函数来判断有没有重复值
{
    int i;                      
    for(i=0;i<10;i++)           //从0索引开始,循环10次,依次获取arr2中的元素
    {
        if(num == arr2[i])      //判断num是否与arr2中的元素相等
        {
            return 1;           //相等就返回1
        }
    }
    return 0;                   //不等返回0
}
int main()
{
    int i,num,test;     //声明变量;
    int arr2[10];       // 声明一个大小为 10 的数组 arr2
    int sum = 0;        // 初始化 sum 变量,用于计算元素和
    int count = 0;      // 初始化 sum 变量,用于统计小于平均数的元素个数
    srand(time(NULL));  //设置随机数种子
    // 初始化数组 arr2
    for (i = 0; i < 10;)  //循环出10个随机数写入数组
    {
        num = rand() % 10 + 1;  //将随机数赋值给num
        test = repeat(num,arr2);        //将函数repeat调用的值赋给test
        if(test == 0)                   //判断test是否为0(为0说明没有相等的元素)
        {
            arr2[i] = num;              //将num赋值给arr2
            i++;                        //完成赋值i才会自增
        }
    }
    for (i = 0; i < 100;i++)        //设置随机数范围为1到100
    {
        printf("%d\n",arr2[i]);      //依次打印数组中的元素
    }
    // 计算数组所有元素的和
    for (i = 0; i < 10; i++)        //依次输出0-9索引对应的数
    {
        sum += arr2[i];             //将每次输出的元素加给sum
    }
    printf("数组所有元素的和为:%d\n", sum);   //打印和
    printf("数组所有元素的平均数为(只保留整数):%d\n", sum/10);   //打印平均数
    for (i = 0; i < 10;i++)  
    {
        if(sum/10>arr2[i])
        {
            count++;
        }
    }
    printf("数组所有小于平均数的元素的个数为:%d\n",count);   //打印小于平均数的元素个数
    return 0;
}
​
​
键盘录入数组并反转,最后全部打乱
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
void random(int length,int arr[]);      //声明函数,用于打乱数组
void printarr(int length,int arr[]);    //声明函数,用于遍历数组
void invert(int length,int arr[]);      //声明函数,用于反转数组
int main()
{
    int arr[5];     //声明数组,且长度定为5
    int length = sizeof(arr) / sizeof(arr[0]);      //计算数组长度,可省略,修改调用length的地方为5即可
    int i;          //声明变量,用于循环
    for(i=0;i<length;i++)       //循环键盘录入5个整数到arr里
    {
        printf("请输入你要进行操作的第%d个整数:",i+1);
        scanf("%d",&arr[i]);
    }
    printf("原数组为:\n");      
    printarr(length,arr);       //调用遍历数组函数
    invert(length,arr);         //调用反转数组函数
    printf("反转后的数组为:\n");
    printarr(length,arr);       //调用遍历数组函数
    printf("随机打乱后的数组为:\n");
    random(length,arr);         //调用打乱数组函数
    printarr(length,arr);       //调用遍历数组函数
    
    
    
}
void random(int length,int arr[])
{
    int i =  0;             //重置i的值为0
    int j;                  //声明j用于调用索引
    int num;                //用于记录反转前arr中元素的值
    srand(time(NULL));      //设置随机数种子
    while(i<length)         //从0索引开始,数组中的每个元素都进入循环重新赋值
    {
        num = arr[i];       //记录反转前arr中元素的值
        j = rand() % length;        //使j为范围0到长度-1的随机数
        arr[i] = arr[j];            //使i索引的元素=j(随机)索引的元素
        arr[j] = num;               //将索引的元素重新赋值,确保每个元素的值不同
        i++;                        //i自增,让下一个索引的元素进来赋值
        printf("随机生成的索引:%d\n",j);
    }
}
void printarr(int length,int arr[])
{
    int i;                          
    for(i=0;i<length;i++)
    {
        printf("%d",arr[i]);        //遍历数组
    }
    printf("\n",arr[i]);            //打印完数组后进行换行
}
void invert(int length,int arr[])
{
    int i = 0;              //重置i的值为0
    int j = length-1;       //声明j用于调用索引
    int num = 0;            //用于记录反转前arr中元素的值
    while(i<j)              //反转数组,i<j就进入循环
    {
        num = arr[i];           //保存arr中的元素反转前的值
        arr[i] = arr[j];        //将arr[i]的值替换为arr[j]的值
        arr[j] = num;           //将刚才保存的远数组中的值赋给arr[j]
        i++,j--;                //完成调换后,将i+1,j-1;进行下一对元素的调换
    }
}
  • 20
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值