【C语言从入门到入土】第四章数组

第四章 数组

———————-数组的引入

你所有的压力,都是因为你太想要了,你所有的痛苦,都是因为你太较真了。有些事不能尽你意,就是在提醒你改转弯了。

如果事事都如意,那就不叫生活了,珍惜所有不期而遇,看淡所有的不辞而别。


在这里插入图片描述

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 j0123
08,12,13,98,12,13,98,12,9,1313
18,12,98,9,1212
28,99
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 j0123
012 8 13 912 8 99 813
113 8 12 912 8 912
213 8 12 99
3

我们由现象去分析本质,,去推导出一个可以适用于所有数排序的规律

二维数组

1.什么时候要用二维数组

在这里插入图片描述

在这里插入图片描述

2.怎么样定义一个二维数组

在这里插入图片描述

在这里插入图片描述

3.二维数组的初始化
3.1.按行列的初始化

在这里插入图片描述

3.2.没明确行列,类似一维数组

在这里插入图片描述

3.3.部分赋初值

1.在这里插入图片描述

2.在这里插入图片描述

3.在这里插入图片描述

4.可以不写行,但是一定要写列

在这里插入图片描述

4.二维数组的遍历

在这里插入图片描述


  • 55
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橘猫.exe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值