预科C语言分支结构

Posted on 2019-07-07 19:19  不叫柒桓叶  阅读(148)  评论(0编辑  收藏  举报

c程序的结构:

顺序结构

a = c;

b = 6;

选择结构(分支结构)

if

switch

 

循环结构

if goto

for

while

do while

 

1.分支结构 (if

if语句有三种基本形式

(1)

if(表达式)

语句

 

假如“表达式”的值为真(非0,则执行“语句”

eg:

if(没吃早饭)

吃早饭

 

“表达式”:C语言任意合法的表达式都可以

只需要一个有值的表达式

 

“语句”:

表达式  

a+b

表达式语句

a+b;

c语言中语句:

表达式语句

if

while

switch

for

goto

do while

return

。。。。。

 

单语句:只有一个;的语句

复合语句:

if/switch/for/while/do_while/{}

 

if(5 > 4)

{

a = 5;

b = 6;

}

 

编译建议:

不管if后面有没有语句,先打{},确定if的“管辖范围”

 

if(表达式)

{

语句

}

 

if(5>4>3;)//error

{

 

}

 

if(12345)//right

{

}

 

===

int sum(int a,int b)

{

return a+b;

}

 

 

if(sum(3,4))//right  sum(3,4) 函数调用表达式

{

}

 

 

 

 

 

 

 

(2)

if(表达式)

语句1

else

语句2

 

如果“表达式”的值为真(成立,非0),则执行语句1

否则(表达式的值为假(0)),则执行语句2

 

“表达式”:C语言任意合法的表达式都可以

只需要一个有值的表达式

“语句”

单语句:只有一个;的语句

复合语句:

if/switch/for/while/do_while/{}

 

只要出现else,就一定要有一个与之匹配的if

 

eg:

if(5>4)

a = 4;

b = 6;

else //error ,else没有匹配的if

a = 1024;

 

=> =>编译建议:

不管if,else后面有没有语句,先打{},确定其“管辖范围”

 

if()

{

}

else

{

}

 

3

if(表达式1)

语句1    // "表达式1为真" =》语句1

else if(表达式2)

语句2    //"表达式1" 为假,且 “表达式2”为真 =》语句2

else if(表达式3)

语句3

else if(表达式4)

语句4

...

else if(表达式n)

语句n

else

语句m

 

 

上述if,是排斥关系,意思就是只要执行了某个if,后面的if就不会去判断

 

if(表达式1)

语句1    

if(表达式2)

语句2    

if(表达式3)

语句3

if(表达式4)

语句4

...

if(表达式n)

语句n

 

上述if,是并列关系,即使执行了语句1,照样判断表达式2,表达式3....

 

eg:

 

if()

if() 语句

else 语句

else

if() 语句

else 语句

 

else总是与它上面的,最近的,同级的,未匹配的if匹配

 

=

if()

{

if()

{

语句

}

else

{

语句

}

}

else

{

if()

{

语句

}

else

{

语句

}

}

 

 

练习:

1)从键盘上输入一个字符,判断是否为字母

如果是输出YES”,否则输出“NO

 

先写伪代码

//step1:从键盘上输入一个字符

char c;

scanf();

 

//step2:判断是否为字母

if(c是一个字母)

{

输出  “YES

}

else

{

输出NO

}

 

伪代码  = 算法/思路

 

=》实际的代码

#include <stdio.h>

#include <string.h>

int main()

{

//ASC码 为65-  97-

// '0' ~'9'  48 ~57

// 'a'~'z'   97 ~122

// 'A'~'Z'   65 ~ 90

char a;

scanf("%c", &a);

if((a <= 122 && a >= 97) || (a <= 90 && a >= 65))

{

printf("YES\n");

}

else

{

printf("NO\n");

}

return 0;

 

}

 

 

(2)从键盘上输入三个整数a,b,c。求最大值并输出

 

//step1:从键盘上输入三个整数a,b,c

int a,b,c;

scanf("%d%d%d",&a,&b,&c);

 

//step2:判断

if(a最大)

{

输出a

}

else if(b最大)

{

//输出b

printf("b = %d\n",b);

 

}

else

{

输出c

}

 

"a最大" :a >= b && a >= c

"b最大" b >= a && b >= c

 

=============

两两比较

 

int max;//用来记录最大的数值

if(a >b)

{

max = a;

}

else

{

max = b;

}

 

=>max = a>b ? a : b;

 

max = max > c ? max : c;

 

printf("max = %d\n",max);

 

 

(3)

 

从键盘上输入三个整数a,b,c。判断由这三个数为边,能不能组成一个三角形,

如果可以,打印YES,否则打印NO

 

//step1:从键盘上输入三个整数a,b,c

int a,b,c;

scanf("%d%d%d",&a,&b,&c);

 

//step2:判断

if(是能组成三角形)

{

print yes

}

else

{

print no

}

 

能组成三角形 :

任意两边之和大于第三边

<=> a+b > c && a+c > b && b+c > a

 

 

(4)

输入两个数a,b,按照从小到大的顺序输出

 

a = 1;

b = 3;

 

int a,b,t;

scanf("%d%d",&a,&b)

if(a > b)

{

t = b;

b = a;

a = t;

}

 

printf("%d,%d",a,b);

 

(5)输入三个数a,b,c,按照从小到大的顺序输出

 

 

 

===============

int a;

if(a == 1)

{}

else if(a == 2)

{}

else if(a == 3)

{}

 

...

else

{}

 

是在把a的值一一列举

=switch case

 

2.switch语句

把一个“表达式”的值,一一列举

 

语法形式:

switch(表达式)

{

case 常量表达式1:

语句1

case 常量表达式2:

语句2

..

case 常量表达式n:

语句n

default:

语句m

}

 

switch语句的实质

把一个表达式”的值,一一列举

 

判断“表达式”的值,如果“表达式”的值为“常量表达式1”(匹配case 常量表达式1

则从“语句1”开始往下面执行,直到遇到break或者switch结束;

如果“表达式”的值为“常量表达式2”(匹配case 常量表达式2

则从“语句2”开始往下面执行,直到遇到break或者switch结束;

....

如果“表达式”的值与每个case后面的值,都不匹配,则匹配default,则

从语句m往下面执行,直到遇到break或者switch结束;

 

注意:

1)“表达式”的值必须为整数值

why?

表达式”的值的类型必须为:整型,字符型,枚举

2)每个case后面的“常量表达式”的值也必须为整数值,每个case后面的常量表达式的值必须互不相同

 

3)各个casedefault的出现次序不影响执行结果

 

switch(a)

{

default

语句

case 1:

语句1

case 2:

语句2

case 3

;;

break;

 

}

 

(4)当表达式的值与某一个case后面的常量表达式的值相等时,就执行case后面的语句,

若所有case中的常量表达式的值都与表达式的值不相等,就从default后面的语句开始执行

 

(5)多组case可以共用一组执行语句

 

switch(a)

{

default

语句

case 1:

case 2:

switch(b)

{

case 1:

break;

}

case 3

printf("gfiurehio\n");

 

}//switch结束

 

(6)breakcase里面用于跳出所属的switch语句

 

 

练习:

输入分数

A : [90,100] 1

B: [80,90)  2

C:  [70,80)  3

D: [60,70)  4

E: 60以下   5

 

int score;

scanf("%d",&score);

 

if(score>=90 && score <=100)

{

l = 1;

}

switch(l)

{

case 1:

语句;

break;

case 2:

...

}

 

======

int score;

switch(score/10)

{

case 10:

case 9:

printf("A\n");

break;

case 8:

printf("B\n");

break;

case 7:

printf("C\n");

break;

case 6:

printf("D\n");

break;

default:

printf("E\n");

 

}

 

END

 

Copyright © 2024 不叫柒桓叶
Powered by .NET 9.0 on Kubernetes