在写矩阵转换时发现的一个for循环括号的问题

算法跃动客
• 阅读 964

在写矩阵转换时发现的一个for循环的问题

最近在写c语言作业的一个矩阵转换的时候,程序运行没有问题,但输出总是存在问题。
后来与朋友讨论了一下,最后发现问题存在于for循环的括号问题。以此记录一下,方便学习。

在写矩阵转换时发现的一个for循环括号的问题

以上是问题代码,输出结果如下

在写矩阵转换时发现的一个for循环括号的问题

我们来细分一下代码

#include <stdio.h>

int main(){
    int i,j,t;
    int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
    for(i=0;i<3;i++)
    
    
        for(j=0;j<3;j++)
        
        
        printf("%d",a[i][j]);
        /*输出原始矩阵*/

    printf("\n");

    

以下为该代码输出结果在写矩阵转换时发现的一个for循环括号的问题

为什么会出现这样呢?在c primer里面讲述for循环的定义是这样的:

for(condition1;condition2;condition3) statement

也就是说执行主体的结束靠的是statement的结束,即一个语句的结束。自然,上面的代码它只考虑了第二个for循环里面的printf语句,而没有执行转行命令。(\n)

在存在多个逻辑语句的情况下,for循环里面需要用到大括号,即:{}

我们改变一下代码,试试看

    for(i=0;i<3;i++)
    
    
    
        for(j=0;j<3;j++)
        {
        printf("%d",a[i][j]);
        /*输出原始矩阵*/
        printf("\n");
        }

结果如下:

在写矩阵转换时发现的一个for循环括号的问题

很明显,我们在第二个for循环里面加了大括号,换行指令立刻在第二个for循环中执行了。

我们再改一下,看一看。

    for(i=0;i<3;i++){
     
    
    
    
    
        for(j=0;j<3;j++)
        
        
        
        printf("%d",a[i][j]);
        /*输出原始矩阵*/

    printf("\n");
}

输出结果如下:

在写矩阵转换时发现的一个for循环括号的问题

很明显,在整体的for循环里面(第一个for循环),它先执行了第二个for循环里面的指令,在第二个for循环里面的指令完成了,完成了换行。

一个清晰明了的例子:

在写矩阵转换时发现的一个for循环括号的问题

很明显,他是先遍历完一个for才输出test的,说明test的输出语句和遍历输出不在一个for下的。

总之,我们都要养成写一个工整代码的习惯,这不仅是为了方便别人查看,更是为了日后我们理解自己的代码,比如我现在写代码的时候,基本在for循环都会加个括号,这样会方便我理解代码是在哪个模块运行的。同时,缩进也显得非常重要,对于你理解自己的代码来说。

感谢:DynamicLab - The_sky

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
4年前
Go语言
发现问题今天在看代码的时候,遇见了多个协程写同一个slice的情况,发现未对slice做任何保护,亦未使用其他手段保证并发安全,这样肯定会出错的。思考slice不是协程安全的,所以在多个协程中读写slice是不安全的,在高并发的情况下会产生不可控制的错误。总结这里记录一下错误的使用方式与正确的使用方式:错误的使用
Stella981 Stella981
4年前
Python对象的循环引用问题
\toc\Python对象循环引用我们来介绍一下Python是采用何种途径解决循环引用问题的。循环引用垃圾回收算法!(https://oscimg.oschina.net/oscnet/3786a746224d888c57cd06086dc52bff3b0.png)上图中,表示的
Wesley13 Wesley13
4年前
ARM内核矩阵计算教程(STM32)
我们在嵌入式上跑矩阵运算时候,会遇到这样一个问题。假设将矩阵设置成N\N维的二维数组后,我们想求两个矩阵相乘,那就需要按照矩阵计算规则编写矩阵相乘函数,这样的话4\4矩阵得编一个,5\5矩阵又得编一个,要求逆还得编一个,求行列式还得编。自己写的函数代码效率容易低,将导致本来要跑在单片机上的算法,难达到想象计算速度。这篇教程将教会你如何使用a
Stella981 Stella981
4年前
JVM启动参数的类别及使用
JVM启动参数还是比较实用的,于是我研究了一下它的用法,前段时间下了et项目,启动jBoss的时候出现了一个问题,查了一下,发现是jBoss配置的JVM启动参数有问题,总结了一下解决方案希望对你的学习有所帮助。JVM启动参数小结前段时间下了et项目,启动jBoss的时候出现了一个问题,查了一下,发现是jBoss配置的JVM启动参数有问题。后来
Easter79 Easter79
4年前
Spring是如何解决循环依赖的
​在某一次面试中,对方问了一个问题:Spring的Bean如果互相依赖,会发生什么?由于我那段时间正好遇到了一个Spring循环依赖报错的问题,就回答会报错。然后听对方口气,感觉自己答错了。于是事后了解了一下,才发现其实Spring自身解决了循环依赖的问题。​Spring的启动后,会读取配置文件,资源文件读取校验,创建BeanFacto
Wesley13 Wesley13
4年前
JAVA中循环删除list中元素的方法总结
印象中循环删除list中的元素使用for循环的方式是有问题的,但是可以使用增强的for循环,然后今天在使用时发现报错了,然后去科普了一下,再然后发现这是一个误区。下面就来讲一讲。。伸手党可直接跳至文末。看总结。。  JAVA中循环遍历list有三种方式for循环、增强for循环(也就是常说的foreach循环)、iterator遍历。1、for循环遍
Stella981 Stella981
4年前
Leet Code 74 Search a 2D Matrix
写一个高效的算法,在m×n的二维矩阵中搜索一个值。矩阵有以下性质:每一行从左到右为升序。每一行的第一个数都比上一行最后一个数大。例如,有以下矩阵:\  \1,  3, 5, 7\,  \10,11,16,20\,  \23,30,34,50\\给定target3,返
Stella981 Stella981
4年前
Hibernate纯sql查询结果和该sql在数据库直接查询结果不一致
问题:今天在做一个查询的时候发现一个问题,我先在数据库实现了我需要的sql,然后我在代码中代码:selectdistinctd.id,d.name,COALESCE(c.count_num,0),COALESCE(c.count_fix,0),COALESCE(c
Stella981 Stella981
4年前
CoreJava逻辑思维
CoreJava逻辑思维顺时针打印自定义矩阵这两天回顾了一下刚入Java时的一些比较有意思的逻辑题,曾经也费劲脑汁的思考过的一些问题,比如百钱百鸡最简单的算法啦之类的,而今天博主想说的是一个循环打印指定字符的一道问题。上题目。从控制台输入两个数字代表矩阵的行列数,并顺时针回旋打印
Stella981 Stella981
4年前
Python日志库logging总结
在部署项目时,不可能直接将所有的信息都输出到控制台中,我们可以将这些信息记录到日志文件中,这样不仅方便我们查看程序运行时的情况,也可以在项目出现故障时根据运行时产生的日志快速定位问题出现的位置。1、日志级别Python标准库logging用作记录日志,默认分为六种日志级别(括号为级别对应的数值),NOTSET(0)、DEBUG(10)
java线程池原理浅析
问题与解决:问题:查询大数据量的时候,例如一次返回50w数据量的包,循环去查询发现读取会超时。解决方案:经过思考采用多线程去分页查询。使用线程池创建多个线程去查询分页后的数据最后汇总一下,解决了一次查询大量数据返回超时的问题。一次查询现状:多线程分页查询改