【黑马程序员】C语言数组

原创 2015年11月17日 16:31:27


------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


一、基本概念

在程序设计中,把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。


二、按存储的内容分类

数值数组,字符数组,指针数组,结构数组


三、按维度分类

一维数组,二维数组,多维数组



四、一位数组定义及注意事项

1.如果一个数组的所有元素都不是数组,那么该数组称为一位数组


2.一位数组的定义


类型说明符  数组名[常量表达式]


*注意:1.数组的长度可以是一个常量,也可以是常量表达式

2.数组名的规则:严格遵照标示符的命名规范 

3.数组名不能和其他变量同名

4.数组长度不可以为一个变量(xcode里可以,做了优化)

5.数组长度可以使用宏定义

6.在定义数组的时候还可以定义普通变量



五、一维数组的初始化 

数组初始化赋值是指在数组定义时给数组元素赋予初值。数组初始化是在编译阶段进行 

的。这样将减少运行时间,提高效率。 

1.初始化方式有两种:定义的同时初始化、先定义,后初始化 

2、定义的同时初始化 

类型说明符 数组名[常量表达式] = { 值, 值......值 }; 

又细分以下几种情况: 

1)指定元素的个数的同时,对所有的元素进行显式的初始化 int nums[5] = {1,2,3,4,5}; 

2)指定数组的元素个数,对数组进行部分显式初始化 定义的同时对数组进行初始 化,没有显式初始化的元素,那么系统会自动将其初始化为0
int nums[10] = {1,2}; 

3)不指定元素个数,定义的同时初始化,它是根据大括号中的元素的个数来确定数组 的元素 个数
int nums[] = {1,2,3,5,6}; 

4)指定元素个数,同时给指定元素进行初始化 int nums[5] = {[4] = 3,[1] = 2}; 

     给数组赋值的方法除了用赋值语句对数组元素逐个赋值外

     还可采用初始化赋值和动态赋值的方法

3、先定义,后初始化 

正确写法:
int nums[3]; 

nums[0] = 1; 

nums[1] = 2; 

nums[2] = 3; 

错误写法:
int nums[3]; 

nums = {1,2,3}; // 因为数组名是一个常量,是数组的首地址,所以不能这样赋值. 

<span style="font-size:14px;">//
//  main.c
//  假设有数组 int a[10] = {1,2,3,4,5,6,7,8,9,10};
//  1.正序输出数组 2.倒序输出数组
//
//  Created by Brisinga on 15/11/15.
//  Copyright © 2015年 yan. All rights reserved.
//

#include <stdio.h>

int main(int argc, const char * argv[]) {
    
    int a[10] = {1,2,3,4,5,6,7,8,9,10};//定义数组
    for (int i=0; i<10; i++) {      //正序输出
        printf("%d ",a[i]);
    }
    printf("\n");
    for (int i=9; i>=0; i--) {
        printf("%d ",a[i]);      //倒序输出
    }
    return 0;
}
</span>

六、计算数组的长度
数组的长度 = 数组占用的总字节数 / 数组元素占用的字节数 


<span style="font-size:14px;">//
//  main.c
//  通过for循环,从键盘获取10个数,存放到数组中。找出10个数中的最大值
//
//  Created by Brisinga on 15/11/15.
//  Copyright © 2015年 yan. All rights reserved.
//

#include <stdio.h>

int main(int argc, const char * argv[]) {
    
    int a[10];  //定义一个数组用来接收用户的输入
    int max = a[0];  //定义一个变量用来接收最大值
    printf("请输入10个数\n");
    for (int i=0; i<10; i++) {
        scanf("%d",&a[i]);   //接收用户的输入
        if (a[i]>max) {
            max = a[i];    //获取最大值
        }
    }
    for (int i=0; i<10; i++) {
        printf("%d ",a[i]);
    }
    printf("\n最大值为:%d\n",max);
    return 0;
}
</span>

七、冒泡排序代码实现


<span style="font-size:14px;">//
//  main.c
//  冒泡排序代码实现
//  输入一组无序数据,使用冒泡排序进行排序,并输出
//  Created by Brisinga on 15/11/15.
//  Copyright © 2015年 yan. All rights reserved.
//

#include <stdio.h>

int main(int argc, const char * argv[]) {
    int a[] = {10,2,4,3,67,23};
    for (int i=0; i<5; i++) {    //控制循环次数
        for (int j=0; j<5-i; j++) {   //控制比较次数
            if (a[j]>a[j+1]) {
                int temp = a[j];     //交换a[j]和a[j+1]的值
                a[j] = a[j+1];
                a[j+1] = temp;
            }
        }
        
    }
    for (int i=0; i<6; i++) {     //打印数组
            printf("%d ",a[i]);
        }
    return 0;
}
</span>

八、选择排序代码实现

<span style="font-size:14px;">//  main.c
//  选择排序代码实现
//
//  Created by Brisinga on 15/11/15.
//  Copyright © 2015年 yan. All rights reserved.
//

#include <stdio.h>

int main(int argc, const char * argv[]) {
    
    int a[6] = {34,2,14,67,32,1};
    for (int i=0; i<5; i++) {           //控制循环次数
        for (int j=i+1; j<6; j++) {
            if (a[i]>a[j]) {        //如果a[i]>a[j],交换两个元素的位置
                int temp = a[i];
                a[i] = a[j];
                a[j] = temp;
            }
        }
    }
    
    for (int i=0; i<6; i++) {   //输出排序后的数组
        printf("%d ",a[i]);
    }
    return 0;
}
</span>

九、折半思想代码实现


*注意:折半查找必须是有序的数组


<span style="font-size:14px;">//  main.c
//  折半查找代码实现
//
//  Created by Brisinga on 15/11/15.
//  Copyright © 2015年 yan. All rights reserved.
//

#include <stdio.h>

int search(int arr[],int len,int key){
    
    int h = len-1;  //定义high
    int l = 0;   //定义low;
    int m;  //定义middle
    while (l<=h) {
        m = (h+l)/2;
        if (key>arr[m]) {
            l = m+1;    //如果key大于m的元素,则low等于m+1
        }else if(key<arr[m]){
        
            h = m-1;  //如果key小于m的元素,则low等于m-1
        }else{
            return m+1;
        }
    }
    return -1;

}
int main(int argc, const char * argv[]) {
    
    int a[] = {12,45,66,110,200};
    int result = search(a, 5, 66);
    printf("第%d个元素\n",result);
    return 0;
}
</span>

<span style="font-size:14px;">//
//  main.c
//  折半查找插入元素
//  输入一组有序数据,使用折半查找插入一个数据,返回要插入数据的位置
//  Created by Brisinga on 15/11/15.
//  Copyright © 2015年 yan. All rights reserved.
//

#include <stdio.h>

//定义查找的函数
int insert(int a[],int len,int key){
    
    int l =0;
    int h = len-1;
    int m=0;
    while (l<=h) {
        m = (l+h)/2;
        if (key>a[m]) {
            l = m+1;
        }else if(key<a[m]){
            h = m-1;
        }else{
        
            return m+1;
        }
    }
    return l;

}
int main(int argc, const char * argv[]) {
    
    int a[6] = {23,45,67,89,96,100};
    int result = insert(a, 6, 22)+1;
    printf("要插入的位置为:%d\n",result);
    return 0;
}
</span>

十、二维数组的定义


二维数组的一般形式:


类型说明符  数组名【常量表达式1】【常量表达式2】


版权声明:本文为博主原创文章,未经博主允许不得转载。

黑马程序员——C语言基础篇---基础语法

黑马程序员学习日志,C语言的基础学习
  • liufeng124
  • liufeng124
  • 2015年04月13日 22:10
  • 521

黑马程序员——c语言学习---第一个程序

-----------android培训、java培训、java学习型技术博客、期待与您交流!------------  从今天开始我漫长的编程之旅,提前预祝自己成功! 1、开发条件 a、mac...
  • qq_25842885
  • qq_25842885
  • 2015年02月05日 12:46
  • 356

黑马程序员-----c语言基础与重点第一篇——C知识基础

------- android培训、java培训、IOS培训.Net培训、、期待与您交流! ----------     本系列博客主要描述c语言基础与OC语言基础。大家可随时沟通交流。根据学习做一...
  • u010864317
  • u010864317
  • 2015年08月17日 16:07
  • 327

黑马程序员---C语言学习笔记之五

------- android培训、java培训、期待与您交流! ---------- 1.位段(位域)   使用伪指令#pragma pack (n),编译器将按照 n 个字节对齐;   使用伪...
  • yafengxnbh
  • yafengxnbh
  • 2015年03月16日 14:55
  • 184

黑马程序员_c语言基础知识大汇总

------- IOS培训、android培训、期待与您交流! ---------- c语言简介
  • wuyun768
  • wuyun768
  • 2014年04月22日 13:24
  • 310

黑马程序员C/C++——2016势如破竹,2017乘风破浪!

一、回望2016,火力全开的C/C++学院接连创造辉煌! 0105C/C++就业班在毕业16日的时候,就业人数过半,最可怕的是薪资过万的同学比例逼近80%!北上广深平均薪资达到11365元! ...
  • itcast_cn
  • itcast_cn
  • 2017年01月19日 16:05
  • 1723

程序员教程[第二版]学习笔记(一)

今年下半年的软考报名时间截止到9月10号。现在我还不清楚要不要报名,因为怕公司的项目进度紧而影响了复习进度。不管是否参加软考,作为一名刚毕业的程序员,我也应该掌握软考考试大纲的知识点。 我看的教材是...
  • fzu_dianzi
  • fzu_dianzi
  • 2011年08月19日 15:25
  • 909

黑马程序员:各学科学习路线图,简直是厉害了word哥

1999年的一部电影《一个都不能少》火了一句话“一个都不能少”!2016年,黑马程序员走心出品,全学科学习路线图。今天,我们也做到了,一个都不能少!差一个都那不叫完美。(此处无图,请自觉脑补)今天我们...
  • itcast_cn
  • itcast_cn
  • 2016年11月10日 13:57
  • 1704

黑马程序员——C语言数组

------- android培训、IOS培训、期待与您交流! ---------- 一、 数组的基本概念 一个int类型的变量能保存一个人的年龄,如果想保存整个班的年龄呢? 1. 什么...
  • yangyan0000
  • yangyan0000
  • 2014年09月19日 22:17
  • 138

黑马程序员--C语言数组

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-int main() { //数组名 代表地址 //数组的定义格式: 类型 数组名【元素个数】; ...
  • BABYHai1991
  • BABYHai1991
  • 2015年07月28日 13:57
  • 157
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【黑马程序员】C语言数组
举报原因:
原因补充:

(最多只允许输入30个字)