嵌入式0基础开始学习 ⅠC语言(3)分支结构

C语言程序设计结构

分三种

顺序结构:

一条一条指令执行。

int a,b;

a = 3;

b = 4;

分支结构(选择结构):

if语句

switch语句

循环结构:

for

while

do....while

goto

1.if语句

有三种基本形式:

(1)

if(表达式)

语句(指令)

表达式:进行选择的条件

任意c语言合法的表达式都可以

只要是合法的表达式就会有一个值。

我们需要判断这个表达式的值就ok

语句:

在满足条件下,要执行的语句或指令

单语句:一个;号的语句

复合语句:

{}/if/for/while....

执行顺序:

假如(if)"表达式"的值为非0(条件满足)

则执行下面的"语句"(指令)

例子:

int a =0; b=0;

if(3<2)

a =3 ;

b = 4;

printf("%d\n",a);//0

printf("%d\n",b);//4

没有语法问题,if只能够管一个;

所以不管"表达式"的值是否为真,

语句 b = 4一定会执行!!!!

编程建议大家,不管if后面有没有语句,先打一对{},以示主权,确定if的管辖范围

(2)

if(表达式)

语句1;

else

语句2;

else : 否则

执行顺序:

假如"表达式"的值为真(非0),则执行语句1,否则执行语句2

例子:

if(5>3)

a = 1;

b = 2;

else // error

a = 2;

b = 1;

编程建议;

不管if,else后面有没有语句,先打{}

if()

{

}

else

{

}

(3)if(表达式1)

语句1;

else if(表达式2)

语句2;

else if(表达式n-1)

语句n-1;

else

语句n;

=>

if(表达式)

{

语句1;

}

else

{

if(表达式2)

{

语句2;

}

else

.......

}

执行顺序:

判断"表达式1"的值,如果为真(非0),则执行语句1,否则,再判断

表达式2的值,如果为真(非0),则执行"语句2",否则。。。

练习:

1.请大家从键盘输入两个整数a,b 按从小到大的顺序依次输出!!!

#include<stdio.h>

int main()

{

int a,b;

printf("请输入两个整数:\n");//在终端上面显示"请输入两个整数:"

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

if(a<b)

{

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

}

else

{

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

}

return 0;

}

#include <stdio.h>

int main()

{

int a,b;

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

printf("%d\n%d",a<b?a:b,a>b?a:b);

return 0;

}

2.从键盘输入三个整数a,b,c按从小到大的顺序依次输出

#include<stdio.h>

int main()

{

int a,b,c,t;

printf("请输入三个整数:\n");

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

if(a>b)

{

t=a;

a=b;

b=t;

}

if(a>c)

{

t=a;

a=c;

c=t;

}

if(b>c)

{

t=c;

c=b;

b=t;

}

printf("%d<%d<%d\n",a,b,c);

return 0;

}

3.输入三个整数a,b,c,判断由这三个数为边是否能组成一个三角形

#include <stdio.h>

int main()

{

int a,b,c;

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

if(a+b>c&&a+c>b&&b+c>a)

{

printf("能");

}

else

{

printf("不能");

}

return 0;

}

4.从键盘输入一个字符:大写转小写,小写转大写,其他原样输出

#include <stdio.h>

int main()

{

char c;

scanf("%c",&c);

if(c<='Z'&&c>='A')

{

printf("%c",c+32);

}

else if(c<='z'&&c>='a')

{

printf("%c",c-32);

}

else

{

printf("%c",c);

}

}

有几个注意的点

(1)语句:

表达式语句: 表达式

b = 5 ===>表达式(赋值表达式)

b = 5; ===>赋值语句

if语句 分支语句

循环语句:

while

do。。。while

for

goto语句

return语句

....

(2)条件;

并列条件: 会一一判断他们

if(条件1)

{

}

if(条件2)

{

}

互斥条件: 有你没我,有我没你

if(条件1)

{

}

else

{

}

(3) if语句的嵌套

"条件里面又有条件"

在if语句中又包含一个或多个if称为if语句的嵌套

if(条件1)

{

if(条件2)

语句1

}

关键: else 匹配问题

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

if(条件1)

{

if()

语句1

else

语句2

}

else

{

if()

语句3

else

语句4

}

从键盘输入一个十六进制的字符[0-9 a-f A-F],输出其对应的数值

unsigned char ch;

int d;

scanf("%c",&ch);

if(ch == '0')

{

d = 0;

}

else if(ch == '1' )

{

d = 1;

}

else if(ch =='A' || ch =='a')

{

d =10;

}

......

上面的代码 好像在"列举"十六进制所有可能的字符

2.switch语句

switch(表达式)

{

case 常量\常量表达式1:

语句1

case 常量\常量表达式2:

语句2

default:

语句块n

}

switch语句:拿"表达式"的值,与case后面的"常量\常量表达式"作匹配,

一旦匹配成功,则从那个case后面开始执行,知道遇到break 或switch结束

如果没有一个匹配成功,则匹配default.

关于switch:

(1)switch 后面的"表达式"必须是一个可以列举的值,

必须为一个整数值:整型,字符型

(2)case后面的"常量表达式"也必须为一个整数的值

而且每个case后面的"常量表达式"的值也必须互不相同

(3)各个case和default出现的顺序是不会影响匹配结果

一旦匹配成功,就从该处往下执行

例子:

switch(a)

{

default: // default 永远是,所有的case都不匹配的时候,才匹配default

// 匹配的情况跟defalut的顺序无关

case 7:

case 5:

case 6:

case 1:

}

(4) "语句块"可以省略 意思就是说,多个case可以公用一个语句块

例子;

如:

switch(a)

{

case 1:

case 2:

case 3:

语句1

break;

}

(5) switch中的break 用来跳出它所属的switch语句

如:

switch(a)

{

case 1 :

a = 1;

case 2:

b = 2;

break;

case 3:

......

}

练习:

1.从键盘出入一个成绩(int),把这个成绩值对应的等级输出

'A':[90,100]

'B':[80,90)

'C':[70,80)

'D':[60,70)

'E':[0,60)

伪代码:

int score;

printf("请输入成绩:");

scanf("%d",&score);

switch(score/10)

{

case 10:

case 9:

A

break;

case 8:

B

break;

}

2.输入一个日期(year - month - day )求该日期到年末还有多少天?

//----> 数学问题(找到他的逻辑)--->用文字描述出来 ---> 写伪代码 ---> c语言代码

(1)先判断是否为闰年, 2月份为29/28

(2) 总的时间 - 已过的日期加起来

#include <stdio.h>

int main()

{

int year,month,day,n=0,ew;

printf("请输入年月日\n");

scanf("%d%d%d",&year,&month,&day);

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

{

ew=29; //闰年二月份的时间

}

else

{

ew=28; //不是闰年二月份的时间

}

switch(month)

{

case 1: n+=31; // n= n+31

case 2: n+=ew;

case 3: n+=31;

case 4: n+=30;

case 5: n+=31;

case 6: n+=30;

case 7: n+=31;

case 8: n+=31;

case 9: n+=30;

case 10: n+=31;

case 11: n+=30;

case 12: n+=31;

}

n=n-day;

printf("距离年末还有%d天\n",n);

return 0;

}

练习:

1.企业发放的奖金根据企业的当年利润所决定。

当利润 I 低于或等于100000元时,奖金可提成10%;

利润大于100000元,小于或等于200000元(100000 < I <= 200000)时,

低于100000元部分按10%提成,高于100000元的部分,可提成7.5%;

利润大于200000元,小于或等于400000元(200000 < I <= 400000)时,

低于200000元部分按上述方法提成,高于200000元的部分,可提成5%;

利润大于400000元,小于或等于600000元(400000 < I <= 600000)时,

低于400000元部分按上述方法提成,高于400000元的部分,可提成3%;

利润大于600000元,小于或等于1000000元(600000 < I <= 1000000)时,

低于600000元部分按上述方法提成,高于600000元的部分,可提成1.5%;

利润大于1000000元时,

低于1000000元部分按上述方法提成,高于1000000元的部分,可提成1%;

从键盘输入当年的利润 I,求应发的年终奖的奖金 P 。

要求:(任选其一)

(1) 用 if 语句 编程

(2) 用 switch 语句 编程

switch:

double I;

double p = 0;

scanf("%lf",&I);

switch((long)I/100000)

{

default:

case 10:

p += (I-1000000)*0.01;

I = 1000000;

case 9:

case 8:

case 7:

case 6:

p +=(I-600000)*0.015;

I = 600000;

......

......

}

2、 输入一个形式为 " 操作数 运算符 操作数" 的四则运算表达式,

输出运算的结果 ( + - * / )

如:

输入 5.2+4.8

输出 5.2+4.8 = 10.00 保留两位小数

char ch;

float a ,b;

scanf("%f%c%f",&a,&ch,&b);

switch(ch)

{

case '+':

printf("%f+%f = %.2f\n",a,b,a+b);

break;

case '-':

.......

}

3,C语言的if语句中,用作判断的表达式为? (C)

A,关系表达式 B,逻辑表达式 C,任意表达式 D,算数表达式

4,以下程序的运行结果是? (2)

main()

{

int a=2,b=-1,c=2;

if(a<b)

if(b<0) c=0;

else c+=1;

printf("%d",c);

}

5,以下程序的运行结果是? (3)

main()

{

int a=5,b=4,c=3,d=2;

if(a>b>c)

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

else if((c-1>=d)==1)

printf("%d\n",d+1);

else

printf("%d\n",d+2);

}

6,以下程序的运行结果是? (SO)

void main()

{

int a=2;

switch(a)

{

default;

printf("S");

case 1:

printf("O");

}

}

7,以下程序的运行结果是? (不能确定)

if(a=b)

printf("a==b");

else

printf("a!=b);

8,如有int i=10,j=0;则执行完语句

if(j=0)i++;else i--;i的值为?

(9)

9,以下程序的运行结果是? (3)

#include<stdio.h>

main()

{

int x,y,z;

x=1;y=2;z=3;

if(x>y)

if(x>z) printf("%d",x);

else printf("%d",y);

printf("%d\n",z);

}

回顾;

c语言程序结构

顺序结构:一条一条从上而下执行

a = 2;

b = 3;

分支结构(选择结构):

a,if语句

if(表达式)

语句;

表达式:任何c语言中合法的表达式都可以

所谓的条件

语句: 单语句;

复合语句{}

if(表达式)

语句1;

else

语句2;

执行顺序:

if(如果)"表达式"的值为真(非0),那么执行语句1

否则执行语句2

if(表达式)

a =2;

b =3;

else //此处的else没有匹配到if(ERROR)

c = 4;

if(表达式1)

语句1;

else if(表达式2)

语句2;

....

else

语句n;

执行顺序:

先判断表达式1的值,如果为真 执行语句1;

否则判断表达式2的值,如果为真,执行语句2;

否则....

如果所有的表达式都不满足,则执行"语句n"

并列条件

if(a>100)

{

b = a;

}

if(a>50)

{

c = a;

}

互斥条件

if else

b, switch语句

switch(表达式)

{

case 常量表达式/常量 :

语句1;

case ...

default :

语句 n+1

}

表达式:是一个可以列举的整数值

常量表达式: 整型常量,字符型常量,

循环结构

相关推荐
DARLING Zero two♡2 小时前
关于我、重生到500年前凭借C语言改变世界科技vlog.16——万字详解指针概念及技巧
c语言·开发语言·科技
QAQ小菜鸟3 小时前
一、初识C语言(1)
c语言
何曾参静谧3 小时前
「C/C++」C/C++ 之 变量作用域详解
c语言·开发语言·c++
互联网打工人no13 小时前
每日一题——第一百二十一题
c语言
朱一头zcy4 小时前
C语言复习第9章 字符串/字符/内存函数
c语言
此生只爱蛋4 小时前
【手撕排序2】快速排序
c语言·c++·算法·排序算法
何曾参静谧5 小时前
「C/C++」C/C++ 指针篇 之 指针运算
c语言·开发语言·c++
lulu_gh_yu6 小时前
数据结构之排序补充
c语言·开发语言·数据结构·c++·学习·算法·排序算法
~yY…s<#>7 小时前
【刷题17】最小栈、栈的压入弹出、逆波兰表达式
c语言·数据结构·c++·算法·leetcode
EricWang13589 小时前
[OS] 项目三-2-proc.c: exit(int status)
服务器·c语言·前端