关于数组的解析(一维数组)

数组是在代码中常见的重要工具,今天就让我们解析下数组的用法。

一、数组的概念

1.标识:[ ]

2.结构:一段连续的内存空间,可以存储多个相同的元素,数组创建好之后长度(可存储的元素总个数)是不可变的。

3.定义:创建的数组已经分配了内存空间,但还没存储元素,默认值一般为0,字符串为null

    1>在Java中:格式1   数据类型 [] 数组名=new 数据类型[长度];

         解释:数组中需要存储的元素类型[]数组名=new 数组中需要存储的元素类型[数组长度];

        eg.int [] arr = new int [10];  //创建了一个长度为10的int类型数组,其中默认值都是0。

                          格式2   数据类型[] 数据名={元素1,元素2...}   //创建一个初始化好数据的数组

        eg.String [] strs={"Hello",''world',"work"};   //创建了一个长度为3的字符串类型数据

    2>在c语言中:  格式1   int a[] ;   //[]中必须是数字!!不能是变量!!

                                          for(int i=0;i<m;i++){

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

                              }   解释:先定义,再从a[0]开始将数录入进数组。

                               格式2    int a[数字] ={元素1,元素2...};  / /[ ]中可不写 因为{}中已经表示元素个数

                     eg.int a[4] = {20, 345, 700, 22};  //这表示a[0]=20  a[1]=345 a[3]=700 a[4]=22

                       注意:(1)如果只给前几个元素赋值,而后几个没有写,则会自动初始化为0

                                           初始化:

                                     对于short 、int 、longlong,就是整数 0;
                                     对于charchar,就是字符 ‘\0’;(输出的为0)
                                     对于float 、doubledouble,就是小数 0.0 。

                                 (2)一次性全部初始化为相同值

                                            int a[数字]={想初始化的数值};// 将a[0]=初始化值;

    4.数组中可以使用的一些属性

          (1)下标:对应数组每个存储单元的索引编号

                        从0开始,依次+1,数组中第一个元素的下标就是0,最后一个元素的下标就是数组的长度-1:length-1

                        格式:数组名[下标]

                                  1>存储数据:数组名[下标]=数据; eg.arr[9]=100;                                         

                                  2>取出数据:(Java)数据类型 变量名=数组名[下标];                                                                                                        eg.String str1=strs[2];

                                  3>试用下标时:不要超过数组的范围!!(会发生不可控制的情况)

二.数组的实际运用

        1>依次给数组元素赋值且逆向输出  

#include <stdio.h>

int main() {
	int a[10];
	int i, m;    //定义会用到的变量
	scanf("%d", &m);    //输入元素个数(用的是c语言中的格式1)
	for (i = 0; i < m; i++) {
		a[i] = i;    //利用循环依次输入元素及完成赋值
	}
	for (i = m - 1; i >= 0; i--) {
		printf("%d", a[i]);   //逆向输出也是利用循环,改变循环起点再依次递减。
	}
	return 0;
}

              

       2>斐波那契数列  处理前20项

             运用:爬楼梯(有一段楼梯有n 级台阶,规定每一步只能跨一级或两级,要登上第 n 级台阶有几种不同的走法)

             关键点:a[n]=a[n-1]+a[n-2];

#include<stdio.h>

int main(){
      int i,count=0;
      int a[20]={1,1};
      for(i=2;i<20;i++){
          a[i]=a[i-2]+a[i-1];
} 
      for(i=0;i<20;i++){
         printf("%12d",a[i]);
         count++;
        if(count%5==0){
         printf("\n"); 
       }
   }
      return 0;
}

         3>平移数据

    

#include<stdio.h>

int main(){
     int i,n,a[101],first;
     scanf("%d",&n);
     for(i=0;i<n;i++){
           scanf("%d",&a[i]);

   }
         first=a[0];   //先记录第一个元素
    for(i=1;i<n;i++){
       a[i-1]=a[i];    //从第二个开始,所有元素全部往前移一个位置,最后一个会保持不变
}
      a[n-1]=first;
    for(i=0;i<n;i++){
       printf("%d",a[i]);     //第一个元素放到最后一个位置
}
     return 0;
}
// 需要后置数据前移
for (int i = index; i < length - 1; i++) {
arr[i] = arr[i + 1];
}
arr[length - 1] = 0;// 最后一个元素归0
printArray(arr);

三、字符数组

     1.定义:用来存放字符数据的数组是字符数组,字符数组中的每一个元素存放一个字符,定义字符数组的方法与定义数值型数组的方法类似。

9a703431e3ac47a39e79bf75c8e3306c.png

     2.字符串与字符数组  是否以‘\0’结尾

          字符数组:结尾无‘\0’,元素占满。

如:6e3972b6ad984eb4a7453c27324c251a.png

#include <stdio.h>

int main(){
    char c[5];
    int i;
    for(i=0;i<5;i++){
       scanf("%c",&c[i]);
  }
    for(i=0;i<5;i++){
       printf("%c",c[i]);
  }
    putchar('\n');
    return 0;
}

       字符串:以‘\0’结尾

如:

ad9de354e2f5428d9dac9630cd6be1ab.png

   

#include<stdio.h>

int main(){
    char str[10];
    gets(str);   //gets(str)输入的字符串可以包含空格,尽量用gets()
    puts(str);   //puts()自带换行
    return 0;
}

  3.对于字符串
            1>在C 语言中,将字符串作为字符数组来处理
            2>关心的是字符串的实际长度而不是字符数组的长度
            3>为了测定字符串的实际长度,C 语言规定了字符串结束标志 '\0'
            4>'\0’ 代表ASCII 码为0 的字符是一个不可以显示的字符,“空操作符”
            5>作为字符串结束标志不会产生附加的操作或增加有效字符,只起一个供辨别的标志
            6>字符数组中,只有带 0 的才是字符串,没有 0 的就只是字符数组而已,对字符串的所有操作都不适合。

            7>sizeof(str)用于求字符数组所占空间

关于字符串长度与其实际长度区别

长度:算上“\0”

实际长度:不算上“\0”

    eg. char a[ ]="\\abc"; 

          求其实际长度:4。(“\\”转义符算一个)

   4.字符串数组的运用

strcat函数(拼接作用)

     char *strcat(char *dest, const char *src);--> strcat( 字符数组11,字符数组2)
解释:把两个字符串连接起来,把字符串2 接到字符串1 的后面,结果放在字符数组1 中

#include<stdio.h>
#include<string.h>
int mian(){   //不可以直接对数组名赋值!!如,str1=“China”;
       char str1[30]="People";   //将str1数组的长度设置足够大
       char str2[]="China";
       strcat(str1,str2);
       puts(str1);
       return 0;
}

strcpy函数(复制作用)

      char* strcpy(char* dest, const char* src);--> strcpy( 字符数组1, 字符串2)
      作用是:将字符串2 复制到字符数组1 中去,并且取代掉字符串2中的内容

#include<stdio.h>
#include<string.h>
int main(){
     char str1[10],sre2[]="China";
     strcpy(str1,str2);
     puts(str1);
     return 0;
}

strncpy函数(复制前几个元素)

    char* strncpy(char* dest, const char* src,size_t n);--> strncpy( 字符数组1, 字符串2,n)
  作用是将字符串2 中前n 个字符复制到字符数组1 中去。
•作用是将str2 中最前面2 个字符复制到str1 中,取代str1 中原有的最前面2 个字符
•复制的字符个数n 不应多于str1 中原有的字符

#include<stdio.h>
#include<string.h>
int main(){
     char str1[10]={'\0'},str2[]="China";
     strncpy(str1,str2,3);
     puts(str1);
     return 0;
}

strcmp函数(比较作用)

  int strcmp(const char*stri1,const char* str2); 字符串比较函数
其一般形式为strcmp( 字符串1 字符串2)
◆字符串比较的规则是:将两个字符串自左至右逐个字符相比,直到出现不同的字符或遇到 0 为止
◆如全部字符相同,认为两个字符串相等
◆若出现不相同的字符,则以第一对不相同的字符的比较结果为准

使用方法: strcmp(str1,str2);

05c2048c91a544b8a915c0f064147a9b.png

如果字符串1=字符串2,则函数值为0
如果字符串1>字符串2,则函数值为一个正整数
如果字符串1<字符串2,则函数值为一个负整数

不能直接比较,必须用strcmp的函数值进行判断!!

像“Tsinghua”“TSINGHUA” 则比较开始第一个不一样的字母ASCII表

在这里推荐下我们欧阳佳老师的941.code!!(直接搜索这个第一个就是了~)特别特别好用 基础题提高题都有!!重要是它免费啊()

bd8c290692ce4cef8373a51c32ab63c1.png

中国人不骗中国人(拍胸脯)真的真的很好用~

124603ec11e048f08520ffa04877f6b8.jpg

最后的最后,感谢欧阳佳老师的ppt内容!!

zz

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值