C语言基础-数组篇
文章目录
-
- 数组篇
- 一、为什么需要数组:
- 二、数组的基本使用:
- 三、如何计算数组中元素的个数?
- 四、两个数组有什么相同点/不同点
- 五、如何计算数组元素的个数 ?
-
- 案例三:斐波那契数列
- 案例四:(数组)冒泡排序算法
- 六、!!面试题:请输出数组a中有多少个元素?!!!
-
- 案例五:用函数封装的升级版带参数的案例:
- 案例六:用函数封装的升级版带提示用户输入10个数,找到最大值,最小值,算出平均值的案例!
数组篇
一、为什么需要数组:
只要大量数据不关心数组名的时侯
二、数组的基本使用:
1.定义数组:
int array[100]; //定义一个能放置100个数据的数组,没有赋值
int array[3]={1,2,3}; //有初始化的数组,完整初始化,该数组申请了三个整型内存空间,并赋值1,2,3;
int array[100]={1,2,3}; //有初始化的数组,不完整初始化,该数组申请了100个整型内存空间,但是只是赋值了3个数放在了前三个位置。
2.给数组赋值:
for(int i =1;i<100;i++){
array[i-1]=i;
} //赋值,获取1-100这么多的变量值
3.数组单独访问:
数组的中括号 “ [ ] ” 只有在定义一个数组的时候,才表示数组大小,其余的任何情况都表示用小标来访问数组。
循环的方式遍历数组:
for(int i =1;i<100;i++){
printf( “%d”,array[i-1]);
}
数组和函数:
/提示用户输入10个数,找到最大值,最小值,算出平均值/
int main(){1.定义一个10个整型数的数组2.初始化数组 2.1提示用户输入第多少个数 2.2获取用户输入scanf();3.找分数,找最高分4.找最低分//在最大值和最小值中设计到小算法(定义一个max变量,把第一个数组赋值给变量max,然后再进行一一比较,若后面的值大于max当前值,就给max重新赋值。)5.计算平均值 5.1算出总分 5.2算出平均值6.输出结果 }
案例一:正序 和 逆序 输出数组 的案例:
#includeint main(){ int array[10]; int i; for(i=0 ; i<10 ;i++){ array[i]=i; } puts("当前数组是\n"); for(i=0 ; i<10 ;i++){ printf("%d",array[i]); } puts("逆序数组是\n"); for(i=9 ; i>=0 ;i--){ printf("%d",array[i]); } return 0;}
案例二:提示用户输入10个数,找到最大值,最小值,算出平均值的案例
#include int main(){ //定义一个10个和整型数的数组 int array[10]={0}; int max; int min; int add; float average; //初始化数组 for(int i = 0 ; i<10 ; i++){//2.1提示用户输入第多少个数printf("请输入第%d个数据\n",i+1);//2.2获取用户输入scanf()scanf_s("%d",&array[i]); } //找出最大值 max = array[0]; for(int i = 0 ; i<10 ; i++){ if(max < array[i]){ max = array[i]; } } printf("最大的数据是%d\n",max); //找出最小值 min = array[0]; for(int i = 0 ; i<10 ; i++){ if(min > array[i]){ min = array[i]; } } printf("最小的数据是%d\n",min); //5.1算出总数 add = 0; for(int i =0 ; i<10 ;i++){ add +=array[i]; } //5.2算出平均值 average =(float)add / 10; //6.输出结果 printf("平均值%f\n",average);}
数组和函数结合,数组名可以当做实际参数,
三、如何计算数组中元素的个数?
数组的总大小 / 一个类型的大小
int a[3]; //一个整数占用空间4个字节,3个占有12个字节。
char b[3]; //一个char型占用空间1个字节,3个占用3个字节。
printf (“a数组的大小:%d\n”,sizeof(a));
printf (“一个整型的空间是:%d\n”,sizeof(int));
四、两个数组有什么相同点/不同点
相同点:数组元素个数为3
不同点:1.元素类型不同 2.数组的内存大小不同
五、如何计算数组元素的个数 ?
数组的总大小 / 一个类型的大小
printf(“a数组有%d个元素\n”,sizeof(a)/sizeof(a[0]));
案例三:斐波那契数列
#includeint main(){ int array[30]; int i; int arraySize; arraySize = sizeof(array)/sizeof(array(0)); array[0]=0; array[1]=1; for(i=2;i<arraySize;i++){ array[i]=array[i-1]+array[i-2]; } for(i=0;i<arraySize;i++){ printf("%d",array[i]); } printf("斐波那契\n"); return 0;}
案例四:(数组)冒泡排序算法
#includeint main(){ int array[]={12,8,9,13}; int i; int j; int tmp; int len = sizeof(array)/sizeof(array[0]); for(i=0 ; i<len-1 ;i++){ //从大到小 for(j=0 ; j<len-1-i ;j++){ if(array[j]<array[j+1]){ tmp = array[j]; array[j] = array[j+1]; array[j+1] = tmp; } } }for(i=0 ; i<len ;i++){ printf("%d",array[i]);}}
六、!!面试题:请输出数组a中有多少个元素?!!!
sizeof(a) / sizeof(a[0]);
!! void arrayprint(int datas[100]);
printf(“数组的大小是%d\n”,sizeof(datas));
结果是4;
是因为:形式参数中,虽然写的是一个数组的样子,中括号中的数组的大小是无效的!!无论中括号写多少,都不能代表形式参数数组多大。这里的中括号的作用仅仅用来表示,该参数是一个地址!!!
!!数组名 = 数组的首地址 = 第一个元素的地址!!
void arrayprint(int array[ ] , int cnt) //第一个参数是数组的首地址 ,第二个参数是数组的个数
案例五:用函数封装的升级版带参数的案例:
#include//遍历数组函数void arrayprint(int array[],int cnt){ //形式参数中,虽然写的是一个数组的样子,中括号中数组的大小是无效的!!//无论中括号写多少,都不能代表形式参数数组多大。这里的中括号的作用仅仅用来表示,该参数是一个地址!!!int i;for(i = 0;i<cnt;i++){ printf("%d\n",array[i]);}int main(){int datas[5] = {11,22,33,44};arrayprint(datas,sizeof(datas) / sizeof(datas[0]));//参数 1.数组名 = 数组首地址 2.数组中元素个数arrayprint(&datas,sizeof(datas) / sizeof(datas[0])); return 0;}
案例六:用函数封装的升级版带提示用户输入10个数,找到最大值,最小值,算出平均值的案例!
#include//初始化数组函数void initscores(int array[],int size){int i; for(i=0;i<size;i++){ printf("请输入第%d个学生成绩\n",i+1); scanf_s("%d",&array[i]); if(array[i]<0 || array[i]>100){ //在双条件判断的时候用 ”||”(或) printf("输入成绩错误,请重新输入\n"); exit(-1); } }}//打印数组函数void scoreprint(int array[],int size){int i;for(i=0;i<size;i++){ printf("请输入第%d个学生成绩为%d\n",i+1,array[i]);}}//找到最高分int Maxvalue(int array[],int size){int j;int max = array[0];for(j=0;j<size;j++){ if(max < array[j]){ max = array[j]; }}printf("最高分是%d\n",max);}//找到最低分int Minvalue(int array[],int size){int j;int min = array[0];for(j=0;j<size;j++){ if(min > array[j]){ min = array[j]; }}printf("最低分是%d\n",min);}//算出平均分void average(int array[],int size){int add = 0;float average;int i;for(i = 0 ; i<size; i++){ add +=array[i];}arrayage=(float)add / size;printf("平均值为%d",average);} int main(){ //定义数组 int scores[10]={0}; int len = sizeof(scores) / sizeof(scores[0]); //初始化数组 intitscores(scores,len); //打印数组 scoreprint(scores,len); //找到最高分 Maxvalue(scores,len); //找到最低分 Minvalue(scores,len); //算出平均分 average(scores,len); return 0;}