嵌入式学习笔记五——C语言流程控制:选择结构,循环结构

C语言程序有三种结构:顺序结构、选择结构、循环结构。

选择结构

C语言通过关系运算和逻辑运算构造选择判断的条件。

1.关系运算符>,>=,<,<=,==,!=

关系表达式的值反映关系成立与否,用0表示不成立(假),用1表示成立(真)。关系表达式的值为int型。C语言中用int型记录逻辑结果。

2.逻辑运算符&&、||、!

&& 与:一假则假,为双目运算,格式:表达式1&&表达式2

|| 或:一真则真,为双目运算,格式:表达式1||表达式2,优先级比&&低

!非:真假相对,单目运算

系统如何判断真假?

  在C语言中,任何等于零的东西都被认为是假,任何等于非零值的东西都被认为是真,因此,最常见的定义就是假为0,真为1。

&&和||都具有截断特性,即&&运算时先算表达式1,由于它的运算规则为一假则假,若表达式1为假,则直接判断为假,无法继续计算表达式2。同理进行||运算时,若表达式1为真,则直接判断为真,表达式2不计算。对于这一特性,可以修改、运行下面代码的来进行理解。

int a=0,b=1;
//b = a++ && a>0;
//b = a<0 && a++;
//b = a<0 && ++a;
//b = a<0 || ++a;//b = (a<0)&&(++a)
b = a>0 || ++a;

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

3.选择语句

3.1if语句

if 语句是用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一。

if语句的基本格式:

单分支:
if(表达式){
        语句;...
} 

双分支:
if (表达式) {
        语句;...
}else
{
    语句;...
}

多分支:
if(表达式){
        语句;
} 
else if (表达式) {
        语句:
}
else if
{
        语句;
}
else{语句;}

        单分支,用于判断一种情况,执行过程流程图见下图a;双分支,判断两种情况,注意else后不能接表达式。多分支用于判读多种情况。多分支使用时要注意尽量做到只判断一件事的不同情况,不要与其他事件混合

简单应用:下面的例子是用if语句完成输入一个月份,判断该月有多少天。

#include <stdio.h>

int main(void)
{
	int year,month,days;
	printf("Input year and month: ");
	scanf("%d%d",&year,&month);

	if(month<1||month>12)
	{
		printf("incorrect month!\n");
		return -1;
	}
	if(month==4||month==6||month==9||month==11)
	{
		days = 30;
	}
	else if(month==2)
	{
		if(year%4==0&&year%100!=0 || year%400==0)
		{	
			days = 29;
		}
		else
		{
			days = 28;
		}
	}
	else
	{
		days = 31;
	}
	printf("days = %d\n",days);

	return 0;

}
运行结果
Input year and month: 2024 2
days = 29

3.2条件运算符

条件运算符(? : )是一个三目运算符,即有三个操作数。

     使用条件运算符(?:)可以实现 If else 的功能,其一般形式为:

                    表达式1 ? 表达式2 : 表达式3

其意思是:如果表达式1为真,则运算表达式2,整个条件表达式的值为 表达式2的值;反之,则运算表达式3,整个条件表达式的值为表达式3的值。

注意:条件运算符的优先级比赋值运算高,在表达式中用到赋值运算时要将赋值运算括起来。

简单应用:用输入三个数,用条件运算符找出最大值并输出最大值。

#include <stdio.h>

int main (void)
{
	int a,b,c,max;
	printf("Input 3 num: ");
	scanf("%d%d%d",&a,&b,&c);

    max = a>b?a:b;  //a>b?(max=a):(max=b);
	max = max>c?max:c;  

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

运行结果
Input 3 num: 5 6 7
max = 7

3.3switch

switch 语句是多分支选择语句。

基本格式:

switch(表达式)
{
case 常量1:语句1;break;
case 常量2:语句2;break;
...
default:语句n   
    break;
}

注意:

1.switch后面的表达式必须是一个整型

2.case后面的常量表达式必须是常量不能是变量

3.case、default都是标签

4.default不一定要放在最后

简单应用:要求按照考试成绩的等级输出百分制分数段。

#include <stdio.h>

int main(void)
{
	char grade;
	scanf("%c",&grade);
	switch(grade)
	{
	case 'A':printf("85~100");break;
	case 'B':printf("70~84");break;
	case 'C':printf("60~69");break;
	case 'D':printf("<60");break;
	default:printf("error");break;

	}
	printf("\n");
	return 0;
}
运行结果
A
85~100

循环控制:

1.goto

goto 标签; 跳转语句

goto语句构成循环需要有循环体、结束条件、使循环趋于结束的条件、循环的初始条件。

2.while

while用来实现“当型”循环

基本结构

while(表达式)
{
    语句;
}

流程图

当表达式为非0时,执行语句,执行完成后再次判断,直到表达式为0,结束while。

简单应用:求1+2+3+...+100的值。

#include <stdio.h>

int main(void)
{
	int sum=0,i=1;
	while(i<=100)
	{
		sum=sum+i;
		i++;
	}
	printf("sum = %d\n",sum);

	return 0;
}
运行结果
sum = 5050

总结:

1.C语言的关系运算与数学上的比较含义不同,例如int a=1;0<a<5。计算时先将前面结合,算出值后再与后面比较。(0 <a)<5,0<a得到1,1<5.

2.逻辑运算的短路特性和截断特性:这个特性会影响表达式2是否还要计算,影响后面的值,要特别关注。

3.switch与if的区别:

if 语句:对条件进行判断,是否满足,根据判定的结果(真或假)执行相应的语句。

switch语句:先计算表达式的值,然后跳转到case的标签值与表达式值相等的地方开始往下执行,如果没有跳转指令的话会一直往下执行直到switch语句的最后,在语句序列加入break后可直接跳出switch语句。

        if语句只能从两者中选择一个,当要实现几种可能之一时,就要用if...else if,甚至多重的嵌套if来实现,当分支较多时,程序会变得复杂,可读性较差,swtich...case语句专门处理多分支的情形,使程序变得简洁。

注意:switch语句中的表达式必须是整型或者字符型,对表达式求得的值不能是任何变量。而if语句对给定的条件进行判断是否满足,规则为零值代表假,非零值代表真。所以if语句受用的范围更为广泛。

  • 23
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值