黑马程序员——黑苹果的日记(1) — 一维数组

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------


一数组的定义
   1,   数组就是一些数据或变量的按照一定顺序排列的一个集合
   2, 数组是一个统称, 里面的每一个具体的变量称为元素
   3, 数组中每一个变量的位置是确定, 使用从 0 开始的序号进行访问
      这个需要称为"下标"或"索引"


   4, 一维数组
      如果有一个数组, 而数组中每一个元素都是一个简单的数据类型, 即不是一个数组
      那么就称该数组为一维数组


   5, 在 C 语言中不直接支持 二维数组
      而是利用一个元素为 一维数组 的 "一维数组" 来描述二维数组




  二数组的语法:
      数据类型    数组名 [ 元素个数 ];
  1) 数据类型, 表示数组元素的类型是什么, 一个数组只允许存储一种数据类型的多个变量
  2) 数组名就是标识符
  3) 元素个数不允许是浮点数, 必须是整数或整数表达式
      补充: ANSI C 不允许个数是变量, C99 中允许使用变量


  三数组的初始化


  1, 对数组元素的初始化
  1.1 先定义再初始化
      int nums[2];
      nums[0] = 1;
      nums[1] = 23;


  1.2 定义数组的同时进行初始化
  int nums[2] = { 1, 2 };
  补充: 数组的初始化方式很多
  不完全初始化, 没有初始化的变量默认为 0
      int nums[10] = { 1, 2 };
  省略数组元素个数, 编译器会根据初始化使用的数据个数类自动的提供元素个数
      int nums[] = { 1, 2, 3, 4 };
  2, 使用数组中的元素
  2.1 使用其中的某一个变量
       数组名[下标]
  2.2 遍历, 所谓的遍历就是将数组元素一个一个取出来使用

   int array[] = { 1, 2, 33, 44, 555 ,6666 , 777};


   for (int i = 0; i < 7; i++) {
    printf("%d\n", array[i]);
   }


  3, 直接使用 for 循环初始化
  
  int length;
    printf("请输入数组元素的个数\n");
    scanf("%d", &length);


    int array[length];


    for (int i = 0; i < length; i++) {
        printf("请输入 第%d个数字\n", i + 1);
        scanf("%d", &array[i]);
    }


    for (int i = 0; i < length; i++) {
        printf("输入的第 %d 个数字是 %d \n", i + 1, array[i]);
    }
     




    四数组的综合运用
  1定义变量,初始化数组, 遍历数组,以及统计数据
 
  int sum, max, min;
    double avg;


   sum = max = min = array[0];
    for (int i = 1; i < length; i++) {
    
    sum += array[i];
    
    if (max < array[i]) {
        max = array[i];
    }
    
    if (min > array[i]) {
        min = array[i];
    }
    
          }
    avg = 1.0 * sum / length;


   printf("min = %d\n", min);
   printf("max = %d\n", max);
   printf("sum = %d\n", sum);
   printf("avg = %.2f\n", avg);



  2数组元素作为函数参数

    #include <stdio.h>


   void printSquare(int num) {
    
    num *= num;
    printf("%d\n", num);
     }




    int main(int argc, const char * argv[]) {
    int nums[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    for (int i = 0; i < 9; i++) {
        printSquare(nums[i]);
    }
    
    printf("===\n");
    for (int i = 0; i < 9; i++) {
        printf("main-----%d\n", nums[i]);
    }
    return 0;
         }




  3用数组名字作为函数参数


  3.1 将数组作为函数参数进行传递, 传递的内容是数组的首地址
    因此长度信息会丢失, 所以函数需要第二个参数表示数组的长度




    因此函数模型为:


    void func(int arr[], int length) {
     ...
    }
 
   由于传递的是地址, 在函数中声明的变量参数, 存储了数组的地址
   
   使用下标访问的元素, 与 mian 函数中数组定义的元素就是同一个元素
   因此得到一个结论
   在函数中直接修改数组元素, 函数外的数组元素跟着修改


 
  #include <stdio.h>
    #define LEN 10


   void func(int address[], int length) {
    
   
    
    for (int i = 0; i < length; i++) {
        printf("---%d---\n", address[i]);
    }
        }


       int main(int argc, const char * argv[]) {
    
    int arr[LEN] = {1, 2, 3, 4, 5 ,6 ,7 ,8 ,9 ,0};
    
    
    func(arr, LEN);


    
    return 0;
         }



   3.2用函数来遍历数组
     初始化, 函数里和函数外是"同一个数组"
     第一一个数组,遍历出来

  #include <stdio.h>
       #define LEN 10

      void initIntArray(int arr[], int length) {
     
      for (int i = 0; i < length; i++) {
        printf("请输入第 %d 个数字\n", i + 1);
        scanf("%d", &arr[i]);
       }
      }

      void foreachIntArray(int array[], int length) {
     
    for (int i = 0; i < length; i++) {
        printf("%d\n", array[i]);
    }
        }

    int main(int argc, const char * argv[]) {
    
    
    int array[LEN];
    initIntArray(array, LEN);
    
    foreachIntArray(array,LEN);
                   
    
                   return 0;
                       }



  五 数组的运用,冒泡排序
    1冒泡排序算法:
     1. ​1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
      1.2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
     1. 3.针对所有的元素重复以上的步骤,除了最后一个。
      1.4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
      
    2冒泡排序的函数代码:


      首先是初始化, 函数里和函数外是"同一个数组"

      然后函数封装运算遍历数组,排序

 #include <stdio.h>


void initIntArray(int arr[], int length) {
 
    for (int i = 0; i < length; i++) {
        printf("请输入第 %d 个数字\n", i + 1);
        scanf("%d", &arr[i]);
    }
}


void foreachIntArray(int array[], int length) {
    printf("====================\n");
    for (int i = 0; i < length; i++) {
        printf("%d\n", array[i]);
    }
}


void bubbleSortByIntArray(int array[], int length) {
    // int temp;
    for (int i = 0; i < length - 1; i++) {
        for (int j = 0; j < length - i - 1; j++) {
            if(array[j] > array[j + 1]) {
                int temp = array[j];
                array[j] = array[j+1];
                array[j+1] = temp;
            }
        }
    }
}

int main(int argc, const char * argv[]) {
    int nums[] = { 12, 3, 40, 25, 7 };
    
   
    for (int i = 0; i < 4; i++) {
        if(nums[i] > nums[i+1]) {
            int t = nums[i];
            nums[i] = nums[i+1];
            nums[i+1] = t;
        }
    }

    for (int i = 0; i < 4 - 1; i++) {  // 5 - 1 - 1
        if(nums[i] > nums[i+1]) {
            int t = nums[i];
            nums[i] = nums[i+1];
            nums[i+1] = t;
        }
    }
    
    
    
    foreachIntArray(nums, 5);
    
    bubbleSortByIntArray(nums, 5);
    
    foreachIntArray(nums, 5);
    
    
    return 0;
}












发布了16 篇原创文章 · 获赞 0 · 访问量 3095

猜你喜欢

转载自blog.csdn.net/meacholxpf/article/details/47700225
今日推荐