C语言学习知识程序设计第3版何钦铭颜晖第3章分支结构.docx

上传人:b****5 文档编号:14957133 上传时间:2023-06-28 格式:DOCX 页数:18 大小:24.20KB
下载 相关 举报
C语言学习知识程序设计第3版何钦铭颜晖第3章分支结构.docx_第1页
第1页 / 共18页
C语言学习知识程序设计第3版何钦铭颜晖第3章分支结构.docx_第2页
第2页 / 共18页
C语言学习知识程序设计第3版何钦铭颜晖第3章分支结构.docx_第3页
第3页 / 共18页
C语言学习知识程序设计第3版何钦铭颜晖第3章分支结构.docx_第4页
第4页 / 共18页
C语言学习知识程序设计第3版何钦铭颜晖第3章分支结构.docx_第5页
第5页 / 共18页
C语言学习知识程序设计第3版何钦铭颜晖第3章分支结构.docx_第6页
第6页 / 共18页
C语言学习知识程序设计第3版何钦铭颜晖第3章分支结构.docx_第7页
第7页 / 共18页
C语言学习知识程序设计第3版何钦铭颜晖第3章分支结构.docx_第8页
第8页 / 共18页
C语言学习知识程序设计第3版何钦铭颜晖第3章分支结构.docx_第9页
第9页 / 共18页
C语言学习知识程序设计第3版何钦铭颜晖第3章分支结构.docx_第10页
第10页 / 共18页
C语言学习知识程序设计第3版何钦铭颜晖第3章分支结构.docx_第11页
第11页 / 共18页
C语言学习知识程序设计第3版何钦铭颜晖第3章分支结构.docx_第12页
第12页 / 共18页
C语言学习知识程序设计第3版何钦铭颜晖第3章分支结构.docx_第13页
第13页 / 共18页
C语言学习知识程序设计第3版何钦铭颜晖第3章分支结构.docx_第14页
第14页 / 共18页
C语言学习知识程序设计第3版何钦铭颜晖第3章分支结构.docx_第15页
第15页 / 共18页
C语言学习知识程序设计第3版何钦铭颜晖第3章分支结构.docx_第16页
第16页 / 共18页
C语言学习知识程序设计第3版何钦铭颜晖第3章分支结构.docx_第17页
第17页 / 共18页
C语言学习知识程序设计第3版何钦铭颜晖第3章分支结构.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

C语言学习知识程序设计第3版何钦铭颜晖第3章分支结构.docx

《C语言学习知识程序设计第3版何钦铭颜晖第3章分支结构.docx》由会员分享,可在线阅读,更多相关《C语言学习知识程序设计第3版何钦铭颜晖第3章分支结构.docx(18页珍藏版)》请在冰点文库上搜索。

C语言学习知识程序设计第3版何钦铭颜晖第3章分支结构.docx

C语言学习知识程序设计第3版何钦铭颜晖第3章分支结构

第3章分支结构

【练习3-1】例3-4中使用else-if语句求解多分段函数,为了检查else-if语句的三个分支是否正确,已经设计了三组测试用例,请问还需要增加测试用例吗?

为什么?

如果要增加,请给出具体的测试用例并运行程序。

解答:

最好再增加两组测试用例,因为尚未对分段函数参数的边界值进行测试。

可再给出x=0和x=15时的两种情况。

【练习3-2】计算符号函数的值:

输入一个整数x,计算并输出下列分段函数sign(x)的值。

-1x<0

y=sign(x)=0x=0

1x>0

解答:

#include

intmain(void)

{

intx,y;

printf("Enterx:

");

scanf("%d",&x);

if(x>0)y=1;

elseif(x==0)y=0;

elsey=-1;

printf("sign(%d)=%d\n",x,y);

return0;

}

【练习3-3】统计学生平均成绩与及格人数:

输入一个正整数n,再输入n个学生的成绩,计算平均成绩,并统计所有及格学生的人数。

试编写相应程序。

解答:

#include

intmain(void)

{

intcount,i,n;

doublegrade,total;

printf("Entern:

");

scanf("%d",&n);

total=0;

count=0;

for(i=1;i<=n;i++){

printf("Entergrade#%d:

",i);

scanf("%lf",&grade);

total=total+grade;

if(grade>=60)count++;

}

printf("Gradeaverage=%.2f\n",total/n);

printf("Numberofpass=%d\n",count);

return0;

}

【练习3-4】统计字符:

输入10个字符,统计其中英文字母、空格或回车、数字字符和其他字符的个数。

试编写相应程序。

解答:

#include

intmain(void)

{

inti;

intblank,digit,letter,other;

charc;

blank=digit=letter=other=0;

for(i=1;i<=15;i++){

c=getchar();

if(c>='a'&&c<='z'||c>='A'&&c<='Z')

letter++;

elseif(c>='0'&&c<='9')

digit++;

elseif(c==''||c=='\n')

blank++;

else

other++;}

printf("letter=%d,blank=%d,digit=%d,other=%d\n",letter,blank,digit,other);

return0;

}

【练习3-5】输出闰年:

输出21世纪中截至某个年份之前的所有闰年年份。

判断闰年的条件是:

能被4整除但不能被100整除,或者能被400整除。

试编写相应程序。

解答:

#include

intmain(void)

{

intyear;

printf("Enteryear:

");

scanf("%d",&year);

for(;year>=2000;year--){

if((year%4==0&&year%100!

=0)||year%400==0)

printf("Itisaleapyear\n");

else

printf("Itisnotaleapyear\n");}

return0;

}

【练习3-6】在例3-8程序中,如果把switch语句中所有的break都去掉,运行结果会改变吗?

如果有变化,输出什么?

为什么?

解答:

如果去掉所有的break语句,运行结果会改变,输出price=0.0,因为不管choice值与其中某个常量表达式相等,当去掉break语句时,其后的所有语句段都将运行,故每次都将执行到price=0.0语句为止。

【练习3-7】成绩转换:

输入一个百分制成绩,将其转换为五分制成绩。

百分制成绩到五分制成绩的转换规则:

大于或等于90分为A,小于90分且大于或等于80分为B,小于80分且大于或等于70分为C,小于70分且大于或等于60分为D,小于60分为E。

试编写相应程序。

解答:

#include

intmain(void)

{

doublegrade;

printf("Inputgrade:

");

scanf(“%lf”,&grade);

If(grade>=90)printf("A");

elseif(grade>=80)printf("B");

elseif(grade>=70)printf("C");

elseif(grade>=60)printf("D");

elseprintf("E");

return0;

}

#include

intmain(void)

{

doublescore;

chargrade;

printf("Inputyourscore:

");

scanf("%lf",&score);

switch(int(score/10)){

case10:

case9:

grade='A';break;

case8:

grade='B';break;

case7:

grade='C';break;

case6:

grade='D';break;

default:

grade='E';break;

}

printf("Yourgradeis:

%c",grade);

return0;

}

【练习3-8】查询水果的单价:

有4种水果,苹果(apples)、梨(pears)、桔子(oranges)和葡萄(grapes),单价分别是3.00元/公斤,2.50元/公斤,4.10元/公斤和10.20元/公斤。

在屏幕上显示以下菜单(编号和选项),用户可以连续查询水果的单价,当查询次数超过5次时,自动退出查询;不到5次时,用户可以选择退出。

当用户输入编号1~4,显示相应水果的单价(保留两位小数);输入0,退出查询;输入其他编号,显示价格为0。

试编写相应程序。

[1]apples

[2]pears

[3]oranges

[4]grapes

[0]Exit

解答:

#include

intmain(void)

{

intri;

intchoice;

floatprice;

for(ri=1;ri<=5;ri++){

printf("[1]apples\n");

printf("[2]pears\n");

printf("[3]oranges\n");

printf("[4]grapes\n");

printf("[0]Exit\n");

scanf("%d",&choice);

if(choice==0)

break;

else{

switch(choice){

case1:

price=3.00;break;

case2:

price=2.50;break;

case3:

price=4.10;break;

case4:

price=10.20;break;

default:

price=0;break;

}

printf("price=%0.2f\n",price);

}

return0;

}

【练习3-9】请读者重新编写例3-4的程序,要求使用嵌套的if-else语句,并上机运行。

解答:

#include

intmain(void)

{

doublex,y;

printf("Enterx:

");

scanf("%lf",&x);

if(x>15){

y=2.5*x-10.5;

}

else{

if(x<0)

y=0;

else

y=4*x/3;

}

printf("f(%.2f)=%.2f\n",x,y);

return0;

}

【练习3-10】在例3-12中,改写if语句前,y=x+1;和y=x+2;两条语句的执行条件是什么?

改写后呢?

解答:

改写前:

y=x+1的执行条件是x<1;y=x+2的执行条件是1<=x<2。

改写后:

y=x+1的执行条件是x<1;y=x+2的执行条件是2<=x。

习题3

一.选择题

1.能正确表示逻辑关系:

“a≥10或a≤0”的C语言表达式是D。

A.a>=10ora<=0B.a>=0|a<=10

C.a>=10&&a<=0D.a>=10||a<=0

2.在嵌套使用if语句时,C语言规定else总是C。

A.和之前与其具有相同缩进位置的if配对

B.和之前与其最近的if配对

C.和之前与其最近的且不带else的if配对

D.和之前的第一个if配对

3.下列叙述中正确的是D。

A.break语句只能用于switch语句

B.在switch语句中必须使用default

C.break语句必须与switch语句中的case配对使用

D.在switch语句中,不一定使用break语句

1x>0

4.有一函数y=0x=0,以下程序段中错误的是C。

-1x<0

A.if(x>0)y=1;B.y=0;

elseif(x==0)y=0;if(x>0)y=1;

elsey=-1;elseif(x<0)y=-1;

C.y=0;D.if(x>=0)

if(x>=0);if(x>0)y=1;

if(x>0)y=1;elsey=0;

elsey=-1;elsey=-1;

5.下列程序段的输出结果是C。

intmain(void)

{

inta=2,b=-1,c=2;

if(a

if(b<0)

c=0;

elsec++;

printf("%d\n",c);

return0;

}

A.0B.1C.2D.3

6.下列程序段的输出结果是A。

intmain(void)

{

intx=1,a=0,b=0;

switch(x)

{

case0:

b++;

case1:

a++;

case2:

a++;b++;

}

printf("a=%d,b=%d\n",a,b);

return0;

}

A.a=2,b=1B.a=1,b=1

C.a=1,b=0D.a=2,b=2

7.在执行以下程序时,为使输出结果为:

t=4,则给a和b输入的值应满足的条件是C。

intmain(void)

{

inta,b,s,t;

scanf("%d,%d",&a,&b);

s=1;t=1;

if(a>0)s=s+1;

if(a>b)t=s+t;

elseif(a==b)t=5;

elset=2*s;

printf("t=%d\n",t);

return0;

}

A.a>bB.a

C.0a>b

二、填空题

1.表示条件:

1010&&x<100)||(x<0)。

2.已知a=7.5,b=2,c=3.6,则表达式a>b&&c>a||a

c>b的值为0。

3.若从键盘输入58,则以下程序段的输出结果是585858。

intmain(void)

{

inta;

scanf("%d",&a);

if(a>50)printf("%d",a);

if(a>40)printf("%d",a);

if(a>30)printf("%d",a);

return0;

}

4.下列程序运行的输出结果是9。

intmain(void)

{

charc=‘b’;

intk=4;

switch(c)

{

case'a':

k=k+1;break;

case'b':

k=k+2;

case'c':

k=k+3;

}

printf("%d\n",k);

return0;

}

3.程序设计题

1.比较大小:

输入3个整数,按从小到大的顺序输出。

试编写相应程序。

解答:

#include

intmain(void)

{

inta,b,c;

charop='<';

printf("Entera:

");

scanf("%d",&a);

printf("Enterb:

");

scanf("%d",&b);

printf("Enterc:

");

scanf("%d",&c);

if(a>b)

if(b>c)printf("%d%c%d%c%d",c,op,b,op,a);

else{

if(a>c)printf("%d%c%d%c%d",b,op,c,op,a);

elseprintf("%d%c%d%c%d",b,op,a,op,c);

}

else{

if(a>c)printf("%d%c%d%c%d",c,op,a,op,b);

else{

if(b

elseprintf("%d%c%d%c%d",a,op,c,op,b);

}

}

return0;

}

2.高速公路超速处罚:

按照规定,在高速公路上行驶的机动车,超过本车道限速的10%则处200元罚款;若超出50%,就要吊销驾驶证。

请编写程序根据车速和限速判别对该机动车的处理。

解答:

#include

intmain(void)

{

doublespeed,rate_limiting;

printf("Enterspeed:

");

scanf("%lf",&speed);

printf("Enterrate_limiting:

");

scanf("%lf",&rate_limiting);

if(rate_limiting*1.5>speed>rate_limiting*1.1)

printf("罚款200元");

elseif(speed>rate_limiting*1.5)

printf("罚款200元,并吊销驾驶证");

else;

return0;

}

3.出租车计价:

某城市普通出租车收费标准如下:

起步里程3公里,起步费10元;超起步里程后10公里内,每公里2元,超过10公里以上的部分加收50%的空驶补贴费,即每公里3元;营运过程中,因路阻及乘客要求临时停车的,按每5分钟2元计收(不足5分钟则不收费)。

运价计费尾数四舍五入,保留到元。

编写程序,输入行驶里程(公里)与等待时间(分钟),计算并输出乘客应支付的车费(元)。

解答:

#include

intmain(void)

{

intmile,time,cost;

printf("Inputmileandtime:

");

scanf("%d%d",&mile,&time);

cost=0;

mile=mile+time/5;

if(mile<=3)

cost=10;

elseif(mile<=13)

cost=10+(mile-3)*2;

else

cost=10+10*2+(mile-13)*3;

printf("cost=%d\n",cost);

return0;

}

4.统计学生成绩:

输入一个正整数n,再输入n个学生的成绩,统计五分制成绩的分布。

百分制成绩到五分制成绩的转换规则:

大于或等于90分为A,小于90分且大于或等于80分为B,小于80分且大于或等于70分为C,小于70分且大于或等于60分为D,小于60分为E。

试编写相应程序。

解答:

#include

intmain(void)

{

intmark,n,i,sum;

doubleaverage;

intcounta,countb,countc,countd,counte;

printf("Entern:

");

scanf("%d",&n);

counta=countb=countc=countd=counte=sum=0;

for(i=1;i<=n;i++){

scanf("%d",&mark);

sum=sum+mark;

if(mark>=90)counta++;

elseif(mark>=80)countb++;

elseif(mark>=70)countc++;

elseif(mark>=60)countd++;

elsecounte++;

}

average=sum*1.0/n;

printf("average=%.1f\n",average);

printf("A:

%d,B:

%d,C:

%d,D:

%d,E:

%d\n",counta,countb,countc,countd,counte);

return0;

}

5.三角形判断:

输入平面上任意三个点的坐标(x1,y1)、(x2,y2)、(x3,y3),检验他们能否构成三角形。

如果这3个点能构成一个三角形,输出周长和面积(保留2位小数);否则,输出“Impossible”。

试编写相应程序。

提示:

在一个三角形中,任意两边之和大于第三边。

三角形面积计算公式如下:

解答:

#include

#include

intmain(void)

{

doublex1,y1,x2,y2,x3,y3;

doublearea,l,a,b,c,s;

printf("Enterx1andy1:

");

scanf("%lf%lf",&x1,&y1);

printf("Enterx2andy2:

");

scanf("%lf%lf",&x2,&y2);

printf("Enterx3andy3:

");

scanf("%lf%lf",&x3,&y3);

a=sqrt(pow(fabs(x2-x1),2)+pow(fabs(y2-y1),2));

b=sqrt(pow(fabs(x3-x2),2)+pow(fabs(y3-y2),2));

c=sqrt(pow(fabs(x1-x3),2)+pow(fabs(y1-y3),2));

if(a+b>c&&a+c>b&&b+c>a){

l=a+b+c;

s=(a+b+c)/2;

area=sqrt(s*(s-a)*(s-b)*(s-c));

printf("l=%.2lf\n",l);

printf("area=%.2lf\n",area);

}

else

printf("Impossible");

return0;

}

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

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2