编写一个计算天数的程序,用户从键盘输入年月日,在控制台输出该日期是该年的第几天。
分析(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("%dn",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 sum+=num1[i]; } } else { for(int i=1;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 %dn",i,j,100-i-j); } } } }
题外话:小时后最喜欢晚上的河南卫视的打鱼晒网节目了,可以看到很多稀奇古怪好玩的,当然节目后的都市报道也是我爱看的,不过现在很少看电视了,当然,这是一个真正的打鱼晒网问题
一个渔夫从2011年1月1日开始,三天打鱼,两天晒网,日日年年,编程实现从键盘输入此后的年月日,计算该天渔夫是在打鱼还是在筛网
(1)和计算一年的某一天是该年的第几天类似,除了要计算日期是该年的第几天之外,还要计算是否是否经过了整年。
(2)像判断闰年,计算天数,都可用第一题的代码。
(3)计算从2011年1月1日起经历了多少天,然后模5,注意,结果是0和4时是在晒网,否则打渔
#include四:1000以内的素数 题目描述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 sum+=num1[i]; } } else{ for(int i=1;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("打渔"); } }
求出一千以内的所有素数
分析(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"); } }
明天开始更新十大排序



