码迷,mamicode.com
首页 > 编程语言 > 详细

黑马程序员-C学习日记-数组

时间:2015-12-12 09:38:02      阅读:265      评论:0      收藏:0      [点我收藏+]

标签:

 

------- ios培训、 android培训、java培训、期待与您交流! ----------

 

一.数组的基本概念

1.数组:用来保存多个相同数据类型的数据的集合

定义变量:   数据类型 变量名称

定义数组:   数据类型 数组名称[元素个数]

二.数组的多种初始化方式

1.数组只有定义了才能进行初始化,只有初始化才能使用

数组遍历:取出数组中的每一个元素看一下

 代码演示

 1 #include <stdio.h>
 2 
 3 int main(int argc ,const char *argv[]{
 4 
 5 // 定义一个数组 
 6 
 7    int scores [0];={1,9,9,0,7,9,11};
 8 
 9 // 计算数组所占用的字节数,也就是数组元素个数
10 
11    int count = sizeof(nums)/sizeof(int);
12 
13  // 遍历数组:  
14 
15    for(int i=0;i<count;i++){
16 
17        printf("scores [%d]=%d",i,nums[i]);
18 
19     } 
20 
21   return 0;
22 
23 }

 

 

1.1使用常量作为元素个数

1.2使用变量作为元素个数(C99不支持使用变量作为元素个数,但是LLVM支持)

使用变量作为元素个数的好处:你可以在程序运行到这一行的时候再决定要创建有多少元素的数组

   

2.定义数组的同时进行初始化

2.1指定元素个数,同时全部进行初始化

 int nums[5] = {1,2,3,4,5}

2.2 不指定元素个数,全部进行初始化

 int nums[] = {1,2,3,4,5}

2.3 指定元素个数,部分初始化:从下标为0的元素开始初始化,没有显式初始化的元素系统自动将其初始化为0

  int nums[5] = {1,2}

2.4 指定元素个数,为指定的元素初始化

 int nums[5] = {[1] = 1,[2]=5}

注意:定义数组同时进行初始化的时候,不可以使用变量作为元素个数

 

三.自己的理解

数组名称本身就是一个地址

1.数组的地址就是第一个元素的地址

2.数组是一块连续的存储空间

3.下标小的元素地址在小地址上,下标大的元素在大地址上

     int chars[3] = {‘a‘,‘b‘,‘c‘}

  技术分享

 

下标越界:

数组下标越界导致的问题:

约错对象,访问你不该访问的元素,出现莫名的错误

越界超出很大范围,程序崩溃

 

总结:

1.基本数据类型作为函数参数传递是值传递;

2.数组作为函数参数类型传递是地址传递,如果在函数中改变数组的某个值,实参的值也会改变。

3.当数组作为函数参数传递的时候,会被自动转换为指针类型。所以在函数中不能获取形参数组的长度,只能由主调函数传入

 

四.二维数组的基本概念

二维数组:元素为一维数组的数组;

格式:数据类型 数组名称[一维数组个数][一维数组元素个数]

 

五.定义二维数组

    char scores[3][2]

   技术分享

 

遍历二维数组:

 代码演示:

 1 #include <stdio.h>
 2 
 3 int main(int argc ,const char *argv[]{
 4 
 5  //定义一个二维数组
 6 
 7   char scores[3][2]
 8 
 9  //外层循环控制行(一维数组的个数)
10 
11   for(int i=0;i<3;i++){
12 
13      //内层循环控制列(一维数组元素个数)
14 
15      for(int j=0;j<2,j++){
16 
17        printf("scores[%d][%d]=%c\n",i,j,scores[i][j]);
18 
19       }
20 
21    }
22 
23   return 0;
24 
25 }

 

 

二维数组的多种初始化方式:

1.先定义二维数组,然后初始化(定义二维数组的时候必须指定一维数组的元素个数)

2.定义二维数组同时初始化

  2.1 指定一维数组个数,对全部元素进行初始化

      int  scores[3][2]={{1,2},{3,4},{5,6}};

  2.2不指定一维数组个数,对全部元素进行初始化

     int  scores[][2]={{1,2},{3,4},{5,6}};

  2.3 指定一维数组的元素个数,用一个大括号进行初始化

     int  scores[3][2]={1,2,3,4,5,6};

     int  scores[][2]={1,2,3,4,5,};

Ps:定义的同时进行初始化,没有显式初始化的元素会被自动初始化为0

 

六.练习

1.录入一个班级成绩,然后计算平均分,班级中有多少人需要自己录入

#include <stdio.h>

int main(int argc ,const char *argv[]{

 // 定义学生人数变量,提示用户输入班级学生的人数

  int count;

  printf("请输入班级学生人数\n");

 // 接收用户的录入

  scanf("%d",&count);

 //定义一个数组保存学生成绩

  int scores[count];

 //接收用户录入的每一个学生的成绩

 for(int i=0;i<count;i++){

    printf("请录入第%d个学生成绩:\n",i+1);

    scanf("%d",&scores[i]);

  }

 //计算学生总成绩

   int sum = 0;

   for(int i=0;i<count;i++){

     sum+=scores[i];  

    }

 //计算平均值

   double average = (double)sum/count;

 //输出学生平均成绩

   printf("学生平均成绩为:%.2lf\n",average);

 return 0;

}

 

 

2.冒泡排序规则:大的下沉,小的上浮

   技术分享

#include <stdio.h>

int main(int argc ,const char *argv[]{

 升序排列数组元素

 int nums[]={1,9,9,0,7,9,11};

 //计算数组长度

 int length = sizeof(nums)/sizeof(int);

 //使用冒泡排序

 //外层循环控制趟数

 for(int i=0;i<length-1;i++){

     //内层循环控制每一趟比较多少次

     for(int j=0;j<length-1-i);j++{

        //元素两两比较,如果前面元素大,则与后面的元素交换位置 

         if(nums[j]>nums[j+1]){

           int temp;

           temp = nums[j];

           nums[j]=nums[j+1];

           nums[j+1]=temp;

          }

      }

  }

  遍历数组,打印排序后的结果

  for(int i=0;i<length;i++){

      printf("%d ",nums[i]);

   }

return 0;

}

 

 

 

黑马程序员-C学习日记-数组

标签:

原文地址:http://www.cnblogs.com/ly0709/p/5040760.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!