一次程序修改记录

起因

最近在做《C Primer Plus》第六版的课后编程题学习C语言。在做P174第2题时遇到了一个问题,就是代码我认为写得没有问题,但是编译运行后出现的不是我想要的结果,找了很久终于找到了问题所在,在此做一个记录。

问题描述

使用嵌套循环,按下面的格式打印字符。

$
$$
$$$
$$$$
$$$$$

这是我最初的写法:

#include

int main(void)
{
     
	for (int i = 0; i < 5; i++)
	{
     
		for (int j = 5 - i; j <= 5; j++)
		{
     
			printf("$");
			if (i + j == 5)
				printf("\n");
		}
		
	}
	return 0;
}

运行后结果如下:
一次程序修改记录_第1张图片
分析:从题中要求输出的格式可以看出,一共需要打印5行共15个 $ ,而上图打印了6行共15个 $ ,所以应该是换行部分出现了错误。即

if (i + j == 5)
	printf("\n");

出现了问题。但是我读了几遍代码后,还是觉得就应该这样写,不知道该怎么去改,这也困扰了我近一个小时,后来我在百度找到了与这道题相关的博客,发现了一个更简单的写法:

#include

int main(void)
{
     
  for (int i = 0; i < 5; i++)
  {
     
		for (int j = 0; j < i+1; j++)
		printf("$");
		printf("\n");
	}
		return 0;
}

https://blog.csdn.net/qq_32092885/article/details/84338457
一次程序修改记录_第2张图片
但我还是想把我的那个写法给完善,在想了好久后,终于找到了修改方法。

#include

int main(void)
{
     
	for (int i = 0; i < 5; i++)
	{
     
		for (int j = 5 - i; j <= 5; j++)
		{
     
			printf("$");
			if (i + j == 5 + i)		// i + j == 5 to i + j == 5 + i
				printf("\n");
		}
		
	}
	return 0;
}

一次程序修改记录_第3张图片
虽然 (i + j == 5 + i) 等价于 (j == 5),但是我认为在这里我应该写成前一种。 因为我的思路是利用(i + j)做为换行条件。不过看到其他人的写法以后,发现自己的写法还是太笨重了,学不可以已乎啊。

你可能感兴趣的:(c语言)