还剩6页未读,继续阅读
文本内容:
第章项目式案例6【例
6.1]编程序实现输入若干个数不超过100个数,先输入数据个数,求出这些数的标准差并输出编程思路1首先输入一批数存入数组中;2求出这些数的和;3求出这些数的平均值;4求出这些数的离均差平方和;5求出这些数的标准差源程序♦include stdio.h#include math.h intmainvoid{int n,i;double a
[100],sum,avg,var,sd;”请输入数据的个数;,printf”scanf%d n;sum=0;请输入%个数,printf d\n”n;fori=0;in;i++{scanf a[i];/*累加求和*/sum=sum+a[i];/*求平均值*/avg=sum/n;var=0;for i=0;in;i++/*求离均差平方和*/var=var+a[i]-avg*a[i]-avg;/*求标准差*/sd=sqrt var/n;标准差二%,printf lf\n”sd;return0;【例
6.2]编程序实现输入任意一个日期的年、月、日的值,求出从这一年的1月1日到这一天总共有多少天编程思路1首先求出从这一年的第一天到上月末的总天数,然后加上该日期中的日数即可2而到上月末的天数,可以通过循环累加的方式求得即将从一月份到上个月的天数累加求和源程序♦include stdio.h intmainvoid{int y,m,d,days,i;/*每个月的天数*/int mon
[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};”请输入一个年、月、日”;printf scanfu%d%d%dn y,m,d;fify%4==0y%100!=0I|y%400==0/★若是闰年则修正二月份的天数*/mon
[2]=29;days=0;for i=l;i=m-l;i++/*累力至月的天数*/days=days+mon[i];01U m-1/★累加日期中的日数*/days=days+d;从年初到这一天的总天数要,printf d\n”days;return0;}在该程序中,由于事先已将每个月的天数存入数组中,故可以直接对数组元素累加求和【例
6.3]编程序实现输入任意一个日期的年、月、日的值,求出从公元1年1月1日到这一天总共有多少天源程序♦include stdio.h intmainvoid{int y,m d days;z zint n,i;/*每个月的天数*/int mon
[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};”请输入一个年、月、日;printf”%为,scanf”d%dd”y,m,d;/*若是闰年则修正二月份的天数*/mon
[2]=29;ify%4==0y%100!=0||y%400==0/*统计到上一年的闰年个数*/n=y-l/4-y-l/100+y-l/400;/*到上一年年末的总天数*/days=y-1*365+n;for i=l;i=m-l;i++/*累加到月的天数*/days=days+mon[i];1m-1/*累加日期中的日数*/days=days+d;从公元年月日到这一天的总天数,printf11=%d\n”days;return0;【例
6.4】编程序实现输入任意一个日期的年、月、日的值,求出从公元1年1月1日到这一天总共有多少天以及这一天是星期几源程序♦include stdio.h intmainvoid{int y,m,d days;int n,i,w;z/*每个月的天数*/”请输入一int mon
[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};printf个年、月、日;”scanfn%d%d%dn y,m,d;zify%4==0y%100!=0||y%400==0/★若是闰年则修正二月份的天数*/mon
[2]=29;/*统计到上一年的闰年个数*/n=y-l/4-y-l/100+y-1/400;/文到上一年年末的总天数*/days=y-l*365+n;fori=l;i=m-l;i++//累加到月的天数*/days=days+mon[i];1/*累加日期中的日数大/days=days+d;”从公元年月日到这一天的总天数目八,printf111n”days;w=days%7;这一天是;printf switchw星期日\;{case0:printf n”break;星期一\case1:printf n”/break;“星期二case2:printf\n;break;星期三case3:printf\n;break;“星期四;case4:printf\n”break;“星期五case5:printf\n”/break;星期六case6:printf\n”/break;}return0;【例
6.5]编程序实现输入一个年份、月份,输出该月份的公历日历编程思路1打印某个月的日历,就是将这个月的每一天按星期值依次排列2首先确定这个月的1日是星期几3依次在对应的星期位置打印这个月的每一天4每当打印完一周的最后一天换行,打印完一个月也需要换行对于复杂一点程序,可以采用逐步构造法即首先写出实现部分功能的程序,待调试通过、运行正确之后,再逐步完善,直至最终得到实现完整功能的程序源程序一(不考虑换行的程序):利用前面的程序,可以求出某年某月的天数以及这个月1日的星期值♦include stdio.h intmainvoid{int y,m days;zint n,i w;z/*每个月的天数*/int mon
[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};请输入一个年份、月份”;printf%,scanf”d%d”y,m;/*若是闰年,则修正二月份的天数*/mon
[2]=29;ify%4==0y%100!=0||y%400==0/*统计到上一年的闰年个数*/n=y-l/4-y-l/100+y-l/400;/*到上一年年末的总天数*/days=y-1*365+n;for i=l;i=m-l;i++/*累加到月的天数*/days=days+mon[i];1m-l);\n/*累加上月的第天*/days=days+l;m1w=days%7;printf printf日一二三四五六;printf n\nfori=l;i=w;i++/*在日之前打印个空格*/printfn;14*w为月的天数十/for i=l;i=mon[m];i++/*mon[m]m/*每天占个字符宽度*/printf n%4dn i;4zreturn0;源程序二对于每周的换行,可以通过每行输出7个数来控制而对于首行,则需要将1日之前空出的天数加上作为修正♦include stdio.h intmainvoid{int y,m days;f/*每个月的天数*/int mon
[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};”请输入一个年份、月份;printf”scanfn%d%dn,y,m;/*若是闰年则修正二月份的天数*/mon
[2]=29;ify%4==0y%100!=0||y%400==0/*统计到上一年的闰年个数十/n=y-l/4-y-1/100+y-1/400;/文到上一年年末的总天数*/days=y-1*365+n;for i=l;i=m-l;i++/*累加至!月的天数*/days=days+mon[i];1I m-1/*累加上月的第天*/days=days+l;m1\nn;w=days%7;printf printf日一二三四五六;printf H\nfori=l;i=w;i++/*在日之前打印个空格*/printf n;14*w为月的天数*//★每天占个字符宽度for i=l;i=mon[m];i++/*mon[m]m{printf n%4d%i;4*//*每行打印个数换行*/ifi+w%7==07printf u\nu;/*打印完个月换行*/printf n\nn;1return0;在上面的程序中,如果这个月的最后一天恰好是星期六,将会导致连续两次换行因此,在每月换行时,应该做一下判断如果刚刚进行了每周的换行,则不必再做每月的换行修正之后的源程序三♦include stdio.h intmainvoid{int y,m days;zint n,i,w;/*每个月的天数*/int mon
[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};”请输入一个年份、月份;printf”scanf%d%d,y,m;/*若是闰年则修正二月份的天数*/mon
[2]=29;ify%4==0y%100!=0||y%400==0/*统计到上一年的闰年个数*/n=y-l/4-y-1/100+y-1/400;/*到上一年年末的总天数*/days=y-1*365+n;for i=l;i=m-l;i++/*累加到月的天数*/days=days+mon[i];1m-1/*累加上月的第天*/days=days+l;m1/*计算星期值*/w=days%7;printf printfprintf(n日一二三四五六\n);\n;for i=l;i=w;i++/*在日之前打印个空格*/printf n;14*w为月的天数*//*每天占个字符宽度*/for i=l;i=mon[m];i++/*mon[m]m{printf%4dH i;4f/★每行打印个数换行*/ifi+w%7==07printfu\nH;}/*如果该月最后一天不是周六*/ifmon[m]+w%7!=0/*打印完个月换行*/printf n\nn;1return0;【例
6.6】编程序实现输入一个年份,输出这一年的公历日历编程思路1欲打印某一年全年的日历,可以在打印某个月日历的基础上,利用循环控制月份从1递增到12o2对于每一个月,确定该月的1日是星期几3然后依次在对应的星期位置打印这个月的每一天4每当打印完一周的最后一天换行,打印完一个月也需要换行源程序♦include stdio.h intmainvoid{int y,days;intn,m,i,w;/*每个月的天数*/请输入一个int mon
[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};printf年份”;%,scanf dy;ify%4==0y%100!=0||y%400==0/*若是闰年则修正二月份的天数十/mon
[2]=29;/*统计到上一年的闰年个数*/n=y-l/4-y-l/100+y-l/400;/*到上一年年末的总天数*/days=y-l*365+n;/*累加上月的第天*/days=days+l;11年日历,printf%d\n y;form=l;m=12;m++/*计算星期值文/{w=days%7;会月,printf n d\n”m;日一二三四五六;printf============================\n;printf n\n for i=l;i=w;i++/*在日之前打印个空格*/printf n;14*w为月的天数*/fori=l;i=mon[m];i++/*mon[m]m/*每天占个字符宽度文/{printf n%4d\i;4/*每行打印个数换行*/ifi+w%7==07printf u\nn;/*如果该月最后一天不是周六*/ifmon[m]+w%7!=0/*打印完个月换行*/printf H\nH;1/*累加上月的天数*/days=days+mon[m];m return0;}【例
6.7]编程序实现将十进制整数转化为n进制n10整数编程思路1根据进制转化的原理,采用除以n取余数的方法进行整数部分的转化2依次将所得余数存入到数组d中,每个数组元素存储一个余数3最后逆序输出每一位余数,即得转化结果源程序♦include stdio.h intmainvoid{unsigned long x;unsigned n,d
[32];int i;请输入一个十进制正整数printf”;scanf H%lu,x;”请输入进制的值printf nn10;,scanfn;i=0;while x0/*除以取余数存入数组中*/{d[i]=x%n;nd/*除以取商*/;x=x/n;n i++/*减去多加的i--;1*/转化之后的结果printf”;/*逆序输出数组中的余数*/while i=0d{printfn%u\d[i];一;i}return0;【例
6.81编程序实现将十进制小数转化为n进制n10小数编程思路1根据进制转化的原理,采用乘以n取整数的方法进行小数部分的转化2依次将所得整数存入到数组d中,每个数组元素存储一个整数3最后正序输出每一位整数,即得转化结果源程序♦include stdio.h intmainvoid{double x;unsigned n,d
[32];int i,j;”请输入一个十进制纯小数”;printf,scanf%lf”x;”请输入进制的值;,printf nn10”scanfn;i=0;while x0/*乘以{x=x*n;n*//*取整数部分存入数组中*/d[i]=intx;d/*减去整数部分,保留小数部分大/x=x-d[i];/*若转化位数达到位,则中止转化*/if i=3132break;;i++}转化之后的结果:“;printf/*输出和小数点*/printf n
0.n;0/*正序输出数组中的每位数*/for j=0;j=i-l;j++d printf,%u,,,d[j];return0;【例
6.9]编程序实现将十进制数转化为n进制n10数编程思路1首先将输入的十进制数分解为整数部分与小数部分2然后分别将整数部分与小数部分转化为n进制数3最后输出转化结果源程序♦include stdio.h intmainvoid{double x,xl;long xO;unsigned n,d
[32];int ij;z”请输入一个十进制实数:;printfscanf%lfn x;z请输入进制的值;%,printf nn10”scanfu n;/*整数部分*/x0=longx;/*小数部分*/xl=x-x0;i=0;while x00/*除以取余数存入数组中*//*除以取商*/;{d[i]=xO%n;N dxO=xO/n;N i++/火减去多加的i—;1*/转化之后的结果:;printf/*逆序输出数组中的余数*/while i=0d一;{printf n%u,\d[i];i}i=0;whilexl0/*乘以{xl=xl*n;N*//*取整数部分存入数组中*/d[i]=intxl;d/*减去整数部分,保留小数部分*/xl=xl-d[i];/★若转化位数达到位,则中止转化文/if i=3132break;;i++}/*输出小数点*/printf H.n;/*正序输出数组中的每位数*/for j=0;j=i-l;j++d printfn%un d[j];zreturn0;。
个人认证
优秀文档
获得点赞 0