第四章 数组

4.1 数组的 引入及基本用法

一、定义一个数组

如何定义一个数组

1、相同数据类型

关于中括号的解释[ ]

定义的时候表示数组中元素的总个数 int a[10];

下标法表示数组中的某个元素,从0开始计数

整型 4个字节

类型名 数组名 常量表达式

int a[10];

即:定义一个整型数组,数组名为a, 此数组有10个元素

2、数组如何遍历
#include <stdio.h>
int main()
{
    int a[10];//10表示大小
    
​
    int i;
    
    for(i=0;i<10;i++)
    {
        a[i]=i+100;
    }
    
    for(i=0;i<10;i++)
    {
        printf("%d %p\n",a[i] &a[i]);
    }   
    
    printf("done");
    return 0;
​
}

特点:

下标法访问 ​ 结合循环控制语句 ​ 地址连续的

4.2 数组计算大小和各种初始化

<1>全部赋值

int a[10]={1,2,3,4,5,6,7,8,9};

<2>部分复制

int a[10]={1,2,3,4,5};

<3>初始化成0

int a[10]={0,0,0,0,0,0,0,0,0,0};

<4>见怪不怪 写法

int a[5]={1,2,3,4,5}; 可以写成 int a[]={1,2,3,4,5}

这时可以计算size大小,size=sizeof(a)/sizeof(a[0]); [size 是关键字]

#include <stdio.h>
int main()
{
    int a[10]={100,101,102,103,104,105,106,107,108,109};
    int data;
    int size;
    /*for(data =0; data <10; data++)
    {
        a[data]=data+100;
    }
    puts("初始化完毕");*/
    
    size=sizeof(a)/sizeof(a[0]);
    //sizeof(a)整个数组的大小;sizeof(a[0]一个数组的大小
    
    for(data =0; data <size; data++)
    {
        printf("address:%p,%d \n",&a[data],a[data]);
    }
    puts("done");
    return 0;
}

4.3 数组应用编程练习

编程案例

1、数组初始化及逆序输出

例子: 对10个数组元素依次赋值为0,1,2,3,4,5,6,7,8,9,要求按逆序输出;

说明

#include <stdio.h>
int main()
{
    int a[]={0,1,2,3,4,5,6,7,8,9};
    int size;
    size=sizeof(a)/sizeof(a[0]);
    printf("size大小为%d\n",size);
    
    int i;
    printf("逆序输出 ");
    for(i=size;i>0;i--)
    {
        printf("%d ",a[i]);
    }
    printf("done");
    return 0;
​
}
结果:
D:\code\复习\notpad++\if>a.exe
size大小为10
逆序输出 10 9 8 7 6 5 4 3 2 1 done

2、斐波那契数列

斐波那契数列:
0,1,1,2,3,5,8,13,21,34,55,。。。。。。。。。。。46398.。。。。。。。。。
an=an-1+an-2;

#include <stdio.h>
int main()
{
    int a[20];//20必须写,如果没有写各个元素的话
    int size;
    size=sizeof(a)/sizeof(a[0]);
    printf("size大小为%d\n",size);
    int i;
    a[0]=0;//不加int
    a[1]=1;//不加int
    
​
    for(i=2;i<size;i++)
    {
        a[i]=a[i-1]+a[i-2];
        
    }
    for(i=0;i<size;i++)
    {
        printf("%d\n",a[i]);
        
    }
    
    printf("done");
    return 0;
​
}
​
 

4.4 数组编程练习之冒泡排序法

问题:a[]={1,2,3,4,5,6}
a[10];
a[1]=10; 不加int

1、a[]={8,9,12,13}; 从大到小输出

//输出从大到小,大的向右移(视屏中的每行结果是从小到大,),i=i-1;j从0开始,j=j-i-1
​
#include <stdio.h>
int main()
{
​
    int arry[]={12,8,13,9};
    int i;
    int j;
    int len;
    int tmp;
    len=sizeof(arry)/sizeof(arry[0]);
    
    for (i=0;i<len-1;i++)
    {   
        for (j=0;j<len-i-1;j++)
        if(arry[j]<arry[j+1]){
            
            tmp=arry[j];
            arry[j]=arry[j+1];
            arry[j+1]=tmp;
        }
        
    }
​
    for (i=0;i<len;i++)//不应该len-1
    
    {
        printf("%d ",arry[i]);
    }
​
    return 0;
}

2、a[]={8,9,12,13}; 从小到大输出

//输出从小到大,小的向右移(视屏中的每行结果是从大到小,),i=i-1;j从0开始,j=j-i-1
​
#include <stdio.h>
int main()
{
​
    int arry[]={12,8,13,9};
    int i;
    int j;
    int len;
    int tmp;
    len=sizeof(arry)/sizeof(arry[0]);
    
    for (i=0;i<len-1;i++)
    {   
        for (j=0;j<len-i-1;j++)
        if(arry[j]>arry[j+1]){
            
            tmp=arry[j];
            arry[j]=arry[j+1];
            arry[j+1]=tmp;
        }
        
    }
​
    for (i=0;i<len;i++)//不应该len-1
    
    {
        printf("%d",arry[i]);
    }
​
    return 0;
}


D:\code\4>gcc 4.4.1.c

D:\code\4>a.exe 8 9 12 13 D:\code\4>

4.5简单选择排序法

1、简单选择排序法

//选择排序,从大到小,12,8,13,9 //首先a[0]和a[1]比,然后a[0]和a[2]比,最后a[0]和a[3]比,只要遇到值大的就交换,输出a[0] //首先a[1]和a[2]比,然后a[1]和a[3]比,输出a[1] //首先a[2]和a[3]比,输出a[2]

#include <stdio.h>
int main()
{
    int array[]={12,8,13,9};
    int i;
    int j;
    int temp;
    int len=sizeof(array)/sizeof(array[0]);
    
    
​
    for(i=0;i<len-1;i++)
    {
        for(j=i+1;j<len;j++)    // j=i+1;
        
        {
            if (array[i]<array[j])
            {
                temp=array[i];
                array[i]=array[j];
                array[j]=temp;
            }       
            
        }
    }   
    for(i=0;i<len;i++)
    {   
        printf("%d ",array[i]);
    
    }   
    return 0;
​
}
​

4.6 二维数组

四、二维数组

、、

4.7 二维数组初始化

注意:可以不写行,但是一定要写列

类型说明符 数组名【常量表达式】【常量表达式】

int array[2] [3]={{12,8,139},{222,333,455}};
int array[ ] [3]={{12,8,139},{222,333,455}};

解释

4、二维数组的遍历

#include <stdio.h>
int main()
{
    int array[2][3]={{12,8,139},{222,333,455}};
    int i;
    int j;
​
    for(i=0;i<2;i++)
    {
        for(j=0;j<3;j++)
        
        {
            printf("%d\n",array[i][j]);
        }
        putchar('\n');
    }   
    
    return 0;
​
}

循环的嵌套

#include <stdio.h>
int main()
{
    int array[2][3]={{12,8,139},{222,333,455}};
    int array2[2][3]={{1,2,4},{322}};
    int i;
    int j;
​
​
    for(i=0;i<2;i++)
    {
        for(j=0;j<3;j++)
        
        {
            printf("%d\n",array2[i][j]);
        }
        putchar('\n');
    }   
    
    return 0;
​
}
​
​
​
D:\code\4>a.exe
1
2
4
​
322
0
0
​

4.8 二维数组应用之找最大值及对应下标

5、编程案例

有一个3*4的矩阵,要求编程求出其中值最大的那个元素的值,以及其所在的行号和列号
#include <stdio.h>
int main()
{
    int a[3][4]={{11,9,12,13}
                ,{15,9,3,8}
                ,{32,4,55,6}};
    int size;
    int i;
    int j;
    int tmp;
    int max=a[0][0];
    int hang;
    int lie;
    
    size=sizeof(a)/sizeof(a[0]);
    
    for(i=0;i<3;i++)
    {
        for(j=0;j<4;j++)
        {
            printf("%2d \t",a[i][j]);
        }
        printf("\n");
    }
    for(i=0;i<3;i++)
    {
        for(j=0;j<4;j++)
        {
            if(max<a[i][j])
            {
                max=a[i][j];
                hang=i;
                lie=j;
            }
            
        }
        
    }
    
    printf("%d行%d列的数最大%d\n",hang,lie,max);
        
    printf("done");
    
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值