实验四答案.docx

上传人:b****6 文档编号:8438853 上传时间:2023-01-31 格式:DOCX 页数:19 大小:24.38KB
下载 相关 举报
实验四答案.docx_第1页
第1页 / 共19页
实验四答案.docx_第2页
第2页 / 共19页
实验四答案.docx_第3页
第3页 / 共19页
实验四答案.docx_第4页
第4页 / 共19页
实验四答案.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

实验四答案.docx

《实验四答案.docx》由会员分享,可在线阅读,更多相关《实验四答案.docx(19页珍藏版)》请在冰豆网上搜索。

实验四答案.docx

实验四答案

实验四选择结构程序设计答案

编程练习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=90;break;

case5:

sum=120;break;

ca

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1