初学C语言的感悟(2)

C语言 | 2020-05-12 21:47:02 | 阅读 443 次 | 评论(1)

博主又双叒叕来纠错了。

首先让我们观察一下《C程序设计(第五版)》的134面最下方的代码:

QQ图片20200512212801.jpg (上传于2020-05-12 21:47:02)
QQ图片20200512212801.jpg

然后让我们试运行一次:

1.PNG (上传于2020-05-12 21:47:02)
1.PNG

代码运行结果跟书上的图片完全不符。。。

不过这里是小问题,输出时将printf里的语句改为%-4d即可。

但如果将代码改成每5个数据输出一行,问题就出现了:

2.PNG (上传于2020-05-12 21:47:02)
2.PNG

显然每行之间的距离并不符合程序的预期效果。

经过简单的分析就能发现问题出在控制换行的if语句上,如果根据源程序,当m%10==0时输出\n,但是因为这个语句放在了控制m的值的if语句外面,所以当第一行输出结束后,下一个数如果不是素数,那么m的值就不会改变,运行至最后的if语句时同样会输出\n,因此每行最后的数和下一行第一个数之间差几个偶数,就会输出几个\n(此处注意每次循环m应加2)。这显然不是我们需要的结果,而如果将控制输出\n的语句纳入上一个if语句中,问题就能得到解决了:

3.PNG (上传于2020-05-12 21:47:02)
3.PNG

此时如果m是偶数,程序会继续循环这样,而不会进入if语句进行判断,从而避免了\n的错误输出。

那么为什么每10个数据一行输出时程序就没有异常呢?这是因为第10个数据与第11个数据之间恰好是两个相邻的值(m每次都加2),就恰好避开了输出时的错误。

文章评论,共1条
Avatar
1楼: sysry 发表于 2020-05-13 16:20   回复
........
游客请输入验证码
浏览1453次