关闭

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

标签: c语言函数排序冒泡排序选择排序
131人阅读 评论(0) 收藏 举报
分类:


------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】


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:5849次
    • 积分:260
    • 等级:
    • 排名:千里之外
    • 原创:21篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档