关于这一部分呢,看似很简单,实际运用起来却会有很多问题,课本上讲了,又没有完全讲清楚。 在运用数组的这个方法处理问题是十分灵活的,非常容易产生一些小错误导致代码不能正确运行。所以在本篇博客我将会对众多小细节加以解释,区分,同时也会举一些巧妙的实际运用。
在本片文章中数组主要为一维数组,从整型和字符型数组两方面讨论。
目录
整型数组
先看一下几种定义数组的方式
1.定义数组
int arr1[5];
该数组arr1只进行了定义,没有进行初始化所以里面的元素是一团乱麻。
2.定义空数组
int arr2[5]={0};
两种格式看上去十分相似但又不完全一样。
打开监视,注意观察此处,未初始化的整型数组自动将元素都赋值为'0'。这和后边介绍的字符型数组不同。
3.完全初始化
int arr3[5] = { 1,2,3,4,5};
int arr4[] = { 1,2,3,4,5 };
观察两个数组不同的定义方式,尽管arr4没给数组长度,但任然和arr3一样
4.不完全初始化
int arr5[5] = { 1,2,3};//可见后面自动补为0
arr5中定义了数组长度,但初始化的只有前三个元素,所以后面的全部都自动补为'0'
5.用scanf输入整型数组
int arr6[5];
for (i = 0; i < 5; i++)
{
scanf("%d", &arr6[i]);
}
此处是常用的一种输入整型的方法。
要注意的是此处arr[i]前一定要记得加取址符'&'在输入时,整型元素用空格隔开(不同于后面介绍输入字符型数组的方法)
例如:
1 2 3 4 5 ENTER回车
效果就是这样。
6.整型转化为ASCII码值
int arr7[5] = { 'a','b','c'};
如果我们在整型数组中输入字符会这么样呢根据ASCII码表
观察到字符转化为整型存储在元素之中。可以理解为字符和整型是等效的。
字符型数组
1.定义字符数组
char ch1[5];
和整型数组情况类似。
2.空数组
char ch2[] = { 0};
char ch3[5] = { 0 };///此处0为ASCII码表中对应的NULL所以为空字符
这里不同于整型数组,在此处存放'\0',意思为停止。
3.不完全初始化
char ch4[5] = { 'l','o','v' };//未完全初始化,自动补\0
char ch5[5] = { "lov" };
char ch6[5] = "lov";
’\0’是数组结束的标志。当ch6一样输入字符串时,会自动补齐‘\0’。这三种写法都是正确的。
4.完全初始化
char ch7[] = "love";
char ch8[4] = "love";
不同于整型数组,凡是在" "之中的字符在初始化数组时。都会自动在后面补\0。当长度不足时,例如ch8,‘\0’当不下了,就不会补了。
5.字符数组与ASCII码值
char ch9[5] = { '1','2','3',97,98 };//在字符数组输入整型会转化为对应的ASCII字母
和直接在字符型数组中输入整型,会转化成对应的字母。可以理解为在此处整型和字符是等效的。
6.输入字符型数组
char ch10[5];
for (i = 0; i < 5; i++)
scanf("%c", &ch10[i]);
和整型数组不一样,这里输入空格不能将元素隔开而会被当成元素直接使用。记得输入字符时候也要加&。
例如在此处输入 a b 空格会记录在ch10[1]中。
还没结束,如果输入一段字符串的话,会导致空格输入提前结束。ps:数组名字ch11是数组首元ch11[0]的地址,所以此处不用&。
char ch11[5];
for (i = 0; i < 5; i++)
scanf("%s", ch11);
例如输入: ab cd
所以我们如何输入一段带有空格的英语句子到字符数组中呢,第一种方法就是用循环scanf("%c")输入,第二种方法就是利用gets函数。
char ch12[5];
gets(ch12);
在此处输入 a b,结果如下:空格可以正常使用啦。
由此可见gats和scanf函数最大的区别就在于对空格的不同处理方式。
应用
题干:输入二进制数字,将其转化为十进制数字(例如输入1111,输出15)
大家可以思考一下,再看一下我给出的两种方法。
方法1:
#include<stdio.h>
int main()
{
int i, D = 0;
char B[50];
gets(B);
for (i = 0; B[i] != '\0'; i++)
{
D = D * 2 + B[i] - '0';
}
printf("%d", D);
}
方法2:
#include<stdio.h>
int main()
{
char B= { 0 };
int D = 0;
while (B = getchar(), B != '\n')
{
D = D * 2 + B - '0';
}
printf("%d", D);
}
以上就是本篇文章的全部内容啦。不知不觉字数已到了2000,写得很仔细,希望能对大家有一些帮助。