只是小的进步,毕竟是自己想出来的,保留下来,以鼓励自己继续努力:

#include <stdio.h>

int isLeap(int y);
int dofm(int m, int y);

int main(void)
{
	/* 测试月份的第一位和第四位,异或为1代表大月31天,反之30天 
	int a=0;
	for(a=1; a<=12; a++)
		printf("%x,%x,%x\n", (a & 8)>>3, a & 1, ((a & 8)>>3) ^ (a & 1) );
	*/
	int year, month, days;
	printf("请输入一个公元年(如2015):");
	scanf("%d", &year); 
	printf("%d年各月天数:\n", year);
	for(month=1;month<=12;month++){
		printf("%d月有%d天。\n", month, dofm(month, year));
	} 
	return 0;
}

int isLeap(int y)
{
	return (y%4==0 && y%100!=0 || y%400==0);
}

int dofm(int m, int y)
{
	int d;
	if(m!=2)
		d = ((m&8)>>3)^(m&1)?31:30;
	else 
		d = isLeap(y)?29:28;
	return d;		
}