注册 登录
编程论坛 C++教室

[求助]初学者求助

bluesky1911 发布于 2007-05-20 15:02, 545 次点击

初学c++,老师布置了几个题,想请教一下,谢谢!
要求按照主函数调用子函数的形式编制

1。编写一个主函数,从键盘上输入任意两个自然数,调用一个子函数输出两个自然数中的所有素数,返回主函数输出所有素数之和。

2。编写主函数,提示用户通过键盘输入一个3位整数,判断是否为有效输入,调用一个子函数,取出该整数的各个位数并重新排列,输出可能的最大整数和最小整数。
参照以下一次运行的测试数据及其结果:
Input a four-digit integer: 10
Sorry, your input is not valid
Input a four-digit integer: 132
Possible max integer: 321
Possible min integer: 123

3。打印输出某年的年历。日历的编排是每400年一个大循环周期,即今年的月、日、星期几和400年前的完全一样。现行天文历法根据天体运行规律,取每年365.2425天。这样,每400年共有365.2425×400=146097天。如果以365天作为一年,每400年就少了0.2425×400=97天。这97天要靠设置闰年(每年366)天来凑齐,所以,每400年要设置97个闰年。
编程思路:按照以上背景知识可得判断闰年得规律:某年年份如果能被4整除但不能被100整除,或者能被400整除则是闰年。由此规则可推得计算万年历的公式:
S=X-1+(X-1)/4-(X-1)/100+(x-1)/400+C 上式中:X为公元年数(如2003年);C 为从元旦起,到要算的那天总数(如2003年3月23日,C=31+28+23=82)。S/7余数是星期几。

才刚开始学没多久,感觉用c++编程的思想还没有建立,所以希望高手能解答一下(虽然问题可能很基础),在此先谢过了~

4 回复
#2
yushui2007-05-20 15:52

自己写 基本就是函数调用 很好办的 不会就边看书边写

#3
bluesky19112007-05-20 16:11
那第三个题要怎么才能输出成下面这样?

1月 日 一 二 三 四 五 六
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
#4
kisscjy2007-05-20 21:23

觉得第3题挺有趣的~~
所以做了一下,
代码:

#include<iostream>
using namespace std;

int isleapyear(int year)
{
int i=year;
if((i%4==0&&i%100!=0)||(i%400==0))
{
return 1;
}
else return 0;
}

void main()
{
int year,month,leapyear,k;
int day[13]={0,31,0,31,30,31,30,31,31,30,31,30,31};


cout<<"输入年份:\t";
cin>>year;
cout<<"输入月份:\t";
cin>>month;
cout<<endl;

leapyear=isleapyear(year);
if(leapyear==1) day[2]=29;
else day[2]=28;

int sum;
sum=year-1+(year-1)/4-(year-1)/100+(year-1)/400;
for(int i=1;i<month;i++)
{
sum=sum+day[i];
}
sum++;
k=sum%7; //k为用户月份1号的星期几;

cout<<"日\t一\t二\t三\t四\t五\t六\n"; //先用空格填充1号前的空白
for(int j=1;j<=k;j++)
{
cout<<" "<<'\t';
}
for(int y=1;y<=day[month];y++) //之后输出第一行
{
cout<<y<<'\t';
if(y==7-k) break;
}
cout<<endl;

int end=1; //接着输出其余的行,每输出7个就换行
for(y=y+1;y<=day[month];y++)
{
cout<<y<<'\t';
end++;
if(end==8)
{
cout<<endl;
end=1;
}
}
cout<<endl;
}

#5
孤魂居士2007-05-23 02:38
4楼的哥哥慢强悍的
1