《C语言程序设计》案例讲义 - 完整版 联系客服

发布时间 : 星期二 文章《C语言程序设计》案例讲义 - 完整版更新完毕开始阅读09bd7a05bed5b9f3f90f1ca9

案例四 比较两个数的大小

教学目的:

1. 掌握关系运算符的功能; 2. 掌握基本的if……else……语句格式。

在实际应用中经常需要对两个甚至多个对象进行比较,进行某种决策。如有两个整数,需要找出其中的大数,进行输出,请编写程序。

#include

#include main() {

int num1,num2,max; clrscr();

scanf(“%d%d”,&num1,&num2);

if(num1>num2) /*比较两个数,大数存入变量max中*/ max=num1; else

max=num2;

printf(“maximum is =%d\\n”, max); }

一、案例分析

该案例中我们唯一不熟悉的语句是if??else??,其功能是首先计算表达式“num1>num2”的值,然后根据计算结果决定执行某一分支。

1. if??else??语句的基本格式

if(表达式)

{语句组1;} [else

{语句组2;}]

2. if??else??语句的执行过程

当执行到if??else??语句时,其过程如下:

计算if后的表达式;

(2) 如果表达式的值为非0,则执行语句组1;如果表达式的值为0,则执行语句组2。当else部分省略时,表达式的值为0时,什么也不做;

(3) 不管执行哪一组语句,程序接着执行if??else??语句的下一条语句。 3.if??else??语句执行过程的图形表示

称为流线,表示程序执行流向;

称为判断框,它使程序出现两个分支;

称为处理框;

(1)

25

?? 非0 计算表达式的值 0 语句组2 语句组1 ?? 图4.1 if??else??语句执行图解 根据if??else??语句的执行过程图解4.1可知,在一次执行if??else??语句时,只可能执行语句组1或者执行语句组2。在程序中,把这样的结构称为分支结构或选择结构,也即一个if??else??语句把程序分为两个分支,任何时刻只会选择其中一个分支执行。当然如果省略“else??”部分,则图4.1就没有为0 的分支,该分支变为一条流线。

4.表达式

表达式是用运算将运算量连接起来的有意义的式子,如3+5,num1+num2等。C语言中运算符非常丰富,我们已经学过的有“+”、“-”、“*”、“/”、“()”等运算符,这类运算符称为算术运算符。 4.1 运算符的优先级 当一个表达式中出现不同的运算符时,级别高的运算符先做。如算术运算符“+ - * / () ” 从左到右级别依次升高。

4.2 运算符的结合性 当一个运算对象两侧运算符的优先级相同时,这时根据运算符的结合性来决定运算次序。按“从右向左”的顺序运算,称为右结合性,按“从左向右”的顺序运算时,称为左结合性。如3+5-8表达式,其中“5”的左右两有运算符“+”和“-”,优先级相同,这时由于它们的结合性为左结合,因此“5”先与“3”进行加法运算,然后再做“-”运算。

4.3 关系运算符 是用于进行两个对象大小的比较,决定其关系的。C语言中定义的关系运算符有:“>、<、>=、<=、!、==”六种运算符,分别用于“大于、小于、大于等于、小于等于、不等于和等于”的比较,其中“>、<、>=、<=”优先级相同,“!、==”优先级相同,前四个的优先级高于后两种。

4.3.1关系运算的结果为“0”或“非0”两种,又称为“假”和“真”。如5>3的值为非0,也就是“真”;5>5的值为0,即假,5>=5的值为非0,即为真。

4.3.2关系表达式 用关系运算符连接起来的式子,称为关系表达式。如5+8==7-2,在这个关系表达式中,既有关系运算符,又有算术运算符,算术运算符优先于关系运算符,所以先进行算术运算,然后进行关系运算。(关键是注意关系运算必须是同类型的量才能进行比较,即关系运算)

5.语句组 当有多条语句组成的语句组时,语句组需要用“{}”括起来。

6.本案例中if??else??语句的执行

if(num1>num2)

max=num1;

else

max=num2;

(1)先计算关系表达式“num1>num2”的值,如果num1大于num2,则表达式的值为非

0,即真;反之为0,即假; (2)如果表达式的值为非0,则将num1的值赋给变量max,即执行“max=num1;”语句,

26

否则执行“max=num2;”语句;

(3)不管执行“max=num1;”还是执行“max=num2;”分支,最后都接着执行“printf(“maximum is =y\\n”, max);”语句,输出两个整数中的大数。 其对应的图解如图4.2所示。

?? 非0 num1>num2 0 max=num2 max=num1 ?? 图4.2 案例四if??else??语句执行图解

7.if??else??语句书写时注意,if和else对齐,语句组1和语句组2要向后缩进一定的字符。

二、应用举例

【例4-1】用省略else部分的if语句改写本案例。程序如下:

#include #include main() {

int num1,num2,max; clrscr();

scanf(“%d%d”,&num1,&num2); max=num2;

if(num1>num2) /*比较两个数,大数存入变量max中*/ max=num1;

printf(“maximum is =y\\n”, max); }

上述的改写是先假设num2是较大的数,如果num1大于num2,即表达式“num1>num2”的值为非0,说明num1较大,则把num1赋给变量max,否则说明num2是大数,它已经赋给max了,因此不需要再赋值了。上述if语句对应的图解如图4-3所示。

【例4-2】请编程输入学生成绩,并且根据成绩判断其是否通过考试,如果成绩大于等于60,则输出“passed”,否则输出“failed”。

分析:本例要求先输入一个学生的成绩,然后根据其成绩判断是否通过考试,如成绩大于等于60,则通过显示“passed”,否则输出“failed”。 成绩的输入用scanf函数,并且存入score变量中,然后判断score的值是否大于等于60,用if??else??语句实现判断,并输出相应的提示字符。程序如下:

27

?? 非0 num1>num2 0 max=num1 ?? 图4.3 if?? 语句执行图解

#include #include main() {

float score;

clrscr(); scanf(“%f”,&score);

if(score>=60) /*判断score的值是否大于等于60*/ printf(“passed\\n”); else

printf(“failed\\n”); }

【例4-3】对于用if??else??语句构成的如案例这样的简单应用程序,C语言还定义了一个运算符来实现这样的选择功能。

条件运算符:“? :”是条件运算符,其使用形式为:(表达式1)?(表达式2):(表达式3),其计算顺序是:先计算表达式1的值,如果其值为非0(真),则整个条件表达式取表达式2的值,所以接着计算表达式2;如果表达式1的值为0(假),则取表达式3作为条件表达式的值,因此计算表达式3,此时表达式2不进行计算。如max=(num1>num2)?num1:num2一个表达式即可实现if??else??语句的功能。所以用条件运算符来改写案例程序如下,程序更加简洁。

#include #include main() {

int num1,num2,max; clrscr();

scanf(“%d%d”,&num1,&num2); max=(num1>num2)?num1:num2;

printf(“maximum is =%d\\n”, max); }

注:条件运算符是右结合性。

三、习题

1. 如果将【例4-1】中的“max=num2;”语句改成“max=num1;”,应如何修改程序?

28