z8733537 发表于 2018-9-25 21:22:02

C语言小问题

#include<stdio.h>

int main()
{
        int a={
        {1,2,3,4,5},
        {6,7,8,9,10},
        {11,12,13,14,15,},
        {16,17,18,19,20}
        };
       
        int i,j;
        for(i=0;i<4;i++)
        {
                for(j=0;j<5;j++)
                {
                        printf("%d ",a);
                        if(i + j == 3)
                        {
                                printf("\n");
                        }
                }
       
        }
        printf("\n");
        return 0;
}



哪位大神能讲一下IF条件的意思

湫湫猪 发表于 2018-9-25 22:05:49

当i加j的值等于3的时候就换行,相当于每输出4个数就换行。

z8733537 发表于 2018-9-25 22:16:08

湫湫猪 发表于 2018-9-25 22:05
当i加j的值等于3的时候就换行,相当于每输出4个数就换行。

我知道换行,但是为什么呢?为什么是i+j == 3

claws0n 发表于 2018-9-25 23:19:18

z8733537 发表于 2018-9-25 22:16
我知道换行,但是为什么呢?为什么是i+j == 3

改变形状,原本,变成

Dine 发表于 2018-9-25 23:26:21

4行5列的二维数组,每行打印四个,然后再换行
i + j = 3 表示刚好这一行打印了四个

湫湫猪 发表于 2018-9-26 08:05:08

z8733537 发表于 2018-9-25 22:16
我知道换行,但是为什么呢?为什么是i+j == 3

因为i和j都是0开始的,如果是i=1,j=1开始的话就会是i+j==5

流泪的小鳄鱼 发表于 2018-9-26 09:32:23

数组在内存中的二进码存储形式就是按1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20链式排列存储,只不过是二进制形式,其对应的编号和矩阵编号一样,

a00   a01   a02    a03    a04   a10   a11    a12      a13   a14   a20    a21      a22   a23   a24    a30      a31   a32   a33    a34

之后通过设置i + j = 3的if条件设置,遇到行数加上列数等于3时就换行,这样就实现了变换为5*4列
a00   a01   a02    a03   

a04   a10   a11    a12   

a13   a14   a20    a21   

a22   a23   a24    a30      

a31   a32   a33    a34



longff9009 发表于 2018-9-26 17:54:21

1、如果楼主是想问为什么用 i+j==3 来作为换行控制的话,你想想 i+j==3 的情况会在哪些元素上发生:(i,j)可以取:(3,0)(2,1)(1,2)(0,3),对应数组元素 a、a、a、a,也就是说遇到这些数组元素就换行咯。
2、如果楼主问为什么是3,而不是4,那楼上已经说得很清楚了哈,因为数组是从0开始计数的。

zqianglh 发表于 2018-9-27 04:36:04

本帖最后由 zqianglh 于 2018-9-27 04:39 编辑

1 1 1 1   (1)启始i,j=0 所以i+j==3,是输出4个数
1 2 2 2   (2)当i+j==3,输出换行/n后,循环一次是5个数,第5个数在下一行第一个位置输出
2 2 3 3   (3)类推原数组2,3,4行
3 3 3 4   (4)2个循环加一个if条件,完成了a-->a的显示
4 4 4 4

西瓜小刚 发表于 2018-9-27 14:57:40

你应该知道 外层循环控制‘行’,内层控制列‘列’C语言代码是从上往下执行 现执行的 外层循环 也就是
i = 0 时;就进了 内层循环 j一开始为0 ; 它打印 a的值 就是打印 a的值,这时候
if(i+j==3)是0+0!=3 不成立就没走 if条件 , 内层循环 没出 接着 j++ . i =0 ; j=1;
打印 a的值 再判断 0+1?=3 不成立又 j++,知道 j=3时 这是 打印的就是 a的值
i+j==3 是成立的 所以执行 if条件语句打印换行符就形成了 每打印四个 就换一行
后面 就是a a a a换一行 以此类推每遇到 i+j==3时就换行
(可能写的有点啰嗦不晓得up主明白没)
页: [1]
查看完整版本: C语言小问题