Ⅰ 求C语言编日历源代码的详细说明
/*
稍微改了下对齐格式,加了注释
*/
/*
1、闰年的算法:
如果某年能被4整除但不能被100整除,
或者能被400整除,
则该年是闰年.
用表达式表示就是
(year
%4
==
0
&&
year%100
!=
0)
||
(year%400
==
0)
2、计算某一天是星期几:
已知1900年的1月1号为星期一,
然后就可以用某一天和1900年的1月1号相差的天数对7取余来求星期,
本题是用的公元1年的1月1号作为基准
*/
#include
<stdio.h>
#include<conio.h>
#include<stdlib.h>
int
IsLeapYear(int);
//函数定义
void
main()
{
int
i;
int
day;
int
year;
int
temp;
int
temp_i;
long
int
Year_days
=
0;
int
Year_Start
=
1;
int
Per_Year_Days;
int
month_day[]={31,28,31,30,31,30,31,31,30,31,30,31,29};
printf("Please
enter
the
year:
");
scanf("%d",&year);
//输入年份
while(Year_Start
<
year)
//从公元1年开始执行while循环,
该年的一月一号为星期一
{
if(
IsLeapYear(
Year_Start
)
)
Per_Year_Days
=
366;
//如果是闰年,
则一年有366天
else
Per_Year_Days
=
365;
//如果不是闰年,
则一年有365天
Year_days
=
Year_days
+
Per_Year_Days;
//Year_days为从公元1年到输入年份的前一年的天数的总和
Year_Start++;
}
for(
temp
=
1;
temp
<=12;
temp++
)
//temp从1到12,
对应一年内12个月
{
switch(
temp
)
//用switch语句将temp和12个月对应起来
{
case
1:
printf("
January(%d)\n",year);
//一月
break;
case
2:
printf("
February(%d)\n",year);
//二月
break;
case
3:
printf("
March(%d)\n",year);
//三月
break;
case
4:
printf("
April(%d)\n",year);
//四月
break;
case
5:
printf("
May(%d)\n",year);
//五月
break;
case
6:
printf("
June(%d)\n",year);
//六月
break;
case
7:
printf("
July(%d)\n",year);
//七月
break;
case
8:
printf("
August(%d)\n",year);
//八月
break;
case
9:
printf("
September(%d)\n",year);
//九月
break;
case
10:
printf("
October(%d)\n",year);
//十月
break;
case
11:
printf("
November(%d)\n",year);
//十一月
break;
case
12:
printf("
December(%d)\n",year);
//十二月
break;
}
i
=
Year_days
%
7;
//每个星期有7天,
故用每年的天数对7取余
printf("Mon\tTue\tWed\tThu\tFri\tSat\tSun\n");
if(
i
!=
0
)
//如果余数不为零
for(
temp_i
=
0;
temp_i
<
i;
temp_i++)
printf("\t");
//则打印空格(这里用\t代替空格,
更加美观),
空格数为i
day
=
1;
//初始化day为1,
为下面的while循环做准备
if(
IsLeapYear(year)
&&
temp
==
2)
//如果输入的年份是闰年,
并且月份为2
while(
day
<=
month_day[12]
)
//day为一循环变量,
取值为1-365(闰年的话为1-366)
{
if(
day
>1
)
//如果天数大于一
if(
Year_days
%
7
==
0
)
//如果是星期日,
则换行
printf("\n");
if(
day
>=
10
)
printf("%d\t",day);
//打印天数+空格
else
printf("%d\t",day);
Year_days++;
day++;
}
else
//如果不满足"输入的年份是闰年,
并且月份为2"
while
(day
<=
month_day[temp-1])
{
if(
day
>
1
)
if(
Year_days
%
7
==
0
)
printf("\n");
if(
day
>=10
)
printf("%d\t",day);
else
printf("%d\t",day);
Year_days++;
day++;
}
printf("\n");
if(
getch()
==
'q'
)
//如果输入为q,
则退出程序
exit(0);
}
getch();
//每按一次键,
打印一个月份
}
int
IsLeapYear(
int
year
)
{
//判断是否是闰年,
是则返回1,
否则返回0
if
((year
%4
==
0)
&&
(year
%
100
!=
0)
||
(year
%
400
==
0)
)
return
1;
else
return
0;
}
Ⅱ C语言编写的计时器源代码怎么编写
几天前写了个大概
你做个参考把
#include<stdio.h>
void
main()
{
float
x,y;
char
fuhao;
pintf("请输入第一个数:\t请输入运算符:\t,请输入第二个数:\n");
scanf("%f,%c,%f",&x,&fuhao,&f);
if(fuhao=='+')printf("%f,%c,%f=%f\n",x,fuhao,y,x+y);
else
if(fuhao=='-')printf("%f,%c,%f=%f\n"x,fuhao,y,x-y);
else
if(fuhao=='*')printf("%f,%c,%f=%f\n"x,fuhao,y,x*y);
else
if(fuhao=='/')
{
if(y==0.0)printf("分母不能为0\n");
else
printf("%f,%c,%f=%f\n"x,fuhao,y,x/y);
}
}
Ⅲ C语言 电子时钟源代码程序 带图 谢谢 最好有注释
#include <stdio.h>
#include <time.h>
#include"stdlib.h"
#include "windows.h"
void main ()
{
while(1)
{
time_t rawtime;
struct tm * timeinfo;
time ( &rawtime );
timeinfo = localtime ( &rawtime );
printf ( " 07The current date/time is: %s", asctime (timeinfo) );
Sleep(1000);
system("cls");
}
}
Ⅳ 跪求C语言编写的万年历原代码,大哥们帮帮忙啊~
//-------------系统库定义-------------------
#include "stdio.h"
#include "BIOS.h"
#include "dos.h"
#define X " Sun Mon Tue Wed Thu Fri Sat"
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define DOWN 0x5000
#define UP 0x4800
#define PGUP 0x4900
#define PGDW 0x5100
#define ESC 0x011b
#define QUERY 0x1071
#define QUERYD 0x1051
//--------------------------------------------
struct date dm ;//时间结构定义
int Cyear,Cmonth,Cday,Cmonnum,Lmonnum ;//全局变量
int isleap(int year)//判断闰年
{
if(year%4==0&&year%100||year%400==0)
return 1 ;
else
return 0 ;
}
int getday(int year,int month,int day)//计算X年X月X日是星期几
{
int flag,s,i ;
int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31} ;
int cont=0 ;
flag=isleap(year);
if(flag==1)
a[2]++;
for(i=1;i<month;i++)
{
cont=cont+a[i];
}
cont=cont+day ;
s=year+1+(year-1)/4+(year-1)/100+(year-1)/400+cont ;
return s%7 ;
}
void printspace(int n)//输出空格
{
int i ;
for(i=0;i<n;i++)printf(" ");
}
void spacer()//输出分隔符(分隔线)
{
int i ;
for(i=0;i<30;i++)
{
printf("=");
}
printf("\n");
}
void keyinfo()//输出键盘操作信息
{
printf("\n-------Operation manual-------\n");
printf("Year:Up key and Down key\n");
printf("Month:Left key and Right key\n");
printf("Day:PageUp key and PageDown key\n");
printf("Query date of the calendar:Q key\n");
printf("Exit calendar:Esc key\n");
}
void week()//输出当前日期是星期几
{
int day ;
day=getday(Cyear,Cmonth,Cday);
if(day==0)
printf("\n%d-%d-%d is Sunday!\n",Cyear,Cmonth,Cday);
if(day==1)
printf("\n%d-%d-%d is Monday!\n",Cyear,Cmonth,Cday);
if(day==2)
printf("\n%d-%d-%d is Tuesday!\n",Cyear,Cmonth,Cday);
if(day==3)
printf("\n%d-%d-%d is Wednesday!\n",Cyear,Cmonth,Cday);
if(day==4)
printf("\n%d-%d-%d is Thursday!\n",Cyear,Cmonth,Cday);
if(day==5)
printf("\n%d-%d-%d is Friday!\n",Cyear,Cmonth,Cday);
if(day==6)
printf("\n%d-%d-%d is Saturday!\n",Cyear,Cmonth,Cday);
}
void calendar(int year,int month,int day)//显示日历
{
int i,j,d,m,flag,week;
int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
m=0,d=0,week=0;
Cmonnum=a[month];//当前月的天数
Lmonnum=a[month-1];//上一月的天数
week=d=getday(year,month,1);//取得X年X月的1日是星期几
flag=isleap(year);
if(flag==1)
{
a[2]++;
}
clrscr();
printf("\n The calendar of year %d\n",year);
spacer();
switch(month)
{
case 1 :
printf(" January 1 ");
break ;
case 2 :
printf(" February 2 ");
break ;
case 3 :
printf(" March 3 ");
break ;
case 4 :
printf(" April 4 ");
break ;
case 5 :
printf(" May 5 ");
break ;
case 6 :
printf(" June 6 ");
break ;
case 7 :
printf(" July 7 ");
break ;
case 8 :
printf(" August 8 ");
break ;
case 9 :
printf(" September 9 ");
break ;
case 10 :
printf(" October 10 ");
break ;
case 11 :
printf(" Nevember 11 ");
break ;
case 12 :
printf(" December 12");
break ;
}
printf("\n");
printf(X);
printf("\n");
for(i=0;i<6;i++)
{
if(i==0)//如果是第一个星期时,执行!
{
printspace(d*4);
for(j=0;j<7-d;j++)
{
if(m==day-1)//m到达day的前一天时,输出[%d]
{
printf(" [%d]",++m);
}
else if(m==day && week!=0)//m到达当天时的,输出%3d
{
printf("%3d",++m);
}
else
{
printf("%4d",++m);
}
week=(week<6)?week+1:0;//计算当天是星期几
}
printf("\n");
}
else//不是第一个星期时,执行!
{
for(j=0;j<7;j++)
{
if(m<a[month])
{
if(m==day-1)//m到达day的前一天时,输出[%d]
{
if(m<9)//代表只有一位数的数字如9,8,7.....等。
printf(" [%d]",++m);
else//代表只有两位数的数字如10,11,12.....等。
printf(" [%d]",++m);
}
else if(m==day && week!=0)
{
printf("%3d",++m);
}
else
{
printf("%4d",++m);
}
}
week=(week<6)?week+1:0;//计算当天是星期几
}
printf("\n");
if(m==a[month])break ;
}
}
spacer();
if(flag==1)
printf("\nThe year %d is leap year!\n",year);
if(flag==0)
printf("\nThe year %d is not leap year!\n",year);
week();
printf("\nThe current date is: %d-%d-%d\n",dm.da_year,dm.da_mon,dm.da_day);
keyinfo();
}
//keyboard Operation
void key()
{
int key ;
Cyear=dm.da_year,Cmonth=dm.da_mon,Cday=dm.da_day ;
calendar(Cyear,Cmonth,Cday);
while(1)
{
key=bioskey(0);
if(key==RIGHT)
{
if(Cmonth<12&&Cmonth>=1)
{
Cmonth++;
}
else
{
Cyear++;
Cmonth=1 ;
}
}
if(key==LEFT)
{
if(Cmonth<=12&&Cmonth>1)
{
Cmonth--;
}
else
{
Cyear--;
Cmonth=12 ;
}
}
if(key==UP)
{
Cyear++;
}
if(key==DOWN)
{
Cyear--;
}
if(key==PGUP)
{
if(Cday!=1)
{
Cday--;
}
else if(Cday==1&&Cmonth==1)
{
Cyear--;
Cmonth=12 ;
Cday=31 ;
}
else
{
Cmonth--;
Cday=Lmonnum ;
}
}
if(key==PGDW)
{
if(Cmonnum!=Cday)
{
Cday++;
}
else if(Cmonnum==Cday&&Cmonth==12)
{
Cyear++;
Cmonth=1 ;
Cday=1 ;
}
else
{
Cmonth++;
Cday=1 ;
}
}
if(key==QUERY||key==QUERYD)
{
printf("Input date format(YYYY,MM,DD):");
scanf("%d,%d,%d",&Cyear,&Cmonth,&Cday);
}
if(key==ESC)break ;
calendar(Cyear,Cmonth,Cday);
}
}
void main()
{
clrscr();
getdate(&dm);
key();
}