栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言基础(4)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言基础(4)

一维数组

数组名为表示数组首地址的常量。
数组未初始化即auto存储类型,数组单元内容的值不确定。
数组部分初始化即static存储类型,除了初始化的值,其他都置为0。
M长度的数组下标从0到M-1。
数组越界不会检查,是因为数组是由指针偏移表达式构成的,即arr[i] = &(arr+i),越界会自动选取顺序上的下一块地址。

采用数组输出前40项斐波那契数列,并翻转从后往前输出。
    static void fibonacci(void)
{
    int i,j,tmp;
    int fib[10] = {1,1};
    //不确定数组长度时可以采用sizeof来表示数组长度
    for(i = 2;i
        tmp = fib[i];
        fib[i] = fib[j];
        fib[j] = tmp;
        i++;
        j--;
    }
    for(i = 0;i 
用数组实现冒泡排序 
static void sort1(void)
{
    int i,j,tmp;
    int arr[N] = {12,54,22,66,98,28,78,8,49,81};
    for(i = 0;i
        for(j = 0;j
            if(arr[j]>arr[j+1])
            {
                tmp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = tmp;
            }
        }
    }
    for(i = 0;i 
用数组实现选择排序 
static void sort2(void)
{
    int i,j,k,tmp;
    int arr[N] = {12,54,22,66,98,28,78,8,49,81};
    for(i = 0;i < N;i++)
        printf("%d ",arr[i]);
    printf("n");
    for(i = 0;i < N-1;i++)
    {
        k = i;
        for(j = i+1;j < N;j++)
        {
            if(arr[j] < arr[k])
            {
                k = j;
            }
        }
        tmp = arr[i];
        arr[i] = arr[k];
        arr[k] = tmp;
    }
    for(i = 0;i 
进制转换算法 
static void convert(void)
{
    int num,base;
    int i = 0;
    int arr[128];//声明一个不会越界的数组范围
    printf("Please enter the num:n");
    scanf("%d",&num);
    printf("Please enter the base:n");
    scanf("%d",&base);
    
    do
    {
        arr[i] = num%base;
        num/=base;
        i++;
    }while(num != 0);
    for(i--;i>=0;i--)
    {
        if(arr[i]>10)
            printf("%c",arr[i]-10+'A');
        else
            printf("%d",arr[i]);
    }
    printf("n");
    return;
}

用数组方式求1000以内的质数
static void primer(void)
{
    int i,j;
    char num[1001] = {0};
    for(i = 2;i<1001;i++)
    {
        if(num[i] == 0)
        {
            for(j = i*2;j<1001;j+=i)
                num[j] = -1;
        }
    }
    for(i = 2;i<1001;i++)
    {
        if(num[i] == 0)
            printf("%d ",i);
    }
    printf("n");
    return;
}

二维数组

【存储类型】 数据类型 标识符【行下标】【列下标】
数组存储为顺序存储,按行存储
二维数组的行数可以省略,列数不可省略,会根据元素的数量自动分配行号

矩阵的行列互换
#define M 2
#define N 3
static void change(void)
{
    int i,j;
    int a[M][N] = {1,2,3,4,5,6} ,b[N][M];
    for(i = 0;i
        for(j = 0;j
            printf("%d ",a[i][j]);
            b[j][i] = a[i][j];
        }
        printf("n");
    }
    for(i = 0;i
        for(j = 0;j 
求矩阵的最大值 
#define M 2
#define N 3
static void max(void)
{
    int a[M][N] = {24,54,2,7,98,16};
    int max = a[0][0],row = 0,colum = 0;
    int i,j;
    for(i = 0;i
        for(j = 0;j
            if(max
                max = a[i][i];
                row = i;
                colum = j;
            }
        }
    }
    printf("max:a[%d][%d] = %dn",row,colum,max);
    return;
}
求二维数组各行与各列的和:
static void sum(void)
{
    int a[5][4] = {{1,2,3},{4,5,6},{7,8,9},{10,11,12}};
    int i,j;
    for(i = 0;i<4;i++)
    {   
        for(j = 0;j<3;j++)
        {
            a[4][3]+=a[i][j];
            a[i][3]+=a[i][j];
            a[4][j]+=a[i][j];
        }
    }
    for(i = 0;i<5;i++)
    {   
        for(j = 0;j<4;j++)
            printf("%4d",a[i][j]);
        printf("n");
    }
    return;
}

矩阵乘法的实现
#define M 2
#define N 3
#define K 2
static void mul(void)
{
    int a[M][N] = {1,2,3,4,5,6};
    int b[N][K] = {1,0,0,1,2,1};
    int c[M][K] = {0};
    int i,j,k;
    for(i = 0;i   
        for(j = 0;j
            for(k = 0;k   
        for(j = 0;j 
二维数组的深入理解 

声明一个二维数组int a[M][N],a代表的是数组的首地址,a+1表示的并不是第二个数组元素的地址,而是把a看作一个包含了N个元素的总体,a+1表示的是数组第二行的首地址,即跳过了N*4B大小的空间。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/938433.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号