文章目录
前言
本文为笔者在学习数组时认为存在较多的疑难点需要去点明,因此写下这篇文章来总结有关数组的知识点和易错点。
本文将针对于一维数组,多维数组和字符数组来进行归纳总结。
一、维度在数组中的说明
(1)大家可能对宇宙的维度都已经耳熟能详了,宇宙的高层次维度是科学家在针对时间和空间对于人类的束缚时所提出的假象,爱因斯坦曾经预言宇宙最高有11个维度。
(2)其实不只是宇宙,数学中也提出了维度相应的概念,维度(dimensionality),又称为 维数,是数学中独立参数的数目 。 0维是一个无限小的点,没有长度。 1维是一条无限长的直线,只有长度。 2维是一个平面,是由长度和宽度 (或部分曲线)组成面积。
(3)而在数组中维度则表示确定数组中某个元素所需要的数字个数,一个数字确定一个元素就是一维的 ,两个数字确定一个元素就是二维 ,三个数字是三维 ,同样的,n个数字就是n维,简而言之,可以把数组的维看成是“数组套数组的层数”。
二、一维数组
1.标准形式
数据类型 数组名称[整数];
举个简单的例子:
int arr[10];
就表示包含10个整型变量的数组。
2.定义数组时初始化数组的方法
(1)全部初始化:直接确定数组中的全部元素
int a[3] = {1, 2, 3};
(2)用0初始化所有数据
int a[] = { 0 };
(3)不指定数组长度,只初始化数据
int a[] = {1, 2, 3};
(4)只初始化第一个数据,后面用0补齐
int a[3] = {1};
3.一维数组的使用方法
(1)定义数组
int a[3] ;
(2)调用数组并赋值
a[1] = { 3 };
<1>这里一定要记住所有的数组一定是从0开始计算的,即0代表第一,1代表第二,依此类推。
<2>数组的下标既可以是常量,也可以是变量。
<3>变量作为下标比较常用,通常用循环来遍历或输出数组,如下:
for (i = 0; i < 100; i++)
{
arr[i] = i;
}
for (i = 0; i < 100; i++)
{
printf("%d ", arr[i]);
这样通过循环就输出了一个0~99的数组了。
三、二维数组与多维数组
1.标准形式
二维数组的标准形式如下:
数据类型 数组名称[整数1][整数2];
其中总共有整数1*整数2个元素
举个简单的例子:
int arr[10][20];
就表示包含10*20共200个整型变量的数组。
通俗来讲就是10行20列的一个数组。
2.二维数组的初始化
(1)按元素初始化:将所有元素都输入进去
int arr[2][2] = { 1, 2, 3, 4};
(2)按元素部分初始化:只输入一部分元素,其余用0补齐
int arr[2][2] = { 1 };
(3)按行初始化
int arr[2][2] = { {1, 2} , {3, 4} };
(4)按行部分初始化:
int arr[2][2] = { {1, 2} };
3.多维数组的储存
对于一个多维数组 int arr[整数1][整数2]···[整数n]
总空间=数据类型占有的空间整数1整数2*···整数n
四、字符数组
1.标准形式
二维数组的标准形式如下:
char arr[整数];
其含义是数组中共有整数个字符。
2.字符数组的初始化
(1)先定义字符数组,再逐个元素赋值
char arr[4];
arr[0]='l'; arr[1]='o'; arr[2]='v'; arr[3]='e';
(2)在定义的时候就已经初始化了
char arr[4] = {'l','o','v','e'};
char arr[4] = {"love"};
char arr[4] = "love";
2.字符数组的输入输出
(1)单个字符的输入输出
int i;
char arr[10];
for(i=0; i<10; i++)
scanf("%c",&arr[i]);
for(i=0; i<10; i++)
printf("%c",&arr[i]);
(2)字符串的输入输出
char arr[10];
scanf("%s",arr);
printf("%s",arr);
(3)区别分析
<1>单个字符用%c,字符串用%s
<2>scanf函数中单个字符要用取地址&号,字符串不用&号
(4)gets函数与puts函数
<1>gets函数
与scanf函数功能差不多,都是用键盘输入一段字符储存到已经定义的数组中,区别在于gets函数空格本身是作为元素的,而scanf函数中的空格是作为分隔符的
<2>puts函数
与printf函数功能差不多,都是将输入的结果输出,区别是puts函数的()中直接写数组名称,且输出后自动换行,示例如下:
#include<stdio.h>
int main()
{
char arr1[] = "I";
char arr2[] = "Love";
char arr3[] = "You";
puts(arr1); puts(arr2); puts(arr3);
}
最后的输出结果是:
I
Love
You
大家可以根据实际需求来自行选择函数的类型,以便达到最佳的效果。
例题分析: 输入一行由单词和空格组成的字符串,统计单词的总数(空格和 \0 不算单词)
#include<stdio.h>
int main()
{
char[100];
gets(char);
int i,count=1;
if(char[0]==' ')
{
count=0;
}
for(i=0;char[i]!='\0';i++)
{
if(char[i]==' '&&char[i+1]!=' '&&char[i+1]!='\0')
{
count++;
}
}
printf("%d",count);
return 0;
}
说明:
(1)情况1
if(char[0]==' ')
{
count=0;
}
这是当第一个是空格时,纠正统计次数出错的代码。
(2)情况2
for(i=0;char[i]!='\0';i++)
{
}
其中的char[i]!='\0'
是字符串输入的循环终止条件,应记住。
(3)情况3
if(char[i]==' '&&char[i+1]!=' '&&char[i+1]!='\0')
{
count++;
}
这是当两个单词中间不止一个是空格,且倒数第二个是空格时(最后一个是 \0 ),纠正统计次数出错的代码。
3.字符串函数
(1)字符串连接函数—strcat
#include<string.h>
#include<stdio.h>
int main()
{
char arr1[] = "I";
char arr2[] = "Love";
char arr3[] = "You";
printf("%s\n", strcat(arr1, arr2,arr3));
return 0;
}
作用就是将多个字符数组连接在一起组成句子,需要预处理调用库函数#include<string.h>
不要忘记,否则就会出现[Error] 'strcat' was not declared in this scope
这样的错误报告。
输出结果如下:
I Love You
(2)字符串拷贝函数—strcopy
#include <stdio.h>
#include <string.h>
int main()
{
char arr1[20] = "You Love Me";
char arr2[20] = "I Love You";
printf("%s\n",arr1);
printf("%s\n", strcpy(arr1,arr2));
return 0;
}
strcpy(字符数组1,字符数组2)作用就是 将字符数组2复制到字符数组1 ,同样会运用到预处理调用库函数#include<string.h>
。
输出结果如下:
You Love Me
I Love You
(3)字符串比较函数—strcmp
#include <stdio.h>
#include <string.h>
int main()
{
char str1[] = "aa";
char str2[] = "ac";
char str3[] = "ac";
char str4[] = "aa";
printf("%d ",strcmp(str1,str2));
printf("%d ",strcmp(str3,str4));
printf("%d\n",strcmp(str1,str4));
return 0;
}
strcmp函数语法为 strcmp(char *str1,char *str2),其作用是比较字符串str1和str2是否相同,如果相同则返回0,如果不同,前者大于后者则返回1,后者大于前者返回-1。
注:比较的是字符串的ASCLL码
则上述代码输出结果为:
-1 1 0
(4)测试字符串长度函数—strlen
#include <stdio.h>
#include <string.h>
int main()
{
char arr[10] = "ILoveYou";
int num = strlen(arr);
printf("数组arr的长度为:%d\n", num);
return 0;
}
strlen函数:计算的是字符串str的长度,然后将计算的长度返回。
结果如下:
数组arr的长度为:8
这就是今天的全部内容了,谢谢大家的观看,不要忘了给一个免费的赞哦!