第4章C语言的分支语句
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第4章C语言的分支语句
4.1目的和要求
1、掌握C语言逻辑量的表示方法(以0代表“假”,1代表“真”)。
2、学会正确地使用关系表达式和逻辑表达式。
3、掌握各种形式的条件语句语法和使用方法。
注意if语句中if 和else的匹配关系,
及各种条件语句的嵌套。
4、掌握switch语句语法和使用方法。
注意switch语句的控制流程,在switch语句
中break语句的用法及switch语句的嵌套。
4.2 相关知识
1、if 语句
if语句根据给定的条件表达式值(为非0或为0)进行判断来决定执行两条分支中的哪一条。
if语句的一般形式:
if ( 表达式 )
语句1
else
语句2
2、switch语句
switch语句的一般形式为:
switch(表达式)
{
case常量表达式1: 语句序列1
case常量表达式2: 语句序列2
...
case常量表达式n: 语句序列n
default : 语句序列n+1
}
3、编程中应注意
if –else语句中,if后面的单个语句有分号,但复合语句(花括号)后没分号,当if –else语句有嵌套时,注意其搭配关系,else总是与它前面最接近的if对应。
switch语句后的表达式应是整数或字符型表达式,case语句后的表达式应是整型或字符型常量;和if 语句中的条件判断不同,switch语句只测试相等条件;一般在使用switch语句实现“多选一”功能时,每个case子句后都使用break语句。
由于switch语句的表达式不允许是实型的,当应用于实型值选择情况时,通常将实数表达式乘上一个适当的比例因子,将实数表达式的值映射到一个较小的范围上,然后再将它转换到整型。
4.3 实验练习:
实验练习1:判断整数是否出界。
本练习要求在封闭式实验课中在助教或者讲师的指导下完成。
本练习分成6个部分:1.实验目的
2.问题描述
3.示例输出
4.程序模板
5.问题解答提示
6.后续问题和任务
程序模板是完整的、可实际运行的C程序,其中关键的一行或者多行代码已经替换为注释。
请先阅读问题描述,分析示例输出;然后研究模板的代码。
参考问题解答提示,用C代码替换/**/注释。
编译并执行程序,并将输出结果与提供的示例输出进行比较。
然后回答强化练习。
实验目的:
本实验旨在巩固学生对于编程概念的理解。
在这个实验中,学生将练习:
•掌握C语言逻辑量的表示方法(以0代表“假”,1代表“真”)
•学会正确的使用关系表达式和逻辑表达式
•掌握if/else语句的使用方法
在强化练习中,学生将练习:
• if/else结构与do/while结构之间的变换
问题描述:从键盘输入一个整数(1≤整数≤100),如果输入整数出界,输出“outside!”,如果输入正确,输出“right!”
示例输出:
程序模板:
#include<stdio.h>
main()
{
int x;
printf("Please enter x:\n");
scanf("%d",&x);
/*判断输入的整数范围*/
printf("outside!\n");
else printf("right!\n");
}
问题解答提示:
1.程序接收从键盘输入的一个整数,因此用int型定义该变量;
2.判断变量x的范围是否在1至100之间;
3.如果是,则输出“right!”;否则,输出“outside!”
强化练习:
1.将上述程序修改为do/while结构
实验练习2:判定三角形。
本练习要求在封闭式实验课中在助教或者讲师的指导下完成。
本练习分成6个部分:1.实验目的
2.问题描述
3.示例输出
4.程序模板
5.问题解答提示
6.后续问题和任务
程序模板是完整的、可实际运行的C程序,其中关键的一行或者多行代码已经替换为注释。
请先阅读问题描述,分析示例输出;然后研究模板的代码。
参考问题解答提示,用C代码替换/**/注释。
编译并执行程序,并将输出结果与提供的示例输出进行比较。
然后回答强化练习。
实验目的:
本实验旨在巩固学生对于编程概念的理解。
在这个实验中,学生将练习:
•学会正确的使用关系表达式和逻辑表达式
•掌握if/else的嵌套结构的使用
在强化练习中,学生将练习:
• if/else嵌套结构与switch/case结构之间的转换
问题描述:
编写程序。
实现根据用户输入的三角形的三条边长判定是何种三角形
示例输出:
程序模板:
#include <stdio.h>
#include<math.h>
main()
{
float a,b,c;
printf("输入三角形的三条边a,b,c:");
scanf("%f,%f,%f",&a,&b,&c);
/*判断三边是否构成三角形*/
{
/*如果三条边均相等,则为等边三角形*/
printf("等边三角形\n");
else /*如果只有两条边相等,则只为等腰三角形*/
printf("等腰三角形\n");
else /*如果两边的平方和等于第三边平方,则为直角三角形*/
printf("直角三角形\n");
else
printf("一般三角形\n");
}
else
printf("不能组成三角形\n");
}
问题解答提示:
1.程序接收三角形的三条边长,故用float进行声明;
2.考虑三角形的类型:一般三角形、正三角形、等腰三角形、直角三角形;
3.考虑输入数据的有效性:构成三角形的条件为任意两边之和要大于第三边,否则无法构成三角形;
4.在满足3的前提下,考虑各种三角形的检测方式:
正三角形,要求三边相等;
等腰三角形,要求三边中有两边相等;
直角三角形:要求两边的平方和等于第三边平方和;
强化练习:
实验练习3:显示当前月份的最后一天
本练习要求在封闭式实验课中在助教或者讲师的指导下完成。
本练习分成6个部分:1.实验目的
2.问题描述
3.示例输出
4.程序模板
5.问题解答提示
6.后续问题和任务
程序模板是完整的、可实际运行的C程序,其中关键的一行或者多行代码已经替换为注释。
请先阅读问题描述,分析示例输出;然后研究模板的代码。
参考问题解答提
示,用C代码替换/**/注释。
编译并执行程序,并将输出结果与提供的示例输出进行比较。
然后回答强化练习。
实验目的:
本实验旨在巩固学生对于编程概念的理解。
在这个实验中,学生将练习:
•学会正确的使用关系表达式和逻辑表达式
•掌握switch/case语句语法和使用方法。
注意switch语句的控制流程,在switch 语句中break语句的用法
在强化练习中,学生将练习:
• switch/case结构与if/else嵌套结构之间的转换
问题描述:编写一个程序输入年月,输出该月的最后一天。
示例输出:
程序模板:
#include <stdio.h>
main ( )
{
int year,month,lastday;
printf("Please enter year and month:");
scanf("%d%d", &year, &month);
switch (month)
{
case 2 :
/*判断是否是闰年*/
lastday=29;
else
lastday=28;
break;
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: lastday=31; break;
case 4:
case 6:
case 9:
case 11: lastday=30; break;
}
printf("%d\t%d\t%d", year, month, lastday);
}
问题解答提示:
1.程序接收年月,因此用int型定义两个变量;
2.一年中各月份的天数为:1,3,5,7,8,10,12月均为31天;4,6,9,11月均为30天;2月份的天数根据年份是否为闰年判断,是则为29天,不是则为28天;
3.程序采用switch/case结构;
4.闰年的条件是:①能被4整除但不能被100整除;或②能被100整除且能被400整除。
强化练习:
试将上述switch/case结构转化为if/else嵌套结构
实验练习4:模拟简单计算器
本练习要求在封闭式实验课中在助教或者讲师的指导下完成。
本练习分成6个部分:1.实验目的
2.问题描述
3.示例输出
4.程序模板
5.问题解答提示
6.后续问题和任务
程序模板是完整的、可实际运行的C程序,其中关键的一行或者多行代码已经替换为注释。
请先阅读问题描述,分析示例输出;然后研究模板的代码。
参考问题解答提示,用C代码替换/**/注释。
编译并执行程序,并将输出结果与提供的示例输出进行比较。
然后回答强化练习。
实验目的:
本实验旨在巩固学生对于编程概念的理解。
在这个实验中,学生将练习:•switch/case结构的使用
在强化练习中,学生将练习:
• switch/case结构转换为if/else结构
问题描述:
编写一个程序模拟简单计算器,进行两个数的加、减、乘、除四则运算功能。
示例输出:
程序模板:
#include<stdio.h>
main()
{
float x,y;
char op;
printf("输入表达式:");
scanf("%f%c%f",&x,&op,&y);
switch(op)
{
case ' ': /*匹配加法*/
printf("%.2f%c%.2f=%.2f\n",x,op,y,x+y);break;
case ' ': /匹配减法*/
printf("%.2f%c%.2f=%.2f\n",x,op,y,x-y);break;
case ' ': /*匹配乘法*/
printf("%.2f%c%.2f=%.2f\n",x,op,y,x*y);break;
case ' ':/*匹配除法*/
if (y!=0)
{printf("%.2f%c%.2f=%.2f\n",x,op,y,x/y);break;} else {printf("除数为零!\n");break;}
default : printf("输入表达式有错!\n");
}
}
问题解答提示:
1.程序接收用户输入的算术表达式,表达式构成为两个操作数,一个操作符,因此用float型声明两个变量,用于保存操作数的值,用char型声明一个变量,用于保存操作符(+、-、*、/)
2.采用switch/case结构,根据操作符的种类不同,进行不同的运算;
3.考虑除法的特殊情况,即当除数为零时,出现异常;
4.考虑用户输入非法操作符的情况;
强化练习:
1.将上述程序用if/else嵌套结构实现
实验练习5:自动售货机
本练习要求在封闭式实验课中在助教或者讲师的指导下完成。
本练习分成6个部分:1.实验目的
2.问题描述
3.示例输出
4.程序模板
5.问题解答提示
6.后续问题和任务
程序模板是完整的、可实际运行的C程序,其中关键的一行或者多行代码已经替换为注释。
请先阅读问题描述,分析示例输出;然后研究模板的代码。
参考问题解答提示,用C代码替换/**/注释。
编译并执行程序,并将输出结果与提供的示例输出进行比较。
然后回答强化练习。
实验目的:
本实验旨在巩固学生对于编程概念的理解。
在这个实验中,学生将练习:
•switch/case结构的嵌套使用
在强化练习中,学生将练习:
• break语句与continue语句的用法
问题描述:
编写一个自动售货机的程序。
该程序应具如下功能:有二级菜单,一级菜单商品类的选择,二级是具体商品的选择,顾客先选择商品类,然后选择具体商品,输入购买数量,自动售货机根据选择的商品和输入的数量,计算并显示所选商品总金额。
示例输出:
程序模板:
#include<stdio.h>
main()
{
int x,n,y;
float sum=0.0;
printf("请选择: 1.日用品 2.文具 3. 食品\n");
scanf("%d",&x);
switch(x)
{
case 1: printf("请选择:1.牙刷(3.5元/支) 2.牙膏(6.2元支)\n"); printf(" 3.肥皂(2元/块) 4.毛巾(8.6元/条)\n"); scanf("%d",&y);
printf("数量?");
scanf("%d",&n);
switch( )/*匹配顾客选择的具体商品*/
{
case 1: sum=3.5* ; break;
case 2: sum=6.2* ; break;
case 3: sum=2* ; break;
case 4: sum=8.6* ; break;
}
break;
case 2: printf("请选择:1.笔( 3元/支) 2.笔记本(1.2元/个)\n"); printf(" 3.文件夹(12元/个) 4.文具盒(8.6元/个)\n"); scanf("%c",&y);
printf("数量?");
scanf("%d",&n);
switch(y)
{
case 1: sum=3*n; break;
case 2: sum=1.2*n; break;
case 3: sum=12*n; break;
case 4: sum=8.6*n; break;
}
break;
case 3: printf("请选择:1.白糖(3.6元/包) 2.盐(1元/包)\n"); printf(" 3.饼(2元/个) 4.方便面(3.6元/条)\n"); scanf("%c",&y);
printf("数量?");
scanf("%d",&n);
switch(y)
{
case 1: sum=3.6*n; break;
case 2: sum=1*n; break;
case 3: sum=2*n; break;
case 4: sum=3.6*n; break;
}
break;
}
printf("总计:%.2f 元\n",sum);
}
问题解答提示:
1、程序功能具有二级菜单,因此需要使用swith/case的嵌套结构实现;
2、第一层嵌套实现对商品类型的选择,根据用户选择的序号进行匹配;
3、在进入所属商品类型后,顾客选择该类型下的具体商品,并提示输入购买数量;
4、第二层嵌套实现对具体商品的选择,根据用户选择的序号进行匹配,同时根据购
买数量计算总额;
5、最后输出顾客本次购买的总金额;
强化练习:
1.考虑上述程序中的break语句是否能够改为continue语句?分析原因?
4.4 综合练习
1.编一程序实现如下功能:商店有打印纸(18元/本)、墨盒(132元/个)、软盘(4.5元/片)出售,商店进行优惠酬宾活动。
具体做法如下:顾客购买商品的总额达到了100元,优惠5%,达到了200元以上,优惠6%;达到了300元以上,优惠7%;达到了400元以上,优惠8%;达到了500元以上,优惠10%。
根据不同的购买量,打印应付货款。
分析:sum=打印纸数*18(元)+墨盒数*132(元)+软盘数*4.5(元)当sum≥100元,给予相应的优惠,将sum/100,使用switch语句进行判定优惠率。
依题意,编写程序如下:
#include<stdio.h>
main()
{
int n,dyz,fh,rb;
float: sum,yf;
printf("请输入打印纸、墨盒、软盘的数量:");
scanf("%d,%d,%d ",&dyz,&fh,&rb);
sum=dyz*18+fh*132+rb*4.5;
n=sum/100;
switch (n)
{
case 0: p=0;
break;
case 1: p=0.05;
break;
case 2: p=0.06;
break;
case 3: p=0.07
break;
case 4: p=0.08;
break;
default: p=0.10;
}
yf=sum-sum*p;
printf("应付款数=%8.2f\n",yf);
}
2.编写程序。
给出一个不多于4位的正整数,要求:
(1)求出它是几位数;
(2)分别打印出每下位数字;
(3)按逆序打印出各位数字。
分析:(1)因为不多4位的数,如果大于999,就可判断输入的数为4位,以此类推,可判断3、2和1位数;(2)确定输入数的位数后,用switch语句分别打印每一位数字;(3)完成每一位数字打印后接着逆序输出。
依题意编写程序如下:
#include<stdio.h>
main()
{
int num,indiv,ten,hundred,thousand,digit;
printf("Input a integer number(0-9999):");
scanf("%d",&num);
if (num>999) digit=4;
else if (num>99) digit=3;
else if (num>9) digit=2;
else digit=1;
printf("Digits=%d\n",digit);
printf("Each digit is :");
thousand=num/1000;
hundred=(num-thousand*1000)/100
ten=(num-thousand*1000-hundred*100)/10;
indiv=num-thousand*1000-hundred*100-ten*10;
switch(digit)
{
case 4: printf("%d,%d,%d,%d",thousand,hundred,ten,indiv);
printf("\nInversed number is :");
printf("%d%d%d%d\n",indiv,ten,hundred,thousand);
break;
case 3: printf("%d,%d,%d",hundred,ten,indiv);
printf("\nInversed number is :");
printf("%d%d%d%d\n",indiv,ten,hundred);
break;
case 2: printf("%d,%d",ten,indiv);
printf("\nInversed number is :");
printf("%d%d%d%d\n",indiv,ten); break;
case 1: printf("%d",indiv);
printf("\nInversed number is :"); printf("%d%d%d%d\n",indiv);
}
}
运行结果:
Input a integer number (0-9999): 1234 <回车> Digits=4
Each digit is : 1,2,3,4
Inversed number is : 4321。