鱼C论坛

 找回密码
 立即注册
查看: 1717|回复: 9

[已解决]C语言小问题

[复制链接]
发表于 2018-9-25 21:22:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>

int main()
{
        int a[4][5]={
        {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[i][j]);
                        if(i + j == 3)
                        {
                                printf("\n");
                        }
                }
       
        }
        printf("\n");
        return 0;
}



哪位大神能讲一下IF条件的意思
最佳答案
2018-9-27 14:57:40
你应该知道 外层循环控制‘行’,内层控制列‘列’  C语言代码是从上往下执行 现执行的 外层循环 也就是
i = 0 时;就进了 内层循环 j一开始为0 ; 它打印 a[i][j]的值 就是打印 a[0][0]的值,这时候
if(i+j==3)是0+0!=3 不成立就没走 if条件 , 内层循环 没出 接着 j++ . i =0 ; j=1;
打印 a[0][1]的值 再判断 0+1?=3 不成立  又 j++  ,知道 j=3时 这是 打印的就是 a[0][3]的值
i+j==3 是成立的 所以执行 if条件语句  打印换行符  就形成了 每打印四个 就换一行
后面 就是  a[0][4] a[1][0] a[1][1] a[1][2]  换一行 以此类推  每遇到 i+j==3时就换行
(可能写的有点啰嗦  不晓得up主明白没)
010532c71zfb286jqtxgeg.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-25 22:05:49 | 显示全部楼层
当i加j的值等于3的时候就换行,相当于每输出4个数就换行。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-25 22:16:08 | 显示全部楼层
湫湫猪 发表于 2018-9-25 22:05
当i加j的值等于3的时候就换行,相当于每输出4个数就换行。

我知道换行,但是为什么呢?为什么是i+j == 3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-25 23:19:18 | 显示全部楼层
z8733537 发表于 2018-9-25 22:16
我知道换行,但是为什么呢?为什么是i+j == 3

改变形状,原本[4][5],变成[5][4]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-25 23:26:21 | 显示全部楼层
4行5列的二维数组,每行打印四个,然后再换行
i + j = 3 表示刚好这一行打印了四个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-26 08:05:08 From FishC Mobile | 显示全部楼层
z8733537 发表于 2018-9-25 22:16
我知道换行,但是为什么呢?为什么是i+j == 3

因为i和j都是0开始的,如果是i=1,j=1开始的话就会是i+j==5
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-26 09:32:23 | 显示全部楼层
Cutter_2018-09-26 09_21_57.095.png 数组在内存中的二进码存储形式就是按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



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-26 17:54:21 | 显示全部楼层
1、如果楼主是想问为什么用 i+j==3 来作为换行控制的话,你想想 i+j==3 的情况会在哪些元素上发生:(i,j)可以取:(3,0)(2,1)(1,2)(0,3),对应数组元素 a[3][0]、a[2][1]、a[1][2]、a[0][3],也就是说遇到这些数组元素就换行咯。
2、如果楼主问为什么是3,而不是4,那楼上已经说得很清楚了哈,因为数组是从0开始计数的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[4][5]-->a[5][4]的显示
4 4 4 4
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-27 14:57:40 | 显示全部楼层    本楼为最佳答案   
你应该知道 外层循环控制‘行’,内层控制列‘列’  C语言代码是从上往下执行 现执行的 外层循环 也就是
i = 0 时;就进了 内层循环 j一开始为0 ; 它打印 a[i][j]的值 就是打印 a[0][0]的值,这时候
if(i+j==3)是0+0!=3 不成立就没走 if条件 , 内层循环 没出 接着 j++ . i =0 ; j=1;
打印 a[0][1]的值 再判断 0+1?=3 不成立  又 j++  ,知道 j=3时 这是 打印的就是 a[0][3]的值
i+j==3 是成立的 所以执行 if条件语句  打印换行符  就形成了 每打印四个 就换一行
后面 就是  a[0][4] a[1][0] a[1][1] a[1][2]  换一行 以此类推  每遇到 i+j==3时就换行
(可能写的有点啰嗦  不晓得up主明白没)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 06:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表