某天是星期几 + 三目运算符的一些错误操作解释
泽勒一致性是由克里斯汀·泽勒开发的用于计算某天是星期几的算法。
其中:
一、h 是一个星期中的某一天(0 为星期六,1 为星期天,2 为星期一……6 为星期五)
二、q 是某月的第几天
三、m 是月份(3 为三月,4 为 四月……)。一月和二月分别记为上一年的 13 和 14 月
四、j 是世纪数 -1,(即为 year÷100)
五、k 是该世纪的第几年(即 year%100)
注意,公式中的除法是整除。编写程序,输入年月日,输出它是一周中的星期几。
一月和二月在公式里是用 13 和 14 表示的,所以需要将用户输入的月份 1 转换为 13,2 转换为 14,同时将年份改为前一年。
#include <stdio.h>
int main ()
{
int y,m,d;
int k,j,h;
scanf("%d%d%d",&y,&m,&d);
m == 1 ? m = 13 : m == 2 ? m=14 : 0 ;
m == 13 ? y-- : m == 14 ? y -- : 0;
k = y%100;
j = y/100 ;
h = (d + 26*(m+1)/10 + k + k/4 +j/4 +5*j )%7;
h = h == 0 ? 6 : h == 1 ? 7 : h - 1;
printf("%d",h);
return 0;
}
输入:
2015 4 25
输出:
6
以上就是使用泽勒一致性的计算星期几的算法了。
------------------------------下面解释三目运算符的一些错误操作-------------------------------
1、 判断的值不能进行表达示运算h = h - 2,但可以直接赋值: h = 6
2、 会出现警告,NULL是指针类型,跟int类型不一样,
解决:将NULL改成 0 也可以 掠过,并且不出现警告
3、 这种表达式,会把m归零,而不是掠过
4. 三目运算符内,连续进行多个表达式计算会出现的错误
错误:
m == 1 ? {m = 13;y–} : m == 2 ? {m=14;y–} : 0 ;
error: expected expression before ‘{’ token m == 1 ? {m = 13;y–} : m == 2 ? {m=14;y–} : 0 ;
正确: 将 {} 去掉,换成, 就可以进行多个表达式输出了
m == 1 ? m = 13,y-- : m == 2 ? m=14,y-- : 0 ;