1 数组
1.1 什么是数组
数组是一组数目固定、类型相同的数据项,数组中的数据项称为元素。如:1
int numbers[10];
数组从0开始索,也就是numbers[0]是数组中的第一个元素,最后一个元素是numbers[9]。因为int占4个字节,所以上例总占用了40个字节的空间。
利用数组求平均数: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main()
{
int i=1,num[5],sum=0; //num[]包含5个元素
float ave = 0.0f;
printf("输入5个数:\n");
for(;i<=5;i++)
{
printf("%d : ", i); //第一次循环i=1
scanf("%d", &num[i-1]); //将每次读入的值写到num[]对应的元素中
sum+=num[i-1]; //将每个元素加到sum中
}
ave = (float)sum/5; //求平均数
printf("平均数为:%5f", ave);
return 0;
}
1.2 再谈内存
第二章提到内存里含一个个连续的字节,每个字节有个位,每个位只有0和1两种状态。要辨识每个字节,以访问其内容,用数字来标记字节,0表示内存中的第一个字节,以此类推。字节的标记称为地址。1
2
3
4
5
6
7
8
9
10
11
12
int main()
{
long a=1L, b=2L, c=3L;
double d=4.0, e=5.0, f=6.0;
printf("一个Long类型的值占用 %d byte\n", sizeof(long));
printf("a,b,c的地址分别是%12p %12p %12p\n", &a, &b, &c); //&是取址符,%p显示地址,以16进制方式显示,地址值逐小,成等差排列。16进制占用4个位,本机测试时有8个16进制数,因此本机内存是4*8=32位,最大取址值是4GB(2^32B)。
printf("一个Double类型的值占用 %d byte\n", sizeof(double));
printf("d,e,f的地址分别是%12p %12p %12p\n", &d, &e, &f);
return 0;
}
1.3 数组和内存
1 |
|
2 数组的计算
2.1 数组初始化
1 | double values[5] = {1.5, 2.0, 3, 4.66, 77.7}; //如果只初始了前几个元素,后面的自动初始化为0。如果[]内不填数字,直接在{}写元素,编译器会根据元素数确定数组的大小。 |
2.2 计算数组大小
1 |
|
3 多维数组
3.1 二维数组
1 | float carrots[3][8]; //3行8列 |
查看二元数组元素地址:1
2
3
4
5
6
7
8
9
10
11
12
13
int main()
{
int i=0,num[3][8];
for(; i<3; i++)
{
int j=0;
for(; j<8; j++)
printf("num[%d][%d]'address: %p\n", i,j,&num[i][j]);
}
return 0;
}
3.2 多维数组的初始化
1 | int numbers[3][4] = { |
4 井字游戏
4.1 问题
编写一个程序,让两个人在计算机上玩井字游戏。
4.2 分析
井字游戏是一个3*3的方格游戏。两个轮流在方格中输入X或O。谁先在水平、竖直或对角线上连成3个标记,就赢。
- 一个3*3的方格,存储两个人交替输入的标记。
- 用1-9的数字来标识要在哪个方格里写入标记。
- 从1-9记数,1号玩家在奇数号时输入,2号在偶数时输入。
- 检查输入是否有效及游戏是否结束。
1 | #include <stdio.h> |