数组是在代码中常见的重要工具,今天就让我们解析下数组的用法。
一、数组的概念
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.定义:用来存放字符数据的数组是字符数组,字符数组中的每一个元素存放一个字符,定义字符数组的方法与定义数值型数组的方法类似。
2.字符串与字符数组 是否以‘\0’结尾
字符数组:结尾无‘\0’,元素占满。
如:
#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’结尾
如:
#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);
如果字符串1=字符串2,则函数值为0
如果字符串1>字符串2,则函数值为一个正整数
如果字符串1<字符串2,则函数值为一个负整数
不能直接比较,必须用strcmp的函数值进行判断!!
像“Tsinghua”“TSINGHUA” 则比较开始第一个不一样的字母ASCII表
在这里推荐下我们欧阳佳老师的941.code!!(直接搜索这个第一个就是了~)特别特别好用 基础题提高题都有!!重要是它免费啊()
中国人不骗中国人(拍胸脯)真的真的很好用~
最后的最后,感谢欧阳佳老师的ppt内容!!
zz