C语言/C++常见习题问答集锦(二十六)

C语言/C++常见习题问答集锦(二十六)

程序之美

在这里插入图片描述
1、定义一个日期类Date,该类对象存放一个日期

#include<stdio.h>
#include<iostream.h>
#include "windows.h"
class Date{
private:
    int year;
    int month;
    int day;
    int IsCurrentDate(int Year,int Month,int Day);//是不是正确的日期。
public:
    Date();
    Date(int y,int m,int d);
    Date(const Date &other);
    void GetDate();
    int GetYear();
    int GetMonth();
    int GetDay();
    void SetDate(int y,int m,int d);
    void AddOneDay();
 
};
Date::Date(){//不赋值时,默认当前日期
    SYSTEMTIME ct;
    GetLocalTime(&ct);//如果用GetSystemTime(&ct);那么获取的是格林尼治标准时间
    year=ct.wYear;
    month=ct.wMonth;
    day=ct.wDay;
}
Date::Date(int y,int m,int d):year(y),month(m),day(d){
    IsCurrentDate(y,m,d);
}
Date::Date(const Date &other){
    year=other.year;
    month=other.month;
    day=other.day;
}
void Date::GetDate(){
    cout<<year<<"年"<<month<<"月"<<day<<"日"<<endl;
}
int Date::GetYear(){
    return year;
}
int Date::GetMonth(){
    return month;
}
int Date::GetDay(){
    return day;
}
void Date::SetDate(int y,int m,int d){
    year=y;
    month=m;
    day=d;
}
void Date::AddOneDay(){
    int sign=0;
    if ((year%4==0&&year%100!=0)||year%400==0)
    {
        sign =1;
    }
        switch (month)
        {
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
             if(day<31){
                    day=day+1;
                }else{
                    day=1;
                    month=month+1;
                }
            break;
        case 4:
        case 6:
        case 9:
        case 11:
            if(day<30){
                    day=day+1;
                }else{
                    day=1;
                    month=month+1;
                }
            break;
        case 2:
            if (sign ==1)
                if(day<29){
                    day=day+1;
                }else{
                    day=1;
                    month=3;
                }
            else
            if(day<28){
                    day=day+1;
                }else{
                    day=1;
                    month=3;
                }
            break;
        case 12:
            if(day<30){
                    day=day+1;
                }else{
                    day=1;
                    month=1;
                    year=year+1;
                }
                break;
        default:
            break;
        }
}
 
int Date::IsCurrentDate(int year,int month,int day){
        int sign=0,dayvalid;
    if ((year%4==0&&year%100!=0)||year%400==0)
    {
        sign =1;
    }
    if (month>=1&&month<=12)
    {
        switch (month)
        {
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
            dayvalid = 31;
            break;
        case 4:
        case 6:
        case 9:
        case 11:
            dayvalid = 30;
            break;
        case 2:
            if (sign ==1)
                dayvalid = 29;
            else
                dayvalid = 28;
            break;
        default:
            break;
        }
        if (!(day >0&&day <=dayvalid))
        {
            cout<<"日期格式错误"<<endl;
            return 2;
        }
    }
    else
    {
        cout<<"月份格式错误"<<endl;
        return 1;
    }
 
    cout<<"日期格式正确"<<endl;
    return 0;
}
int main(){
    Date d;
    d.AddOneDay();
    d.GetDate();
    Date dt(2014,2,28);
    dt.AddOneDay();
    dt.GetDate();
    return 0;
}

在这里插入图片描述

2、定义整形数组a和指针变量p,让指针变量p指向数组a。使用指针变量p输入数组a各元素的值,并求所有大于0的元素的和。

#include <stdio.h>
int main()
{
	int a[100], *p, m, sum = 0;
	p = a;
	printf("请输入100个数:\n");
	for (int i=0;i<100;i++){
		scanf("%d",&m);
		if(m > 0)
		{
			sum += m;
		}
	}
	printf("所有大于0的元素之和:%d\n",sum);

	return 0;

}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五一编程

程序之路有我与你同行

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值