您的位置:首页 > 编程语言 > C语言/C++

C语言中的数组1

2015-09-21 13:44 197 查看
一 一维数组

a 格式 类型修饰符 变量名 = 初始值

数组为构造类型

格式 类型修饰符 变量名[数组元素个数] = {值1,值2,值3,};

数组作用: 存储同一类型的数据

b 定义数组的方式有四种:

定义数组方式1 有元素个数 初始值全
int a[5] = {1,2,3,4,5};

定义数组方式2 无元素个数 初始值全
int b[] = {1,2,3,4,5};

定义数组方式3 有元素个数初始值不全 (不够补0)
int c[5] = {1,2,3};

定义数组4 有元素个数 初始值空 (全是0)
int d[5] = {0};

定义数组方式错误1 指定元素个数 < 初始值个数

int e[5] = {1,2,3,4,5,6};

定义数组方式错误2 元素个数为空,初始值为空

c 访问数组元素
1 不能一次整体调用整个数组全部元素的值,基本数据类型变量中储存的是一个数据
数据中存储的是多个数据,不能通过数组变变量,调用所有数组元素

2 下标 数组元素在数组中的符号,数组中的元素是有序的,每个元素都有序号,序号从0开始,最有一个元素的序号是n - 1,n表示数组元素个数

3 访问数组元素: 使用下标实现,数组名[下标];

4 下标范围: 0~n-1

举例 int arr[5] = {10,20,30,40};
printf("%d",arr[0]);
d 修改数组元素
举例 arr[0] = 4;

printf("%d",arr[0]);输出结果为 arr[0] = 4;

修改数组元素 根据数组下标来修个数组元素的值

e 遍历数组 使用for循环

int a[] = {1,2,3,4,5};
// 遍历打印
for (int i = 0; i < 5; i++) {
printf("%d ",a[i]);
}
f 通过循环方式给数组元素赋值
1 定义数组,必须设置元素的个数,数组元素的初始值位0
2 通过循环给数组元素赋值

举例 定义一个具有5个元素的整型数组,取值范围(1~13),遍历打印所有数
int a[5] = {0};
for (int i = 0; i < 5; i++) {

a[i] = arc4random() % (13 - 1 + 1) + 1;
printf("%d ",a[i]);
}

注意事项:
越界: 超出数组元素个数
越界出现的情况: 会打印出内存其他区域所存储的数据

g 冒泡排序:

冒泡排序的基本思想: 每次将相邻的两个数进行比较,按照升序或降序的顺序进行交换,直到所有数字的顺序全部正确

举例:随机产生 10个[20,40]数 ,并对10个数实现降序排序。
int a[10] = {0};

printf("请输入十个随机数:\n");

求取随机数:
for (int i = 0; i < 10; i++) {
a[i] = arc4random() % (40 - 20 + 1) + 20;
printf("%d ",a[i]);
}

冒泡排序:

控制比较趟数:

for (int i = 0; i < 10 - 1; i++) {

控制比较次数:
for (int j = 0; j < 10 - i - 1; j++) {
if (a[j] < a[j + 1]) {
int temp = a[j];
a[j] = a[j + 1]; 相邻两值进行交换
a[j + 1] = temp;
}
}

}
printf("\n");
printf("冒泡排序后:\n");

遍历打印
for (int i = 0; i <= 9; i++) {
printf("%d ",a[i]);
}

二 字符数组以及字符串数组

a 字符数组:
1 数组元素存储的字符
2 定义字符数组 类型修饰符 数组名(元素个数) = {'字符1','字符2','字符3'};
3 如果元素个数不够,后面补'\0','\0'控制作符,不能显示

b 侧数组的字节数

使用函数sizeof() 转化符是%luchar b[10] = {'l','a','n','s','e'};
printf("%lu\n",sizeof(b)); 输出结果为5个字节
访问修改
b[0] = 'L'

遍历打印

for (int i = 0; i < 10; i++) {
printf("%c ",b[i]);
} 输出 Lanse

c 字符串
1 字符串常量"hello world"
2 使用字符串数组存储字符串
3 使用%s ,输出字符串

4 定义字符数组,存储字符串, 类型修饰符 数组名[] = {元素};

举例: char a = "hello world" // 最后有一个元素为\0,而不是d

系统如何识别字符串的'\0',数据存储在内存中,当读取字符串时,遇到'\0'就会停止读取,字符串中的'\0'是系统默认的.
有效字符: 第一个'\0'前的所有字符.

d 字符串和字符数组的关系

1 字符串一定是字符数组,但字符数组不一定是字符串

举例: char a = {'s','h','e','n'};

char b = "shen";

a,b打印结果一样,但a是字符数组,但b是字符串也是字符数组

查找字符串中的空格数 例如: "I love ios, I want an iphone6"

char a[] = "I love ios, I want an iphone6";
int lenth = (int)strlen(a);
int count = 0;
for (int i =0; i < lenth ; i++) {
if (a[i] == ' ') {
count++;
}

}

printf("空格数为:%d\n",count);
e 与字符串有关的三个函数

(1) strlen 字符串长度
测量的是字符串的实际长度,不包含'\0'

char name[] = "zhangpengandxinzhiqiang";
strlen(name);
printf("%s的长度是:%lu",name,strlen(name));

(2) strcpy 字符串拷贝
char a[5] = {0};
char b[] = "lanse";

//strcpy(字符串1,字符串2): 将字符串2的数据复制到字符串1中
strcpy(a, b);
printf("a = %s b = %s\n",a,b);

字符串2可以是常量,字符数组名strcpy(a,"张三");

strcpy(a, "张三");// 字s符串2的位置,输入什么就拷贝什么
printf("%s",a);

字符数组1的存储空间 >= 字符数组2 注意: '\0'
牢记: 给一个字符数组赋值,只能使用strcpy函数,不能直接对一个字符组赋值
a = b; 错误的赋值方法
(2) ctrcat 字符串拼接

char r[] = "hello";
char b[] = "world";

strcat(字符串1,字符串2);
字符串1的空间要足够大,这样才能装下字符串2,拼接时,字符串1的后面'\0'自动取消,字符串2的数据写入后面
strcat(r,b); // 可以指直接添加需要的字符串
printf("%s\n",r);

(3) strcmp 字符串比较

char a[] = "apple";
char b[] = "google";

// 将两个字符串自左向右进行比较 (按照ACCII码值进行比较),直到出现不同的字符串或者'\0'结束
// 字符串1 > 字符串2 输出的结果大于0
// 字符串1 < 字符串2 输出的结果小于0
// 字符串1 = 字符串2 输出的结果等于0

printf("%d\n",strcmp(a, b));
printf("%d\n",strcmp(b, a));
printf("%d\n",strcmp(a, "apple"));

char a[] = "afjnpue";
把a[] 转变成字符串"eupnjfa";
int lenth = (int)strlen(a);

for (int i = 0; i < lenth / 2; i++) {
char temp = a[i];
a[i] = a[lenth-1-i];
a[lenth-1-i] = temp;
}

printf("%s",a);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: