zoukankan      html  css  js  c++  java
  • 简单学C——第四天

    数组

    在学数组之前,有必要把前面的知识复习一遍,当然我的复习,仅仅只是提一下,而对于你,则应该认真的看一下前面的知识点,不懂可以百度,哈哈。

    前面我们大致学了 1.定义变量,2.数据的输入与输出,3.判断语句if...else if ...else  ,4.循环语句 while,do while,for 三种循环方式。

     

    然而上面面讲的都是废话。。。下面开始讲数组。

    数组是什么?数组是构造数据类型。很难懂吗?说直白一点,数组就是很多个相同的数据类型的元素聚集在一起之后的结果。

    当然,使用数组的时候,同样需要定义它。还记得怎么定义一个变量吗?   现在,请定义一个整型变量a。如果你认真复习过前面的类容,相信可以很容易写出来 int  a; 这样的语句。那么,我现在问,如何定义1000个整型变量,难道要取一千个变量名,诸如int a,b,c,d,e......;这样吗?那也太麻烦了吧。所以就出现了数组这一概念。数组的定义很方便,如下

    #include<stdio.h>
    int main()
    {//定义了有一千个空间的整型变量
    //此时在计算机中会开辟1000个整型大小的内存空间
    //每个空间都可以表示一个整型变量
        int a[1000];
    }

     上面的程序中就定义了一个大小为1000的整型数组。当然数组的出现就是为了输入和存储的方便。运用数组一般都与上一篇文章的循环相结合。

     1.从键盘中第一行输入一个数字a,第二行输入a个数字,按回车,然后出现每个数字加一的结果。

     代码:

    #include<stdio.h>
    int main()
    {
      //为防止出现n的值过大的情况,一般吧数组开的比较大
       int n,i,a[100000];
       scanf("%d",&n); //从键盘中输入一个数
       for(int i=0;i<n;i++) 
       {//通过循环从键盘中输入n个数
           scanf("%d",&a[i]);
        //i代表着数组的下标,数组下标从0开始
       }
       for(int i=0;i<n;i++)
       {
           a[i]+=1;//通过循环使数组中的每个数都加1
           //输出结果
           printf("%d ",a[i]);
       }
       return 0;
    }

    运行结果

     当然用while循环也能做到如上操作,自己可以试试,此处就不再说明了。真正值得关注的是,1.数组必须提前说明开辟了多少的空间,并且要开的够用。例如上题,如果第一行输入的是n是1001

    ,很明显,我只开了1000个空间,只能存放1000个数,这种现象称为数组越界,程序虽然可以运行,不会报错,但是是错误的。2.访问数组存放的第一个数是0,即a[0]代表数组存放的第一个数,a[n-1]代表数组存放的最后一个数。3.数组空间是逻辑地址是连续的,即可以通过0~n-1来访问数组中的所有的元素。

    2.观察这段数字 1,1,2,3,5,8,13,21... 发现规律,现在从键盘中输入一个小于50的数m,按下回车,输出数列中的第m个数。

    可以看出,这个数的前两数的和等于这个数。即  a(n)=a(n-1)+a(n-2) n>=3 

    规律发现了,那么用程序如何实现它:

    #include<stdio.h>
    int main()
    {
     /*用数组来存放这个数列,
     因为已知前两个数,就能知道下一个数
     ,所以可以用递推的思想来求解*/
      int n,i,a[50];
      //数组的下标从0开始,
      a[0]=1;
      a[1]=1;
      for(i=2;i<=50;i++)
      {
          //递推式
          a[i]=a[i-1]+a[i-2];
      }
      scanf("%d",&n);
      /*由于数组下标从0开始,a[0]即数列的第一个数
      所以第n个数是a[n-1].*/
      printf("%d",a[n-1]);
    }

    运行结果

    3.不止语句是可以嵌套使用,数组同样也可以,比如如果有两个数组a[100],b[100]。如果b数组是一个整型数组,完全可以用b数组里面的某个数数来表示a数组的下标,例如a[b[i]]; b[i]作为了a数组的下标.

    不过数组用的比较多的不只是存数字,它还可以存字符,即字符数组,定义一个字符数组:char a[100];每一个空间可以存放一个字符,例如,'a','b','.'.'?','8'......等。此处需要区分字符数组与字符串的区别。字符串一般都有一个结束符‘’,放在存放的字符末尾.表示字符串的结束.例如我要存放"good,time",一共有九个字符,在数组中需要开辟10个空间,存放情况为'g','o','o','d',',','t','i','m','e',''.最后一个为结束符.并且对于字符数组的操作c定义了许多的库函数,有些例如复制syrcpy,求长度strlen,比较strcmp函数都是很常用的,需要掌握它。

    例题:从键盘中输入一串字符串,无空格,把它倒着输出出来

    代码:

    #include<stdio.h>
    //关于字符,库函数所以需要的头文件
    #include<string.h>
    int main()
    {
        int i,l;
        char a[10000];
        //输入字符串
        scanf("%s",a);
        //库函数求字符串的长度
        l=strlen(a);
        //倒着输出
        for(i=l-1;i>=0;i--)
            printf("%c",a[i]);
    }

    由于只想着能让大家对c语言有一个简单的整体的认识,并且限于个人水平,所以都写的是一些比较基础的东西。如想了解的更深入需要自己去下功夫。

  • 相关阅读:
    图像切割之(五)活动轮廓模型之Snake模型简单介绍
    拓扑排序的原理及事实上现
    理解class.forName()
    Java中StringBuilder的清空方法比較
    Java实现BASE64编解码
    KMP算法具体解释(贴链接)
    基于PCM2912a的USB声卡设计
    51. 腾讯面试题:一个二叉树,中序遍历,找一个节点的后一个节点
    Handler和HandlerThread
    Nuget-QRCode:jquery-qrcode
  • 原文地址:https://www.cnblogs.com/stffer/p/4851705.html
Copyright © 2011-2022 走看看