实验4分支结构程序设计Word格式.docx
《实验4分支结构程序设计Word格式.docx》由会员分享,可在线阅读,更多相关《实验4分支结构程序设计Word格式.docx(14页珍藏版)》请在冰豆网上搜索。
&
c!
=EOF);
if(x<
0)
{
y=x+10;
printf("
x=%d,y=x+10=%d\n"
x,y);
}
elseif(x<
15)
y=3*x+5;
x=%d,y=3*x+5=%d\n"
else
y=2*x-10;
x=%d,y=2*x-10=%d\n"
}test();
}
voidtest()
{charc;
Testagain?
y/n\n"
if((c=getchar())=='
n'
||c=='
N'
)//只有当输入N或n时才终止程序
k=0;
运行结果截图:
思考题及问题:
判断x的值在0-15之间可否使用表达式“0<
=x<
15”?
为什么?
正确的表示方法是什么?
答案:
不可。
因为一个条件判断表达式中最多只能有一个运算符。
正确的表示方法是x>
=0&
x<
15.
2.练习题二
输入3个数字,判断他们是否能构成三角形,如果不能,输出提示信息;
否则判断它是直角、等边、等腰还是普通三角形。
voidmain()
{
while(k==1)
inta,b,c,d;
Inputa,b,c:
%d,%d,%d"
a,&
b,&
c);
while((d=getchar())!
//清空输入缓存区
if(!
(a>
0&
b>
c>
a+b>
c&
a+c>
b&
b+c>
a))
三条边无法构成三角形。
\n"
else
if(a*a+b*b==c*c||a*a==b*b+c*c||b*b==a*a+c*c)
这是一个直角三角形\n"
elseif(a==b&
b==c)
这是一个等边三角形\n"
elseif(a==b||b==c||a==c)
这是一个等腰三角形\n"
else
printf("
这是一个普通三角形\n"
test();
y/n:
判断三角形的类型时需要用到各种判断条件,入等边三角形的判断条件是3条边相等,该判断条件可否描述为“a=b=c”?
不能,“=”在C语言中是赋值符号,在条件判断式中是一个永真式,会引起语义错误。
1.练习题三
编写一个程序,输出给定的某年某月的天数。
要求:
采用switch语句实现。
程序代码:
intyear,mon,days,leap;
年.月:
%4d.%2d"
year,&
mon);
switch(mon)
case1:
case3:
case5:
case7:
case8:
case10:
case12:
days=31;
break;
case4:
case6:
case9:
case11:
days=30;
case2:
if(year%4==0&
year%100!
=0||year%400==0)
leap=1;
leap=0;
if(leap)
days=29;
days=28;
%d年%d月的天数为%d天\n"
year,mon,days);
1本程序所给代码中的switch语句没有default语句可以吗?
default语句应该在switch语句的什么位置?
可以。
Default语句可以在{}之间的任意位置。
2本程序所给代码中的最后一个case语句中,没有break正确吗?
请解释。
正确。
在switch语句中,当找到符合条件的case时,执行该case语句及之后的其他情况的语句,故C语言会在case语句和default语句后加break;
防止执行下面的语句。
而最后一个case语句后无其他语句,故没有break语句也正确。
1.自测练习一
编写程序,计算逻辑表达式的值。
假设inta=0,b=1,c=1,d=3;
(1)表达式a*b&
c-d、c-d&
a*b是多少?
inta=0,b=1,c=1,d=3;
%d,%d"
a*b&
c-d,c-d&
a*b);
运行结果截图及原因:
a*b=0,逻辑假,由于与运算的短路性,&
右边的表达式不进行,直接为0;
c-d=-2,逻辑真,为1,故第二个运算式为1&
0=0.
(2)表达式—a||++b&
--c的值是多少?
变量a、b、c的值分别是多少?
%d\n"
-a||++b&
--c);
a=%d,b=%d,c=%d"
a,b,c);
++b即b的值为2,是真值1,--c值即c的值为0,假值0。
-a即a的值为0,假值0.
故结果为0||1&
0=1&
0=0,
(3)表达式++b&
--c||--a的值是多少?
++b&
--c||--a=%d\n"
++b&
--c||--a);
--a即a的值为-1,真值1.
故结果为1&
0||1=1,
2.自测练习二
设整型变量a、b、c分别存放从键盘输入的3个整数。
编写C程序,按从大到小排列这3个数,使a成为最大值,c成为最小值,并且按序输出这3个数。
源程序代码:
inta[3]={0},t,j,i,k;
for(i=0;
i<
=2;
i++)
Input%c:
i+97);
scanf("
a[i]);
for(j=0;
j<
j++)//冒泡法
for(i=0;
=2-j;
if(a[i]<
a[i+1])
t=a[i],a[i]=a[i+1],a[i+1]=t;
a=%d,b=%d,c=%d\n"
a[0],a[1],a[2]);
3.自测练习三
从键盘输入一个小于六位的正整数,判断它是几位数,并按照相反的顺序输出各位上的数字,例如输入1234,输出为4321。
math.h>
inti=4,a[6]={0},k=0;
printf(“请输入一个小于六位的正整数:
a[5]);
while(a[5]<
(int)pow(10,i))//判断输入数据的位数
i--;
k=i+1;
它是%d位数"
k);
a[i+1]=a[5];
for(;
i>
=1;
i--)
a[i]=a[i+1]%(int)pow(10,i);
a[i+1]=a[i+1]/(int)pow(10,i);
for(i=1;
=k;
i++)//倒序输出
a[i]);
4.自测练习四
假设今天是星期日,编写一个程序,求n(n由键盘输入)天后是星期几。
intn,t;
假设今天是星期日,求n天后是星期几\n输入n="
n);
t=n%7;
switch(t)
case0:
printf("
n天后还是星期日\n"
n天后是星期一\n"
n天后是星期二\n"
n天后是星期三\n"
n天后是星期四\n"
n天后是星期五\n"
n天后是星期六\n"
5.自测练习五
假定向香港邮寄包裹的收费规则如下:
首先,包裹重量向上取整到最近的15g的倍数,然后按书上表格收费,编写一个程序根据用户输入的包裹的重量和里程计算邮费。
包裹邮费计算表
重量(g)
收费(元)
15
5
30
9
45
12
60
14(每足1000km加1元)
75及以上
15(每足1000km加2元)
intk=1,c=0;
//全局变量
intm,s;
请输入包裹重量(g)"
m);
请输入里程数(km)"
s);
while((c=getchar())!
if(m%15!
=0)m=(m/15+1)*15;
//取m为15的倍数
s/=1000;
收费:
if(m<
=15)printf("
5元"
elseif(m<
=30)printf("
9元"
elseif(m<
=45)printf("
12元"
elseif(m<
=60)printf("
%d元"
14+s);
elseprintf("
15+2*s);