zoukankan      html  css  js  c++  java
  • 数组

    数    组

    1.定义

    定义:
    类型  数组名[下标1] [下标2] [下标3]…………;
    
    维数:数组下标的个数表示维数
    
    下标值得长度表示相应的长度
    
    一维:存储一组相同类型的数据
    short score[100]//100个元素的一维短整型数组
    定义数组时必须使用整型常量或者整型常量表达式
    第一个元素的下标为0

    二维:存储举矩阵元素或者二维表格
    short matrix[3][4] //3行4列二维数组 注意:C语言中数组在内存中是按行存储的 占用字节数 = sizeof(基类型)*元素个数

    2.数组引用

      方式:

        数组名[下标1][下标2]……………………

    3.数组初始化

      按元素初始化

     short matri [2][3] = {1, 2, 3, 4, 5, 6}  //要使用花括号

      按行初始化

    short matri [2][3] = {{1, 2, 3} , {4, 5, 6}}

      若元素不足时,则在空余的地方赋值默认值0

      static short a[3];   ==    static short a[3] = {0,0,0} 

    4.数组使用实例1:菲波那切数列

    #include<stdio.h>
    void main()
    {
        int a[10];
        int i ;
        i = 2;
        a[0] = 1;
        a[1] = 1;
        printf("%d
    ",a[0]);
        printf("%d
    ",a[1]);
        for (i; i<10; i++)
        {
            a[i] = a[i-1]+ a[i-2];
            printf("%d
    ",a[i]);
        }
    }

    5.字符串

    对字符串进行处理必须添加
    
    #include<string.h>
    
    strlen(字符串)    //返回字符串实际长度,不包含''在内的实际长度
    
    strcmp(str1 , str2)    //比较大小
    
    strcat(字符数组1, 字符串2)    //连接

    gets()  //从键盘输入字符串,返回字符串的首地址

    puts()  //从()内的参数表示的地址开始,一次输出存储在存储单元内的字符,当遇到''时结束输出。

    strcpy()  //字符串赋值函数
    字符数组输入输出
    
    按c格式符一个一个字符单独输入输出
    格式:
    (必须的格式)
    for (i=0; str[i] != ''; i++)
        {
            printf("%c", str[i]);
        }
    
    按s格式符作为一个整体输入输出
        scanf("%s",str);
        printf("%s", str);
    #include<stdio.h>
    #include<string.h>
    #define A 80
    int main(void)
    {
        int n;
        char str[A] ,min[A];
        printf("Please enter five names:
    ");
        gets(str);//输入一个字符串
        strcpy(min , str);//将其作为最小字符串保存
        for (n =1;n<5;n++)
        {
            gets(str);
            if (strcmp(str ,min)< 0)//比较两个字符串的大小
            {
                strcpy(min, str);//将字符串str复制给min
            }
        }
        printf("The min is:");
        puts(min);  //输出最小字符串min
        return 0;
    }

     结构体数组

    struct date
    {
        int day;
        int month;
        int year;
    };
    struct date date1[100];

    常用字符串处理函数

    头文件

    #include<stdio.h>
    #include<string.h>

    字符串输出函数 // 但是要保证遇到""结束

    puts()

    字符串输入函数 // 自动在结尾添加 "",输入字符的个数小于字符数组的长度

    gets()

    字符串连接函数

    strcat()

    字符串复制函数

    strcpy()

    字符串比较函数

    strcmp()

    字符串长度函数(遇到""就返回值)

    strlen()

     实例

    //查询工资
    
    #include<stdio.h>
    #define N 5
    #define MIN 1500
    int main()
    {
        int i;
        float gz[N];
        int a[N] = {0};
        int cnt = 0;
        for(i = 0; i < N ;i++)
        {
            printf("请输入第%2d位职工的工资:",i+1);
            scanf("%f",&gz[i]);
            if (gz[i] >= MIN)
            {
                a[cnt++]=i;    
            }
        }
        printf("==================================
    ");
        printf("工资在%d及以上的共有%d位
    ", MIN, cnt);
        printf("他们是:
    ");
        for (i=0; i<cnt; i++)
        {
            printf("第%2d位%.2f
    ", a[i]+1, gz[a[i]]);
        }
    }
    //由键盘输入5个圆的半径,分别输出他们的面积
    #include<stdio.h>
    #include<math.h>
    #define N 4
    #define PI 3.14
    int main()
    {
        float r, s;
        float a[N];
        int i = 0;
        for (i = 0;i < N+1; i++)
        {
            printf("请输入第%d个圆的半径r = ",i+1);
            scanf("%f", &a[i]);
        }
        for(i = 0;i<5;i++)
        {
            r = a[i];
            s = PI * r * r;
            printf("第%d个圆的面积是:%f
    ",i+1,s);
        }
    }
    //工资排序
    //采用选择法对5位职工工资有小到大的排序
    
    #include<stdio.h>
    #define N 5
    int main()
    {
        int i, j;
        int k;
        int a[N];
        float gz[N];
        float t;
        int tt;
        for (i =0; i<N; i++)
        {
            a[i] = i;
            printf("请输入第%d位职工的工资:", i+1);
            scanf("%f",&gz[i]);
        }
    
        for(i = 0; i<N; i++)
        {
            k = i;
            for(j = i +1; j<N; j++)
            {
                if (gz[j] < gz[k])
                {
                    k = j;
                }
                if (i != k)
                {
                    t = gz[i];gz[i]=gz[k];gz[k]=t;
                    tt = a[i];a[i]=a[k];a[k]=tt;
                }
            }
        }
        printf("=====================================
    ");
        printf("从小到大排序结果:
    ");
        for (i =0; i< N;i++)
        {
            printf("第%2d位%.2f
    ", a[i]+1, gz[i]);
        }
        printf("=====================================
    ");
    
    }
    //工资排序
    //采用选择法对5位职工工资有小到大的排序
    
    #include<stdio.h>
    #define N 5
    int main()
    {
        int i, j;
        int flag;
        int a[N];
        float gz[N];
        float t;
        int tt;
        for (i =0; i<N; i++)
        {
            a[i] = i;
            printf("请输入第%d位职工的工资:", i+1);
            scanf("%f",&gz[i]);
        }
    
        for(i = 0; i<N; i++)
        {
            flag = 0;
            for(j = i +1; j<N-i; j++)
            {
                if (gz[j] > gz[j +1])
                {
                    t = gz[j];gz[j]=gz[j+1];gz[j+1]=t;
                    tt = a[j];a[j]=a[j+1];a[j+1]=tt;
                    flag = 1;
                }
                if (flag == 0)  break;
            }
        }
        printf("=====================================
    ");
        printf("从小到大排序结果:
    ");
        for (i =0; i< N;i++)
        {
            printf("第%2d位%.2f
    ", a[i]+1, gz[i]);
        }
        printf("=====================================
    ");
    
    }
    //一组有序数据,插入一个数据保持原有的数据顺序
    #include<stdio.h>
    #define N 10
    int main()
    {
        int k;
        int count = 5;
        int newgz;
        int i;
        int gz[N] = {1000, 1200, 1300, 1400, 1500};
        printf("插入新数据之前的数据为:");
        for (i = 0; i < N; i++)
        {
            printf("%-6d",gz[i]);
        }
        printf("
    ");
        printf("请输入一个新数据:");
        scanf("%d", &newgz);
        count += 1;
        for(i = 0; i<N; i++)
        {
            if(newgz <= gz[i])
            {
                k = i;
                break;
            }
        }
        for (i = count; i>k ;i--)
        {
            gz[i] = gz[i -1];
        }
        gz[k] = newgz;
        printf("插入新的数据后的数据:");
        for (i = 0; i < count; i++)
        {
            printf("%-6d",gz[i]);
        }
        printf("
    ");
        getchar();
        return 0;
    }
    //删除数据,删除指定位置的数据,并且维持原有数据的相邻关系
    
    #include<stdio.h>
    int main()
    {
        int i;
        int b;
        int a[10] = {1000, 1100, 1200, 1300, 1400};
        printf("删除前的数据为:
    ");
        for(i = 0; i<10; i++)
        {
            printf("%-6d", a[i]);
        }
        printf("
    
    ");
        printf("输入要删除数据的位置(1-10)之间的一个数:
    ");
        scanf("%d",&i);
        printf("要删除的数据是:%d
    ",a[i-1]);
        b = i -1;
        for(b ; b<10; b++)
        {
            a[i-1] = a[i];
        }
        printf("删除数据后的数据为:
    ");
        for(i = 0;i<10; i++)
        {
            printf("%-6d",a[i]);
        }
        printf("
    
    ");
        getchar();
        return 0;
    }
    //删除数据,删除指定位置的数据,并且维持原有数据的相邻关系
    
    #include<stdio.h>
    int main()
    {
        int i;
        int b;
        int a[10] = {1000, 1100, 1200, 1300, 1400};
        printf("删除前的数据为:
    ");
        for(i = 0; i<10; i++)
        {
            printf("%-6d", a[i]);
        }
        printf("
    
    ");
        printf("输入要删除数据的位置(1-10)之间的一个数:
    ");
        scanf("%d",&i);
        if(i<0 || i>5)
        {
            printf("下标范围有误
    ");
            return;//退出程序
        }
        printf("要删除的数据是:%d
    ",a[i-1]);
        b = i -1;
        for(b ; b<10; b++)
        {
            a[i-1] = a[i];
        }
        printf("删除数据后的数据为:
    ");
        for(i = 0;i<10; i++)
        {
            printf("%-6d",a[i]);
        }
        printf("
    
    ");
        getchar();
        return 0;
    }
    //删除数据,删除指定位置的数据,并且维持原有数据的相邻关系
    
    #include<stdio.h>
    int main()
    {
        int i;
        int b;
        int a[5] = {1000, 1100, 1200, 1300, 1400};
        printf("删除前的数据为:
    ");
        for(i = 0; i<5; i++)
        {
            printf("%-6d", a[i]);
        }
        printf("
    
    ");
        printf("输入要删除数据的位置(1-10)之间的一个数:
    ");
        scanf("%d",&i);
        if(i<0 || i>5)
        {
            printf("下标范围有误
    ");
            return;//退出程序
        }
        printf("要删除的数据是:%d
    ",a[i-1]);
        b = i -1;
        for(b ; b<5; b++)
        {
            a[i-1] = a[i];
        }
        printf("删除数据后的数据为:
    ");
        for(i = 0;i<4; i++)//数据少了一个
        {
            printf("%-6d",a[i]);
        }
        printf("
    
    ");
        getchar();
        return 0;
    }
    //由键盘输入5个职工的属性数据,查找工资为1600及以上的职工,并输出其属性数据
    #include<stdio.h>
    #include<conio.h>
    #define N 3    //3位职工
    #define MIN 1600
    
    struct zhigong
    {
        char gonghao[10];
        char name[10];
        float gwgz;
    };
    
    int main()
    {
        int i;
        int k;
        struct zhigong gz[N];//定义结构体数组
        for(i=0; i < N; i++)
        {
            printf("请输入第%d位职员的属性。
    
    ",i+1);
            printf("输入工号:");
            scanf("%s", &gz[i].gonghao);
            printf("输入职员姓名:");
            scanf("%s", &gz[i].name );
            printf("输入工位工资:");
            scanf("%f",&gz[i].gwgz );
            printf("=================================
    ");
    
        }
        system("cls");
        printf("请按任意键继续。");
        getchar();
        printf("=================================
    ");
        printf("岗位工资在1600及以上的职工有:
    
    
    ");
        printf("=================================
    ");
        for(k = 0; k < N; k++)
        {
            if (gz[k].gwgz >= MIN)
            {
                printf("%-10s%-10s%-10s
    ","工号","姓名","岗位工资");
                printf("%-10s%-10s%-10.2f",gz[k].gonghao,gz[k].name ,gz[k].gwgz );
                printf("
    =================================
    ");
            }
        }
        getchar();
        return 0;
    }
    //由键盘输入5个职工的属性数据,查找工资为1600及以上的职工,并输出其属性数据
    #include<stdio.h>
    #include<conio.h>
    #define N 3    //3位职工
    #define MIN 1600
    
    struct zhigong
    {
        char gonghao[10];
        char name[10];
        float gwgz;
    };
    
    int main()
    {
        int i;
        int k;
        struct zhigong gz[N];//定义结构体数组
        for(i=0; i < N; i++)
        {
            printf("请输入第%d位职员的属性。
    
    ",i+1);
            printf("输入工号:");
            scanf("%s", &gz[i].gonghao);
            printf("输入职员姓名:");
            scanf("%s", &gz[i].name );
            printf("输入工位工资:");
            scanf("%f",&gz[i].gwgz );
            printf("=================================
    ");
    
        }
        system("cls");
        printf("请按任意键继续。
    ");
        getchar();
        printf("=================================
    
    ");
        printf("岗位工资在1600及以上的职工有:
    ");
        printf("=================================
    ");
        printf("%-10s%-10s%-10s
    ","工号","姓名","岗位工资");
        for(k = 0; k < N; k++)
        {
            if (gz[k].gwgz >= MIN)
            {
                
                printf("%-10s%-10s%-10.2f",gz[k].gonghao,gz[k].name ,gz[k].gwgz );
                printf("
    =================================
    ");
            }
        }
        getchar();
        return 0;
    }

    二维数组

    //定义一个二维数组,接收输入的数据并以矩阵形式输出
    #include<stdio.h>
    int main()
    {
        int a[2][3];
        int i, j;
        for(i = 0;i < 2; i++)
        {
            for(j = 0;j < 3; j++)
            {
                printf("输入a[%d][%d]:",i,j);
                scanf("%d",&a[i][j]);
            }
        }
    
        for(i = 0;i < 2; i++)
        {
            for(j = 0;j < 3; j++)
            {
                printf("%5d",a[i][j]);
            }
            printf("
    ");
        }
        return 0;
    }

    二维数组实例

    //求3*3矩阵的转置矩阵
    #include<stdio.h>
    int main()
    {
        int a[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
        int b[3][3];
        int i,j;
        for(i = 0; i< 3; i++)
        {
            for(j = 0; j < 3; j++)
            {
                b[j][i] = a[i][j];            
            }
        }
        printf("转置前的矩阵为:
    ");
        for(i = 0; i< 3; i++)
        {
            for(j = 0; j < 3; j++)
            {
                printf("%4d",a[i][j]);            
            }
            printf("
    ");
        }
        printf("转置后的矩阵为:
    ");
        for(i = 0; i< 3; i++)
        {
            for(j = 0; j < 3; j++)
            {
                printf("%4d",b[i][j]);            
            }
            printf("
    ");
        }
    }
    #include<stdio.h>
    #define M 3
    #define N 6
    int main()
    {
        int x[M][N];
        int i, j, k;
        for (i = 0; i < M-1; i++)
        {
            printf("输入第%d个学生各科的成绩:
    ", i+1);
            for (j = 0; j < N-1; j++)
            {
                scanf("%d",&x[i][j]);
            }
        }
        for (i = 0; i < N; i++)
        {
            x[M-1][i] = 0;
            for (k = 0;k < M-1;k++)
            {
                x[M-1][i] += x[k][i];
            }
        }
        for(j = 0; j < M;j++)
        {
            x[j][N-1] = 0;
            for(k =0; k < N-1; k++)
            {
                x[j][N-1] += x[j][k];
            }
        }
        printf("============================
    ");
        printf("输出统计结果
    ");
        for(i = 0; i < M; i++)
        {
            for(j = 0; j < N; j++)
            {
                printf("%-6d",x[i][j]);
            }
            printf("
    ");
        }
        printf("===========================
    ");
        return 0;
    
    
    }

    字符数组与字符串

    定义:
    char
    str1[5];
    char str2[10][80];
    char str1[3] = {54, 23, 12};//在内存中占3*sizeof(char)个字节
  • 相关阅读:
    Eclipse 远程调试
    大数据处理方法bloom filter
    sicily 1259 Sum of Consecutive Primes
    sicily 1240. Faulty Odometer
    sicily 1152 简单马周游 深度优先搜索及回溯算法
    sicily 1050 深度优先搜索解题
    sicily 1024 邻接矩阵与深度优先搜索解题
    sicily 1156 二叉树的遍历 前序遍历,递归,集合操作
    sicily 1443 队列基本操作
    sicily 1006 team rankings 枚举解题
  • 原文地址:https://www.cnblogs.com/xieyi-newlife/p/8933106.html
Copyright © 2011-2022 走看看