第四章 数组
———————-数组的引入
你所有的压力,都是因为你太想要了,你所有的痛苦,都是因为你太较真了。有些事不能尽你意,就是在提醒你改转弯了。
如果事事都如意,那就不叫生活了,珍惜所有不期而遇,看淡所有的不辞而别。
文章目录
4.1如何定义一个数组
1.相同的数据类型,,,关于中括号[ ]的解释
- 定义的时候表示数组中元素的总个数,int a[10];
- 下标法表示数组中的某个元素,从0开始计数
2.数组如何遍历
- 下标法访问
- 结合循环控制语句
- 数组的地址为连续的
/****************************
*****第一步;先给数组赋值******
**第二步;把数组的值给打印出来**
*****过程中用到的是for循环****/
#include<stdio.h>
int main(){
int a[10];
int b;
/*1.给数组赋值*/
for(b=0;b<=9;b++)//一个数组里面有十个,从0开始,所以到9一共是10个,,刚好
{
a[b]=100+b;
}
puts("赋值完成");
for(b=0;b<=9;b++){
puts("a[b]=%d",a[b]);这个有坑,,puts只能输出纯字符
printf("a[b]=%d\n",a[b]);//这个也有坑,b是输出不出来
printf("a[%d]=%d\n",b,a[b]);//这样可以输出,可以看下面运行结果
}
puts("done");
return 0;
}
运行结果,,,好好看好好学
3.初始化的方式
1.全部赋值,,,数很多的时候会很麻烦
2.部分赋值,,优先向前排,其余剩下的赋值为0
3.初始化为0
4.写法,由数组元素的个数来确定数组的长度
4.数组的各种初始化方式以及數組的大小计算(代码)
sizeof() 关键字,,可以计算括号里面数据的内存空间大小!!!!!注意他不是函数,面试可能会问
#include<stdio.h>
int main()
{
int array1[5]={1,2,3,4,5}; //1.全部赋值
int array2[5]={1,2,}; //2.部分赋值
int array3[5]={0}; //3.全部赋值为0
int log;
log =sizeof(array1)/sizeof(array1[5]); //数组的个数,或者长度= 数组的总大小/一个数组的大小
printf("array:%d\n",log);
for(int a=0;a<5;a++){
printf("地址%p,,数字%d\n",&array1[a],array1[a]);
}
return 0;
}
4.2编程案例
1.数组初始化及逆序输出
#include <stdio.h>
int main()
{
int array[10];
for(int a =0;a<=9;a++){ //初始化数组
array[a] =a;
}
for(int a =0;a<=9;a++){//前面定义的变量到后面就不能用了
printf("正常顺序为%d ",array[a]);
}
printf("\n");
for(int c =9;c>=0;c--){
printf("逆序输出为%d ",array[c]);
}
return 0;
}
2.斐波那契数列
#include<stdio.h>
int main(){
int array[30];
int array[0]=0; //赋值不需要定义
int array[1]=1;
for(int a=3;a<=30;a++){ //最好做一个数组长度的计算
array[a]=array[a-1]+array[a-2];//应该是2,,其实2已经是第三个数了
}
for(int a=0;a<=30;a++){
printf("%d ",array[a]);
}
return 0;
}
报错了我滴宝,,,!!注意了
再来一次
#include<stdio.h>
int main(){
int array[30];
array[0]=0;//不需要加数据类型
array[1]=1;
//int arraysize =sizeof(array[])/sizeof(array[0]);//错误写法
int arraysize =sizeof(array)/sizeof(array[0]);
for(int a=2;a<=arraysize;a++){
array[a]=array[a-1]+array[a-2];
}
for(int a=0;a<=30;a++){
printf("%d ",array[a]);
}
return 0;
}
3.冒泡排序法,面试要考滴
现在来分析一下,,有这么四个数,12,8,13,9————-从小到大排列
这个数组的长度为4,数组从0开始,所以正好到3
1.首先我们来进行第一轮第一次比较,把 i 设为行(轮数),,j 设为列(比较的次数),,
12跟8进行比较,得到的结果为,,,12跟后面的13比较,得到的结果为,,,13跟9开始比较,得到一个结果,,此刻,最大的一个数冒出水面
2.开始第二轮第一次比较,此时只剩下3个数 8,12,9,,,8跟12开始比较,得出8,12,9,,,然后第二次比较12跟9,得出8,9,12
最大的一个数,12冒出水面
3.开始第三轮第一次比较,此刻为8,9两个数,比较得出,8,9,,9是最大数
i j | 0 | 1 | 2 | 3 | |
---|---|---|---|---|---|
0 | 8,12,13,9 | 8,12,13,9 | 8,12,9,13 | 13 | |
1 | 8,12,9 | 8,9,12 | 12 | ||
2 | 8,9 | 9 | |||
3 |
分析上述
通过以此,我们不难看出,原理其实就是,第一个数跟第二个比较,如果满足条件就不需要交换,如果不满足就需要交换,然后第二个数跟第三个比较,第三个跟第四个比较,以此类推
那么,我们分析他的轮数,一共有四个数,比较了三轮,四(数字的个数)-1 = 三轮;;;现在看次数,第一轮比较了3次;第二轮2次;第三次1次,次数依次在递减,这个次数跟轮数有什么关系呢??
3=4(数组长度)-1(猜出来的数) 2=4 - 2(多出来一个1哪里来的?) 1=4-3(又多出来一个2?)什么规律??????????轮数为i < len-1,,,那次数呢?,,j < len - 1-x,这个x与轮数有什么关系,,,j < len - 1 -i;
/*从小到大排序*/
#include <stdio.h>
int main(){
int array[]={12,8,13,9};
int tmp;
int len =sizeof(array)/sizeof(array[0]);
for(int i=0;i<len-1;i++)
{
for(int j =0;j<len-1-i;j++)
{
if(array[j]>array[j+1])
{
tmp = array[j+1];
array[j+1] = array[j];
array[j]=tmp;
}
}
}
/*给个反馈*/
for(int a =0;a<len;a++)
{
printf("%d ",array[a]);
}
return 0;
}
4.简单排序法,面试题
怎么比呢?永远都是第一个数依次跟第234…后面的数相比较,,如果满足就换,不满足就不动,反正永远是第一个跟后面的比较,然后所有的都比较完之后,开始第二个数依次跟后面的比较,,,,以此类推,最后排完整个
还是四个数,8 12 13 9,,从大到小排序
i j | 0 | 1 | 2 | 3 | |
---|---|---|---|---|---|
0 | 12 8 13 9 | 12 8 9 | 9 8 | 13 | |
1 | 13 8 12 9 | 12 8 9 | 12 | ||
2 | 13 8 12 9 | 9 | |||
3 |
我们由现象去分析本质,,去推导出一个可以适用于所有数排序的规律
二维数组
1.什么时候要用二维数组
2.怎么样定义一个二维数组
3.二维数组的初始化
3.1.按行列的初始化
3.2.没明确行列,类似一维数组
3.3.部分赋初值
1.
2.
3.
4.可以不写行,但是一定要写列
4.二维数组的遍历
标签:初始化,12,入门,int,C语言,入土,数组,printf,array From: https://blog.csdn.net/v13111329954/article/details/139511120