今天要进行一个重要元素数组的学习了。这一章要掌握什么是数组,数组怎么样命名,数组怎么样使用,以及一些常见的错误和需要注意的事项。

一、      数组的基本概念

  • 数组是可以在内存中连续存储多个元素的结构//就像是多个int绑定在一起了,数据类型不一定非要是int也可以是其他的数据类型。
  • 数组中的所有元素必须属于相同的数据类型//说是int就要大家都是int,不然不能在一起愉快玩耍。
  • 二、      数组的特点

    • 只能存放一种类型的数据,比如int类型的数组、float类型的数组,//就像上面说的,一个数组只能有一种类型的数据。
    • 里面存放的数据称为“元素”
    • 三、         声明和使用数组

      • 声明数组的类型  // 就是基本数据类型选一个。
      • 声明数组的元素个数(需要多少存储空间)//标明以后电脑才能知道你这个数组到底是几个基本数据类型绑在一起的,需要多大的地方。
      • 书写格式:
      • 元素类型 数组名[元素个数];

        比如:int ages[3];

      • 简单使用
      • 简单初始化:int ages[5] = {19, 19, 20, 21, 25};

        元素有顺序之分,每个元素都有一个唯一的下标(索引),从0开始

        数组元素的访问:a[i]

      • 要注意不管是往数组里面赋值还是提取出来使用都是从下标0开始的。下标的意思就像是书名或者房间号,是一个数组里面其中一个数的标识。
      • 初始化方式

        int a[3] = {10, 9, 6};//正常书写方式

        int a[3] = {10,9};//少赋值一个也是可以的,没赋值的空位默认为0

        int a[] = {11, 7, 6};//前面没有标明数量,但是后面给了几个数值,电脑就会默认这个数组有几个位置。

        l   常见错误

        int a[];//既没给数量,也没赋几个值给它。

        int[4] a;//这种方式在java里面可以,但是在C语言中是错误的。

        int a[b];//中括号里面的是数量,数量必须是数字,还得是整数。

        a = {10, 11};//没给类型,而且不给数量也要加上中括号的。

        a[4] = {10,9,8,5}; //没给数据类型。

      • 示例:
      • //声明数组: 数据类型 数组名[数组长度] ;

        int scores[5];

        //为数组赋值: 数组名[下标]=值; --->下标从0开始

        scores[0]=10;

        scores[1]=20;

        scores[2]=30;

        scores[3]=40;

        scores[4]=50;

        //获取数组中的元素: 数组名[下标];

        printf("%d,%d,%d,%d,%d\n",scores[0],scores[1],scores[2],scores[3],scores[4]);

        //声明赋值一步完成: 数据类型 数组名[长度]={值1,值2....};注意:对应的值的个数应该与长度对应

        int nums[5]={1,2,3,4,5};

        printf("%d,%d,%d,%d,%d\n",nums[0],nums[1],nums[2],nums[3],nums[4]);

        int arr[10] = {9,8,7,5};//正确,6个元素未赋值将使用默认值(0)

        int arr[] = {9,8,7};//正确 ,未指定数组的长度(数组长度取决于元素的个数)

        示例2:让用户输入5个成绩,根据用户输入的成绩计算最高分,最低分和平均分

      • int scores[5];//声明一个数组用于存储用户输入的成绩

        int sum=0,avg;//总成绩和平均成绩

        int max;//最高分

        int min;//最低分

        int i;

        //循环获取用户输入的成绩,并将其输入成绩保持到数组中

        for(i=0;i<5;i++){

        printf("请输入第%d个人成绩:",i+1);

        scanf("%d",&scores[i]);

        sum+=scores[i]; //计算总成绩

        }

        avg=sum/5;//计算平均成绩

        min=max=scores[0];//假设第一个人的成绩是最高分,最低分

        for(i=1;i<5;i++){

        if(scores[i]>max){//获取最高分

        max=scores[i];

        }

        if(scores[i]<min){//获取最低分

        min=scores[i];

        }

        }

        printf("平均分为:%d,最高分是%d,最低分%d\n",avg,max,min);

        冒泡排序:主要精髓在于,升序:n个数字来排队,两两比较小靠前。外层循环N-1(控制需要比较的轮数)内层循环N-1-i(控制每轮比较的次数,i是外层循环变量)

      • 这个方法要记好,很多时候都能用到,下图是冒泡排序的一种示例和示例的图解。(没事要多看)

      • int nums[]={10,3,8,1,6};

        int i,j,temp;

        //外层控制比较的轮数(5个数字比较4轮)

        for(i=0;i<4;i++){

        //内层循环控制每轮比较的次数

        for(j=0;j<4-i;j++){

        if(nums[j]>nums[j+1]){//交换顺序

        temp = nums[j];

        nums[j]=nums[j+1];

        nums[j+1]=temp;

        }

        }

        }

        printf("排序后的数字为:");

        //利用循环遍历输出

        for(i=0;i<5;i++){

        printf("%d\t",nums[i]);

        }

      • 以上是一维数组,接下来是二维数组:
      • 二维数组可以看作是由一维数组的嵌套而构成的,二维数组可以看成是一个表格,有长和宽的表格。
      • 二维数组: 一维数组中的值为一个数组.

        声明: 数据类型 数组名[rowsize][colsize];

        int nums[4][2];

      • 声明并赋值:

        int nums[4][2]={{10,11},{20,21),{30,31},{40,41}}; 正确//常规写法

        int nums[][2]={{10,11},{20,21),{30,31},{40,41}}; 正确//和一维数组一样行的数量可以由后面提供的数值数量进行默认处理

        int nums[4][]={{10,11},{20,21),{30,31},{40,41}}; 错误//二维数组可以忽略行的数量但是列的数量必须有

      • 示例:声明一个三行三列的二维数组用于保持用户输入的整型数据,打印用户输入的数据并计算对角线之和,下图是图解

      • int nums[3][3];

        int i,j,sum=0;

        //循环获取用户输入的数据,并将其数据保存到二维数组中

        for(i=0;i<3;i++){

        for(j=0;j<3;j++){

        printf("请输入第%d行第%d列数据\n",i+1,j+1);

        scanf("%d",&nums[i][j]);

        }

        }

        //循环遍历二维数组的数据,并打印成矩形

        for(i=0;i<3;i++){

        for(j=0;j<3;j++){

        printf("%d\t",nums[i][j]);

        if(i==j){

        sum+=nums[i][j];

        }

        }

        printf("\n");

        }

        printf("二维数组对角线之和为%d",sum);

      • 课后作业,由于格式原因下面的代码没有进行缩进,因为是课间抽时间写的博客,所以暂时没时间想办法调整,有时间了一定要调整一下。
      • 作业1.根据用户输入的10人成绩并将其保存到数组中,求最高成绩,最低成绩和平均成绩

      • #include <stdio.h>
        void main(){
        //作业1.根据用户输入的10人成绩并将其保存到数组中,求最高成绩,最低成绩和平均成绩.
        int sum[10];//数组名及长度
        int i,max,min,args,he=0;//循环变量,最高,最低,平均值,十个人总分
        for(i=0;i<10;i++){//获取及十个人总分
        printf("输入第%d个人的成绩:\n",i+1);
        scanf("%d",&sum[i]);
        he+=sum[i];
        }
        args=he/10;
        max=min=sum[0] ;
        for(i=1;i<10;i++){
        if(sum[i]>max){
        max=sum[i];
        }
        if(sum[i]<min){
        min=sum[i];
        }
        }
        printf("平均分为:%d,最高分是%d,最低分%d\n",args,max,min);

      • 作业2.根据用户输入的5个数字并将其保存到数组中,对其进行从高到低排序

      • .根据用户输入的5个数字并将其保存到数组中,对其进行从高到低排序.
        // 外层循环N-1(需要比较的轮数),
        // 内层循环N-1-i(每轮需要比较的次数,其中i为外层循环变量)
        int sum[5];//数组名及长度
        int i,j,k;//两个循环变量及临时变量
        for(i=0;i<5;i++){//获取输入的5个数值
        printf("输入第%d个数\n",i+1);
        scanf("%d",&sum[i]);
        }
        for(i=0;i<4;i++){//比较大小进行排序
        for(j=0;j<4-i;j++){
        if(sum[j]<sum[j+1]){
        k=sum[j];
        sum[j]=sum[j+1];
        sum[j+1]=k;
        }
        }
        }
        printf("排序后的数字是:");//打印得出的结果
        for(i=0;i<5;i++){
        printf("%d\t",sum[i]);
        }

      • //作业3.根据用户输入的10个数字并将其保存到数组中,用户输入要查找的数字,
        //如果查找到该数字打印其在数组中的位置,否则打印该数组中没有你要查找的元素。
        int sum[10];//数组名及长度
        int i,find,flag=0;//循环变量及用户查找的数值
        for(i=0;i<10;i++){//根据用户输入的10个数字并将其保存到数组中
        printf("输入第%d个数",i+1);
        scanf("%d",&sum[i]);
        }
        printf("你想找哪个\n");//获取用户想要查找的数值
        scanf("%d",&find);
        for(i=0;i<10;i++){//对比数值如果查找到该数字打印其在数组中的位置
        if(find==sum[i]){
        printf("%d在数组中的第%d个位置",find,i+1);
        flag=1;
        }
        }
        if(flag==0){//否则打印该数组中没有你要查找的元素。
        printf("对不起,该数字%d没有在数组中",find);
        }

      • 作业4.打印杨辉三角(用二维数组)
        1
        1 1
        1 2 1
        1 3 3 1
        1 4 6 4 1
        int sum[5][5];
        int i,j;
        for(i=0;i<5;i++){//第1列值为1,对角线的值为1
        sum[i][0]=1;;//为第一列赋值为1
        sum[i][i]=1;;//为对角线赋值为1
        }
        for(i=2;i<5;i++){//当前元素的值=头上的元素+头上左边的元素
        for(j=1;j<i;j++){//j=1从第二列下标1开始
        sum[i][j]=sum[i-1][j]+sum[i-1][j-1];
        }
        }
        for(i=0;i<5;i++){//循环变例输出
        for(j=0;j<=i;j++){
        printf("%d\t",sum[i][j]);
        }
        printf("\n");
        }

C语言学习第五章的更多相关文章

  1. Go语言学习笔记五: 条件语句

    Go语言学习笔记五: 条件语句 if语句 if 布尔表达式 { /* 在布尔表达式为 true 时执行 */ } 竟然没有括号,和python很像.但是有大括号,与python又不一样. 例子: pa ...

  2. Java基础知识二次学习--第五章 数组

    第五章 数组 时间:2017年4月26日15:11:30~2017年4月26日15:15:54 章节:05章_01节  视频长度:09:30 内容:一维数组的内存分析 心得: Java中数组是引用类型 ...

  3. C#高级编程 (第六版) 学习 第五章:数组

    第五章 数组 1,简单数组 声明:int[] myArray; 初始化:myArray = new int[4]; 为数组分配内存. 还可以用如下的方法: int[] myArray = new in ...

  4. C语言学习第六章

    今天开始尝试改变! 今天要学习函数,一个C语言中的重要组成部分. 首先先聊聊为什么要使用函数?随着学习的深入很多人会发现某段的代码重复使用的几率很大,而如果用一次写一次的话很明显的效率就会比较低,如果 ...

  5. C语言学习第四章

    今天学习C语言循环结构,为什么要用循环呢?因为有时候我们对一堆的数字进行重复的处理的时候要重复的编写一些相同或者差不多的代码,让程序显得很臃肿,而且写着也麻烦,如果用循环来写的话能简化很多,出错的话也 ...

  6. C语言学习笔记第一章——开篇

    本文章B站有对应视频 (本文图片.部分文字引用c primer plus) 什么是C语言 顾名思义,c语言是一门语言,但是和我们所讲的话不同,它是一门编程语言,是为了让机器可以听懂人的意思所以编写的一 ...

  7. C 语言学习 第五次作业总结

    第五次作业,主要学习和复习的是几种循环结构的使用. 在前一次的课堂上,同学们已经学习了分支语句的使用.分支语句和循环语句配合使用,就可以写出更多的,逻辑功能丰富的代码了. 逻辑功能的丰富,也意味着学习 ...

  8. C语言学习第七章

    今天开始学习指针,指针在C语言中具有很重要的地位,按照老师所说,学C学不好指针跟没学一样,可见指针在C语言中的重要地位.废话不多说,首先我们先要知道什么是指针. 指针:指针是一个变量,它存储另一个对象 ...

  9. C语言学习的第一章

    首先,学习编写程序要先知道什么是程序,我们为什么要写程序? 程序就是为了让计算机执行某些操作或解决某个问题而编写的一系列有序指令的集合.程序里有很多算法,算法是解决问题的具体方法和步骤,就像我们想要得 ...

随机推荐

  1. 求m和n的最大公约数和最小公倍数

    题目:输入两个正整数m和n,求其最大公约数和最小公倍数. 做这道题时,特意去查看了一下什么是最大公约数和最小公倍数. 后来直接去看了求解的思想,相信到企业中不会要求你闭门造车,若已有先例,可以研究之后 ...

  2. 队列工厂之RedisMQ

    本次和大家分享的是RedisMQ队列的用法,前两篇文章队列工厂之(MSMQ)和队列工厂之RabbitMQ分别简单介绍对应队列环境的搭建和常用方法的使用,加上本篇分享的RedisMQ那么就完成了咋们队列 ...

  3. Spring-boot中使用@ConditionalOnExpression注解,在特定情况下初始化bean

    想要实现的功能: 我想在配置文件中设置一个开关,enabled,在开关为true的时候才实例化bean,进行相关业务逻辑的操作. 具体实现: 1:要实例化的bean 2. 配置类 代码: 想要实例化的 ...

  4. linux yum下载文件的存放位置

    默认是: /var/cache/yum也可以在 /etc/yum.conf 指定cachedir=/var/cache/yum #存放目录keepcache=1 #1为保存 0为不保存metadata ...

  5. WebSocket数据包协议详解

    其实我一直想不明白HTML5包装个应用层办议作为Socket通过基础目的是为了什么,其实直接支持Socket tcp相对来说更加简单灵活.既然标准已经制定而浏览器也支持那对于我们开发者来说只能用的分. ...

  6. 解决ecshop进入后台服务器出现500的问题

    ecshop安装完成以后,前台页面打开正常,但是后台页面大家会出现500错误,看了很多的论坛和网站,删除过top.htm里面的JS代码的,.htaccess文件的修改的,都没有解决,后来找到原因, 原 ...

  7. TCP/IP笔记(三)数据链路层

    数据链路的作用 数据链路层的协议定义了通过通信媒介互连的设备之间传输的规范.通信媒介包括双绞线电缆.同轴电缆.光纤.电波以及红外线等介质.此外,各个设备之间有时也会通过交换机.网桥.中继器等中转数据. ...

  8. C++标准库之stack(各函数及其使用全)

    原创作品,转载请注明出处:http://www.cnblogs.com/shrimp-can/p/5283207.html 栈是后入先出的.成员函数有: 1.栈的声明 std::deque<in ...

  9. jQuery 事件——关于select选中

    场景: eg:在管理一篇博文时,因博文的管理有一列叫:状态的列,该列有诸多状态,如:正常,待审核,删除等... 此时,若使用Select下拉列表进行状态选择,并在选中具体项值后,通过Ajax异步提交, ...

  10. jsp页面中从forEach里向action里面传递其中的一个对象

    <c:forEach var="user" items="${users }"> <form action="user_update ...