问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C++万年历 十二生肖的代码带着解释,跪求大神

发布网友 发布时间:2022-04-24 08:49

我来回答

3个回答

热心网友 时间:2022-06-18 04:43

写了下,测试成功,代码很简单,有注释。

#include <iostream>

using namespace std;

int main()
{
// 12 猪 在这能被12取余为0说明差值是12的倍数
// 0"猪", 1"鼠", 2"牛", 3"虎", 4"兔", 5"龙", 6"蛇", 7"马", 8"羊", 9"猴", 10"鸡", 11"狗"
char * zodiacArray[12] = {  "猪", "鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗" };
int baseYear = 2007; //07年是鼠年,以此为基准进行判断
int testYear = 2014;
int count = 0;
int result = 0;

while (true)
{
printf("Please input the year whose zodiac you want to know:\n");
cin>>testYear;


//和基准年间的差值
count = abs(baseYear - testYear);
//判断是基准年之前还是之后
if ((baseYear - testYear) > 0)
{
//基准年之前,差值取余再取补数即可得到生肖的位置,
result = 12 - count % 12;  
}
else
{
//差值取余即可得到生肖的位置,
result = count % 12;  
}



printf("要测试年份的生肖是: %s\n", zodiacArray[result]);
}


return 0;
}

热心网友 时间:2022-06-18 04:44

要确定生肖,这个简单,跟你讲一下吧,生肖与十二地支对应,只要求得地支,就可以知道生肖了,地支的求法如下:(年份-4)%12 即可,如果年份小于4的,你再往上加12的整数倍(如果要同时求天干,那么,加上60的整数倍),使其变正整数即可。
解释:公元4年刚好是甲子年,甲是十天干之首,子是十二地支之首,一年用一个干支来对应,天干地支组合起来是60年一个轮回。我们经常讲子鼠、丑牛、寅虎……就是将十二生肖与十二地支对应进来的称法。
如果有需要C++图形界面版本万年历,可继续追问。

热心网友 时间:2022-06-18 04:44

#include <iostream> 
#include <iomanip.h> 
using namespace std;
class Data //声明一个类Data

private: //私有部分,关于这个的特点,自己看书去
    int year; //私有变量,同上
     
public: //公有变量,特点看书去
    void getyear();             //提示用户输入想要查询的年份 
    int ioleapyear();             //判断该年是不是闰年 
    int  weekday();                //判断该年的元旦是星期几 
    int monthday(int i);             //该年每个月的天数 
    void disp();                   //显示结果。 
}; 
char* weekd[7]={"MON","TUE","WEN","THU","FRI","STA","SUN"};  //记录星期一到星期天 
void Data::getyear() 

    cout<<"请输入你想要查询的年份:"; //cout是输出
    cin>>year; //cin是输入一个值到变量

int Data::ioleapyear() //判断闰年和平年,闰年返回1,平年返回0

    if(year%4==0&&year%100!=0||year%400==0) //计算闰年和平年的方法
           //四位年份能被4整除但不能被100整除,或能被400整除
        return 1; 
    else  
        return 0; 

int  Data::weekday() 

    int n=year-1900;       //已知1900年的元旦刚好是星期一 

    n=n+(n-1)/4+1;         // 判断,以每年52个整星期计算year年比1900年多出来的天数
       //多出来的天数除以7的余数就是这年第一天是星期几
    n=n%7; //%就是取余的意思
    if(n==0) //当n=0的时候是周日,使它返回7
        return 7;         //返回输入的年份的元旦是星期几 
    else  
        return n; //n不是0的时候反正n的值就是星期几

int Data::monthday(int i) //这里是返回月有几天的,i是月份

        if(i==1||i==3||i==5||i==7||i==8||i==10||i==12) 
        return    31; //如果是1,2,5,7,8,10,12月,则返回是31天
        else if (i==2) //判断可恶的2月
            if(ioleapyear()) //当ioleapyear()返回1时就是闰年,则为29天,ioleapyear()是一个函数,调用的一个函数
            return    29; 
            else return 28; //否则为28天
        else 
            return    30; //其他的月份为30天

void Data::disp() //这个是显示函数

    int i;  //这个是月的记录变量
    int n=weekday(); //这也是调用了一个函数,用n记录当年的元旦是星期几
     
    for(i=1;i<=12;i++)          //总共的月份 12 ,用循环来实现显示12个月
    {   
  int lemp=1; 
        cout<<endl<<setw(5)<<i<<"月份"<<endl;   //这个是显示月份的  
            //setw()是iomanip.h里的函数,只要在开头写上#include <iomanip.h> 就可以用了
            //作用是设置宽度,就是i显示出来的宽度,这个是为了好看,当然你可以用空格什么的代替
        cout<<"-------------------------------------------"<<endl; //endl是换行的意思,这句就是输出了一行横线
        for(int j=0;j<7;j++) //循环显示星期上的字,就是mon,tue等等
   cout<<setw(5)<<weekd[j]; 
        cout<<endl<<"-------------------------------------------"<<endl; 
           
        for(int k=1;k<n;k++,lemp++)      //输入每月第一天的起始位置,用空格补充 
            cout<<setw(5)<<"   ";   //就是如果是星期四,则前面有3个空格,1从星期四的位置出现
             
        for(int d=1;d<=monthday(i);d++,lemp++) //循环输出每个月的日子
        { 
            cout<<setw(5)<<d;    //d就是日子
            if(lemp==7)          //控制一行输出到星期天,如果到星期天则重新计数 
            { 
                cout<<endl;      //是星期天的话刚输出一个换行
                lemp=0;          //让临时记录星期的变量为0,以备下次使用
            } 
        } 
            n=lemp%7;       //当输出完一个月后,记录这个月的最后一天在哪,寻找下个月的 
            if(n==0)        //第一天的起始位置 
                n=7;  //就是当n为0的时候,是周日,令n为7

cout<<endl<<"-------------------------------------------"<<endl<<endl<<endl; 
               
    } 

int main() 

    Data a; //创建一个对象a
    cout<<setw(45)<<"万年历查询"<<endl; 
    cout<<"-------------------------------------------------------------------------------" 
        <<endl; 
    a.getyear(); //调用对象a里的函数,这个就管输入一个年份
    a.disp(); //调用对象a的另一个函数,显示日历
    system("pause");
    return 0;
}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
怀孕错过了糖筛怎么办 糖筛有哪些注意事项 怀孕几个月查唐筛 蔡家沟镇慈云寺 哈佳高铁高楞站多少平方米位置在那 超威电池生产日期怎么看 超威电池寿命一般多长时间 华晨宇鸟巢四面台10w+秒罄!!火星演唱会舞台概念图震撼发布! 手机连接160wifi电脑蓝屏使用160WiFi遇到问题应该如何解决 为什么手机wifi总是刚开启,锁屏就掉了。wifi设置里的休眠模式也是永久的... 建行卡为什么不能网上转账 学校发我们的建设银行卡一定要激活吗? 我打电话查余额说输入取钱密码... 辽宁政务里申请营业执照怎么上传身份证 急求:万年历c代码 显示 属相 时间 日期 农历 饺子冻裂缝了怎么煮 儿童歌曲送别的歌词 饺子冻裂了该怎么煮? 歌曲送别原唱是谁?哪年的歌? 送别这首经典的歌曲原唱是谁啊 自己包的饺子一冷冻就开裂,怎么解决 《送别》歌曲原唱是谁? “送军送到大路旁”这句歌词是哪首歌的歌词 送别 这首歌的原唱是谁啊 歌曲《送别》 的原唱是谁? 送别 原版歌词 完整版林海音 《送别》的完整版歌词,李叔同的那个 阎维文的《送别》 歌词? 《送别》完整歌词 为什么我的电脑音量控制老是自己跳到最大 电脑的音量,一调上去就掉下来,电脑没声音,怎么办? 联想笔记本电脑音量自动静音是怎么回事联系Y470笔记本电脑自动静音,音量调上去又自动恢复静音,如何_百度问一问 电脑桌面上的音量调上去了,自己会滑下来,是哪里坏了 万年历上面写的属相命运准吗? 在辽宁政务服务网上办理营业执照时是否税务登记时填否还会出现有关税务登记的信息吗? word设置密码在何处 ZBrush中,按了一下C键,视窗就变暗了?这是怎么了?该怎么还原? 什么情况下需要补充维生素c,像是皮肤暗黄可以补充吗? 为什么a先亮,再逐渐暗,b,c都逐渐变暗 简单的物理问提我急暗暗暗暗 A到C的平均速度与C到B 的平均速度一样 C的速度怎么算 “陈乐而不乐,酒酣而送之以壁”这句话是古代哪首名作中的? 有没有双色(红色,黑色)双面的激光打印机 打印机缺色打印机只打印红黑两色是什么原因? 有没有只有红黑两色的激光打印机!!! 佳能ts3380打印机为什么打印出红黑两种颜色? 佳能和惠普两个品牌的打印机中有没有红黑两色的喷墨打印机? 打印机字是红黑相间的 爱普生打印机只能用红黑两色 在事业单位工作,经常需要打印红头文件,有打印机支持这功能? 请问这种把照片的暗部提出,明部用一种颜色(例如红色)作为底色,整体只呈现出红黑的技术叫什么名字? ip2788打印机打彩色的打出来颜色偏红,还有点红黑相间的纹理是怎么回事?要怎么修? 打印套印是什么意思 怎样才能把股票的K线图打印得很清晰?