❶ 万年历c语言
// 万年历.cpp : Defines the entry point for the console application.
// 显示1900年以后任何年份的日历,日历以月份顺序排列,每月以星期顺序排列。
//采用一般日历计算方法,先给出一般年份的每月天数,如果是闰年,第二个月天数为29,再计算出制定年份的1月1日是星期几,然后根据这些数据
//计算出全年日历,边计算边显示。
//函数leap()判定是否闰年
//函数week()计算year年份的1月1日是星期几。计算方法是,已知1900年1月1日是星期一,先计算从1900年到year年份的前一年一共有多少(s)天,
//则(s+1)%7为年份year的1月1日的星期号。
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
static char *week0=" SUN MON TUE WED SUR FRI SAT"; //指针形式定义一个字符串,或者是week0[36]
int leap(int year)
{
if((year%4==0 && year%100!=0)|| year%400==0)
return 1;
else return 0;
}
int week(int year)
{
int i,w;
int s=0;
for(i=1900;i<year;i++)
{
if(leap(i))
s+=366;
else s+=365; //计算从1900年到year年的天数
}
w=(s+1)%7;
return w;
}
void main()
{
int month[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int i,j,k;
int year;
int w;
do
{
cout<<"输入年份:";
cin>>year;
}while(year<=1900);
w=week(year);
if(leap(year))
month[1]=29;
for(i=0;i<12;i++)
{
for(k=0;k<35;k++)
cout<<"_"; //输出一条横线
cout<<endl;
cout<<setw(20)<<i+1<<"月"<<endl;
cout<<endl;
cout<<week0<<endl;
for(k=0;k<w;k++)
cout<<" "; //输出若干空格
for(j=1;j<=month[i];j++)
{
if((j+w)%7==1) //遇到星期日时,换一行输出
cout<<endl;
cout<<setw(5)<<j;
}
cout<<endl;
for(k=0;k<35;k++)
cout<<"_"; //输出一条横线
cout<<endl;
w=(w+month[i])%7; //计算下个月1号是星期几
}
cout<<endl;
system("pause");
}
❷ 用C语言写万年历
写万年历程序,您需要先了解万年历的特点
下面是万年历的特点(复制粘贴的):
1. 平年365天(52周+1天),闰年366天(52周+2天)。平年2月28天,闰年2月29天。
由于公元1月1日设为星期六,故3月1日为星期三。 ——注意这个“三”
为使算法达到最简,故本算法以“星期”为计算单位。且选3月1日为基月。
2. 每400年整一闰,或每4年且不为百年的一闰。(原因:地球绕太阳一周的时间是365天5小时46秒,为了使一年的天数为整数,将一年的天数定为365天,余下的时间积累起来,四年就是23小时15分4秒,将近一天,把这一天加在某年的二月而成29天,该年称为闰年,其它年称为平年。但四年加一天又多用了44分56秒,这个数积满400年为三天。因此400年中只能有97个闰年,所以凡能被400整除,或不能被100整除但能被4整除的年份为闰年。)
所以百年%4=0闰或(年%4=0并且年<>0)闰。
3. 每 4年(3个平年+1个闰年)共208周+5天 ——注意这个“5天”
每百年共100*(208周+5天)-1天=5217周+5天 ——注意这个“5天”(整百年暂设为平年)
每400年共4*(5217周+5天)+1天(整400年闰)=20871周+0天——注意这个“0天”和“1天”(4个整百年只有一个闰年)
即400年一轮回!(原来万年历400年前是一家)
至于你说的日期和星期对齐,给你一点思路参考:每一行是7天,可以设定每一天占10个字符(同时上面的星期也得占满10个字符),假设本月第一天是星期4,那么在输出1之前需要先输出10×3个字符来占位,当输出星期天的日期之后换行,之后的就简单了
写了这么多 希望能帮到你
❸ C语言万年历项目概述(如何做这个项目)
首先,打开VC++6.0,依次选取“File(中文版的为‘文件’,以后不再提示)”——>“New(新建)”菜单项,打开New窗口后,选取Projects(工程)选项卡,再选取MFC AppWizard(exe)项,先在Location(位置)编辑框中输入工程地址,再在Project name(工程)编辑框中输入工程文件名,单击“OK(确定)”按钮,在打开的新窗口中选取Dlalog based(基本对话)单选钮,单击finish(完成)按钮,再在打开的新窗口中单击OK(确定)按钮即可创建一个空白的对话框,删除其中不需要的控件,再在上面拉出一个Date Time Picker控件,再单击运行按钮即可。
❹ C语言程序 关于万年历程序的问题~~~
int
firstday(int
y)
//判断某年元旦是星期几
{
double
s
;
s=floor(year-1+(year-1)/4.0-(year-1)/100.0+(year-1)/400.0+1);
return
(int)s%7;
}
这个函数写错了,2013年错了一天,另外用
浮点数
,肯定有问题。
❺ 求C语言程序(万年历)讲解
你的代码一共有如下几个问题:
1.
你使用scanf("%c",&a)来接收用户输入的一个字符时,会将回车符也接收下来。C语言在处理时,会将用户输入放在键盘缓冲区,使用scanf来接收%c时,编译器从键盘缓冲区读取一个char字符,但是并不清空后面的字符,所以导致下一次scanf("%c",&a)时,将剩下的回车符先给读进来,并进行处理了。
要解决这个问题,可以使用getch()或者getche()函数。
但是:
getch()接口,接收字符后不会将字符回显到显示器,所以用户看不到自己输入的字符。
而getche()接口就没有这个问题,所以应该使用getche()。
2.
循环计数错误,多循环一次。
这个你仔细推算一下就出来了。
一般解决这种问题的话,使用do/while循环较多,因为do/while循环可读性好一些。
以下是改过以后的代码,已经编译运行确认:
#include
<stdio.h>
#include
<conio.h>
main()
{
char
a;
int
i=3;
a=getche();//这里使用getche()来接收用户输入,既可以回显,也不会接收回车
do
{
i--;//将i--放在这里,防止出现可以输入4次的情况
if(a!='b'&&i>0)
{
printf("错误\n");
a=getche();//这里使用getche()来接收用户输入,既可以回显,也不会接收回车
}
else
break;
}while(1);
if(a=='b')
{
printf("正确");
}
else
getch();
}
❻ 用C语言编万年历要注意什么!!!高手请指点!!!
该公式是:
(年+年/4+年/400-年/100+月日天数-1)/7=XX……余。余数为星期几。
其中:(年+年/4+年/400-年/100)/7=XX……余。余数为该年1月1日星期数。(注:分数和商数均取整数)
但是月日天数有规则:
月日天数: 平年 , 闰年
一 月: 0+日数, 0+日数
二 月: 3+日数, 3+日数
三 月: 3+日数, 4+日数
四 月: 6+日数, 0+日数
五 月: 1+日数, 2+日数
六 月: 4+日数, 5+日数
七 月: 6+日数, 0+日数
八 月: 2+日数, 3+日数
九 月: 5+日数, 6+日数
十 月: 0+日数, 1+日数
十 一 月: 3+日数, 4+日数
十 二 月: 5+日数, 6+日数
(注:月日天数为前各月累积7余数+当月天数,可查算,也可心算。)
例:2005年(平年)10月1日星期几?
(年+年/4+年/400+年/100+月日天数-1)/7
=(2005+2005/4+2005/400-2005/100+(0+1)-1)/7
=(2005+501+5-20+1-1)/7
=2491/7
=XX……6
即该年10月1日为星期六。
❼ c语言编写万年历
#include"stdio.h"
#include"stdlib.h"
#include"windows.h"
void welcome();
void getday(int year,int month);
void shuru();
void end();
long year;
long month;
void welcome()
{
printf("【万年历程序加载中");
for(int i=0;i<30;i++)
{
printf("★");
Sleep(100);
}
system("cls");
printf("【万年历程序加载中】\n");
Sleep(1000);
printf("☆~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~☆\n");
Sleep(1000);
printf(" ~~~谢谢使用【菠菜】制作的万年历~~~~\n");
Sleep(100);
printf("☆~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~☆\n");
Sleep(1000);
}
void end()
{
printf("【万年历关闭中");
for(int i=0;i<30;i++)
{
printf("★");
Sleep(100);
}
system("cls");
printf("【万年历关闭完成】\n");
Sleep(1000);
printf("☆~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~☆\n");
Sleep(1000);
printf(" ~~~谢谢使用【菠菜】制作的万年历~~~~\n");
Sleep(100);
printf("☆~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~☆\n");
Sleep(1000);
exit(0);
}
void shuru()
{
int a;
printf("☆~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~☆\n");
printf(" ≮欢迎使用万年历≯\n");
printf("☆~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~☆\n");
while(1)
{
printf("请输入年份:");
scanf("%d",&year);
if(year>0)
break;
else
{
printf("\n");
printf("你输入的年份有误,请重新输入\n"); } }
printf("\n");
while(1)
{
printf("请输入月份:");
scanf("%d",&month);
if(month>=1&&month<=12)
break;
else
{
printf("\n");
printf("你输入的月份有误,请重新输入\n"); } }
getday(year,month);
}
void getday(int year,int month)
{
int week; //星期几
int nowday=0; //该月前的总天数
long allday; //从公元1年起的总天数
int dayofmonth[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
if(year%4==0&&year%100!=0||year%400==0)
dayofmonth[2]=29;
for(int m=0;m<month;m++)
{
nowday=nowday+dayofmonth[m];
}
allday=nowday+year*365+year/4-year/100+year/400; //公元一年到现在用了多少天
week=allday%7; //求出这个月第一天是星期几
printf(" %d 年 %d 月\n",year,month);
printf("日 一 二 三 四 五 六\n");
for(int j=0;j<week;j++)
{
printf(" ");
}
for(int i=1;i<=dayofmonth[month];i++)
{
if(week==7)
{
printf("\n");
week=0; }
printf("%2d ",i);
week++; }
printf("\n");
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
}
void main()
{
char a;
welcome();
while(1)
{
shuru();
printf("你还需要继续吗?<y ro n>");
fflush(stdin); //清空输入缓冲区,避免缓冲区内残存读取函数无法取走的内容!
scanf("%c",&a);
if(a=='n')
break;
}
end();
}
这个万年历比较好看哈!你可以试试这个?
❽ 求个C语言综合实验设计报告,包括设计题目,题目阐述及设计思路,主要知识点,程序清单,设计结果优缺点
题目: C语言输出万年历
学院:
专业:
班级:
姓名:
设计日期:总分:
一、设计题目:
C语言输出万年历
二、题目阐述及设计思路:
C语言输出万年历,输入年份、月份,计算得到的是这一天是星期几;给定年,月,计算此月有多少天 。本程序运用的万年历的计算公式: d=a-1+(a-1)/4-(a-1)/100+(a-1)/400+c; 其中a为年c为该日期在本年中的天数,d取整数,当d/7余数0时是星期天,余数1时是星期一依此类推。
三、主要知识点:
运用函数调用,if,else函数switch语句。for,while,循环语句。
四、程序清单:
#include <stdio.h>
int m_day(int year,int month)/*此函数是给定年,月,计算此月有多少天.*/
{
if ((year%4==0 &&year%100!=0) ?? (year%400==0))
switch(month)
{
case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31;
case 4: case 6: case 9: case 11: return 30;
case 2: return 29;
}
else
switch(month)
{
case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31;
case 4: case 6: case 9: case 11: return 30;
case 2: return 28;
}
}
int main()
{
int year,month;
int i, days=0, d, day=0;
printf ("Enter the year and month:\n");
scanf ("%d %d ", &year, &month );
for (i=1;i<month; i++)
days+=m_day (year,i);
d=year-1+(year-1)/4-(year-1)/100+(year-1)/400+days+1;
printf("%d-%d\n",year,month);
printf(" Sun Mon Tue Wed Thu Fri Sat\n");
for (i=0;i<d%7;i++)
printf(" ");
for (i=1;i<=7-d%7;i++)
{
day++;
printf("%5d",day);
}
printf("\n");
while(1)
{
for (i=1;i<=7;i++)
{
day++;
if (day>m_day(year,month)) {getch();return 0;}
printf("%5d",day);
}
printf("\n");
}
}
五、设计结果说明:
1、设计优点:
程序充分利用所学的C语言知识,运用了函数的调用、循环语句、以及return语句,使得编程更加有条理。简单易懂,结构清晰,也使得程序的使用更加方便。
2、设计不足:
在编程序时,由于考虑到时间和受所学知识的限制,只能输入年份、月份,计算得到的是这一天是星期几;给定年,月,计算此月有多少天 。而并不能输入公历的年月日,输出农历年月日以及输入农历节气,输出当年农历的年月日及公历年月日。