一维数组的定义:
形如 int a[10],int a[20],四要素:变量名,变量类型,变量的值,变量的内存地址
数组的内存地址是连续的 ,最低的地址对应第一个元素,最高的地址对应最后一个元素。
代码举例如下: (包括对于一维数组的定义,数组的初始化,还有关键字的sizeof的用法)
#include<stdio.h>
int main()
{
int a[4]={1,2,3,4}; //全部赋值
int b[4]={1,2}; //部分赋值
int c[5]={0}; //初始化为0
int array[] ={1,2,3,4}; //见怪不怪的写法,但是这种写法不知道数组的大小
int size;
size = sizeof(array)/sizeof(array[1]);
printf("数组array的大小是:%d",size);
return 0;
}
该代码的输出结果是:
数组array的大小是:4
sizeof利用整个数组的大小除以数组内某个元素的大小,最终得出整个数组的总个数。
一维数组的遍历
代码如下:
#include<stdio.h>
int main()
{
int i;
int a[10];
printf("该数组的正向输出值为:");
for(i=0;i<10;i++){
a[i]=i;
printf("%d",a[i]);
}
printf("\n逆向输出值是: ");
for(i=9;i>=0;i--){
a[i]=i;
printf("%d",a[i]);
}
return 0;
}
该代码的运行结果是:
该数组的正向输出值为:0123456789
逆向输出值是: 9876543210
利用for循环给一维数组a[10]进行赋值,就可以得到上述结果。
编程实现 输出Fibinacci数列的前30项:代码如下
#include<stdio.h>
int main()
{
int array[30];
int i;
int arraysize;
arraysize = sizeof(array)/sizeof(array[1]);
array[0]=0;
array[1]=1;
for(i=2;i<arraysize;i++){
array[i]=array[i-1]+array[i-2];
}
for(i=0;i<arraysize;i++){
printf("%d ",array[i]);
}
printf("\ndone\n");
printf("%d",i);
return 0;
}
该代码中:1 首先运用关键字sizeof,计算出大小未知的数组array的大小
2 array[i]=array[i-1]+array[i-2];这一条语句是计算该数列的关键,利用for循环对数组进行赋值。
3 同时对数组进行遍历同样运用到for循环
4 最后输出数列的前30项,并且验证了i的值。
下面是冒泡排序法:代码如下:
#include<stdio.h>
int main()
{
int array[]={12,8,9,13};
int i;
int j;
int temp;
int len;
len = sizeof(array)/sizeof(array[1]);
for(i=0;i<len-1;i++){
for(j=0;j<len-i-1;j++){
if(array[j]>array[j+1]){
temp = array[j+1];
array[j+1] = array[j];
array[j] = temp;
}
}
}
for(i=0;i<len;i++){
printf("%d ",array[i]);
}
return 0;
}
该代码的运行结果是:
8 9 12 13
该代码采用循环嵌套的模式,
外层嵌套的作用是确定需要进行几轮(i)比较,
内层循环的作用是 确定每轮比较的时候需要多少组(j)进行比较。
具体的解释如左图所示。
该代码涉及的主要知识点:
1.sizeof的用法。
2.for循环的嵌套,注意理解不同层循环的意义。
3.数组的遍历,依然是利用for循环。
4.变量值的交换,利用中间值temp进行。
5.冒泡排序法的核心:理解如何求出比较的轮数和每一轮要比较的组数。