• 数组


    数    组

    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)个字节
  • 相关阅读:
    Topshelf的使用
    ref和out的区别
    .NET编码解码(HtmlEncode与HtmlDecode)
    查询表中某字段有重复记录个数的方法
    ActiveReports 报表应用教程 (8)---交互式报表之动态过滤
    ActiveReports 报表应用教程 (7)---交叉报表及数据透视图实现方案
    ActiveReports 报表应用教程 (6)---分组报表
    ActiveReports 报表应用教程 (5)---解密电子商务领域首张电子发票的诞生(套打报表)
    ActiveReports 报表应用教程 (4)---分栏报表
    ActiveReports 9 新功能:借助目录(TOC)控件为报表添加目录功能
  • 原文地址:https://www.cnblogs.com/xieyi-newlife/p/8933106.html
Copyright © 2020-2023  润新知