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;
}