2 ihavenofish ihavenofish 于 2016.03.22 13:09 提问

c++初学者求解一道结构体,函数题

声明一个结构体类型Date,包括年月日,即一个日期类型的结构体。

设计一个程序,完成以下对日期的操作,包括以下函数:

Date AddDay(Date d, int days):对日期增加days天数,然后返回得到的日期

Date AddMonth(Date d, int months):对日期增加months月数,然后返回得到的日期

Date AddYear(Date d, int years):对日期增加years年数,然后返回得到的日期

int Subtract(Date d1, Date d2):用d1-d2,计算它们相距的天数,作为函数值返回

GetWeekDay:输入参数为Date类型,返回该日期是星期几。星期几最好用枚举表示,也就是返回一个枚举类型的值。

程序输出相应计算结果。

第四,五个函数不会写,而且函数返回值不止一个时不知道怎么返回。

6个回答

enpterexpress
enpterexpress   Rxr 2016.03.22 13:27

返回多个值的时候可以写成一个数组或其他类型的集合返回,如果是迭代函数的话,可以用ref

iloveove
iloveove   2016.03.22 13:46

返回Date类型的结构体就可以了

lanshanxunmeng
lanshanxunmeng   2016.03.22 13:49

c++可以使用引用进行返回值,以值结果的形式,比如传递int a,可以利用指针方式int *value,或者引用int &value。

Ivan_zgj
Ivan_zgj   2016.03.22 13:58

函数需要有多个输出时,如果这多个具有关联性,可以选择用一个结构体将它们组织起来,就好像你的Date结构体那样。你也可以选择在函数的参数里使用指针作为输出参数,例如 sample(int input, int *output) 这样。

qq423399099
qq423399099   Ds   Rxr 2016.03.22 14:32

仅供参考

 #include<iostream>
using namespace std;

struct Date 
{
 int year;
 int month;
 int day;
};

int GetAbsDays(Date  x)
{
 int i;
 int month_day[] = {31,28,31,30,31,30,31,31,30,31,30,31};
 int year = x.year-1;  // 因为欲求距离1年1月1日的距离
 int days = year * 365 + year/4 - year/100 + year/400;  //求得之前闰年的数量并在天数上进行想加
 if(x.year%4==0 && x.year%100!=0 || x.year%400==0) month_day[1]++; //当前年为闰年,二月加 1
 for(i=0; i<x.month-1; i++)
  days += month_day[i];
 days += x.day-1;  //今天应该是不算如天数计数
 return days;
}

int Subtract(Date  a, Date  b)
{
 return GetAbsDays(b) - GetAbsDays(a);
}

int GetWeekDay(Date date)  
{  
    int iWeek = 0;
    int iYear = date.year;
    int iMonth = date.month;
    int iDay = date.day;
    unsigned int y = 0, c = 0, m = 0, d = 0;  
    if ( iMonth == 1 || iMonth == 2 )  
    {  
        c = ( iYear - 1 ) / 100;  
        y = ( iYear - 1 ) % 100;  
        m = iMonth + 12;  
        d = iDay;  
    }  
    else  
    {  
        c = iYear / 100;  
        y = iYear % 100;  
        m = iMonth;  
        d = iDay;  
    }  

    iWeek = y + y / 4 + c / 4 - 2 * c + 26 * ( m + 1 ) / 10 + d - 1;    //蔡勒公式  
    iWeek = iWeek >= 0 ? ( iWeek % 7 ) : ( iWeek % 7 + 7 );    //iWeek为负时取模  
    return iWeek;  
}  

enum WEEKDAY{sun,mon,tue,wed,thu,fri,sat}week_day;

int main(int argc, char* argv[])
{
 Date  a = {2000,5,18};
 Date  b = {2016,3,13};
 int n = Subtract(a,b);
 printf("%d\n", n);

 int m = GetWeekDay(b);
 cout << m << endl;
 system("pause");
}
lvguangjun0111
lvguangjun0111   2016.03.22 15:20

返回多个值可以用C++里面的pair,如part

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
acm的建议
好久没有光顾Baidu空间了,看到不少ACM爱好者加我,拜读了他们的文章,回想起自己当年的激情,很羡慕你们,真的!     空间荒废很久了,上一篇日志已经是2010年的事了,估计以后也很少打理了,转我自己人人上的一篇总结文来结束自己的ACM生涯,来结束我曾经热爱的Baidu空间。     http://blog.renren.com/blog/2
初学ACM 感悟与心得
正式接触ACM快
马克思手稿中的数学题
马克思手稿中的数学题 马克思手稿中有一道趣味数学问题:有30个人,其中有男人、女人和小孩,在一家饭馆吃饭花了50先令;每个男人花3先令,每个女人花2先令,每个小孩花1先令;问男人、女人和小孩各有几人? 自己的写法   #include main() { int i,j,k; for (i=1;i<=28;i++) for (j=1;j<=28;j++) for
C语言 每天做一道编程题
好久没做编程题了,算法和数据结构该忘的也都忘干净了,今天开始至少每天做道题,然后写写tips吧,各种都可以。 3.13 写了两道简单的PAT:3n+1(卡拉兹猜想)和将数字转换成拼音       主要是体会一下输入字符串的三种方式:       scanf("%s",s);//s是数组名,或者是指针。       gets(s);//可以包括空格,而scanf不可以包括空格      
c语言实例100题
c语言实例100题,适合初学者,包含函数,结构体,指针。链表等实例
这是一道c语言的试题
对于初学者学C语言,是非常好的一道题目的
2017/3/24 每天都刷刷ACM练练脑子~ 今天刷了一道debug了很久的题...最后发现..哎还是怪自己太马虎
喷水装置(二) 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n(n<=10000)个点状的喷水装置,每个喷水装置i喷水的效果是让以它为中心半径为Ri的圆都被润湿。请在给出的喷水装置中选择尽量少的喷水装置,把整个草坪全部润湿。 输入第一行输入一个正整数N表示共有n次测
随机产生四则计算选择题题,并随机产生答案
1.随机产生10以内的两个整数以及运算符(算数运算符)组成一个表达式(注:不允许产生运算符是除号并且除数为0的题目); 2.提供A B C D四个选项供用户进行选择答案,答案里只有一个是正确的而且位置不固定,其他三个答案随机产生100以内的整数(需要判定四个答案不允许出现重复的); 3.每答一道题提示用户回答是否正确,并提示是否继续答题如果选择"y"就继续答题; 4.最后需要统计用户的答题数量,答对数量,答错数量,以即正确率百分比 (百分比根据用户答题数计算); 5.奖品 满10道题有奖品发送 正确率达到50% 一等奖 正确率达到80% 二等奖 正确率达到100% 三等奖 例如: 10+3= A:34 B:3 C: 13 D :-3 请选择答案: 如果带对了提示答对了,如果答错了提示答错了 提示是否继续答题?继续输入Y 7*3= A:21 B:30 C:43 D:55 请选择答案:
C语言结构体部分--知识点及试题
C语言结构体部分--知识点及试题 结构体是一种重要的数据结构,在实践中有广泛的应用。计算机二级考试大纲对结构体部分的要求为:(1)结构体类型数据的定义方法和引用方法。(2)用指针和结构体构成链表,单向链表的建立、输出、删除与插入。下面就这些基本知识点和有关试题进行总结和解析,希望对考试有所帮助。一、基础知识(1)       结构体的定义        struct 结构体名 
C语言复习——结构体编程练习
编程实现输入5个学生的学号、计算他们的期中和期末成绩,然后计算其平均成绩,并输出成绩表 /*编程实现输入5个学生的学号、计算他们的期中成绩和期末成绩,然后计算其平均值*/ #include int main() { struct stud_str { char num[10]; float score_mid; float score_final; }stu[5]; f