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语言有一个简单的整体的认识,并且限于个人水平,所以都写的是一些比较基础的东西。如想了解的更深入需要自己去下功夫。

  • 相关阅读:
    Java实现 蓝桥杯VIP 算法训练 字符删除
    Java实现 蓝桥杯VIP 算法训练 字符删除
    Java实现 蓝桥杯VIP 算法训练 字符删除
    Java实现 蓝桥杯VIP 算法训练 字符删除
    Java实现 蓝桥杯VIP 算法训练 字符删除
    Java实现 蓝桥杯VIP 算法训练 字符串编辑
    Java实现 蓝桥杯VIP 算法训练 字符串编辑
    Java实现 蓝桥杯VIP 算法训练 字符串编辑
    Java实现 蓝桥杯VIP 算法训练 字符串编辑
    Java实现 蓝桥杯VIP 算法训练 字符串编辑
  • 原文地址:https://www.cnblogs.com/stffer/p/4851705.html
Copyright © 2011-2022 走看看