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编辑  收藏  举报

导航