if else 语句
TAG: if…else…,if语句,条件控制语句,语句,程序,程序结构
TEXT: if…else…语句:对一个条件的判断通常有两个可能:‘真(1)’或‘假(0)’,单分支结构只考虑了其条件为‘真’的情况并给出相应的操作,而没有考虑当条件为‘假’时程序应执行什么动作。当无论条件为‘真’还是为‘假’都需要执行不同的操作时,可以采用双分支选择结构。
C语言是通过if…else语句实现的。if…else…语句可以在条件为‘真’或为‘假’时执行指定的不同的动作。
牋?if…else语句的执行过程:
牋牋牋 if?(表达式)?语句序列1;
else?语句序列2;
其中:
if、else:C语言的关键字,由if引导条件为‘真’是执行的操作;由else引导条件为‘假’是执行的操作。
语句序列:当表达式的值为真(或为假)时执行的语句。可以是一条语句或一组语句,如果是一组语句,需要采用复合语句形式,用{ }将这组语句括起来。
执行过程:当表达式结果为真时,执行语句S1,放弃语句S2的执行,执行if语句的下一条语句;当表达式结果为假时,执行语句S2,放弃语句S1的执行,执行if语句的下一条语句。无论如何,对于一次条件判断,语句S1和语句S2只能有一个被执行。不能同时被执行。
例如:对及格和不及格学生的成绩信息都要输出。
if(grade>=60)
牋 printf("\n%d,passed\n",grade);
else
牋 printf("\n%d,failed\n",grade);?
例4-6 输入整数a,b若a2+b2大于100,则输出a2+b2百位以上的数字,否则输出两数之和。
分支选择处理的条件是:a2+b2>100.根据两个整数相除仍然为整数的原则,用(a2+b2)/100
main()
{
int a,b,y;
printf("enter a,b:");
scanf("%d%d",&a,&b);
if(a*a+b*b)>100牋?* if(a2+b2>100) */
y=(a*a+b*b)/100;
else
y=a+b;
printf("y=%d\n",y);
}
程序运行结果:
enter a,b:5 8
y=13
enter a,b:10 2
y=1
通常情况下,单分支结构也可以写成双分支结构的形式。因为双分支结构形式是一种对称形式,它更符合人们的思维习惯。写出来的程序也比较明确、清晰、易读。
例4-3题可改写为:
牋牋 main()
牋牋 {
牋牋牋?int a,absa;
牋牋牋?printf("enter one number: ");
牋牋牋?scanf("%d",&a);
牋牋牋?if(a<0)?
牋牋牋牋牋 absa=-a;
牋牋牋?else
牋牋牋牋牋 absa=a;
牋牋牋?printf("|%d|=%d",a,absa);
牋牋?}

提示?#22312;if…else…结构中,if体和else体中的语句都应该采用“右缩进“的格式书写。整个程序的缩进距离应该是一致的。使得程序清晰、易读。不遵循统一的缩进格式会使程序难以阅读。

在C语言中,除了采用if…else…语句可以实现双分支结构外,还可以通过条件表达式实现双分支结构。
C语言提供的条件表达式的格式:
牋 表达式1?表达式2:表达式3
执行过程:
求解表达式1的值,若该值为‘真(非0)’:则将表达式2的计算结果值作为整个表达式的结果;否则将表达式3的计算结果值作为整个表达式的结果。
例如:if(a<0) absa=-a;
else?absa=a;?可以由(a<0)??a:a;替换。
例4-3题可改写为:
牋牋 main()
牋牋 {
牋牋牋 int a,absa;
牋牋牋 printf("enter one number: ");
牋牋牋 scanf("%d",&a);
牋牋牋 absa=(a<0)??a:a;牋牋牋?
牋牋牋牋牋牋?printf("|%d|=%d",a,absa);
牋牋?}
使用条件表达式实现双分支结构的条件是:(1)可以由一个if语句实现的双分支结构;(2)无论条件的结果是‘真’或是‘假’,所执行的只能是一条简单的语句,并且这条语句只能是给同一个变量赋值的赋值语句。
用条件表达式来代替if语句实现双分支结构,可以使程序变得简洁,提高执行速度。
将一个if…else…结构转换成条件表达式的方法如下:
(1)将原if语句的条件表达式写成e1;
(2)将当条件为真时的执行的赋值语句右端的表达式做e2;
(3)将当条件为假时的执行的赋值语句右端的表达式做e3;

REF: .TXT
单分支if语句
TAG: if,if语句,条件控制语句,语句,程序,程序结构
TEXT: if语句:if 语句格式:
牋牋?if(表达式)?语句;
其中:
if:C语言的关键字,告知编译系统这是一个条件判断语句。
表达式:表示对一个条件的判断,其结果为0或1(假与真),表达式通常为关系表达式或逻辑表达式。也可以直接表示为某一数值。
语句:当表达式的值为真(非0)时执行的语句。可以是一条语句或一组语句,如果是一组语句,则需要采用复合语句形式,用{ }将这组语句括起来。
if语句的执行过程:
如果表达式的值为真(非0),则执行语句的操作,否则,当表达式的值为假(0)时,则跳过语句部分,接着执行if语句下面的语句。
例如:输出及格学生的成绩信息。
if(grade>=60)?printf("\n%d,passed\n",grade);

例4-3 求从键盘输入的一个整型数据的绝对值。
正整数的绝对值是数据本身,负整数的绝对值则是该数据的相反数。用变量a来标识从键盘输入的整型数据,利用另一个变量absa标识该数据的绝对值。首先将变量a的内容赋给变量absa。
由于输入的数据可能是正整数也可能为负整数,所以,如果输入的数据为负数,即a<0条件成立,则需要将a的相反数(-a)赋给absa,使得absa的值为正,然后执行if语句的下一条语句,本程序中的if语句的下一条语句是通过printf函数输出结果。否则,当a >0条件成立时,不需要任何处理,直接执行if语句的下一条语句。程序清单如下:
main()
{
int a,absa;
printf("enter one number: ");
scanf("%d",&a);
absa=a;
if(a<0)
absa=-a;
printf("|%d|=%d\n",a,absa);
}
程序运行结果:
enter one number:5
|5|=5
enter one number:-5
|-5|=5
在程序中,当条件a<0成立时,执行语句absa=-a;然后执行printf函数,否则,当a>=0时,不执行absa=-a;直接执行printf函数。

例4-4 编程实现两个整数相除。
在程序设计中,除以0可以导致致命的错误。因此两个整数相除的必要条件是除数不能为0。因此,在设计时,要保证当除数非0时,进行两个数相除,否则,当除数为0时,不作任何处理。程序清单如下:
main()牋牋牋
{
int a,b;
printf("enter two numbers: ");
scanf("%d%d",&a,&b);
if(b) printf("%d",a/b);
}
程序运行结果::
enter two numbers:3 5<回车>
0
enter two numbers:8 2<回车>
4
由于if分支结构只在条件为‘真’的情况执行指定的操作,当条件为‘假’时跳过这个操作,不做任何处理,所以不能使用表达式为‘假’去做相应的操作。
例如:if(x=0)printf("x is 0.\");不能输出任何信息。

提示?#26465;件(表达式),不只局限于逻辑表达式或关系表达式,可以是任意的数值类型(包括:整型、实型、字符型、指针型数据等)。因为在 if中只要表达式的值为非0,则认为是“真(逻辑1)”;否则,被认为是“假(逻辑0)”。

例4-5 输入两个数,按大小顺序输出。
采用两个变量a,b存放这两个数,数据由键盘输入,变量a中存两个数中的大数,变量b中存放两个数中较小的数。通过printf("max is %d,min is %d\n",a,b);函数可以做到总是从大到小数输出。这里需要保证a的值总是大于等于b的值,当a<b时,就要交换a与b的值。假定一个存放中间结果的变量temp,于是交换过程为:
if (a<b)
{
temp=a;
a=b;
b=temp;
}
程序清单如下:
main()
{
int a,b,temp;
scanf("%d%d",&a,&b);
if(a<b)
{牋牋牋牋?/*由三条语句完成的交换过程*/
牋 temp=a;
牋 a=b;
牋 b=temp;
}
printf("max is %d,min is %d\n",a,b);
}
程序运行结果:
3 5
max is 5,min is 3
5 3
max is 5,min is 3

这几个例子中,当条件为真时,能执行的语句可以是一条语句,也可以由多条语句组成。当满足条件时需要执行多条语句,C语言要将这些语句写成复合语句的形式,即用{}括起来。否则容易产生逻辑错误。程序中凡是可以使用简单语句的地方都可以使用复合语句。
上题中如果满足条件a<b 不用{ }将三条语句括起来,会出现什么情况?请上机试试。

提示?#22312;if分支结构的条件之后直接使用分号‘;’表示当条件为‘真’时执行空语句,这将导致程序设计的逻辑错误。例如:if(x>=0) ;

REF: .TXT
双分支if else 语言
TAG: if…else…,if语句,条件控制语句,语句,程序,程序结构
TEXT: if…else…语句:对一个条件的判断通常有两个可能:‘真(1)’或‘假(0)’,单分支结构只考虑了其条件为‘真’的情况并给出相应的操作,而没有考虑当条件为‘假’时程序应执行什么动作。当无论条件为‘真’还是为‘假’都需要执行不同的操作时,可以采用双分支选择结构。
C语言是通过if…else语句实现的。if…else…语句可以在条件为‘真’或为‘假’时执行指定的不同的动作。
牋?if…else语句的执行过程:
牋牋牋 if?(表达式)?语句序列1;
else?语句序列2;
其中:
if、else:C语言的关键字,由if引导条件为‘真’是执行的操作;由else引导条件为‘假’是执行的操作。
语句序列:当表达式的值为真(或为假)时执行的语句。可以是一条语句或一组语句,如果是一组语句,需要采用复合语句形式,用{ }将这组语句括起来。
执行过程:当表达式结果为真时,执行语句S1,放弃语句S2的执行,执行if语句的下一条语句;当表达式结果为假时,执行语句S2,放弃语句S1的执行,执行if语句的下一条语句。无论如何,对于一次条件判断,语句S1和语句S2只能有一个被执行。不能同时被执行。
例如:对及格和不及格学生的成绩信息都要输出。
if(grade>=60)
牋 printf("\n%d,passed\n",grade);
else
牋 printf("\n%d,failed\n",grade);?
例4-6 输入整数a,b若a2+b2大于100,则输出a2+b2百位以上的数字,否则输出两数之和。
分支选择处理的条件是:a2+b2>100.根据两个整数相除仍然为整数的原则,用(a2+b2)/100
main()
{
int a,b,y;
printf("enter a,b:");
scanf("%d%d",&a,&b);
if(a*a+b*b)>100牋/* if(a2+b2>100) */
y=(a*a+b*b)/100;
else
y=a+b;
printf("y=%d\n",y);
}
程序运行结果:
enter a,b:5 8
y=13
enter a,b:10 2
y=1
通常情况下,单分支结构也可以写成双分支结构的形式。因为双分支结构形式是一种对称形式,它更符合人们的思维习惯。写出来的程序也比较明确、清晰、易读。
例4-3题可改写为:
牋牋 main()
牋牋 {
牋牋牋?int a,absa;
牋牋牋?printf("enter one number: ");
牋牋牋?scanf("%d",&a);
牋牋牋?if(a<0)?
牋牋牋牋牋 absa=-a;
牋牋牋?else
牋牋牋牋牋 absa=a;
牋牋牋?printf("|%d|=%d",a,absa);
牋牋?}

提示?#22312;if…else…结构中,if体和else体中的语句都应该采用“右缩进“的格式书写。整个程序的缩进距离应该是一致的。使得程序清晰、易读。不遵循统一的缩进格式会使程序难以阅读。

在C语言中,除了采用if…else…语句可以实现双分支结构外,还可以通过条件表达式实现双分支结构。
C语言提供的条件表达式的格式:
牋 表达式1?表达式2:表达式3
执行过程:
求解表达式1的值,若该值为‘真(非0)’:则将表达式2的计算结果值作为整个表达式的结果;否则将表达式3的计算结果值作为整个表达式的结果。
例如:if(a<0) absa=-a;
else?absa=a;?可以由(a<0)??a:a;替换。
例4-3题可改写为:
牋牋 main()
牋牋 {
牋牋牋 int a,absa;
牋牋牋 printf("enter one number: ");
牋牋牋 scanf("%d",&a);
牋牋牋 absa=(a<0)??a:a;牋牋牋?
牋牋牋牋牋牋?printf("|%d|=%d",a,absa);
牋牋?}
使用条件表达式实现双分支结构的条件是:(1)可以由一个if语句实现的双分支结构;(2)无论条件的结果是‘真’或是‘假’,所执行的只能是一条简单的语句,并且这条语句只能是给同一个变量赋值的赋值语句。
用条件表达式来代替if语句实现双分支结构,可以使程序变得简洁,提高执行速度。
将一个if…else…结构转换成条件表达式的方法如下:
(1)将原if语句的条件表达式写成e1;
(2)将当条件为真时的执行的赋值语句右端的表达式做e2;
(3)将当条件为假时的执行的赋值语句右端的表达式做e3;

REF: .TXT
3;语句写成复合语句的形ঁ
多分支 if else if 语句
TAG: if…else…if…,if语句,条件控制语句,语句,程序,程序结构
TEXT: if…else…if…语句:实际的程序设计中常常面对更多的选择,当一个问题不仅有两种可能的结果,需要从多方面进行判断,有多种可能的情况进行处理时,可以将if…else…语句扩展成为if…else…if…结构。
一般格式:
if(表达式1)?语句S1;
else if (表达式2)?语句S2;
牋牋 else if(表达式e3)牋 语句S3;
牋牋牋?…
牋牋牋?else?语句Sn;
执行过程:
牋?首先计算表达式1结果值,如果为真,执行语句S1,否则,计算表达式2的结果值,如果为真,执行语句S2,否则,计算表达式3的结果值,如果为真,执行语句S3,…,以此类推,直至计算表达式n,如果为真,执行语句Sn,否则,如果有语句Sn+1,则执行语句Sn+1,如果没有语句Sn+1,则执行if…else…if…语句的下一条语句。无论如何,对于一次条件判断,语句S1、S2、…、Sn和Sn+1只能选择一个被执行。不能同时被执行。
牋?需要指出的:这是一条语句,属于双分支语句的扩充。

例4-7 从键盘上输入某个学生某门课程的成绩。当成绩高于90分时,输出A;成绩在80-89之间,输出B;成绩在70-79之间,输出C;成绩在60-69之间,输出D;而成绩不及格(小于60分)时输出E。
牋?要想将成绩按等级分类,就必须判断输入的课程成绩与对应的范围进行比较,检查其值是否大于等于90分,是:输出’A’,否:要继续判断其值是否在80?89之间,是:输出’B’,否:判断其值是否在70?79之间,是:输出’C’,否:判断其值是否在60?69之间,是:输出’D’,否:说明成绩低于60分,则输出’E’。
程序清单如下:
 main( )
牋?{
牋牋?int ave;
牋牋?printf("Enter students scores in three tests:\n");
牋牋?scanf("%d",& ave);
牋牋牋 /*将成绩分类*/
牋牋?printf("\n The student grade is: ");
牋牋?/*下面使用if…else if..语句 */
牋牋?if (ave >= 90) printf("A");
牋牋牋牋?else if (ave >= 80) printf("B");
牋牋牋牋牋牋牋?else if (ave >= 70) printf("C");
牋牋牋牋牋牋牋牋牋牋 else if (ave >= 60) printf("D");
牋牋牋牋牋牋牋牋牋牋牋牋牋 else牋 printf("E");
牋牋牋?/*这是一条语句*/?
牋?}
如果变量ave的值大于等于90,前4个条件均成立,但是由于第一个表达式的限定,只在执行了第一个printf语句之后就跳出了if…else if…结构。
对应于题中的if…else if..的语句格式,也可以采用if语句处理:
牋牋?if (ave >= 90) printf("A");
牋牋?if (ave >= 80&&ave <= 89)牋?printf("B");
牋牋?if (ave >= 70&&ave <= 79)牋?printf("C");
牋牋?if (ave >= 60&&ave <= 69)牋?printf("D");
牋牋?if (ave <60) printf("E");
然而,这里使用了5条if语句,由此看出,使用 if…else if…格式可以提高程序的效率,使程序少做许多逻辑判断。

例4-8 编写一个程序根据用户输入的三角形的三边判定三角形的类型(等边、等腰、直角、一般)并求其面积。
确定组成三角形的条件,任意两边之和大于第三边(包括三种情况);如果可以构成三角形,计算该三角形的面积,并继续判定是哪类三角形,这些三角形包括:等边三角形(三边相等)、等腰三角形(任意两边相等、三种情况)、直角三角形(两边平方之和等于第三边平方、三种情况)、一般三角形;如果不能构成三角形,则提示相应信息。程序清单如下:
#include "stdio.h"
#include "math.h"
main()
/*定义变量*/
float a,b,c;
float s,area;
/*输入三角形的三边*/
printf("a,b,c=");
scanf("%f,%f,%f",&a,&b,&c);
/*判定可否组成三角形*/
if(a+b>c&&a+c>b&&b+c>a)
{ /*计算并输出三角形面积*/
s=(a+b+c)/2.0;
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("area=%f\n",area);
/*判定三角形的类型*/
if(a==b&&b==c)
printf("等边三角形\n");
else if (a==b||b==c||a==c)
printf("等腰三角形\n");
else if (a*a+b*b==c*c||a*a+c*c=b*b||b*b+c*c=a*a)
printf("直角三角形\n");
else
printf("一般三角形\n");
else
printf("不能组成三角形\n");


REF: .TXT
#20040;情况?请上机试试。
<
顶部
printf函数是如何实现的高级语言程序设计
高级语言程序课程组
最新更新:2008-6-27