文章目录
一、数组
1.数组
有些时候,我们需要保存类型一致、数量庞大的数据,这时就需要引入数组。数组的定义:存储一批同类型数据的地方。数组的语法:
数据类型 数组名[元素个数]
- 元素个数只能是常量或者常量表达式
int a[6];
char b[24];
double c[3];
数组是不能动态定义的,也就是说C语言不允许在程序运行过程中去修改数组空间大小的。
那么,如何访问数组中的元素呢?使用方括号。语法格式:数组名[下标]
。数组的第一个元素是从下标0开始的。关于下标,程序员可能经常会出现数组越界的问题。
循环与数组的关系:因为我们常常需要使用循环来访问数组,因此,循环中的初始值一般为0。
举个栗子:用数组存放班里10位同学的数学成绩,并计算出平均数。
#include <stdio.h>
#define NUM 10
int main()
{
int s[NUM];
int i,sum = 0;
for (i=0;i<NUM;i++)
{
printf("请输入第%i位同学的成绩:",i+1);
scanf("%d",&s[i]);
sum += s[i];
}
printf("成绩录入完毕,该次考试的平均分是:%.2f\n",(double)sum/NUM);
return 0;
}
[liujie@localhost sle17]$ gcc test.c && ./a.out
请输入第1位同学的成绩:79
请输入第2位同学的成绩:89
请输入第3位同学的成绩:88
请输入第4位同学的成绩:100
请输入第5位同学的成绩:98
请输入第6位同学的成绩:56
请输入第7位同学的成绩:78
请输入第8位同学的成绩:99
请输入第9位同学的成绩:95
请输入第10位同学的成绩:82
成绩录入完毕,该次考试的平均分是:86.40
在数组定义时,就给其赋值,称之为数组的初始化。
-
将数组中所有元素初始化为0,可以这么写:
int a[10] = { 0};//事实上这里只是将第一个元素赋值为0
-
如果是赋予不同的值,那么用逗号分隔开即可:
int a[10] ={ 1,2,3,4,5,6,7,8,9,0};
-
你还可以只给一部分元素赋值,未被赋值的元素自动初始化为0
int a[10] ={ 1,2,3,4, 5,6}; //表示为前边6个元素赋值,后边4个元素系统自动初始化为0
-
有时候还可以偷懒,可以只给出各个元素的值,而不指定数组的长度(因为编译器会根据值的个数自动判断数组的长度):
int a[] = { 1,2,3,4, 5,6,7,8, 9, 0};
2.数组的课后作业
- 假设有数组初始化为 int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 请问表达式 (a[1] + a[7]) / a[2] 的值应该是多少?
答:(a[1] + a[7]) / a[2] == (2 + 8) / 3 == 3。 - 如果需要定义一个字符数组来存放字符串 “FishC”,这个数组的长度至少应该定义多少个元素合适?
答:至少需要 6 个元素,依次存放 ‘F’, ‘i’, ‘s’, ‘h’, ‘C’ , ‘\0’。 - 用户是否可以自己直接输入字符串结束标志 ‘\0’?
答:不可以!因为 ‘\0’ 代表 ASCII 码为 0 的字符,它不是一个可以显示的字符,而是一个“空操作符”,表示什么也不做。因此用它来作为字符串结束标志不会产生什么副作用。 - 有一个数组占用了 13 个字节的内存空间,你知道它是什么数组吗?
答:字符数组,因为只有 char 类型的数组才可能存在奇数(个字节)的空间。 - 用户输入年份,打印该年每个月的天数。
#include <stdio.h>
int main()
{
int days[] = {
31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int i, year;
printf("请输入一个年份:");
scanf("%d", &year);
if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))
{
days[1] = 29;
}
for (i = 0; i < sizeof(days) / sizeof(days[0]); i++)
{
printf("%2d月份:%d天\n", i+1, days[i]);
}
return 0;
}
[liujie@localhost sle18]$ gcc test4.c && ./a.out
请输入一个年份:2020
1月份:31天
2月份:29天
3月份:31天
4月份:30天
5月份:31天
6月份:30天
7月份:31天
8月份:31天
9月份:30天
10月份:31天
11月份:30天
12月份:31天
二、可变长度数组
1.可变长度数组
在C99中定义,当数组的长度在运行的时候才被决定,就是用变量作为数组的长度,就是可变长度数组。
举个栗子:
#include <stdio.h>
int main()
{
int n,i;
printf("请输入字符的个数:");
scanf("%d",&n);
//定义数组
char a[n+1];
printf("请开始输入字符:");
getchar();
for (i=0;i<n;i++)
{
scanf("%c",&a[i]);
}
a[n] = '\0';
printf("你输入的字符串是:%s\n",a);
return 0;
}
[liujie@localhost sle17]$ gcc test1.c && ./a.out
请输入字符的个数:17
请开始输入字符:I love Fishc.com!
你输入的字符串是:I love Fishc.com!
三、字符串处理函数
1.字符串处理函数
前面已经知道,C语言是没有字符串这一数据类型的。那么,C语言是如何存放和表示字符串的呢?有下面两种方式:
-
字符串常量(一旦确定下来,就没有办法改变)
"FishC","小甲鱼","鱼C工作室"
-
字符类型数组(灵活的方式)
数组中的每一个元素表示一个字符,最后添加一个表示字符串结束的结束符’\0’
定义字符类型数组有如下方式:
-
先定义指定长度的字符数组,再给每个数组单独赋值,这种方式比较笨!
int main { char str[10]; str[0] = 'F'; str[1] = 'i'; str[2] = 's'; str[3] = 'h'; str[4] = 'C'; str