C语言:期末数组集中复习

关于数组说明及其初值的分辨:
实例:(一)
int a[ ][4]={0,0};
示例:(二)
int a[3][4]={0};

类似于这两者的说明,数组a的每个元素都可得到初值0。
以此:
衍生到示例(三):int a[ ][3]={1,2,3,4,5,6,7};
其数组a中包含9个元素,且第一维大小为3.
对此与int a[ ][3]={1,2,3,4,5,6,7};做出对比——此二维数组的第一维大小为3.

值得注意的是:
int a[ ][4]={0,0};此二维数组a的第一维大小为1.

边缘知识(了解即可):
若二维数组a有m列,则计算任一元素a[i][j]在数组中位置的公式为i*m+j+1。

个人而言比起数字数组,字符数组难度更大。
首先就是搞清字符串与字符。

对两个字符数组进行初始化:

char a[ ]="ABCDEF";

char b[ ]={
    
    'A', 'B', 'C', 'D', 'E', 'F'};

其中a的长度比b的长。字符串与字符。

scanf("%s%s", a, b);
是字符数组a,b的正确输入格式(在我以往的博客中提及过)。这不需要指令字符&。

关于字符数组的正确说法:
字符数组中可以存放ASCII字符集中的任何字符
字符数组的字符串可以整体输入、输出
不可以用关系运算符对字符数组中的字符串进行比较

字符数组输出遇’\0’会自动换行输出。

易错提示
单个字符的比较可用关系运算符;
但对于字符串这需要#include<string.h>头文件,才可调用
strcat strcmp strcpy strlen 等等函数进行字符串之间的应用。

细节错误提示(大多数初学者的常犯错误)
char s[5]=“abcde”;
此类对数组s的初始化是错误的,对此作为初学者的我进行了一番对比证实
未去掉e:

#include<stdio.h>
int main()
{
    
    
	char s[5]="abcde";
	puts(s);
}

运行结果:

去掉e之后:

#include<stdio.h>
int main()
{
    
    
	char s[5]="abcd";
	puts(s);
}

运行结果:

原因在于字符数组中’\0’也要占用存储单元。未注意到这点会导致乱码。

判断两个字符串是否相等,正确语句
if (!strcmp(a,b))
特别说明这段语句是因为平时常用的是if(strcmp(a,b)>0)
if(strcmp(a,b)<0) if(strcmp(a,b)==0)
算是知识盲区了。

之后会有有意思的编程题,进行分享。

猜你喜欢

转载自blog.csdn.net/yooppa/article/details/112296620