zoukankan      html  css  js  c++  java
  • C语言总结(二) 数组

      所谓数组,就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字成为数组名,编号成为下标。组成数组的各个变量成为数组的分量,也称为数组的元素,有时也称为下标变量。数组是在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来的一种形式。这些按序排列的同类数据元素的集合称为数组。(来自百度百科)

    下来我们直接用例子来说话吧:请看代码1:

    #include<stdio.h>
    int main() {
        int a[8], i;
        for(i = 1; i <= 8; ++i)
            a[i] = 0;
        return 0;
    }
    

    首先是定义一个数组a, 然后给数组a的每个元素赋值为0,可能有的同学已经发现问题了,数组越界了……a[8]这个元素是不存在的,同时这个代码可能为形成死循环,大家想想为什么?这里最后再做解释。

    下面请看代码2:

    // 查找整数d是否在数组 a 中
    #include<stdio.h>
    #define N 10;
    int main() {
        int a[N] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; //初始化数组
        int i, d;
        for(i = 0; i < N; ++i) {
            scanf("%d", &d);
            for(i = 0; i < N; ++i) {
                if(a[i] == d) {
                    printf("d in the array of a!
    ");
                    break;
                }
            }
            if(i == N) printf("d not in the array of a!
    ");
        }
        return 0;
    }
    

     这个程序是给出一个数组a,然后输入一个数字d,看d是否在数组a中出现过。但是代码不能通过编译,请大家找找错误吧……

    可能大家已经发现了原因,因为#define N 10后面加了一个分号";",就是这个分号的原因,去掉后就可以通过编译并运行了,来我们来运行一下吧……

    又发现错误了!!! 当我们输入11时,程序就直接结束了,为什么啊!!?没错就是因为变量i,  这可能就是大家犯的一个小错误了,请看下面正确的代码!

    // 查找整数d是否在数组 a 中
    #include<stdio.h>
    #define N 10
    int main() {
        int a[N] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; //初始化数组
        int i, j, d;
        for(i = 0; i < N; ++i) {
            scanf("%d", &d);
            for(j = 0; j < N; ++j) {
                if(a[j] == d) {
                    printf("d in the array of a!
    ");
                    break;
                }
            }
            if(j == N) printf("d not in the array of a!
    ");
        }
        return 0;
    }
    

     注意:当有循环嵌套时,千万不要让你的两个循环的 "i", 一样!

    其实这道题还有其它方法,大家想想看,请看下边的代码3:

    // 查找整数d是否在数组 a 中
    #include<stdio.h>
    #define N 10
    int main() {
        int a[N] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; //初始化数组
        int b[11] = {0};
        int i, j, d;
        for(i = 0; i < N; ++i) b[a[i]] = 1;
        for(i = 0; i < N; ++i) {
            scanf("%d", &d);
            if( d < 11 && b[d] )
                printf("d in the array of a!
    ");
            else
                printf("d not in the array of a!
    ");
        }
        return 0;
    }
    

    代码4:数组排序

    //排序
    #include<stdio.h>
    #include<algorithm>
    using namespace std;
    #define N 10
    
    int a[N] = {2, 3, 1, 4, 5, 6, 9, 10, 2, 1};
    
    int main() {
        int i;
        sort(a, a+N);
        printf("排序后数组a为: ");
        for(i = 0; i < N; ++i) printf("%d ", a[i]);
        puts("");  //输出换行
        return 0;
    }
    
  • 相关阅读:
    poj 2485 Highways 最小生成树
    hdu 3415 Max Sum of MaxKsubsequence
    poj 3026 Borg Maze
    poj 2823 Sliding Window 单调队列
    poj 1258 AgriNet
    hdu 1045 Fire Net (二分图匹配)
    poj 1789 Truck History MST(最小生成树)
    fafu 1181 割点
    减肥瘦身健康秘方
    人生的问题
  • 原文地址:https://www.cnblogs.com/yaling/p/3460982.html
Copyright © 2011-2022 走看看