打印数组中的最大值
两个需要注意到的细节
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;进行下一对元素的调换 } }