C语言-数组
Posted DS小龙哥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言-数组相关的知识,希望对你有一定的参考价值。
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]); //0
6. 数组定义的时候(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;
以上是关于C语言-数组的主要内容,如果未能解决你的问题,请参考以下文章
我的C语言学习进阶之旅解决 Visual Studio 2019 报错:错误 C4996 ‘fscanf‘: This function or variable may be unsafe.(代码片段
我的C语言学习进阶之旅解决 Visual Studio 2019 报错:错误 C4996 ‘fscanf‘: This function or variable may be unsafe.(代码片段