容易令人忽视的if、else语句逻辑错误

昨天看习题,回忆起来之前初学C语言时被绊倒过的一个问题,今天就把它拿出来再理一遍,以警醒自己。顺便给不知道闰年的普及下(大笑估计也没人不知道

吧):

                                               

#include <stdio.h>
#include <stdlib.h>

int main(void)
{	/*判断1000年到2000之间的闰年并输出*/
	int year = 1000;
	int count = 0;
	for (year; year <= 2000; year++) //for循环从1000年到2000年
	{
		if (year % 4 == 0)	//若该year能被4整除
		{
			if (year % 100 != 0)//若该year不能被100整除
			{
				count++;
				printf("%d ",year);
			}
		}
		else if (year%400 == 0)	//若该year能被400整除
		{
			count++;
			printf("%d ", year);
		}

	}
	printf("\n%d\n", count);
	system("pause");
	return 0;
}
当时自以为思路比较清晰地直接把这段程序写出来了,殊不知运行时候才发现结果漏掉了几个闰年,程序跑出来240,实际数值却为243。为什么呢?

原因在当程序满足条件 (year%4 == 0)进入第一个 if 语句,又因不满足 (year%100 != 0)而退出,直接跳到下一次循环。讲到这里,就不难发现了,原来能

被 4 整除不能被 100 整除的年也有可能是闰年,比如 400 ,然而却因为 if 、 else的逻辑没有搞清楚而漏掉了这几条鱼。所以将该程序中的 else if 中的 else 删

掉,便能很好的解决这个问题。


还有另一种方法,更为简便,那就是用逻辑运算符:

int main(void)
{	/*判断1000年到2000之间的闰年并输出*/
	int year = 1000;
	int count = 0;
	for (year; year <= 2000; year++) //for循环从1000年到2000年
	{
		if ((year%4 == 0 && year%100 != 0) || year%400 == 0)	
		{
				count++;
				printf("%d ", year);
		}
	}
	printf("\n%d\n", count);
	system("pause");
	return 0;
}

直接用一条语句判断,这样的逻辑是不是更简单清晰呢?


由这个问题看来不能小觑 if 语句的难度了!写程序,严谨性是必不可少的!



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fireplusplus

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值