编写一个计算天数的程序,用户从键盘输入年月日,在控制台输出该日期是该年的第几天。
分析(1)判断闰年
(2)计算天数,可以选择使用switch语句,也可以用两个数组来存储闰年和平年每个月的天数
(3)12月份的满天数不用考虑
使用switch语句
#include
#include
int isleapyear(int year)//判断是否是闰年
{
if((year%4==0&&year%100!=0)||(year%400==0))
{
return 1;
}
return 0;
}
int main()
{
int year,month,day;
scanf("%d/%d/%d",&year,&month,&day);
int flag=isleapyear(year);
int sum=day;
switch(month-1)//计算之前月份天数
{
case 11:
sum+=30;
case 10:
sum+=31;
case 9:
sum+=30;
case 8:
sum+=31;
case 7:
sum+=31;
case 6:
sum+=30;
case 5:
sum+=31;
case 4:
sum+=30;
case 3:
sum+=31;
case 2:
if(flag)
{
sum+=29;
}
else
{
sum+=28;
}
case 1:
sum+=31;
default:
break;
}
printf("%d\n",sum);
printf("Hello world!\n");
return 0;
}
不使用switch语句
#include
int isleapyear(int year)
{
if((year%4==0&&year%100!=0)||year%400==0)
{
return 1;
}
return 0;
}
int main()
{
int num1[12]={0,31,29,31,30,31,30,31,31,30,31,30};//闰年
int num2[12]={0,31,28,31,30,31,30,31,31,30,31,30};//平年
int year,month,day;
scanf("%d/%d/%d",&year,&month,&day);
int sum=day;
if(isleapyear(year))
{
for(int i=1;i<month;i++)
{
sum+=num1[i];
}
}
else
{
for(int i=1;i<month;i++)
{
sum+=num2[i];
}
}
printf("%d",sum);
}
二:百元买百鸡
题目描述
百钱买百鸡问题,鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问鸡翁,鸡母,鸡雏各几何
分析:(1)枚举鸡翁,鸡母,鸡雏的数量
(2)注意到鸡翁不会超过(100 / 5 = )20个,鸡母不会超过(100 / 3 =)33个,这样可以减少枚举数量
//百钱买百鸡
#include
int main()
{
for(int i=0;i<20;i++)
{
for(int j=0;j<33;j++)
{
if((100-i-j)%3==0&&(i*5+j*3+(100-i-j)/3==100))
{
printf("%d %d %d\n",i,j,100-i-j);
}
}
}
}
三:打鱼晒网问题
题目描述
题外话:小时后最喜欢晚上的河南卫视的打鱼晒网节目了,可以看到很多稀奇古怪好玩的,当然节目后的都市报道也是我爱看的,不过现在很少看电视了,当然,这是一个真正的打鱼晒网问题
一个渔夫从2011年1月1日开始,三天打鱼,两天晒网,日日年年,编程实现从键盘输入此后的年月日,计算该天渔夫是在打鱼还是在筛网
(1)和计算一年的某一天是该年的第几天类似,除了要计算日期是该年的第几天之外,还要计算是否是否经过了整年。
(2)像判断闰年,计算天数,都可用第一题的代码。
(3)计算从2011年1月1日起经历了多少天,然后模5,注意,结果是0和4时是在晒网,否则打渔
#include
int isleapyear(int year)
{
if((year%4==0&&year%100!=0)||year%400==0)
{
return 1;
}
return 0;
}
int main()
{
int num1[12]={0,31,29,31,30,31,30,31,31,30,31,30};//闰年
int num2[12]={0,31,28,31,30,31,30,31,31,30,31,30};//平年
int year,month,day;
scanf("%d/%d/%d",&year,&month,&day);
int sum=day;
if(isleapyear(year)){
for(int i=1;i<month;i++){
sum+=num1[i];
}
}
else{
for(int i=1;i<month;i++){
sum+=num2[i];
}
}
for(int i=year-1;i>2011;i++)
{
if(isleapyear(i)){
sum+=366;
}
else{
sum+=365;
}
}
if(sum%5==0||sum%5==4)
{
printf("晒网");
}
else
{
printf("打渔");
}
}
四:1000以内的素数
题目描述
求出一千以内的所有素数
分析(1)求素数比较简单,这里直接写一个判断素数的函数,然后循环判断输出
代码#include
#include
int isPrime(int n)
{
for(int i=2; i<=sqrt(n); i++)
{
if(n%i==0)
return 0;
}
return 1;
}
int main()
{
int count=0;
for(int i=2; i<=1000; i++)
{
if(isPrime(i))
{
printf("%5d",i);
count++;
if(count%5==0)
printf("\n");
}
}
return 0;
}
五:输出指定大小的正方形
题目描述
编写程序,用户输入一个数a,表示正方形的边长,打印输出一个边长为a的正方形
分析(1)方法有很多,可以按坐标轴来,双重for循环
代码#include
int main()
{
int a;
scanf("%d",&a);
for(int i=0;i<=a;i++)//y轴
{
for(int j=0;j<=a;j++)//x轴
{
if(i==0||j==0||i==a||j==a)
{
printf("#");
}
else
{
printf(" ");
}
}
printf("\n");
}
}
总结
明天开始更新十大排序
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)