第五章
第5章编程题简单-1 星座
#include<stdio.h> #include<stdlib.h> //计算星座 // //编写程序输入月份和日期,给出对应的星座。下面是星座计算表。 //3.21-4.20 白羊 4.21-5.20 金牛 5.21-6.20 双子 //6.21-7.22 巨蟹 7.23-8.22 狮子 8.23-9.22 处女 //9.23-10.22 天秤 10.23-11.22 天蝎 11.23-12.22 人马 //12.23-1.20 摩羯 1.21-2.20 宝瓶 2.21-3.20 双鱼 int main(){ int m=0,d=0,t=0; printf("计算星座,输入月份和日期\n"); scanf("%d%d",&m,&d); //输入月份和日期 printf("%d月%日的对应星座为",m,d); exchange(m,d); return 0; } void exchange(int m,int d){ int t=0; t=m<7?21:23; //7月前为21,7月后为23 if(d>=t) m++; // 在一个月的t号之后月份加一 switch(m){ case 2:printf("水瓶");break; case 3:printf("双鱼");break; case 4:printf("白羊");break; case 5:printf("金牛");break; case 6:printf("双子");break; case 7:printf("巨蟹");break; case 8:printf("狮子");break; case 9:printf("处女");break; case 10:printf("天秤");break; case 11:printf("天蝎");break; case 12:printf("人马");break; default:printf("摩羯"); //13月,与1月相同处理 } return 0; }
第5章编程题简单-2 九九乘法表
#include<stdio.h> int main(){ int i,j; for(i=1;i<=9;i++){ for(j=1;j<=i;j++) printf("%d*%d=%d ",i,j,i*j); printf("\n"); } return 0; }
第5章编程题简单-3 近似值
#include<stdio.h> #include<stdlib.h> //近似值 //编写程序利用公式计算下面公式的近似值,直到括号中最后一项的绝对值小于10-6次方为止 int main(){ int s=1; double pi=0,n=1,t=1; while (fabs(t)>1e-6) pi=pi+t, n=n+2, s=-s, t=s/n; pi=pi*4; printf("%lf\n",pi); return 0; }
第5章编程题简单-4 找出100-200之间不能被3整除的数
#include<stdio.h> //找出100-200之间的不能被3整除的数 int main(){ int i; for(i=100;i<=200;i++){ if(i%3!=0){ printf("%d ",i); } } return 0; }
第5章编程题简单-5 找出100-200之间的素数
#include<stdio.h> #include<math.h> //求100-200之间的全部素数 int main(){ int n,k,i,m=0; for(n=101;n<=200;n=n+2){ k=sqrt(n); for(i=2;i<=k;i++) if(n%i==0) break; if(i>=k+1){ printf("%d ",n); m=m+1; } if(m%10==0) printf("\n"); } printf("\n"); return 0; }
第5章编程题简单-6 韩信点兵
#include<stdio.h> #include<stdlib.h> //韩信点兵 //韩信有一队兵,他想知道有多少人,便让士兵排队报数: //按从1至5报数,最末一个士兵报的数为1;按从1至6报数,最末一个士兵报的数为5; //按从1至7报数,最末一个士兵报的数为4;最后再按从1至11报数,最末一个士兵报的数为10 //编程求韩信至少有多少兵? int main() { int i; for(i=1;; i++) { if(i%5==1&&i%6==5&&i%7==4&&i%11==10) { printf("%d",i); break; } } }
第5章编程题中等-1 素数计算
#include<stdio.h> #include<stdlib.h> #include<math.h> //素数计算 //编写程序计算某区间内素数的个数cnt,并按所求素数的值从大到小的顺序, //再计算其间隔减、加之和,即第1个素数-第2个素数+第3个素数-第4个素数+第5个素数……的值sum int main(){ int s=0,cnt=0,f=1,i,j,a,b; scanf("%d %d",&a,&b); for(i=b;i>=a;i--){ for(j=2;j<=sqrt(i);j++) if(i%j==0) break; if(j>sqrt(i)){ cnt++; s=s+f*i; f=-f; } } printf("%d %d",cnt,s); return 0; }
第5章编程题中等-2 求两数的最大公约数和最小公倍数
#include<stdio.h> #include<stdlib.h> //求两数的最大公约数和最小公倍数 //输入两个正整数m和n,求其最大公约数和最小公倍数 int main(){ int p,r,n,m,temp; scanf("%d %d",&n,&m); if (n<m) { temp=n; n=m; m=temp; } p=n*m; while(m!=0) { r=n%m; n=m; m=r; } printf("最大公约数:%d\n",n); printf("最小公倍数:%d",p/n); return 0; }
第5章编程题中等-3 计算球在第10次落地时,共经过多少米,第10次反弹多高
#include<stdio.h> #include<stdlib.h> //计算球在第10次落地时,共经过多少米,第10次反弹多高 //一个球从100m高度自由落下,每次落地后反跳回原高度的一半,再落下,再反弹 //求它在第10次落地时,共经过多少米,第10次反弹多高 int main(){ double sn=100,hn=sn/2; int n; for (n=2; n <=10; n++) { sn=sn+2*hn; hn=hn/2; } printf("第10次落地时共经过%.6lf米\n",sn); printf("第10次反弹%.6lf米\n",hn); return 0; }
第5章编程题中等-4 计算选秀选手的最后得分
#include<stdio.h> #include<stdlib.h> //计算选秀选手的最后得分 //在选秀节目中有10个评委为参赛选手打分,分数为1到100分,选手最后的得分为去掉一个最高分和去掉一个最低分后其余8个分数的平均分 //编写程序,输入10个分数,输出选手的最后得分 int main(){ int i=1,x,min=100,max=0,s=0; while(i<=10){ scanf("%d",&x); min=x<min?x:min; max=x>max?x:max; s=s+x; i++; } printf("%.2lf",(s-min-max)/8.0); }
第5章编程题中等-5 马克思鸡兔同笼
#include<stdio.h> #include<stdlib.h> //趣味数学题 //马克思手稿中有一道趣味数学题:有30个人,其中有男人、女人和小孩,在一家饭馆里吃饭共花了50先令,每个男人各花3先令,每个女人各花2先令,每个小孩各花1先令 //问男人、女人和小孩各有几人?输出所有的可能结果 int main(){ int man,woman; for(man=1; man <=17; man++) for(woman=1; woman <=25; woman++) { if(50 == man*3 + woman*2 +(30-man-woman) ) printf("man:%d,woman:%d,child:%d\n",man,woman,30-man-woman); } }
第5章编程题较难-1 三天打鱼两天晒网
#include<stdio.h> #include<stdlib.h> int main(){ int y,m,d,days=0; scanf("%d/%d/%d",&y,&m,&d); days=365*(y-2000);//计算整年的天数 int i=0; for (i=2000;i <y;i++) //修正闰年的366天 if((i%400==0)||((i%100!=0)&&(i%4==0))) days++; for (i=1;i <m;i++){ //计算整月的天数 switch (i){ case 1: case 3: case 5: case 7: case 8: case 10: case 12: days=days+31;break; case 4: case 6: case 9: case 11: days=days+30;break; case 2: days=days+28; if((y%400==0)||((y%100!=0)&&(y%4==0))) days++; break; } } days=days+d; //计算当月已经过去的天数 if (days%5==1||days%5==2||days%5==3) printf("fishing\n"); else printf("sleeping\n"); return 0; }
第5章编程题较难-2 捕鱼
#include<stdio.h> #include<stdlib.h> //捕鱼 //A、B、C、D、E五个人在某天夜里合伙去捕鱼,到第二天凌晨时都疲惫不堪,于是各自找地方睡觉 //到了早上,A第一个醒来,他将鱼分为五份,把多余的一条鱼扔掉,拿走自己的一份 //B第二个醒来,也将鱼分为五份,把多余的一条鱼扔掉,拿走自己的一份 //C、D、E依次醒来,也按同样的方法拿走鱼。编写程序求他们合伙至少捕了多少条鱼? int main(){ int s1,s2,s3,s4,s5; for (s5=16;;s5=s5+5){ int cnt=0; s4=(s5-1)*4/5; if ((s4-1)%5==0) { s3=(s4-1)*4/5; cnt++; } else continue; if ((s3-1)%5==0){ s2=(s3-1)*4/5; cnt++; } else continue; if ((s2-1)%5==0) { s1=(s2-1)*4/5; cnt++; } else continue; if ((s1-1)%5==0) { cnt++; } else continue; if (cnt==4) { printf("%d\n",s5); break; } } return 0; }
第5章编程题较难-3 两面族
#include<stdio.h> #include<stdlib.h> //两面族 //两面族是荒岛上的一个新民族,他们的特点是说话真一句假一句且真假交替 //如果第一句为真,则第二句是假的;如果第一句为假的,则第二句就是真的,但是第一句是真是假没有规律。迷语博士遇到三个人,知道他们分别来自三个不同的民族:诚实族、说谎族和两面族 //三人并肩站在博士前面,博士问左边的人:“中间的人是什么族的?”,左边的人回答:“诚实族的”。博士问中间的人:“你是什么族的?”,中间的人回答:“两面族的”。博士问右边的人:“中间的人究竟是什么族的?”,右边的人回答:“说谎族的” //编写程序判断这三个人是哪个民族的? int main(){ int s1,s2,s3,flag=0;//0-诚实族、1-说谎族和2-两面族 for (s1=0;s1<=2;s1++){ for (s2=0;s2 <=2;s2++){ for (s3=0;s3 <=2;s3++){ int ss1=s1,ss2=s2,ss3=s3; if (ss1==0) ss2=0; if ((ss1==1)&&(ss2==0)) ss3=1; if (ss3==0) ss2=1; if(ss1!=ss2&&ss2!=ss3&&ss1!=ss3){ printf("%d %d %d",ss1,ss2,ss3); flag=1; break; } } if (flag==1) break; } if (flag==1) break; } return 0; }
第5章编程题较难-4 SIN函数曲线(未完成)
#include<stdio.h> #include<stdlib.h> //SIN函数曲线 //编写程序在屏幕上打印如下的SIN函数曲线 int main(){ printf("**********************************************************\n"); int i=0; for (i=0;i <=330;i=i+15){ double t=sin(2*3.1415926*i/360); printf("sin(%3d)=%+.4lf",i,t); if (t>0){ for (i=0;i <24;i++) printf(" "); printf("*"); for (i=0;i <t*16;i++) printf(" "); printf("*"); } if (t <0){ for (i=0;i <24+t*16;i++) printf(" "); printf("*"); for (i=0;i <-t*16-2;i++) printf(" "); printf("*"); } if (t==0) { for (i=0;i <24;i++) printf(" "); printf("*"); } printf("\n"); } return 0; }