C程序设计实验指导书 - 2014版 下载本文

实验三 选择结构程序设计

实验三 选择结构程序设计(2学时)

目的要求

(1)掌握C语言的条件选择结构的编程(if、switch语句)。

(2)了解C语言表示逻辑量的方法(0代表逻辑\假\,1代表逻辑\真\)。 (3)学会正确的使用逻辑运算符和逻辑表达式。

(4)通过简单程序的编写进一步熟悉、巩固所学的理论知识。

上机内容

一般示例

【例1】下面的程序读入任意两个整数x、y,然后将两个数中的大数保存在x中,小数保存在y中。你能将程序中的空行补充完整吗?

# include void main( ) { int x,y,t; printf(\ scanf (\ ) ; if (x

; ; ; } printf (\}

【小提示】本题中要用到2个数的交换算法。这是一种常用算法,希望你能够理解、记住并加以灵活运用。

【例2】 已知三个数a,b,c,找出最大值放于max中。

分析:由已知可得在变量定义时定义四个变量a,b,c和max,a,b,c是任意输入的三个数,max是用来存放结果最大值的。第一次比较a和b,把大数存入max中,因a,b都可能是大值,所以用if语句中if-else 形式。第二次比较max和c,把最大数存入max中,用if语句的第一种形式if形式。max即为a,b,c中的最大值。

#include \void main() { int a,b,c,max; /*define four integer varibles*/ scanf(―a=%d,b=%d,c=%d‖,&a,&b,&c); if (a >= b) max = a; /*a>=b*/

15

实验三 选择结构程序设计

else max = b; /*a max) max = c; /*c is the max*/ printf(\}

若分别输入下列数据,分析程序的执行顺序并写出运行结果 (1)a=1,b=2,c=3 (2)a=2,b=1,c=3 (3)a=3,b=2,c=1 (4)a=3,b=1,c=2 (5)a=3,b=3,c=2 (6)a=2,b=1,c=2

【例3】输入某学生的成绩,经处理后给出学生的等级,等级分类如下: 90分以上(包括90): A 80至90分(包括80):B 70至80分(包括70):C 60至70分(包括60):D 60分以下: E 【方法一】用if嵌套

分析:由题意知如果某学生成绩在90分以上,等级为A;否则,如果成绩大于80分,等级为B;否则,如果成绩大于70分,等级为C;否则,如果成绩大于60分为D;否则,如果成绩小于60分,等级为E;但当我们输入成绩时也可能输错,出现小于0或大于100,这时也要做处理,输出出错信息。因此,再用if嵌套前,应先判断输入的成绩是否在0~100之间。

#include\void main() {

int score; char grade;

16

实验三 选择结构程序设计

printf(\ scanf(\ if (score>100 || score<0) printf(\ else

{ if(score >= 90) grade = 'A'; else

{ if( score >= 80) grade = 'B'; else { if(score>=70) grade='C'; else { if (score >= 60) grade = 'D'; else grade = 'E'; } } }

printf(\ } }

输入测试数据,调试程序。测试数据要覆盖所有路径,注意临界值,例如此题中得100分,60分,0分以及小于0和大于100的数据。 【方法二】用switch语句

分析:switch 语句是用于处理多分支的语句。注意,case后的表达式必须是一个常量表达式,所以在以用switch语句之前,必须把0~100之间的成绩分别化成相关的常量。所有A(除100以外),B,C,D类的成绩的共同特点是十位数相同,此外都是E类。则由此可得把score除十取整,化为相应的常数。

#include\void main() {

int g,s; char ch;

printf(\scanf(\s = g / 10;

if(s < 0 || s > 10)

printf(\else { switch (s) {

17

实验三 选择结构程序设计

case 10:

case 9: ch = 'A'; break; case 8: ch = 'B'; break; case 7: ch = 'C'; break; case 6: ch = 'D'; break; default: ch = 'E'; }

printf(\ }

}

输入测试数据,同【方法一】一样调试程序并写出结果。

【思考】通过本题,你能将if 语句和switch语句的用法好好总结一下吗?好好学习编程,将来,老师希望能用你编的程序来判定咱们班同学的成绩! 你的测试数据是: 编程作业

1.本题是要练习短路求值。

int a = 0,b = 0,x;

x = 0 && (a = b = 777); printf(―%d %d %d\\n‖,a,b,x); x = 777 || (a = ++ b);

printf(―%d %d %d\\n‖,a,b,x);

这段程序将输出什么?首先手工模拟运行,得到结果,然后编写一个测试程序,进行检验。 手工模拟运行结果是: 【思考】教材中有很多相关知识点的小程序段,你会编程进行测试、运行吗?通过自己编程来测试这些小程序段,你会理解的更深刻,掌握的更牢固!

2.鸡兔同笼

一个笼子里关了鸡和兔子(鸡有2只脚,兔子有4只脚,没有例外)。已经知道了笼子里面脚的总数nFeets(nFeets<32768),问笼子里面至少有多少只动物,至多有多少只动物?

【小提示】这是一个简单的计算问题。解决简单计算问题的基本过程包括将一个用自然语言描述的实际问题抽象成一个实际问题,继而编程实现计算过程,并将计算结果还原成对原来问题的解答。因此,首先要读懂问题,搞清输入和输出数据的含义,并通过输入输出的

18