实验三 选择结构程序设计
一、实验学时 2学时 二、实验目的
(一)掌握C语言关系表达式和逻辑表达式的运算和使用;
(二)正确使用条件控制语句(if语句、switch语句)进行选择结构程序设计。
三、预习要求
(一)关系运算符和关系表达式、逻辑运算符和逻辑表达式; (二)if语句的三种形式(单分支、双分支、多分支),以及if语句的嵌套; (三)switch语句的形式。
四、实验内容
(一)分析下面程序,掌握关系及逻辑表达式的运算规则。 /* c3-1.c */
/* 关系及逻辑表达式运算规则 */
#include \void main( ) { int a=3,b=5,c=8;
if(a++<3 && c--!=0) b=b+1;
printf(\
}
注意该程序中的条件判断表达式a++<3 && c--!=0是一个逻辑表达式,关系表达式a++<3的值为假,因此后一部分c--!=0就不再计算。
(二)输入下面两段程序并运行,掌握case语句中break语句的作用。
1./* c3-2.c */ /* c3-3.c */
/* 不含break的switch */ /* 含break的switch */
#include \
void main( ) void main( ) { int a,m=0,n=0,k=0; scanf(\ switch(a) { case 1: m++; case 2: case 3: n++; case 4: case 5: k++;
{ int a,m=0,n=0,k=0; scanf(\ switch(a) { case 1: m++; break; case 2:
case 3: n++; break;
case 4:
case 5: k++;
} }
printf(\} }
分别从键盘上输入1、3、5,写出程序运行的结果。
(三)完善程序,从键盘上输入x的值,按下式计算y的值。
┌ x x<1 y= ┤ 2x-1 1≤x<10
└ 3x-11 x≥10
编程提示:注意逻辑表达式的正确表达方法,数学中的1≤x<10应使用C语言的逻辑表达式(x>=1 && x<10)来表示。
下面是用多分支选择结构实现本题的程序结构: /* c3-4.c */
/* if 语句实现的多分支结构 */ #include \ void main( ) { 定义变量;
输入x;
if ( _______________ ) 按y=x为变量y赋值; else if( _______________ ) 按y=2x-1为变量y赋值; else
按y=3x-11为变量y赋值; printf(\ }
注意:在赋值语句中加乘号。
(四)编写程序,给出一个百分制成绩,要求输出相应的等级A、B、C、D、E。90分以上为'A',80~89分为'B',70~79分为'C',60~69分为'D',60分以下为'E'。
编程提示: 1.先定义一个整型变量存放百分制成绩、定义一个字符型变量存放相应的等级成绩; 2.输入百分制成绩;
3.将百分制成绩按10分,分档作为switch语句中括号内的表达式; 4.按case 10:
case 9:
case 8: case 7: case 6: default:
这六种匹配情况分别选择不同的入口; 5.输出转换后的等级成绩。
(五)下面程序运行时从键盘上分别输入(20,15),(15,20),写出运行结果。 /* c3-5.c */
/* 分支结构中的复合语句*/ #include \ void main( )
{ int a,b,t; t = 0;
scanf(\ if (a>b) t = a ; a = b ; b = t ;
printf(\ }
(六)编写程序,给出一个不多于3位的正整数n,要求:(1)求出它是几位数;(2)分别打印出每一位数字(数字之间加一个空格);(3)按逆序打印出各位数字(数字之间加一个空格)。
编程提示: 1.定义变量(考虑需要几个变量)并输入一个3位以下的正整数n 2.将n拆分成三个一位数:
表达式:n 可将一个三位数n拆分出三位数中的个位数;
表达式:n/100 可将一个三位数n拆分出三位数中的百位数;
表达式:((n0))/10 或(n-(n/100)*100)/10 可将一个三位数n拆分出三位数中
的十位数。
3.用一个嵌套的选择结构,按照百位数、十位数是否为0决定n为几位数。 4.按相反的顺序输出n。
思考:如果是对一个5位的正整数进行上述处理,程序应如何改动?
(七)写出与表达式z =( x>=y ? x : y )等价的if语句,并上机验证。
五、实验注意事项
(一)C程序中表示比较运算的等号用“==”表示,赋值运算符用“=”表示,不能将赋值号“=”用于比较运算。
(二)控制表达式是指任何合法的C语言表达式(不只限于关系或逻辑表达式),只要表达式的值为“非零”,则为“真”,“零”则为“假”
(三)在if语句的嵌套结构中,else与if的配对原则是:每个else总是与同一个程序中、在前面出现的、而且距它最近的一个尚未配对的if构成配对关系。
(四)case及后面的常量表达式,实际仅是起标号作用。控制表达式的值与某个情况常量一旦匹配,那么,在执行下面语句的过程中,只要不遇到break语句,就一直执行下去,而不再判别是否匹配。允许出现多个“case”与一组语句相对应的情况。
六、思考题
(一)下面程序的功能是实现表达式z=( x>=y ? x : y),请将程序填写完整。 /* 分支结构的程序 */
#include \ void main( )
{ int x, y, z;
printf(\ scanf(\ if (________) z=x; else z=y;
printf(\ }
(二)下面程序的运行结果为_______________。 /* 分支结构的程序 */ #include \ void main( )
{ int a=3,b=5,c=8;
if(a++<3 && c--!=0) b=b+1; printf(\
}
(三)程序填空,从键盘上输入x的值,按下式计算y的值。 ┌ x x<1 y= ┤ 2x-1 1≤x<10 └ 3x-11 x≥10 /* 多分支结构的程序 */ #include \ void main( ) { float x,y; printf(\
scanf(\
if ( _________ ) y=x; else if( x>=1 && x<10 ) y=2*x-1; else y=3*x-11;
printf(\ }
(四)下面程序运行时从键盘上输入15,20,运行结果为_______________。 /* 分支结构的程序 */ #include \ void main( )
{ int a,b,t;
t = 0;
scanf(\if (a>b)
t = a ; a = b ; b = t ;
printf(\
}