① c语言判断日期
首先这个函数的输入是什么?
(年,月,日)
当不考虑闰年时,只须(月,日)
然后先考查月的取值范围(1~12)的整数
此时可以进行第一步判断
接下来,你要作的很简单
比如你可以用个switch来作这些事情
比如我来作:
switch(月)
case 1,3,5,7,8,10,12:
return (日 > 0 && 日 <= 31) ?true:false; break;
case 4,6,9,11:
return (日 > 0 && 日 <= 30) ?true:false; break;
case 2:
return (日 > 0 && 日 <= 28) ?true:false; break;
defalts:
...............
另外若加上闰年的情况也不会很复杂,只是须要以年来判断是不是闰年,然后把那个28改成一个返回函数即可
② c语言编写程序从键盘输入年份和月份,计算出这一年的这一个月有多少天
#include<stdio.h>
int main()
{
int year,month,days,day;
printf("请输入年月日");
scanf("%d-%d-%d",&year,&month,&days);
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: day=31;break;
case 4:
case 6:
case 9:
case 11:day=30;break;
case 2:
if(year%4==0&&year%100!=0||year%400==0)
day=29;
else
day=28;break;
default :printf("error ");
}
printf("这个月有%d天",day);
}
③ 跪求C语言编写的万年历
我自己写的,不过时输入年份显示该年的年历,比月历要稍微难一点,稍微改一下就行了,你看看。我们当时用的环境是DEVC++,是通过的。
#include<stdio.h>
int monthDay(int,int);
int IsLeapYear(int);
main()
{
int days,weekDay,year,month=1,d,i;
printf("please input the year:\n");
scanf("%d",&year);
days=year-1+(year-1)/400+(year-1)/4-(year-1)/100;
while(month<=12){
printf("\t\t\t%d-%d\n",year,month);
printf("Sun\tMon\tTues\tWed\tThur\tFir\tSat\n");
d=1,i=1;
weekDay=(days+1)%7;
while(i<=weekDay)
{
printf("\t");
i++;
}
while(d<=monthDay(month,year))
{
weekDay=(days+1)%7;
if(weekDay==6)
printf("%d\n",d);
else
printf("%d\t",d);
if(d==monthDay(month,year))
printf("\n");
d++;
days++;
}
month++;
}
system("PAUSE");
return 0;
}
int monthDay(int month, int year)
{
switch(month){
case 1:case 3:case 5:case 7:case 8:case 10:case 12:
return 31;
break;
case 4: case 6:case 9:case 11:
return 30;
break;
case 2:
if((IsLeapYear(year))==1)
return 29;
else
return 28;
break;
}
}
int IsLeapYear(int year)
{
if((year%4==0)&&(year%100!=0))
return 1;
if(year%400==0)
return 1;
return 0;
}
这个是网上找的月历
#include <stdio.h>
int leap (int year)
{if(year%4==0&&year%100!=0||year%400==0) //判断是否是闰年
return 1;
else return 0;
}
int days_month (int month,int year) //判断大月和小月
{
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) //找出大月
return 31;
if(month==4||month==6||month==9||month==11) //找出小月
return 30;
if(month==2&&leap(year)==1) return 29; //判断二月是29天还是29天
else return 28;
}
int firstday(int month,int year)
{int w;
w=(1+2*month+3*(month+1)/5+year+year/4+year/400-year/100)%7+1; //判断每个月开始的第一天是星期几
return w;
}
main()
{int i,j=1,k=1,a,b,month,year;
printf("\n input month and year:\n");
scanf("%d%d",&month,&year); //输入月和年
b=days_month(month,year);
a=firstday (month,year);
printf(" Sun Mon Tue Wed Thu Fri Sat \n"); //输出对应当月的日历
if(a==7)
{for(i=1;i<=b;i++)
{printf("%4d",i);
if(i%7==0)
{printf("\n");
}
}
}
if(a!=7)
{while (j<=4*a)
{printf(" ");
j++;
}
for(i=1;i<=b;i++)
{printf("%4d",i);
if(i==7*k-a)
{printf("\n");
k++;
}
}
}
printf("\n");
}
④ c语言判断月份是否是大月
用 if 判断是否闰年。月份的天数存于数组,用月做下标。
#include <stdio.h>
int main(){
int MonthDay[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int y,m;
printf("input year month:2018 2\n");
scanf("%d %d",&y,&m);
if (((y%4==0)&&(y%100!=0)||(y%400==0)))MonthDay[2]=29; //闰年
if (m<0 || m >12)m=0; //错误的月
printf("%d\n",MonthDay[m]); //输出结果
return 0;
}
⑤ c语言判断大小月
#include<stdio.h>
#include<stdlib.h>
int main(){
int month[12]={31,0,31,30,31,30,31,31,30,31,30,31};
//题目要求将2月划为小月 ,此处用0标记
int n;
scanf("%d",&n);
if (n<=0 || n>12){
printf("error");
}
else if(month[n-1]==31){
printf("solar month");
}
else{
printf("lunar month");
}
return 0;
}
⑥ C语言程序,输入年月日算出当天星期几
先做一个函数,计算1900年1月1日到该天的天数,然后用膜除求出星期几并输出。
具体代码如下:
#include<stdio.h>
#include<stdlib.h>
intDay(inty,intm,intd);
intmain(intargc,char*argv[]){
inti;//循环变量
intyear,month,day;//读取用户输入的年月日
intdays;//储存从1900-1-1到该天的天数
intweek=0;//储存求余后的星期
//字符串组合输出星期
charb[]={"星期"};
charc[7][4]={"日","一","二","三","四","五","六"};
loop:printf("请输入年月日:(空格分隔) ");
scanf("%d%d%d",&year,&month,&day);
days=Day(year,month,day);
//增强程序的健壮性
if(days==-1)
{
printf("输入格式有误,");
fflush(stdin);//防止用户输入字母等其他非数字字符
gotoloop;
}
else
{
week=days%7;//用求余计算星期几
printf("%d年%d月%d日是%s%s ",year,month,day,b,c[week]);
}
system("pause");
return0;
}
//函数功能:输入年月日,输出1900-1-1到该天的天数,-1位输入不合法
intDay(inty,intm,intd)
{
inti;
intr=0;//储存1900到该天的闰年个数
inta[]={31,28,31,30,31,30,31,31,30,31,30};//m给每出月的天数
if(y>=1900&&m>0&&m<13&&d>0&&d<32)
{
for(i=1900;i<=y;i++)//计算闰年的个数
{
if(i%400==0||i%100!=0&&i%4==0)
r++;
}
for(i=0;i<m-1;i++)//统计当年1月1日到当月的天数
{
d+=a[i];
}
if((y%400==0||y%100!=0&&y%4==0)&&m<3)//如果当年是闰年但不到二月就不能算进去
r--;
return365*(y-1900)+r+d;
}
else
return-1;
}
⑦ C语言高手过来帮帮忙
这个程序是谁写的啊,一点都不规范,而且还不完整,
把main函数里的switch语句后加个(c)就可以正常编译运行了。
程序的作用是选择要转换为阴历还是阳历,例如选择阴历好后输入一组年月日(格式例1981.11.30,在1980到2015年之间),之后程序将为你转换为阴历(1981.11.5)
帮你注释了两个函数,另外两个函数的思想相同,
总的来说这个程序的逻辑不是很好,不用心看的话很难理解作者的想法,我没时间,要不帮你重新写了,
如果还是看不懂你再留言。
#include<stdio.h>
#include<bios.h>
struct data
{
int year1;
int specialmonth;
int month1[13];
};
struct day
{
int year2;
int month2;
int day2;
};
int dis_day1(struct day *op,int *p) /*计算并返回当年距1980年的天数*/
{
int n=0,x;
n+=(op->year2-1980)*365;
for(x=1980;x<op->year2;x++) /*如果当年是闰年,天数加1*/
if((x%4==0&&x%100!=0)||(x%100==0&&x%400==0))
n+=1;
for(x=1;x<(op->month2);x++)
n+=*(p+x-1);
x=op->year2;
if(((x%4==0&&x%100!=0)||(x%100==0&&x%400==0))&&op->month2>2) /*闰年月份大于2月才多1天*/
n+=1;
n+=(op->day2-1); /*小于2月的话,就算当年是闰年,也要减1天*/
return n;
}
int dis_day2(struct day *op,struct data *p)
{
int n=0,maxmonth,i,x;
for(x=1980;x<op->year2;x++)
{
if((p+x-1979)->specialmonth==0)
maxmonth=12;
else maxmonth=13;
for(i=0;i<maxmonth;i++)
if((p+x-1979)->month1[i]==0)
n+=29;
else n+=30;
}
if((p+op->year2-1979)->specialmonth!=0)
if((p+op->year2-1979)->specialmonth<op->month2)
op->month2++;
for(i=1;i<op->month2;i++)
{
if((p+op->year2-1979)->month1[i-1]==0)
n+=29;
else n+=30;
}
n+=(op->day2-1);
n+=46;
return n;
}
/*阳转阴;这里比较复杂,作者的算法大概是:利用前面算出来的天数,直接在自己定义的阴历表里面*/
/*以1979.11.14为起点去代换,*/
void work_out2(struct day *re,struct data *p,int n)
{
int n1=0,maxday,maxmonth,month,day,judge=0;
re->year2=1979;re->month2=11;re->day2=14; /*这里的1979.11.14是1980.1.1的阴历*/
while(1)
{
if(judge==1)
break;
if(p->specialmonth==0)
maxmonth=12;
else
maxmonth=13; /*有闰月的年份多1个月*/
/*下面的if语句是判断当年还剩几个月(maxmonth-month),如果是79年的话,因为是从*/
/*11.14开始,因此只剩1个月(maxmonth-month=1)。 */
if(p->year1==1979)
month=12;
/*其他年份将有(maxmonth-month)12到13个月,至于能否全用到就要看前面算出来的天数n了*/
else
month=1;
for(;month<=maxmonth;month++)
{
if(p->month1[month-1]==0) /*判断当月是大月还是小月*/
maxday=29;
else maxday=30;
if((p->year1==1979)&&(maxday==30)) /*79年的11月是大月,当月日期计数从14号开始*/
day=14;
else day=1; /*其他年份的当月计数从1号开始*/
for(;day<=maxday;day++)
{
if(n1==n)
{
if(maxmonth==13&&month>p->specialmonth)
month-=1;
re->year2=p->year1;
re->month2=month;
re->day2=day;
judge=1;
break;
}
else n1+=1;
}
if(judge==1)break;
}
p++;
}
}
void work_out1(struct day *re,int n,int *p)
{
int year=1980,n1=0,month,day,maxday,judge=0;
re->year2=1980;re->month2=1;re->day2=1;
while(1)
{
*(p+1)=28;
if(judge==1)
break;
if((year%4==0&&year%100!=0)||(year%100==0&&year%400==0))
*(p+1)=29;
for(month=1;month<=12;month++)
{
maxday=*(p+month-1);
for(day=1;day<=maxday;day++)
{
if(n1==n)
{
re->year2=year;
re->month2=month;
re->day2=day;
judge=1;
break;
}
else n1++;
}
if(judge==1)
break;
}
year++;
}
}
main()
{
int n,c;
int sun[12]=;
int *p1=sun;
struct day ob,re;
struct data *p2;
/*下面是1979年到2015年的农历表,第1个数字代表年份;第2个数字代表当年的闰月是几月 */
struct data year[37]={
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
};
p2=year;
printf(" WARNING \n");
printf(" you should take care of it :\n");
printf(" the limted range:\n");
printf(" lunar calendar: 1980.1.1----2015.11.12\n"); /*阳历*/
printf(" soalr calendar: 1980.1.1-----2015.12.31\n"); /*阴历*/
while(1)
{
printf(" please choose one way a/b?\n");
printf(" a: soalr calendar---->lunar calendar\n");
printf(" b: lunar calendar---->soalr calendar\n");
do /*选择除a,b键之外的其他键无效*/
{
c=getchar();
}while(c!='a'&&c!='b');
do
{
printf("your must pay attention to the form\n");
printf("pleae input your date:\n");
scanf("%d.%d.%d",&ob.year2,&ob.month2,&ob.day2); /*输入年、月、日*/
}while(ob.year2<1980||ob.year2>=2016||ob.month2<1||ob.month2>12||ob.day2<1||ob.day2>31);
switch(c)
{
case 'a': /*阳转阴*/
n=dis_day1(&ob, p1);
printf("%d\n",n);
work_out2(&re,p2,n);
printf(" the result is %d.%d.%d\n",re.year2,re.month2,re.day2);
break;
case 'b': /*阴转阳*/
n=dis_day2(&ob,p2);
printf("%d\n",n);
work_out1(&re,n,p1);
printf(" the result is %d.%d.%d\n",re.year2,re.month2,re.day2);
if(ob.month2==(p2+ob.year2-1979)->specialmonth)
{
if((ob.day2!=30)||((p2+ob.year2-1979)->month1[ob.month2]==1))
{
n+=((p2+ob.year2-1979)->month1[ob.month2-1]+29);
work_out1(&re,n,p1);
printf("there is a other result\n:\t%d.%d.%d\n",re.year2,re.month2,re.day2);
}
}
break;
defluat: break;
}
printf("if you want to try again,y/n?\n");
do
{
c=bioskey(0);
}while(c!=0x316e&&c!=0x1579);
if(c==0x316e)
break;
}
}
⑧ 判断月份的天数,用c语言中的if语句写出来要怎么写
用 if 判断是否闰年。月份的天数存于数组,用月做下标。
#include <stdio.h>
int main(){
int MonthDay[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int y,m;
printf("input year month:2018 2\n");
scanf("%d %d",&y,&m);
if (((y%4==0)&&(y%100!=0)||(y%400==0)))MonthDay[2]=29; //闰年
if (m<0 || m >12)m=0; //错误的月
printf("%d\n",MonthDay[m]); //输出结果
return 0;
}
⑨ C语言程序,输入年月日算出当天星期几
#include <stdio.h>
int main()
{
int day,mn,yr,i,days=0,s,k;
int mont[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
char wek[][9]={ {'S','u','n','d','a','y'},
{'M','o','n','d','a','y'},
{'T','u','e','s','d','a','y'},
{'W','e','d','n','s','d','a','y'},
{'T','h','u','r','s','d','a','y'},
{'F','r','i','d','a','y'},
{'S','a','t','u','r','d','a','y'}
};
printf("Inpute the date (year-month-day):");
scanf("%d-%d-%d",&yr,&mn,&day);
if (yr%4==0||yr%100==0||yr%400==0)
mont[2]=29;
else
mont[2]=28;
for (i=0;i<mn;i++)
days+=mont[i];
days+=day;
s=yr-1+(int)((yr-1)/4)-(int)((yr-1)/100)+(int)((yr-1)/400)+days;
k=s%7;
printf("%d-%d-%d is %s.",yr,mn,day,wek[k]);
return 0;
}
⑩ c语言中,判断大小月的代码怎么写
如下:
int main () {
}
判断语句:
C语言提供了以下类型的判断语句。
语句描述:
if语句一个if语句由一个布尔表达式后跟一个或多个语句组成。
if...else语句一个if语句后可跟一个可选的else语句,else语句在布尔表达式为假时执行。
嵌套if语句您可以在一个if或else if语句内使用另一个if或else if语句。
switch语句一个switch语句允许测试一个变量等于多个值时的情况。
嵌套switch语句您可以在一个switch语句内使用另一个switch语句。