C基础学习笔记——01-C基础第06天(数组)
在学习C基础总结了笔记,并分享出来。有问题请及时联系博主:Alliswell_WP,转载请注明出处。
01-C基础第06天(数组)
目录:
1、数组的定义和使用
2、一维数组
练习:冒泡排序
3、二维数组
4、字符数组
练习:函数的调用:产生随机数
练习:双色球
1、数组的定义和使用
格式:
数据类型 数组名[元素个数]
元素个数,代表该数组有多少个相同数据类型的变量
下标,用来表示数组中的某一个元素,例如 int arr[10]; arr[1]代表数组的第二个元素
数组下标是从0开始的,到数组元素个数-1
数组下标越界:超出了数组元素个数的下标,如果操作越界,数据会出现程序错误1、乱码错误 2、报错
求出数组元素个数:
int (size_t) unsigned int 个数 = sizeof(数组名)/sizeof(数组元素 | 数组数据类型)
求出数组地址:
printf("%p\n",数组名);
printf("%p\n",数组元素);
数组元素+1 (sizeof(数据类型))
数组名+1 (sizeof(数据名))
注意:“格式控制符“%p”中的p是pointer(指针)的缩写,printf函数族中对于%p一般以十六进制整数方式输出指针的值,附加前缀0x。 %p是打印地址的, %x是以十六进制形式打印,完全不同。
数组就是在内存中连续的相同类型的变量空间。同一个数组所有的成员都是相同的数据类型,同时所有的成员在内存中的地址是连续的。
数组属于构造数据类型:
(1)一个数组可以分解为多个数组元素:这些数组元素可以是基本数据类型或构造类型。
(2)按数组元素类型的不同,数组可分为:数值数组、字符数组、指针数组、结构数组等类别。
通常情况下,我们将二维及以上的数组称为多维数组。
2、一维数组
(1)数组名不能与其它变量名相同,同一作用域内是唯一的
(2)定义数组时[]内最好是常量,使用数组时[]内即可是常量,也可以是变量
(3)在定义数组的同时进行赋值,称为初始化。全局数组若不初始化,编译器将其初始化为零。局部数组若不初始化,内容为随机值。
(4)数组名是一个地址的常量,代表数组中首元素的地址。
练习:冒泡排序
1 #define _CRT_SECURE_NO_WARNINGS 2 #include<stdio.h> 3 #include<string.h> 4 #include<stdlib.h> 5 6 int main() 7 { 8 9 int arr[10] = { 7,4,2,3,5,8,9,6,1,10 }; 10 int len = sizeof(arr) / sizeof(arr[0]) - 1; 11 //冒泡排序 从小到大 12 //外层循环每次执行都能确定一个最大值 13 for (int i = 0; i < len; i++) 14 { 15 //内层循环内次执行能确定两个数值中的最大值 16 for (int j = 0; j < len - i; j++) 17 { 18 if (arr[j] > arr[j + 1]) 19 { 20 //两个数据交换位置 21 int temp = arr[j]; 22 arr[j] = arr[j + 1]; 23 arr[j + 1] = temp; 24 } 25 } 26 } 27 for (int i = 0; i < 10; i++) 28 { 29 printf("%d\n", arr[i]); 30 } 31 32 system("pause"); 33 return EXIT_SUCCESS; 34 }
3、二维数组
格式:数据类型 数组名[行个数][列个数]
初始化方式:
int arr[2][3] = {{1,2,3},{2,3,4}};
int arr[][3] = {{1,2,3},{2,3,4}};
int arr[4][3] = {1,2,3,4,5,6,7,8,9};
int arr[4][3] = {{1},{1},{1}};
int arr[4][3] = {1,2,3,4};
求行数:sizeof(数组名)/sizeof(数组名[0]);
求列数:sizeof(数组名[0])/sizeof(数组名[0][0]);
二维数组首地址表示方式:
printf("%p\n",数组名);
4、字符数组
字符数组与字符串区别
(1)C语言中没有字符串这种数据类型,可以通过char的数组来替代(C语言没有字符串类型,通过字符数组模拟);
(2)字符串一定是一个char的数组,但char的数组未必是字符串;
(3)数字0(和字符‘\0’等价)结尾的char数组就是一个字符串,但如果char数组没有以数字0结尾,那么就不是一个字符串,只是普通字符数组,所以字符串是一种特殊的char的数组。
1 #include <stdio.h> 2 3 int main() 4 { 5 char c1[] = { 'c', ' ', 'p', 'r', 'o', 'g' }; //普通字符数组 6 printf("c1 = %s\n", c1); //乱码,因为没有’\0’结束符 7 8 //以‘\0’(‘\0’就是数字0)结尾的字符数组是字符串 9 char c2[] = { 'c', ' ', 'p', 'r', 'o', 'g', '\0'}; 10 printf("c2 = %s\n", c2); 11 12 //字符串处理以‘\0’(数字0)作为结束符,后面的'h', 'l', 'l', 'e', 'o'不会输出 13 char c3[] = { 'c', ' ', 'p', 'r', 'o', 'g', '\0', 'h', 'l', 'l', 'e', 'o', '\0'}; 14 printf("c3 = %s\n", c3); 15 16 return 0; 17 }
注意:c语言中%s代表输入输出的字符串标准类型
练习:函数的调用:产生随机数
1 #include <time.h> 2 time_t time(time_t *t); 3 功能:获取当前系统时间 4 参数:常设置为NULL 5 返回值:当前系统时间, time_t 相当于long类型,单位为毫秒 6 7 #include <stdlib.h> 8 void srand(unsigned int seed); 9 功能:用来设置rand()产生随机数时的随机种子 10 参数:如果每次seed相等,rand()产生随机数相等 11 返回值:无 12 13 #include <stdlib.h> 14 int rand(void); 15 功能:返回一个随机数值 16 参数:无 17 返回值:随机数
程序如下:
1 #include <stdio.h> 2 #include <time.h> 3 #include <stdlib.h> 4 5 int main() 6 { 7 time_t tm = time(NULL);//得到系统时间 8 srand((unsigned int)tm);//随机种子只需要设置一次即可 9 10 int r = rand(); 11 printf("r = %d\n", r); 12 13 return 0; 14 }
练习:双色球
1 #define _CRT_SECURE_NO_WARNINGS 2 #include<stdio.h> 3 #include<string.h> 4 #include<stdlib.h> 5 #include <time.h> 6 7 int main() 8 { 9 srand((unsigned int)time(NULL)); 10 //双色球 两种原色 红球 + 蓝球 (6+1) 红球 1-33 蓝球 1-16 打印双色球中奖信息 11 //红色球不能重复 蓝球和红球可以重复 12 int ball[6]; 13 14 //红色 15 for (int i = 0; i < 6; i++) 16 { 17 // qiu = rand()%33+1; 18 ball[i] = rand() % 33 + 1; 19 //去重 20 for (int j = 0; j < i; j++) 21 { 22 if (ball[i] == ball[j]) 23 { 24 i--; 25 continue; 26 } 27 } 28 } 29 30 //排序 31 for (int i = 0; i < 6; i++) 32 { 33 printf("%d ", ball[i]); 34 } 35 printf("+ %d\n", rand() % 16 + 1); 36 system("pause"); 37 return EXIT_SUCCESS; 38 }
在学习C基础总结了笔记,并分享出来。有问题请及时联系博主:Alliswell_WP,转载请注明出处。
posted on 2020-06-01 21:29 Alliswell_WP 阅读(194) 评论(0) 编辑 收藏 举报