实验四答案.docx
- 文档编号:22993236
- 上传时间:2023-04-29
- 格式:DOCX
- 页数:23
- 大小:24.11KB
实验四答案.docx
《实验四答案.docx》由会员分享,可在线阅读,更多相关《实验四答案.docx(23页珍藏版)》请在冰豆网上搜索。
实验四答案
实验四选择结构程序设计答案
编程练习1:
简单if语句的用法
编写并调试程序:
从键盘输入一个任意大小的实数x,如果满足如下条件:
-29、5≤x≤29、5则输出x及其绝对值。
(以simple_if、c文件名保存)
源程序:
#include
#include
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
#include
voidmain()
{doublex;
printf("请输入一个任意大小的实数x\n");
scanf("%lf",&x);
if((x>=-29、5)&&(x<=29、5))
printf("x=%lf,|x|=%lf\n",x,fabs(x));
else
printf("x=%lf\n",x);
}
编程练习3:
if-elseif语句的用法
编写一个能够进行加减法运算的程序,要求:
从键盘任意输入两个实数,然后输入一个运算符,当运算符为“+”时对两个数进行加法运算,为“-”时对两个数进行减法运算,其它符号时,只显示输入的符号不进行运算。
(以if_else_if、c文件名保存)
源程序:
(方法1:
else子句中嵌套if-else结构)
#include
voidmain()
{doublex,y;
charch;
printf("请输入任意两个实数与一个数学运算符(如:
34、5+63、9)\n");
scanf("%lf%c%lf",&x,&ch,&y);
if(ch!
='+'&&ch!
='-')
printf("输入的运算符为%c号,不进行运算\n",ch);
else
if(ch=='+')
printf("输入的运算符为%c号,运算结果就是:
%lf+%lf=%lf\n",ch,x,y,x+y);
else
printf("输入的运算符为%c号,运算结果就是:
%lf-%lf=%lf\n",ch,x,y,x-y);
}
源程序:
(方法2:
if子句中嵌套if-else结构)
#include
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);
else
printf("输入的运算符为%c号,运算结果就是:
%lf-%lf=%lf\n",ch,x,y,x-y);
else
printf("输入的运算符为%c号,不进行运算\n",ch);
}
源程序:
(方法3:
使用switch语句,虽不符合练习要求,但对于此问题的确就是一种好方法!
)
#include
voidmain()
{doublex,y;
charch;
printf("请输入任意两个实数与一个数学运算符(如:
34、5+63、9)\n");
scanf("%lf%c%lf",&x,&ch,&y);
switch(ch)
{
case'+':
printf("输入的运算符为%c号,运算结果就是:
%lf+%lf=%lf\n",ch,x,y,x+y);break;
case'-':
printf("输入的运算符为%c号,运算结果就是:
%lf-%lf=%lf\n",ch,x,y,x-y);break;
default:
printf("输入的运算符为%c号,不进行运算\n",ch);
}
}
编程练习4:
实验教材:
(P7-11:
实验3选择结构程序设计)
二、实验内容
第10题
(1)有以下函数:
y=
编程求x=0、5、5、50时y的值。
源程序:
(方法1:
else子句中嵌套if-else结构)
#include
#include
voidmain()
{doublex,y;
printf("请输入分段函数自变量x的值(任意实数)\n");
scanf("%lf",&x);
if(x<1)
y=x;
else
if(x<10)/*或写成if(x>=1&&x<10),两个表达式等价*/
y=3-x/5;
else
y=3*x-11;
printf("自变量x=%lf,函数y=%lf\n",x,y);
}
源程序:
(方法2:
if子句中嵌套if-else结构)
#include
#include
voidmain()
{doublex,y;
printf("请输入分段函数自变量x的值(任意实数)\n");
scanf("%lf",&x);
if(x<10)
if(x<1)
y=x;
else
y=3-x/5;
else
y=3*x-11;
printf("自变量x=%lf,函数y=%lf\n",x,y);
}
源程序:
(方法3:
使用多分支的if-elseif结构)
#include
#include
voidmain()
{doublex,y;
printf("请输入分段函数自变量x的值(任意实数)\n");
scanf("%lf",&x);
if(x<1)
y=x;
elseif(x<10)
y=3-x/5;
else
y=3*x-11;
printf("y=f(%lf)=%lf\n",x,y);
}
注意:
方法1与方法3无本质上的区别。
(2)输入3个实数,编写程序判断能否以它们为边长构成三角形。
若能,则计算机三角形的面积,否则输出提示信息。
源程序:
#include
#include
voidmain()
{doublea,b,c,p;
printf("请任意输入三个实数:
\n");
scanf("%lf%lf%lf",&a,&b,&c);
if((a+b>c)&&(a+c>b)&&(b+c>a))
{
printf("以这三个实数为边长能构成三角形,");
p=(a+b+c)/2;
printf("其面积为%、2lf\n",sqrt(p*(p-a)*(p-b)*(p-c)));
}
else
printf("以这三个实数为边长不能构成三角形\n");
}
(3)输入年、月、日,计算出该日就是该年的第几天
源程序:
(方法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
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;
else
leap=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 if(i==4||i==6||i==9||i==11)days=days+30; elseif(i==2)days=days+29; elsedays=days+31; else for(i=1;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 #include 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 #include 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); else printf("%d不就是水仙花数。 \n",num); } 注意: (1)三位的水仙花数有153、370、371、407 (2)学了循环以后如何编程呢 附加编程题 (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 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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 答案