直接上代码,讲解都在代码中
代码的工作过程如下:
-
包含了必要的头文件
<stdio.h>
和<stdlib.h>
。 -
定义了
main()
函数,这是程序的入口点。 -
声明了两个整数变量
i
和j
,分别初始化为0和1。 -
程序进入一个
while
循环,该循环反复使用scanf()
函数从用户那里读取一个整数值。只要提供有效的整数输入,循环就会继续进行。 -
在循环内部,有一个
if
语句,它检查输入的年份(i
)是否为闰年。它使用了你提到的闰年规则:能被4整除且不能被100整除,或者能被400整除。根据条件,它打印出年份是否为闰年。 -
循环结束后,将
i
的值赋值为对j
的双重否定的结果。由于j
是1,!!j
的结果也是1,所以i
的值变为1。 -
程序然后使用
printf()
打印出i
的值(为1)。 -
最后,程序返回0,表示执行成功。
注意:使用 !!j
的方式有点不寻常,因为不清楚进行此操作的原因。这实际上将 i
设置为1,而做这个操作的原因可能取决于代码的更广泛上下文。
//逻辑运算符与逻辑表达式
#include<stdio.h>
#include<stdlib.h>
int main(){
int i=0,j=1;
while (scanf("%d",&i))
{
if (i < 0) {
break; // 输入负数,结束循环
}
if (i%4==0 && i%100!=0 || i%400==0)
{
printf("%d是闰年\n",i);
}else{
printf("%d不是闰年\n",i);
}
}
i=!!j;// 这将'i'的值设置为1(真),因为'j'的值为1。
printf("i的值=%d\n",i);
return 0;
}
//短路运算
/*
在这段代码中,条件 (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) 使用了短路运算:
如果 i % 4 == 0 不成立,那么整个表达式必定为假,后面的条件不会被计算。
如果 i % 4 == 0 成立,但是 i % 100 != 0 不成立,同样整个表达式为真,后面的条件不会被计算。
这是因为在逻辑运算 &&(逻辑与)中,只有当两个条件都为真时,整个表达式才为真。
所以,如果第一个条件为假,整个表达式就不可能为真,所以后面的条件不需要计算。
类似地,在逻辑运算 ||(逻辑或)中,只要有一个条件为真,整个表达式就为真,
所以如果第一个条件为真,后面的条件也不需要计算。
*/