云计算百科
云计算领域专业知识百科平台

C语言基础(5)数组

数组:用来保存多个数据表类型相同的数据

一、整形数组

1.数组基础

定义:

类型说明符 (数组名)[常量];
eg.int a[10]
char str[32]

类型说明符:基本数据类型、构造数据类型

数组名:遵循标识符命名规则

常量:数组中可以保存的元素个数

2.数组元素的访问

数组名[下标]

下标代表访问第几个元素(0~总元素个数-1)

3.数组的初始化

1)全部初始化

int a[10]={1,2,3,4,5,6,7,8,9,0};

2)局部初始化

int a[10]={1,2,3,4,5};//1,2,3,4,5,0,0,0,0,0

3)初始化为0

int a[5]={0};//0,0,0,0,0

4.数组的存储形式

连续性、单一性、有序性

*5.数组排序

补充:

排序算法的稳定性:待排序列中出现两个相同数据,排序后,两个相同数据相对位置不变,则算法稳定,否则不稳定。

(1)选择排序(不稳定)

eg.升序

#include<stdio.h>

int main(void)
{
int a[7] = {2,-9,6,8,5,3,-1};
int len = sizeof(a) /sizeof(a[0]);
int i,j;
int tmp = 0;

for(i = 0;i < len-1;++i)
{
for(j = 0;j < len;++j)
{
if(a[i]>a[j])
{
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
}

for(i = 0;i < len;++i)
{
printf("%d ",a[i]);
}
printf("\\n");

return 0;
}

时间复杂度(效率):O(n^2)

空间复杂度(空间/内存):O(1)

(2)冒泡排序(稳定)

相邻两两数据比较大小

eg.升序

#include<stdio.h>

int main(void)
{
int a[5]={5,-9,8,3,4};
int i,j;
int tmp = 0;
int len = sizeof(a) / sizeof(a[0]);

for(j = 0;j < len; ++j)
{
for(i = 0;i < len-j-1; ++i)
{
if(a[i]>a[i+1])
{
tmp = a[i];
a[i] = a[i+1];
a[i+1] = tmp;
}
}
}
for(i = 0;i < len; ++i)
{
printf("%d ",a[i]);
}
printf("\\n");
return 0;
}

(3)插入排序

以后补充

二分查找(折半查找)

注:序列必须有序

#include<stdio.h>

int main(void)
{
int a[] = {5,-6,9,63,25,-45,88,46,85};
int len = sizeof(a) /sizeof(a[0]);
int i,j,tmp;
int mid = 0;
int num = 35;

for(j = 0;j < len-1;++j)
{
for(i = 0;i < len-j-1 ; ++i)
{
if(a[i]>a[i+1])
{
tmp = a[i];
a[i] = a[i+1];
a[i+1] = tmp;
}
}
}//序列有序

i = 0;
j = len-1;
while(i <= j)
{
mid = (i + j)/2;
if(num > a[mid])
{
i = mid + 1;
}
else if(num < a[mid])
{
j = mid -1;
}
else
{
printf("FIND%d\\n",a[mid]);
}
}
if(i > j)
{
printf("NOT FIND\\n");
}
return 0;
}

优势:效率高 

二、字符型数组

1.字符型数组的定义

同上

2.字符型数组的元素访问

同上

3.字符数组的初始化

1)局部初始化

char str[32]={'h','e'.'l','l','o'};

等同于char str[32]={"hello"};

等同于char str[32]="hello";

没有初始化的部分默认存储为0(‘\\0’)

0 ————> ' \\0 '

48———> ' 0 '

"0"———> ' 0 '+ ' \\0 '

2)全部初始化

char str[5] = {'h', 'e', 'l', 'l', 'o'};
char str[] = {'h', 'e', 'l', 'l', 'o'};
char str[] = {"hello"}:
char str[] = "hello";

当[ ]常量被省略时,将来数组空间按照初始化后的字符个数去确定,额外增加‘\\0'字符的存储位置

3)初始化为0

char str[32] = {0};
char str[32] = {'\\0'};

4.字符型数组的存储

  • 单一性:char
  • 有序性:str[0] = str[n]\\
  • 连续性:连续空间 

5.字符型数组的输入输出

  • 输出

printf("%s\\n", str);

puts(str);  //自带换行符

  • 输入

scanf("%s",str);   //需要空格、tab、Enter停止读入

gets(str);  //危险的函数,有可能造成越界

6.字符型数组操作方法

  • strlen(str)  :  计算字符串的长度(字符型数组中有效字符的个数,不包含”\\0')
  • strcpy:把源字符串拷贝到目标字符型数组中

    strcpy(dst目标字符, src源字符串);

  • strcat:将源字符串拼接到目标字符串的后边

  • strcmp:比较两个字符串大小

赞(0)
未经允许不得转载:网硕互联帮助中心 » C语言基础(5)数组
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!