我是靠谱客的博主 懵懂路人,这篇文章主要介绍c语言学习----选择结构程序设计,现在分享给大家,希望可以做个参考。

顺序结构看完了,然后来看看选择结构。

很好理解,选择么。选这个,要么选那个,要么都不选。就这么EASY。

简单看看知识点。


1、关系运算符与关系表达式

关系运算符比较两个表达式并决定两者的关系,关系运算的结果是假(0)或真(非0)。表5-1中给出了C语言中的关系运算符。

表5-1

操作符

用法

>

大于

>=

大于或等于

<

小于

<=

小于或等于

==

等于

!=

不等于

 

 

 

 

 

 

 

 

使用关系运算符时要注意以下几点:

⑴ 由两个字符组成的运算符之间不可加空格,如>=不能写成> =。

⑵ 关系运算符中,>、>=、<、<= 四种运算符的优先级相同,==和!=两种运算符的优先级相同,且前四种运算符的优先级高于后两种。

⑶ 关系运算符、算术运算符和赋值运算符之间的优先次序依次是:算术运算符级别最高,关系运算符次之、赋值运算符最低。关系运算符按照从左到右的顺序结合。

由关系运算符组成的表达式,称为关系表达式,如:a>=b、(a=3)>(d=4)、a>b==c 。

在C语言中,没有专门的“逻辑值”,而是用零来代表“假”,用非零来代表“真”,因此,关系运算的结果是1或0。

例如:设a=4,b=2,则关系表达式a>=b的结果为“真”,表达式值=1。

关系表达式2*5>1+6 的结果为“真”,表达式值=1。

            关系表达式2+3= =1+4*2 的结果为“假”,表达式值=0。

            关系表达式5+(8>1+6)的值=6。

    关系运算符“= =”和赋值运算符“=”很容易混淆,必须注意两者之间的区别。

    ⑴ 赋值运算符“=”

赋值运算的一般形式为:<变量名>=<表达式>

赋值运算符的左面只能是一个变量名,用等号右面的表达式的值对其赋值。运算结果的数据类型取决于赋值号左面变量的数据类型,可以是整型、实型、字符型等。

如表达式str=‘a’是一个赋值表达式,结果是字符型的。

⑵ 关系运算符“= =”

    关系运算“= =”的一般形式为:<表达式1>= =<表达式2>

关系运算“= =”是在两个表达式之间进行的,左面的表达式可以是一个变量,也可以是一个常数或表达式。运算结果的数据类型只能为整型(0或1)。

如表达式str= =‘a’是一个关系表达式,结果是0或1。

关系运算往往作为条件出现在if语句的条件或循环判断条件之中,一般不单独使用。


2、逻辑运算符与逻辑表达式

C语言提供三种逻辑运算符,如表5-2所示:

表5-2

运算符

含义

优先级

||

逻辑或(OR)

低

&&

逻辑与(AND)

中

!

逻辑非(NOT)

高

在一个逻辑表达式中如果包含多个逻辑运算符,按优先级由高到低(!(非)→&&(与)→||(或))进行运算。

如:!a&&!b 相当于 (!a)&&(!b)

    a||b&&c 相当于  a||(b&&c)

表5-3中给出了C语言中的逻辑运算规则。

表5-3

a

b

!a

!b

a&&b

a||b

非0

非0

0

0

1

1

非0

0

0

1

0

1

0

非0

1

0

0

1

0

0

1

1

0

0

 

用逻辑运算符将关系表达式或逻辑量连接起来构成逻辑表达式。在C程序中,经常会使用逻辑运算符,将简单的条件组合起来,形成更复杂的条件。


【例5-1】判断某年份(year)是否为闰年的条件是看此年份是否满足下述两个条件之一:

⑴ 能被4整除但不能被100整除;

⑵ 能被400整除;

由此得到作为判断某年份是闰年的逻辑表达式:

year%4==0&&year%100!=0||year%400==0

反之,可得到判断某年份不是闰年的逻辑表达式:

!(year%4==0&&year%100!=0||year%400==0 )


3、if语句

1) if语句的格式

简单if语句格式如下:

if(表达式)

语句;

括号中的表达式可以是任何形式的,但它通常情况下包含一个关系表达式,如果它的结果为真,则执行语句,否则就跳过去不执行。该语句的执行过程如图5-1所示。

                                     

 

 

图5-1

例如:

if (Number1>=Number2)

Number1= Number2;

该代码对变量Number1和Number2的值进行比较,如果Number1较大,则把Number2的值赋给Number1。

C语言中,用括号括起来的语句块与一个单语句等价,因此如果表达式的值为真时可以执行多个语句。由此可以得到if语句的第二种形式:

if(表达式)                  

{ 语句1;

语句2;

语句3;

}

 

    该语句的执行过程如图5-2所示。

 

 

下面是有关if用法的一个简单的例子。



    【例5-3】

if (Number1< Number2)

{ Number1= Number2;

  printf (“The bigNumber is %d”, Number1);

}

在这个例子中,如果Number1小于Number2,不仅要给Number1赋值,还要输出Number1。

有时,我们需要在某种条件下让程序执行一个分支,否则执行另一分支。这时,可以采用If……else语句。

if(表达式)

语句1;

else

语句2;

 

 

 

【例5-4】在学生分数高于或等于60分时显示Passed,否则显示Failed。如图5-3所示。

 

 

 

图5-3

程序如下:

if (grade>=60)

        printf(“Passedn”);

else

  printf(“Failedn”);

 

【例5-5】某商品的零售价为每公斤8.5元,批发价为每公斤6.5元,购买量在10公斤以上,便可按批发价计算,设某顾客购买此商品weight公斤,请编程计算该顾客需付费(pay)多少?

程序如下:

main()

{

float weight,pay;

printf(“Please input the weight:”);

scanf(“%f”,&weight);

if (weight>=10)

pay=weight*6.5;

else

pay=weight*8.5;

printf(“You should pay  %f  yuansn”,pay);

}



2) if语句的嵌套

if 和else子句中,可以是任意合法的C语句或语句块,如果这子句是个if语句,则构成了if语句的嵌套。内嵌的if语句可以嵌套在if子句中,也可以嵌套在else子句中。

嵌套的if语句有以下几种格式:


if (条件1)

  if(条件2)

     语句1;

  else 

     语句2;

else

语句3;

 

if (条件1)

语句1;

else

if(条件2)

 语句2;

  else

语句3;

 

if (条件1)

   if(条件2)

     语句1;

   else 语句2;

else

if(条件3)

语句3;

   else 语句4;


 

【例5-6】根据输入的百分制成绩(score),要求输出成绩等级(grade)A、B、C、D、E。90分以上为A,80~89分为B,70~79分为C,60~69分为D,60分以下为E。用if语句实现,程序如下:

main()

{

int score;

char grade;

printf(“n Please  input  a  score(0~100):”);

scanf(“%d”,&score);

 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(“The grade is %c.n”,grade);

}

程序的运行情况如下:

Please  input  a  score(0~100):

86

The grade is B.



  1. 条件运算符

       假设要编制一个程序,求两数中的较大数。执行的过程是比较a是否大于b,如果是,则较大数(max)为a,否则令max等于b。程序如下:

    if(a>b)

    max=a;

    else

    max=b;

    C语言提供了一种特殊的条件运算符,可以简化上面的语句。

    条件表达式的一般形式:表达式1 ?表达式2 :表达式3

    条件表达式的执行过程:先计算表达式1的值,如果表达式1的值不等于0,则求解表达式2,表达式2的值作为整个条件表达式的值,否则,求解表达式3,表达式3的值作为整个条件表达式的值。

    若用条件运算符表示,则上面的语句可表示如下:

    max=a>b?a:b

       ↓    ↓ ↓

    表达式①   ② ③

    条件运算符的优先级高于赋值运算,低于其他运算。其功能相当于一个if-else语句。例如【例5-4】就可用条件表达式来实现:printf(grade>=60?“Passedn” :“Failedn”);。


4、switch 语句

  1. switch语句的一般格式

    switch(表达式)

    {  case 值1:语句1;

               [break;]

    case 值2:语句2;

               [break;]

    ……

    case 值N:语句N;

               [break;]

    [default:  语句N+1;]

    }

    其中的表达式的数据类型只能为整型或字符型,语句可以是任何有效的语句或语句块。


  1. switch语句的执行过程

    执行switch语句时,首先计算switch后表达式的值,然后在switch语句中寻找与该表达式的值相匹配的case值,如果找到,则执行该case后的各语句,直至遇到一个break语句为止;如果找不到匹配的case值,则执行switch的默认语句(default),直到switch语句体结束。如果找不到匹配的case值且不存在默认语句(default),则跳过switch语句体,什么也不做。

    若【例5-6】用switch语句来实现,则程序如下:

    main()

    { 

    int  score,m;

    printf(“nPlease  input  a  score(0~100):n”);

    scanf(“%d”,&score);

    m=score/10;

    switch(m)

    {

    case 9:

    case10:printf(“nThe grade is A.”);break;

    case 8:printf(“nThe grade is B.”);break;

    case 7:printf(“nThe grade is C.”);break;

    case 6:printf(“nThe grade is D.”);break;

    default:printf(“nThe grade is E.”);

    }

    }

    假设运行时输入75,则m=7,执行case 7:后的语句printf(“nThe grade is C.”);遇break;结束switch语句的执行。程序的运行情况如下:

    Please  input  a  score(0~100):

    75

    The grade is C.

    break语句用于改变程序流程。当在switch语句中执行break语句时,break语句使程序从该结构中退出,程序接着执行该结构后的第一条语句。如果去掉上例中的所有break语句,运行程序并输入75,则程序的运行情况如下:

    Please  input  a  score(0~100):

    75

    The grade is C.

    The grade is D.

    The grade is E.

    注意:该算法中。Switch语句后的表达式是m(=score/10)而不是score,这样处理可以大大减少分支数目,简化程序。


5、程序设计举例

【例5-7】对分段函数:
                        x        (x<1)
                   y=   2x-1     (1≤x<10)
                        3x-11    (x≥10)
输入x的值,求y值。
#include “stdio.h”

main()

{

float x,y;

printf(“n”);

scanf(“%f ”,&x);

if(x<1)

  y=x;

else if(x>=10)

y=3*x-11;

    else  y=2*x-1;

printf(“ y=%f”,y);

}

程序的运行情况如下:

⑴ 运行时输入一个小于1的数

Please input x:

-2

y=-2.000000

⑵ 运行时输入一个介于1和10之间的数

Please input x:

8

y=15.000000

 

【例5-8】编程求一元二次方程ax2+bx+c=0的实数根。

#include “stdio.h”

main()

{

float  a,b,c,delta,x1,x2;

printf(“nPlease input a,b,c:”);

scanf(“%f,%f,%f”,&a,&b,&c);

delta=b*b-4*a*c;

if(delta<0)

   printf(“There is no real fact!”);

else  if(delta= =0)

{x1 =-b/(2*a);

printf(“x1 =%f”,x1);

}

else { x1 =(-b+sqrt(delta))/(2*a);

     x2=(-b-sqrt(delta))/(2*a);

printf(“x1=%f , x2=%f”,x1,x2);}

}

程序的运行情况如下:

⑴ 运行时输入使△>0的情况

Please input a,b,c:

8,9,1

x1=-0.125000,x2=-1.000000

⑵ 运行时输入使△=0的情况

Please input a,b,c:

4,8,4

x1=-1.000000



【例5-9】输入1~7之间的任意数字,程序将按照用户的输入数据输出对应的星期值。如用户输入3,则程序输出Wednesday。如果输入1~7以外的数字,则提示输入错误。

main()

{ 

int  week;

printf(“nPlease  input  a integer(1~7):n”);

scanf(“%d”,&score);

switch(week)

{

case 1:printf(“Mondayn”);break;

case 2:printf(“Tuesdayn”);break;

case 3:printf(“Wednesdayn”);break;

case 4:printf(“Thursdayn”);break;

case 5:printf(“Fridayn”);break;

case 6:printf(“Saterdayn”);break;

case 7:printf(“Sundayn”);break;

default:printf(“The input is wrong!n”);

}

}

程序的运行情况:

⑴ Please  input  a integer(1~7):

5

Friday

⑵ Please  input  a integer(1~7):

9

The input is wrong!



选择结构也比较简单。

哎呀,就不多说了。




最后

以上就是懵懂路人最近收集整理的关于c语言学习----选择结构程序设计的全部内容,更多相关c语言学习----选择结构程序设计内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(258)

评论列表共有 0 条评论

立即
投稿
返回
顶部