学习记录第九天

二维数组的定义和引用:

类型说明符  数组名[常量表达式][常量表达式]

其中,`类型`是数组元素的数据类型,`数组名`是数组的标识符,`常量表达式1`和`常量表达式2`分别指定了数组的行数和列数。例如:

int a[3][3]

二维数组可以看成一维数组的数组;

初始化二维数组

二维数组可以在声明时直接初始化,也可以在声明后进行初始化。初始化时,可以使用花括号将每一行的元素括起来,行与行之间用逗号分隔。如果初始化时省略了某些元素,未初始化的元素将被自动初始化为0;

int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}}
访问二维数组元素

访问二维数组中的特定元素需要指定两个下标,第一个下标表示行,第二个下标表示列。

二维数组的内存布局

尽管在逻辑上二维数组表现为行和列的结构,但在内存中,二维数组是以线性方式存储的。这意味着二维数组的所有元素在内存中是连续存储的。

从1~12输出二维数组求和

int main(void)
{
    int a[3][4];
    int i, j;
    int sum = 0,k = 1;
    for(i = 0;i < 3;++i)
    {
        for(j = 0;j < 4;++j)
        {

            a[i][j] =k++;
        }
    }

    for(i = 0;i < 3;++i)
    {
        for(j = 0;j < 4;++j)
        {

            sum = a[i][j] + sum;
        }
     }
    printf("%d\n",sum);

    return 0;
}

字符型二维数组

倒序

int main(void)
{
    char s[][100] = {"Hello","World","China","America"};
    int rows = sizeof(s) / sizeof(s[0]);
    int i;

    for(i = 0;i < rows / 2;++i)
    {
        char a[100];
        strcpy(a, s[i]);
        strcpy(s[i],s[rows - i - 1]);
        strcpy(ss[rows - i - 1],a);
    }
    
    for(i = 0;i < rows;++i)
    {
        puts(s[i]);
    }
    return 0;
}

比较

int main(void)
{
    char s[][100] = {"Hello","World","China","America"};
    int rows = sizeof(s) / sizeof(s[0]);
    int i,j;

    for(i = 0;i < rows - 1;++i)
    {
        for(j = i + 1;j < rows;++j)
        {
            if(strcmp(s[i],s[j]) > 0)
            {
                char a[100];
                strcpy(a,s[i]);
                strcpy(s[i],s[j]);
                strcpy(s[j],a);
            }
        }
    }
    
    for(i = 0;i < rows;++i)
    {
        puts(s[i]);
    }


    return 0;
}

查找

int main(void)
{

    char s[][100] = {"Hello","World","China","America"};
    int rows = sizeof(s) / sizeof(s[0]);
    int i,j;

    for(i = 0;i < rows - 1;++i)
    {
        for(j = i + 1;j < rows;++j)
        {
            if(strcmp(s[i],s[j]) > 0)
            {
                char a[100];
                strcpy(a,s[i]);
                strcpy(s[i],s[j]);
                strcpy(s[j],a);
            }
        }
    }
    char str[100] = "China";
    int begin = 0;
    int end = rows - 1;
    int mid;

    while(begin <= end)
    {
        mid = (begin + end) / 2;
        if(strcmp(str,s[mid]) > 0)
        {
            begin = mid + 1;
        }
        else if(strcmp(str, s[mid]) < 0)
        {
            end = mid - 1;
        }
        else
        {
            break;
        }
    }
    if(begin <= end)
    {
        printf("found\n");
    }
    else
    {
        printf("not found\n");
    }
    return 0;
}

函数

函数是C语言的基本构建块,用于分解复杂问题为可单独解决的小问题。模块化编程,便于协

作和维护。

        包括返回类型、函数名、参数列表和函数体。
        形式:返回类型 函数名(参数类型1 参数名1, ...) { // 函数体 return 返回值; }

         先声明后调用。        
        调用时写出函数名和实参列表,如 c = max(a, b);

        形式参数:函数定义时给出,仅在函数内部有效。        

        实际参数:调用函数时传递给形式参数的表达式或值。

        通过 return 语句返回给调用者。

        无返回值函数使用 void 类型,可省略 return 语句或使用 return; 结束函数。

        嵌套调用:一个函数内部调用另一个函数。

        递归调用:函数内部调用自身,需避免无限递归导致的栈溢出。

        自定义函数:由程序员定义,实现特定功能。

        库函数:由C语言标准库或第三方库提供,如 printf、scanf 等,需包含相应头文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值