• 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 ",数组名);

    printf("%p ",数组元素);

    数组元素+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
    ", 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 ",数组名);

    4、字符数组

    字符数组与字符串区别

    (1)C语言中没有字符串这种数据类型,可以通过char的数组来替代(C语言没有字符串类型,通过字符数组模拟);

    (2)字符串一定是一个char的数组,但char的数组未必是字符串;

    (3)数字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
    ", c1); //乱码,因为没有’’结束符
     7 
     8     //以‘’(‘’就是数字0)结尾的字符数组是字符串
     9     char c2[] = { 'c', ' ', 'p', 'r', 'o', 'g', ''}; 
    10     printf("c2 = %s
    ", c2);
    11 
    12     //字符串处理以‘’(数字0)作为结束符,后面的'h', 'l', 'l', 'e', 'o'不会输出
    13     char c3[] = { 'c', ' ', 'p', 'r', 'o', 'g', '', 'h', 'l', 'l', 'e', 'o', ''};
    14     printf("c3 = %s
    ", 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
    ", 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
    ", rand() % 16 + 1);
    36     system("pause");
    37     return EXIT_SUCCESS;
    38 }

    在学习C基础总结了笔记,并分享出来。有问题请及时联系博主:Alliswell_WP,转载请注明出处。

  • 相关阅读:
    C语言II—作业03
    C语言II博客作业01
    学期总结
    第一次作业!
    C语言I博客作业08
    C语言I博客作业07
    C语言I博客作业06
    C语言I博客作业05
    C语言I博客作业04
    第三次作业!
  • 原文地址:https://www.cnblogs.com/Alliswell-WP/p/C_BasicLearning_06.html
Copyright © 2020-2023  润新知