一、数组和函数
1、一维数组
-
数组的长度是一定是确定的。
-
数组在内存里连续存储。
-
定义一个数组啊a[10],那么
a[0] 一定存储在低地址,a[9] 一定存储在高地址。 -
未初始化的局部变量是垃圾值,而未初始化的全局变量是0.
-
可以不指定数组的长度,但一定要初始化。
-
int a[10]
其中a不仅表示数组名,还表示数组首元素地址,与&a[0]一样。 -
&a 表示数组的地址
-
虽然a和&a值是一样的,但是意义不同,a + 1 :表示下一个元素的地址,而&a + 1表示下一个数组的地址。
-
在定义数组时对数组元素赋以初值。
例如:int a[10]={0,1,2,3,4,5,6,7,8,9}; -
可以只给一部分元素赋值。例如:
int a[10]={0,1,2,3,4}; -
定义a数组有10个元素,但花括弧内只提供5个初值,这表示只给前面5个元素赋初值,后5个元素值为0。
-
如果想使一个数组中全部元素值为0,可以写成:
int a[10]={0,0,0,0,0,0,0,0,0,0};
或int a[10]={0};
不能写成:int a[10]={0*10};
2、练习
(1)冒泡法排序:
#include <stdio.h>
int main()
{
int i, j, tmp;
int a[5] = {0};
printf("please input 5 number:\n");
for (i = 0; i < 5; i++)
{
scanf("%d", &a[i]);
}
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4-i; j++)
{
if (a[j] > a[j + 1])
{
tmp = a[j];
a[j] = a[j + 1];
a[j + 1] = tmp;
}
}
}
for (i = 0; i < 5; i++)
{
printf("%d ",a[i]);
}
printf("\n");
return 0;
}
(2)有n个人围成一圈,顺序排号,从第一个开始报数(从1到3报数),凡报到3的人退出圈子,问最后最后留下的是原来第几号的那位.
提示:用数组完成
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n, i, temp;
int a[1000] = {0};
int count = 0;
printf("输入人数:");
scanf("%d",&n);
if (n > 1000)
{
printf("ERROR!\n");
exit(1);
}
temp = n;
for(i = 0; i < n; i++)
{
a[i] = i + 1;
}
i = 0;
while(n > 1)
{
if(a[i] != 0)
{
count++;
}
if(count == 3)
{
a[i] = 0;
count = 0;
n--;
}
i++;
if(i == temp)
{
i = 0;
}
}
for (i = 0; i < temp; i++)
{
if (a[i] != 0)
{
printf("余下的为:%d号\n",a[i]);
}
}
return 0;
}