• 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;
    }
    
  • 相关阅读:
    ubuntu全版本通用换源教程
    【Pybind11】Python调用C++接口(Ubuntu下编译OpenCV)
    ubuntu18.04如何安装python3.5及其pip安装
    smb和rdp暴破差异分析
    如何修改smb服务的默认445端口?——官方回答是无法修改,但是可以使用端口转发
    开集识别——流形
    10种常见的进程注入技术的总结
    webmine和cryptowebminer挖矿——一句<iframe width=0 height=0 frameborder=0 src='https://webmine.cz/worker?key=[YOUR_API_KEY]'></iframe>搞定
    进程隐藏与进程保护(SSDT Hook 实现)(一)
    deepMiner —— 本质上类似coinhive,也是后端开启nodejs连接矿池,默认的连接门罗币矿池
  • 原文地址:https://www.cnblogs.com/yaling/p/3460982.html
Copyright © 2020-2023  润新知