实验三-选择结构程序设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三选择结构程序设计
3.1实验要求与目的
1.掌握关系表达式和逻辑表达式的正确应用
2.条件表达式的正确应用
3. 掌握if语句,if-else语句,if语句的嵌套的编程方法
4. 掌握switch的编程方法及执行特点
5.掌握相关的算法(大小写字母的转换,判断数的奇偶,整数的整除,分段函数的求解,成绩的转换等)
6. 培养解决实际问题的能力
3.2实验指导
结构化程序设计的三大结构:顺序结构、选择结构和循环结构。
计算机在执行过程时,根据条件选择所要执行的语句,称为选择结构,也称为分支结构。在解决实际问题时,可能会因为其种条件的约束产生分支,可能是单分支结构、双分支结构和多分支结构等。因此可选择相应的语句进行程序设计。
C语言程序设计实现单分支结构常采用,if语句;实现双分支结构常采用:if-else语句;实现多分支结构常采用:if-else嵌套语句或switch语句。
选择结构的程序设计除了选择适当的语句外,另一关键问题是条件的正确表示。条件可以用表达式来描述,如关系表达式、逻辑表达式等。
【3.1】录入下列程序,输入给定的测试数据,观察其程序执行结果。程序文件名为:ex3_1.c。
输入测试数据:23 56
程序运行结果:max=56
#include
void main()
{
int a,b,max;
scanf("%d%d",&a,&b); /*从键盘输入两整数*/
max=a;
if(max
max=b;
printf("max=%d\n",max); /*输出最大数*/
}
该程序的执行过程,从键盘输入两个整数赋予a,b,把a的值先赋予变量max,采用if 语句判别max和b的大小,若max小于b,则把b的值赋予max,然后执行printf语句输出max的值;若max大于b,不执行if后的语句,而执行printf语句输出max的值;max中的值总是大数。
因此该程序的功能是输入两个整数,输出其中的大数。
单分支结构if语句的一般形式:
if(表达式) 语句;
其语义,如果表达式的值为非零值(为真),则执行其后的语句,否则不执行该语句。
小结:
1.表达式也称为条件表达式,可以包括常量、变量和表达式的任意表达式。常用的是
单一变量,关系表达式和逻辑表达式。
2.若语句由两条以上的语句组成时,必须用花括号{}括起来,组合成一条复合语句。
【3.2】编程实现,从键盘输入一个字符型数据,若输入小写字符,则将其转换成大写字符,输出相应的整数;若输入其它字符,则显示出错信息。程序文件名为:ex3_2.c。
分析:根据题意,本程序要解决三个问题,1)输入字符数据;2)判断输入的字符是否是小写字符;3)输出(输出大写字符相应的整数或输出错误信息)。
因此根据判断条件输出两种结果的其中一个。
#include
void main()
{
char c;
scanf("%c",&c);
if('a'<=c&&c<='z')
{
c=c-32;
printf("%d\n",c);
}
else
printf("data error\n");
}
第一次运行程序,
输入测试数据:a
程序运行结果:65
第二次运行程序,
输入测试数据:A
程序运行结果:data error
双分支结构if语句的一般形式:
if(表达式)
语句1;
else
语句2;
其语义,如果表达式的值为非零值(为真),则执行if后的语句1,否则执行else后的语句2。
同理,使用该语句时,表达式(条件表达式)是可以包括常量、变量和表达式的任意表达式。若语句1或语句2是由两条以上的语句组成,则必须用必须用花括号{}括起来,组合成一条复合语句。
小结:
1.任意字符在内存中都以ASCII码存储,一个字符数据既可以以字符形式输出(输出
格式控制符%c),也可以以整数形式输出(输出格式控制符%d)。
2.字符数据可以进行算术运算,即相当于对其字符数据的ASCII码进行运算。根据这
一特点,可实现大小写字符的相互转换。
小写字母转换为大写字母:c=c-32 或者c=c-' a'+'A'
大写字母转换为小写字母:c=c+32 或者c=c+' a'-'A'
3. 字符数据可以进行比较运算,因此判断一个字符属于哪个范围可采用下列方式实
现。
属于小写字母的表达式:'a'<=c&&c<='z' 或者 97<=c&&c<=122
属于大写字母的表达式:'A'<=c&&c<='Z' 或者 65<=c&&c<=90
属于数值字符的表达式:'0'<=c&&c<='9' 或者48<=c&&c<=57
【3.3】从键盘输入两个整数m,n (假设输入的数m>0,n>0),判断m 能否被n 整除,若能
输出m 和n ,否则输出m 与n 的余数。程序文件名:ex3_3.c 。
分析:分析问题,理出算法,是程序设计的核心,如何实现m 能否被n 整除是解决该问题的关键。
m 能被n 整除的表达式:m%n==0。
实现程序编写的要点是学会对题意的“翻译”。即,从键盘输入数一定采用scanf 格式输入函数。判断m 能否被n 整除,其判断结果只有两个,能整除输出原数,否则输出两数的余数,因此可采用选择结构的if-else 语句。
#include
void main()
{
int m,n;
printf("Input 2 number m & n:");
scanf("%d%d",&m,&n);
if(m%n==0) /*判断m 能否被n 整除*/
printf("m=%d,n=%d",m,n);
else
printf("%d",m%n);
}
第一次运行程序,
输入测试数据:21 7
程序运行结果:m=21,n=7
第二次运行程序,
输入测试数据:23 6
程序运行结果:5
小结:
1.由此题可扩展为,判断一个数是偶数还是奇数。若m 是偶数则只需考虑m 能否被2整除,若能整除,则m 是偶数,不能整除则m 是奇数。
2.注意一个等号“=”与双等号“==”的区别。
一个等号称为赋值号,若a=5,其含义是将5赋给a 。双等号为算术运算符“等号”,若a==5,其含义是变量a 的值与整数5是否相等。
3.求余运算符“%”,求余运算只能求任意两整数的余数。
【3.4】输入x 的值求分段函数y 的值。程序文件名:ex3_4.c 。
10 113101 121 ⎪⎩
⎪⎨⎧>-≤≤-<=x x x x x x y
分析:本程序是求分段函数的值,根据x 的取值不同,出现了三个分支的情形。因此采用多分支的控制结构,嵌套的if 语句实现。编程思路,当有多分支结构时,可先转换为二分支