写点什么

C 语言 - 数组

作者:DS小龙哥
  • 2022 年 1 月 11 日
  • 本文字数:2559 字

    阅读完需:约 8 分钟

1. 数组介绍

C 语言的数组是一个同类型数据的集合,主要用来存储一堆同类型的数据。


程序里怎么区分是数组? [ ] 这个括号是数组专用的符号. 定义数组、 访问数组数据都会用到。


数组的定义语法:


int data[10];  <数据类型> <数据名称>[常量-整数-数据数量];
定义一个int类型的数组,数组的名称是data,长度是10,所占空间大小:4*10 字节。
复制代码


特点:


1.  访问数组成员的时候:下标是从0开始的。int data[10];  下标 (0~9)2.  数组只是支持在定义的时候进行整体赋值。3.  数组定义的时候,[]里只能填常量。数组在定义之后就无法更改大小。4.  数组的空间是连续的—内存。5.  数组的名称就是数组空间的首地址。6.  数组初始化时,如果没有赋值,那么数组空间里的数据是未知的---局部变量。7.  数组初始化时,只要给一个空间赋值,剩余空间都自动初始化为0---局部变量。
复制代码


数组练习 1: 定义一个数组、打印出数组里的数据


#include <stdio.h>int main(){  char i;  int data[10]={12,13,14,15}; //下标  int a[5];  for(i=0;i<10;i++) //0~9  {    printf("data[%d]=%d\n",i,data[i]);  }  for(i=0;i<5;i++) //0~4  {    printf("a[%d]=%d\n",i,a[i]);  }  return 0;}
复制代码


数组练习 2: 从键盘上读取 5 个数据存放到数组里,在顺序打印、逆序打印


#include <stdio.h>int main(){  int i;  int data[5]={0}; //下标  //从键盘上读取5个数据存放到数组里  printf("请输入5个数据:");  for(i=0;i<5;i++)  {    scanf("%d",&data[i]); //两种: 空格 、 回车-换行  }    for(i=0;i<5;i++)  {    printf("data[%d]=%d\n",i,data[i]);  }    for(i=4;i>=0;i--)  {    printf("data[%d]=%d\n",i,data[i]);  }  return 0;}
复制代码

2. 数组定义语法与注意事项

1. 数组的名称是数组元素的首地址。(数组的名字就是地址)2. 数组只能在初始化的时候进行整体赋值。比如:  int a[100]={10,20,30};3. 数组的下标访问是从0开始的。比如: int a[10];  下标范围: a[0] ~ a[9] 4. 数组名称虽然是地址,但是这个地址是不能偏移、也不能自增自减,也不能改变指向。   int a[10];      int b[10];   a++、a--;  //错误的   a=b;      //错误的   a[0]=b[0]; // 正确5. 如果数组是局部变量,初始化没有赋值的情况下,成员是随机值。   比如: int a[10];  printf("%d\n",a[0]);   初始化的时给数组进行赋值,那么没有赋值的下标是什么值?   比如:  int a[10]={1,2,3}; printf("%d\n",a[6]); //06. 数组定义的时候(C89), 数组的下标里的大小只能填常量。     比如:     int a[]; //错误的,定义数组必须填大小    int size=10; int a[size]; //错误的,定义数组只能填常量。    int b[100]; //正确    #define SIZE 100  int a[SIZE]; //正确
复制代码

3. 案例: 计算平均值

要求: 定义数组,从键盘上录入 5 个浮点类型数据存放到数组,计算平均值和最大、最小值,输出到屏幕上。


#include <stdio.h>int main(){  int i;  float sum=0;  float data[5];  float max=0;  float min=100;  printf("请输入5个数据:");  /*1. 输入数据*/  for(i=0;i<5;i++)  {    scanf("%f",&data[i]);  }  /*2. 处理数据*/  for(i=0;i<5;i++)  {    sum+=data[i]; //累加    if(data[i]>max)max=data[i];    if(data[i]<min)min=data[i];  }  printf("平均值:%.1f\n",sum/5.0);  printf("最大值:%.1f\n",max);  printf("最小值:%.1f\n",min);  return 0;}
复制代码

4. 案例: 求和

要求: 定义数组,从键盘上录入 5 个整数数据,求和,输出结果。


#include <stdio.h>int main(){  int i;  int sum=0;  int data[5];  printf("请输入5个数据:");  /*1. 输入数据*/  for(i=0;i<5;i++)  {    scanf("%d",&data[i]);  }  /*2. 处理数据*/  for(i=0;i<5;i++)  {    sum+=data[i]; //累加  }  printf("和:%d\n",sum);  return 0;}
复制代码

5. 案例: 判断数据范围

要求: 定义数组,从键盘上录入 10 个整数数据,计算里面大于 5、大于 10 数据的数量,输出结果。


#include <stdio.h>int main(){  int i;  int data[10];  int cnt_10=0,cnt_5=0;  printf("请输入10个数据:");  for(i=0;i<10;i++)  {    scanf("%d",&data[i]);  }  //处理数据  for(i=0;i<10;i++)  {    if(data[i]>5)cnt_5++;    if(data[i]>10)cnt_10++;  }  printf("cnt_5=%d\n",cnt_5);  printf("cnt_10=%d\n",cnt_10);  return 0;}
复制代码

6. 案例: 冒泡排序-整数数组

从键盘上录入 10 个数据,进行冒泡排序. 大到小排序。


#include<stdio.h>int main(){    //从键盘上录入5个数据,进行冒泡排序.  大到小排序。    int a[5];    int i,j;    int tmp;    printf("录入5个数据:");    for(i=0;i<5;i++)    {        scanf("%d",&a[i]);    }        for(i=0;i<sizeof(a)/sizeof(a[0])-1;i++) //排序次数    {        for(j=0;j<sizeof(a)/sizeof(a[0])-1-i;j++)  //排序的过程        {            if(a[j]>a[j+1])            {                tmp=a[j];                a[j]=a[j+1];                a[j+1]=tmp;            }           }    }
for(i=0;i<sizeof(a)/sizeof(a[0]);i++) { printf("%d ",a[i]); } printf("\n"); return 0;}
复制代码

7. 字符串数组

7.1 字符串特点

1. 字符串本身就是字符数组。比如:char a[10]="123";2. 常规字符串使用双引号括起来的。 比如:char a[10]="123";3. 字符串以'\0' 作为结束符号。4. 字符数组一定是字符串? 不一定。 比如: char a[]={12,3,4,5,5};
复制代码

7.2 字符串定义

#include<stdio.h>int main(){    char buff1[10]={'1','2','3','\0','4','5','6','\0','7'};        char buff2[]={'1','2','3','\0'};    char buff3[]="123";
printf("%d\n",sizeof(buff2)); //4 printf("%d\n",sizeof(buff3)); //4 return 0;}
复制代码

7.3 计算字符串长度

#include <stdio.h>#include <string.h>
int main(){ char buff[100]; int cnt=0; printf("请键盘上录入字符串:"); scanf("%s",buff); // 不可以录入空格
while(buff[cnt]!='\0') { cnt++; } printf("cnt=%d\n",cnt); return 0;}
复制代码


发布于: 刚刚阅读数: 2
用户头像

DS小龙哥

关注

之所以觉得累,是因为说的比做的多。 2022.01.06 加入

熟悉C/C++、51单片机、STM32、Linux应用开发、Linux驱动开发、音视频开发、QT开发. 目前已经完成的项目涉及音视频、物联网、智能家居、工业控制领域

评论

发布
暂无评论
C语言-数组