实验四答案资料_第1页
实验四答案资料_第2页
实验四答案资料_第3页
实验四答案资料_第4页
实验四答案资料_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

FILENAME实验四答案答案PAGEPAGE5实验四选择结构程序设计答案编程练习1:简单if语句的用法编写并调试程序:从键盘输入一个任意大小的实数x,如果满足如下条件:-29.5≤x≤29.5则输出x及其绝对值。(以simple_if.c文件名保存)源程序:#include<stdio.h>#include<math.h>voidmain(){doublex;printf("请输入一个任意大小的实数x\n");scanf("%lf",&x);if(x>=-29.5&&x<=29.5)printf("x=%lf,|x|=%lf\n",x,fabs(x));}编程练习2:if-else语句的用法修改练习1的程序,使得x满足-29.5≤x≤29.5时输出x及其绝对值,否则只输出x。(以if_else.c文件名保存)源程序:#include<stdio.h>#include<math.h>voidmain(){doublex;printf("请输入一个任意大小的实数x\n");scanf("%lf",&x);if((x>=-29.5)&&(x<=29.5))printf("x=%lf,|x|=%lf\n",x,fabs(x));elseprintf("x=%lf\n",x);}编程练习3:if-elseif语句的用法编写一个能够进行加减法运算的程序,要求:从键盘任意输入两个实数,然后输入一个运算符,当运算符为“+”时对两个数进行加法运算,为“-”时对两个数进行减法运算,其它符号时,只显示输入的符号不进行运算。(以if_else_if.c文件名保存)源程序:(方法1:else子句中嵌套if-else结构)#include<stdio.h>voidmain(){doublex,y;charch;printf("请输入任意两个实数和一个数学运算符(如:34.5+63.9)\n");scanf("%lf%c%lf",&x,&ch,&y);if(ch!='+'&&ch!='-')printf("输入的运算符为%c号,不进行运算\n",ch);elseif(ch=='+')printf("输入的运算符为%c号,运算结果是:%lf+%lf=%lf\n",ch,x,y,x+y); elseprintf("输入的运算符为%c号,运算结果是:%lf-%lf=%lf\n",ch,x,y,x-y);}源程序:(方法2:if子句中嵌套if-else结构)#include<stdio.h>voidmain(){doublex,y;charch;printf("请输入任意两个实数和一个数学运算符(如:34.5+63.9)\n");scanf("%lf%c%lf",&x,&ch,&y);if(ch=='+'||ch=='-')if(ch=='+')printf("输入的运算符为%c号,运算结果是:%lf+%lf=%lf\n",ch,x,y,x+y); elseprintf("输入的运算符为%c号,运算结果是:%lf-%lf=%lf\n",ch,x,y,x-y);elseprintf("输入的运算符为%c号,不进行运算\n",ch);}源程序:(方法3:使用switch语句,虽不符合练习要求,但对于此问题的确是一种好方法!)#include<stdio.h>voidmain(){doublex,y;charch;printf("请输入任意两个实数和一个数学运算符(如:34.5+63.9)\n");scanf("%lf%c%lf",&x,&ch,&y);if(m==11)days=31+28+31+30+31+30+31+31+30+31+d;if(m==12)days=31+28+31+30+31+30+31+31+30+31+30+d;}printf("\n%d-%d-%disNo.%d.\n",y,m,d,days);}源程序:(方法2)#include<stdio.h>main(){intday,month,year,sum,leap;printf("Pleaseinputdate(yyyy-mm-dd):\n");a1:scanf("%d-%d-%d",&year,&month,&day);if(year<=0||year>10000||month<=0||month>12||day<=0||day>31){printf("dataerror!pleaseinputagain:\n");gotoa1;}switch(month)/*先计算某月以前月份的总天数*/{case1:sum=0;break;case2:sum=31;break;case3:sum=59;break;case4:sum=90;break;case5:sum=120;break;case6:sum=151;break;case7:sum=181;break;case8:sum=212;break;case9:sum=243;break;case10:sum=273;break;case11:sum=304;break;case12:sum=334;break;default:printf("dataerror");break;}sum=sum+day;/*再加上某天的天数*/if(year%400==0||(year%4==0&&year%100!=0))/*判断是不是闰年*/leap=1;elseleap=0;if(leap==1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/sum++;printf("Itisthe%dthday.\n",sum);}源程序:(方法3:需要用到循环语句)#include"stdio.h"main(){inti,y,m,d,days;printf("Pleaseinputdate(yyyy-mm-dd):\n");a1:scanf("%d-%d-%d",&y,&m,&d);if(y<0||y>10000||m<0||m>12||d<0||d>31){printf("dataerror!pleaseinputagain:\n");gotoa1;}days=d;if(y%4==0&&y%100!=0||y%400==0)for(i=1;i<m;i++)if(i==4||i==6||i==9||i==11)days=days+30; elseif(i==2)days=days+29; elsedays=days+31;elsefor(i=1;i<m;i++)if(i==4||i==6||i==9||i==11)days=days+30; elseif(i==2)days=days+28; elsedays=days+31;printf("\n%d-%d-%disNo.%d.\n",y,m,d,days);}(4)求解任意的一元二次方程ax2+bx+c=0的根,a,b,c的值由键盘输入(考虑解的各种情况)。源程序:#include<stdio.h>#include<math.h>voidmain(){

floata,b,c,p,x1,x2;

printf("请输入一元二次方程的三个系数a,b,c的值:\n");

scanf("%f%f%f",&a,&b,&c);

p=b*b-4*a*c;if(p<0)

printf("此方程没有实根!\n");

elseif(p==0)

printf("此方程有两个相等的实根:%f和%f\n",-b/(2*a),-b/(2*a));

else

printf("此方程有两个不等的实根:%f和%f!\n",(-b+sqrt(p))/(2*a),(-b-sqrt(p))/(2*a));}(5)一个3位数,如果它的各位数字之的立方和等于该数本身,则称其为水仙花数。源程序:#include<stdio.h>#include<math.h>voidmain(){intnum,a,b,c;printf(“请任意输入一个三位正整数\n”);scanf(“%d”,&num);a=num/100;b=num/10%10;c=num%10;if(num==pow(a,3)+pow(b,3)+pow(c,3))

printf("%d是水仙花数。\n",num);elseprintf("%d不是水仙花数。\n",num);}注意:三位的水仙花数有153、370、371、407学了循环以后如何编程呢附加编程题(1)给出一个不多于3位的正整数,编写程序:①求出它是几位数。②分别打印出每一位数字。③按反序打印出每位数字。例如:原数是123,应输出321。源程序:(方法1:使用三个并列的if结构)#include"stdio.h"main(){intn;printf("请输入一个不多三位的正整数\n");label:scanf("%d",&n);if(n<=0||n>999){printf("数据错误!请重新输入:");gotolabel;}if(n>=1&&n<=9){ printf("\n此数是一位数,");printf("个位数字是%d",n);printf("\n反序数字为%d\n",n);}if(10<=n&&n<=99){ printf("\n此数是两位数,");printf("十位数字是%d,",n/10); printf("个位数字是%d。",n%10);printf("\n反序数字为%d%d\n",n%10,n/10);}if(100<=n&&n<=999){ printf("\n此数是三位数,"); printf("百位数字是%d,",n/100); printf("十位数字是%d,",n/10%10); printf("个位数字是%d。",n%10);printf("\n反序数字为%d%d%d\n",n%10,n/10%10,n/100);}}源程序:(方法2:使用if-elseif结构)#include"stdio.h"main(){intn;printf("请输入一个不多三位的正整数\n");label:scanf("%d",&n);if(n<=0||n>999){printf("数据错误!请重新输入:");gotolabel;}if(n>=1&&n<=9){ printf("\n此数是一位数,");printf("个位数字是%d",n);printf("\n反序数字为%d\n",n);}elseif(n<=99){ printf("\n此数是两位数,");printf("十位数字是%d,",n/10); printf("个位数字是%d。",n%10);printf("\n反序数字为%d%d\n",n%10,n/10);}elseif(n<=999){ printf("\n此数是三位数,"); printf("百位数字是%d,",n/100); printf("十位数字是%d,",n/10%10); printf("个位数字是%d。",n%10);printf("\n反序数字为%d%d%d\n",n%10,n/10%10,n/100);}}(2)编程解决与日历有关的问题:①输入年、月,求该月的天数。②给出年、月、日,计算出该日是该年的第几天。如输入2000,3,1,则输出61。③1990年元旦是星期一,问1900年7月1日是星期几。①源程序:#include"stdio.h"main(){inty,m,d;printf("Pleaseinputyear-month:\n");a1:scanf("%d-%d",&y,&m);if(y<=0||y>10000||m<=0||m>12){printf("dataerror!pleaseinputagain:\n");gotoa1;}if(m==2)if(y%4==0&&y%100!=0||y%400==0) d=29;elsed=28;elseif(m==4||m==6||m==9||m==11)d=30;elsed=31;printf("%d-%dis%ddays.\n",y,m,d);}②源程序:(方法1)#include"stdio.h"main(){inty,m,d,days;printf("Pleaseinputdate(yyyy-mm-dd):\n");a1:scanf("%d-%d-%d",&y,&m,&d);if(y<=0||y>10000||m<=0||m>12||d<=0||d>31){printf("dataerror!pleaseinputagain:\n");gotoa1;}if(y%4==0&&y%100!=0||y%400==0){if(m==1)days=d;if(m==2)days=31+d;if(m==3)days=31+29+d;if(m==4)days=31+29+31+d;if(m==5)days=31+29+31+30+d;if(m==6)days=31+29+31+30+31+d;if(m==7)days=31+29+31+30+31+30+d;if(m==8)days=31+29+31+30+31+30+31+d;if(m==9)days=31+29+31+30+31+30+31+31+d;if(m==10)days=31+29+31+30+31+30+31+31+30+d;if(m==11)days=31+29+31+30+31+30+31+31+30+31+d;if(m==12)days=31+29+31+30+31+30+31+31+30+31+30+d;}else{if(m==1)days=d;if(m==2)days=31+d;if(m==3)days=31+28+d;if(m==4)days=31+28+31+d;if(m==5)days=31+28+31+30+d;if(m==6)days=31+28+31+30+31+d;if(m==7)days=31+28+31+30+31+30+d;if(m==8)days=31+28+31+30+31+30+31+d;if(m==9)days=31+28+31+30+31+30+31+31+d;if(m==10)days=31+28+31+30+31+30+31+31+30+d;if(m==11)days=31+28+31+30+31+30+31+31+30+31+d;if(m==12)days=31+28+31+30+31+30+31+31+30+31+30+d;}printf("\n%d-%d-%disNo.%d.\n",y,m,d,days);}源程序:(方法2)#include<stdio.h>main(){intday,month,year,sum,leap;printf("Pleaseinputdate(yyyy-mm-dd):\n");a1:scanf("%d-%d-%d",&year,&month,&day);if(year<=0||year>10000||month<=0||month>12||day<=0||day>31){printf("dataerror!pleaseinputagain:\n");gotoa1;}switch(month)/*先计算某月以前月份的总天数*/{case1:sum=0;break;case2:sum=31;break;case3:sum=59;break;case4:sum=90;break;case5:sum=120;break;case6:sum=151;break;case7:sum=181;break;case8:sum=212;break;case9:sum=243;break;case10:sum=273;break;case11:sum=304;break;case12:sum=334;break;default:printf("dataerror");break;}sum=sum+day;/*再加上某天的天数*/if(year%400==0||(year%4==0&&year%100!=0))/*判断是不是闰年*/leap=1;elseleap=0;if(leap==1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/sum++;printf("Itisthe%dthday.\n",sum);}源程序:(方法3:需要用到循环语句)#include"stdio.h"main(){inti,y,m,d,days;printf("Pleaseinputdate(yyyy-mm-dd):\n");a1:scanf("%d-%d-%d",&y,&m,&d);if(y<0||y>10000||m<0||m>12||d<0||d>31){printf("dataerror!pleaseinputagain:\n");gotoa1;}days=d;if(y%4==0&&y%100!=0||y%400==0)for(i=1;i<m;i++)if(i==4||i==6||i==9||i==11)days=days+30; elseif(i==2)days=days+29; elsedays=days+31;elsefor(i=1;i<m;i++)if(i==4||i==6||i==9||i==11)days=days+30; elseif(i==2)days=days+28; elsedays=days+31;printf("\n%d-%d-%disNo.%d.\n",y,m,d,days);}③源程序:#include"stdio.h"main(){inty=1900,d1=1,d2=1,days,xingqi;if(y%4==0&&y%100!=0||y%400==0)/*if结构求1900年7days=31+29+31+30+31+30+d2;elsedays=31+28+31+30+31+30+d2;xingqi=1+(days-d1)%7;/*先求1900年7月1日与1900年printf("\n1900年7if(xingqi==1)printf("一。\n");if(xingqi==2)printf("二。\n");if(xingqi==3)printf("三。\n");if(xingqi==4)printf("四。\n");if(xingqi==5)printf("五。\n");if(xingqi==6)printf("六。\n");if(xingqi==7)printf("日。\n");}思维扩展:求任意年任意月任意日是星期几。源程序:run(intyear){intr=0;if((year%4==0&&year%100!=0)||(year%100==0&&year%400==0))r=1;return(r);}longdays(intyear,intmonth,intday){inta[12]={31,28,31,30,31,30,31,31,30,31,30,31};inti,b,x,y;longz;i=b=x=y=0;for(i=1;i<year;i++){b=run(i);if(b)x++;}b=run(year);for(i=1;i<month;i++)y+=a[i-1];if(month>2&&b)y=y+1;z=365l*(year-1)+y+(day-1)+x;return(z);}longxingqi(intyear,intmonth,intday){longa,b,c;a=days(1900,1,1);b=days(year,month,day);c=1+((b-a)%7+7)%7;return(c);}main(){longa,b,c

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论