zoukankan      html  css  js  c++  java
  • iOS学习04C语言数组

    1、一维数组

      数组:具有相同类型的成员组成的一组数据

      1> 定义

        元素:数组中存放的数据成为数组的元素
           数组是构造类型,用{...}来给构造类型赋初始值,类型修饰符用来表示元素的类型
        类型修饰符 数组名[数组元素个数] = {值1,值2,值3....};              
         

        定义的形式:

          第一种形式

           1 int ageArray[5] = {18, 22, 22, 1001, 1}; 

          第二种形式

            数据个数 > 设置初始值的个数,没有初始值的元素默认是0

           1 int ageArray1[5] = {22, 23, 29}; 

          第三种形式
             1 int ageArray2[5] = {0}; 
          第四种形式
            根据设置的初始值来推断元素个数
           1 int ageArray3[] = {22, 18, 19, 16, 23};
           变量作为下标定义数组时,不能初始化

    1     int num = 3;
    2     // [变量] 不能赋初始值
    3     int array[num];
    4     for (int i = 0; i < 3 ; i++) {
    5         array[i] = i;
    6         printf("%d ", array[i]);
    7     }

        定义数组的错误形式
          内存溢出:定义的初始值的个数 > 数据个数
         1 int heightArray[5] = {184, 183, 160, 168, 160, 190};

      2> 数组的存储空间

        数组在存储时申请的是一块连续的存储空间
        数组的存储空间 = 元素个数 * 每一个元素所占的空间大小

    1     int array[5] = {1, 2, 3, 4, 5};
    2     printf("sizeArray = %lu
    ", sizeof(array));

      3> 数组的访问 [常量或者是变量]
        数组名[下标] 下标的范围:0~n-1, n 代表数组元素个数    

    1     int ageArray[5] = {27, 18, 22, 23, 32};
    2     printf("wanghai = %d
    ", ageArray[4]);
    3     printf("yanping = %d
    ", ageArray[1]);

        使用循环访问数组中所有的元素(数组遍历,通常和for循环结合使用)  

    1     for (int i = 0; i < 5; i++) {
    2         printf("age = %d
    ", ageArray[i]);
    3     }

        访问越界

    1     double weightArray[5] = {104, 144, 189, 96, 0, 60};
    2     for (int i = 0; i < 5; i++) {
    3         printf("weight = %.2f
    ", weightArray[i]);
    4     }
    5     printf("%.2f", weightArray[5]); // 访问越界

       练习:复制一个数组,即两个数组容量一样,把其中一个数组中的元素复制到另外一个数组中 

    1     int array1[5] = {1, 2, 3, 4, 5};
    2     int array2[5] = {0};
    3     //array2 = array1;
    4     // 数组不能整体赋值
    5     for (int i = 0; i < 5; i++) {
    6         array2[i] = array1[i];
    7         printf("array2[%d] = %d
    ", i, array2[i]);
    8     }

    2、冒泡排序

      排序的规律:升序、降序
      基本思路:每次相邻的两个元素比较,按照升序或降序的顺序交换位置,直到所有的元素位置全部正确
      至少需要两层循环
        外层循环控制比较的趟数
        内存循环控制比较的次数

     1     int array[5] = {9, 3, 8, 1, 5};
     2     // 控制循环的趟数
     3     for (int i = 0; i < 5 - 1; i++) {
     4         // 控制每趟比较的次数
     5         for (int j = 0; j < 5 - i - 1; j++) {
     6             // 比较相邻的两个元素
     7             if (array[j] > array[j + 1]) {
     8                 // 交换两个元素的位置
     9                 int temp = array[j];
    10                 array[j] = array[j + 1];
    11                 array[j + 1] = temp;
    12             }
    13         }
    14     }
    15     // 遍历数组输出
    16     for (int i = 0; i < 5; i++) {
    17         printf("%d  ", array[i]);
    18     }

    3、字符数组

      1> 定义  

    1     char array1[5] = {'h', 'e', 'l', 'l', 'o'};
    2     
    3     // 未设置的元素默认是0
    4     char array2[10] = {'w', 'o', 'r', 'l', 'd'};
    5     
    6     char array3[5] = {0};
    7     
    8     char array[] = {'i', 'P', 'h', 'o', 'n', 'e'}; 

      2> 字符串

    1     char array[] = "iPhone";
    2     // 相当于
    3     char array1[] = {'i', 'P', 'h', 'o', 'n', 'e', ''};

        字符串以 '' 结尾,字符串的本质就是字符数组

        访问字符串    

        1     // 访问单个字符
        2     char array[] = "iPhone";
        3     for (int i = 0; i < sizeof(array); i++) {
        4         printf("%c ", array[i]);
        5     } 
        1     // 整体访问
        2     char array1[] = {'i', 'P', 'h', 'o', 'n', 'e', ''};
        3     printf("%s
    ", array1);

      3> 字符串和字符数组的区别

        字符串就是一个字符数组  

    1     char a[] = "iPad";
    2     char b[] = {'i', 'P', 'a', 'd', ''};

          数组a和数组b等价

        字符数组不一定是字符串 

    1     char c[] = {'l', 'a', 'n', 'o', 'u'};
    2     char d[] = "lanou";

          c和d不等价,数组 c 包含5个有效字符,数组 d 包含6个字符,其中有5个有效字符, '' 是结束标识符

      4.字符串操作函数

        strlen():计算字符串有效字符的个数    

    1     char array[] = "iPhone";
    2     unsigned long length = strlen(array);
    3     printf("length = %lu
    ", length);
    4     
    5     char array1[] = "iMac";
    6     int length1 = (int)strlen(array1); // 类型强转
    7     printf("length1 = %d
    ", length1);

        strcpy 字符串拷贝:strcpy(字符串1,字符串2);
          把字符串2的内容拷贝到字符串1中
          字符串1的长度 >= 字符串2的长度 

        1     char array1[] = "lanou";
        2     char array2[10] = {0};
        3     strcpy(array2, array1);
        4     printf("array2 = %s
    ", array2);

        strcat字符串拼接:strcat(字符串1,字符串2);
          把字符串2的内容拼接到字符串1后面,结果保存在字符串1
          字符串1的存储空间要足够大

        1     char array1[30] = "lanou";
        2     char array2[] = "keji";
        3     strcat(array1, array2);
        4     printf("array1 = %s, array2 = %s
    ", array1, array2);

        strcmp()字符串比较:strcmp(字符串1, 字符串2)
          按照自左向右的顺序逐个字符比较(比较字符的ASCII值),直到遇到第一个不同的字符或者 '' 结束。
             结果 > 0    字符串1 > 字符串2
             结果 < 0    字符串1 < 字符串2
             结果 = 0    字符串1 = 字符串2

        1     char array1[] = "lanou";
        2     char array2[] = "keji";
        3     printf("%d
    ", strcmp(array1, array2));
        5     char array[10] = "iPhone";
        6     printf("%lu
    ", sizeof(array));

      练习:将字符串 倒转
        例如:“afjnpue”转变成字符串“eupnjfa”
        (注:是改变 字符串本身,不是 反向输出)

     1     char array[] = "afjnpue";
     2     int length = (int)strlen(array);
     3     for (int i = 0; i < length / 2; i++) {
     4         
     5         int temp = array[i];
     6         array[i] = array[length - 1 - i];
     7         array[length - 1 - i] = temp;
     8         
     9     }
    10     printf("%s
    ", array);

    4、宏定义

      无参的宏
       #define 宏名称 定义的值
       宏命名: 1.k+驼峰命名法  2.字母全部大写  

            #define kPrint printf("Hello World!
    ")
            #define COUNT 10

      有参的宏   

    1 #define MUL(A, B) ((A) * (B))
    2     
    3     // 2 * 3
    4     int result = MUL(2, 3);
    5     printf("result = %d
    ", result);
    6     
    7      //(3 - 1) * (4 + 2)
    8     int result1 = MUL(3 - 1, 4 + 2);
    9     printf("result1 = %d
    ", result1);
  • 相关阅读:
    Word如何去水印
    计算机二级公共基础知识 #02
    计算机二级公共基础知识 #01
    Linux常用快捷键
    计算机二级C语言概述 #00
    信管专业的同学都进来看一看叭~~~~~
    Python--Hanoi塔问题
    MATLAB——实验一:查看图像的RGB值
    Python课 #06号作业
    Python课 #05号作业
  • 原文地址:https://www.cnblogs.com/gfxxbk/p/5255271.html
Copyright © 2011-2022 走看看