我是靠谱客的博主 粗犷世界,最近开发中收集的这篇文章主要介绍C语言基础:数组数组,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

数组

1.定义

把具有相同类型的若干变量按有序的形式组织起来,这些按序排列的同类数据元素的集合称为数组。

  • 数组属于构造数据类型
  • 按数组元素类型分为:数值数组、字符数组、指针数组、结构数组等
  • 所包含的数据叫做数组元素
  • 同一数组,所有元素的数据类型相同
  • 整个内存地址连续,每个数据元素所占空间大小相同
2.数组类型说明

类型说明符 数组名 [常量表达式],……;

  • 类型说明符:任一种基本数据类型构造数据类型
    int a[10] 整数类型,有十个元素;
    float b[10] 实数类型b,有十个元素;

  • 数组名:用户自己定义的数组表示符

  • [常量表达式]:数据元素的个数,即为数组长度,但是其下标从0开始计算。因此5个元素a[5]:a[0],a[1],a[2],a[3],a[4]

  • 数组名不能与其他变量名相同,
    void main()
    {
    int a;
    float a[10]; //与上边的整数a名字相同,不 合法
    }

  • 方括号里不能用变量来表达元素个数,但可以是符号常数,或常量表达式。
    #define FD 5
    void main()
    {
    int a[3+2],b[7+FD]; //合法

    int n=5;
    int b[n];
    //不合法
    }

  • 允许在同一个类型说明中,说明多个数组和多个变量:int a,b,c,d,n1[10],n2[20];

3.表示方法

数组名 [下标]

  • 下标表示元素在数组中的数组中顺序号,小数将会自动取整
  • 只能逐个使用下标变量,可以使用循环语句逐个输出,但不能一次引用整个数组
    printf("%d",a[i]); // 合法
    printf("%d",a); //错误
4.赋值

1)初始化赋值

static 类型说明符 数组名[常量表达式] ={值,值……};
static int a[10] = {0,1,2,3,4,5,6}

  • static 可以不写,表示的是静态储存类型,规定只有静态储存数组和外部储存数组才可初始化赋值
  • {}里边为各元素初值,各值之间逗号隔开
  • 可以只给部分元素赋初值,即当{ }中值的个数少于元素个数,只给前面部分赋值,后边值不够的元素自动赋值为0.但如果没有给可初始化的数组赋初值,则全部元素均为0
  • 只能逐个赋值不能整体赋值。
    int a[5]={1,1,1,1,1}; //合法
    int a[5]=1; //不合法
  • 如果给全部元素赋值,则在数组说明中,可以不给数组元素个数。
    int a[3]={1,2,3};
    int a[ ]={1,2,3};

2) 动态赋值

用循环语句配合scanf函数逐个对数组元素赋值

//输出一个数组,数组数组中最大的数组元素
void main()
{
   int i,max,a[10];
   printf("input 10 numbers: n");
   
   for(i=0;i<10;i++) //动态对数组逐个赋值
   {
     scanf("%d",&a[i]);
   }
   max = a[0];  //先设置一个初始的的最大值以供比较
   
   for(i=1;i<10;i++) //将10个数组元素逐个比较
   {
     if(a[i]>max)
     {
       max = a[i];
     }
   }
  
   printf("maxnum=%dn",max); //输出最大数组元素
}

例题

//输入一个数组,然后从大到小按序输出
void main()
{
   int i,j,p,q,s,a[10];  //定义一个含是个数据元素的整数型数组
   printf("n input 10 numbers:n");
   for(i=0;i<10;i++)
   {
      scanf("%d",&a[i]);  //这个for循环动态逐个输入10个数据
   }
   for(i=0;i<10;i++) 
   {  //这个循环对于对比大小进行排序
      p=i;
      q=a[i];             
      for(j=i+1;j<10;j++)  //从比i大一个下标的数据元素开始对比截至到最后一个元素
      {
         if(q<a[j])    //如果下一个比当前的大,就会把最大的数据元素赋值给q,直到q得到最大那一个数据元素
         {
           p=j;
           q=a[j];
         }
      }
      
      if(i!=p)    //如果为1,说明已经从上边的循环中对比出来获得当前最大值,然后进行下边的交换,把最大值放在最前边进行输出,然后i+1用下一个开始进入循环对比。
      {
           s=a[i];
           a[i]=a[p];
           a[p]=s;
      }
      printf("%d  ",a[i]);
   }
}
5.二维数组

1) 定义

类型说明符 数组名 [常量表达式1] [常量表达式2];

int a[3] [4]; 说明了一个三行四列的数组,数组名为a,数据类型为整数型

  • 常量表达式1表示第一位下标长度,常量表达式2表示第二维下标长度
  • 存储按行或者按列排列,C语言中二元数组按行排列,即才存完a[0]行,再存a[1]行,每行的四个元素也是一次存放的。
  • 多维数组可参照二维进行理解

2) 表示方法

数组名 [下标] [下标]

a [3] [4] 表示a数组三行四列的元素

3) 二维数组初始化

按行分段赋值
按行连续赋值

int a [4] [3] ={ {13,7,9} , {11,62,71} ,{58,16,70} , {5,8,91} }
或者
int { 13,7,9,11,62,71,58,16,70,5,8,91 }

  • 只对部分元素赋初值,未赋值的元素自动取0
  • 如果会全部元素赋初值,则第一位的长度可以不给出。int a[ ] [3] ={1,2,3,4,5,6,7,8,9};
6.字符数组

1)定义

存放字符量的数组,说明形式与前边相同

  • 字符型与整形通用

  • 可以多维

  • 可以初始化赋值
    char c [3]={’ c ‘,’ a ‘,’ o '}

  • 未全部赋值剩下自动赋0值,全部赋值时可省去长度说明

2) 赋值
初始化赋值除了普通方式还可以用字符串的方式对数组赋值
char c []={’ I ‘, ’ ’ , ’ l’,’ o ', v ', ’ e ', ’ ', ’ i ', ’ t '};
可写为:
char c []={“I love it”};
或者
char c[] =“I love it”;

  • 这种方式比逐个赋值多占一个字节 ’ ',这是C编译系统自动加上作为结束标志。

除了初始化赋值外也可以循环语句逐个赋值

3) 二维字符串数组

char a [n] [m] 表示n个长度不大于m的字符串

  • 数组是n*m个数字,字符则表示 为 n个字符串

4) 字符串的输入和输出

printf("%c",c[n][m]); //输出第n行第m列的元素,这是一个单个字符
scanf ("%c",&c[n][m]); //输入第n行第m列的元素,这是一个单个字符
printf("%s",c[n-1]); //输出第n行的字符串
scanf("%c",c[n-1]); //输入第n行一个字符串

5) 字符串常用的函数

puts (字符数组名) :把字符数组中的字符串输出到显示器
gets(字符数组名) :输入一个字符串
strcat (字符数组1,字符数组2) :把 字符数组2的字符串连接到字符数组1字符串后边
strcpy (字符数组1,字符数组2) :把字符数组2中的字符串拷贝到字符数组1中。串结束标志也一同拷贝
strlen(字符串组名) :测字符串实际长度,不含结束标志

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

void main()
{
    char st1[30] ="My name is ";
    char st2[10];
    char st3[30];
    int  k;
    printf("input your name:n");
    gets(st2);          //读取st2
    puts(st2);          //输出刚获得的st2
    strcat(st1,st2);    //把st2合并到st1中
    puts(st1);          //输出合并后的st2
    strcpy(st3,st2);    //把st2复制到空的st3中
    puts(st3);          //输出复制后的st3
    k=strlen(st2);      //计算出st2的真实长度
    printf("The lenth of the st2 is %dn",k);

}

结构数组和指针数组,会在总结指针和结构的时候穿插进去这里就不再介绍
最后用一到简单的练习题结束吧
#include <stdio.h>
#include <stdlib.h>

//把一个整数按大小顺序插入已排好的数组中
void main()
{
    int i,j,p,q,s,n,a[11]={24,42,34,54,2,33,56,6,59,11};

    printf("该数组从大到小排序为:");
    for(i=0;i<10;i++)        //将该数组从大到小排序
    {
        p=i;
        q=a[i];

        for(j=i+1;j<10;j++)
        {
            if(q<a[j])
            {
                p=j;
                q=a[j];
            }
        }

        if(p!=i)
        {
            s=a[i];
            a[i]=a[p];
            a[p]=s;
        }

        printf("%d  ",a[i]);
    }


    printf("n请输入你所要加入排序的整数: n");
    scanf("%d",&n);
    for(i=0;i<10;i++)              
    {
        if(n>a[i])             //从头到尾与新插入的进行比较,一旦碰见比它小的便进入if
        {
            for(s=9;s>i;s--)   //把从比它小的那个位置整体向后移动,给新元素流出位置
            {
                a[s+1]=a[s];

            }
            break;

        }
    }
    a[i]=n;//把新元素插入留出的位置,这里的i必须采用静态储存

    printf("加入新元素之后的数组顺序为:");
    for(i=0;i<=10;i++)
    {
        printf("%d ",a[i]);
    }

}

最后

以上就是粗犷世界为你收集整理的C语言基础:数组数组的全部内容,希望文章能够帮你解决C语言基础:数组数组所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部