数组

数    组

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)个字节
原文地址:https://www.cnblogs.com/xieyi-newlife/p/8933106.html