分支(选择)和循环语句

本文详细介绍了C语言中的选择语句,包括if单分支、双分支和多分支选择,以及switch语句的使用。同时,讲解了循环语句的三大类型:for、while和do...while,并探讨了break和continue语句在控制流程中的作用。文章旨在帮助初学者理解C语言中的条件判断和循环控制机制。
摘要由CSDN通过智能技术生成

萌新菜鸟,大佬们多多包涵


前言

提示:这里可以添加本文要记录的大概内容:

控制语句用来实现对程序流程的选择、循环、转向和返回等。控制语句共有9条,包括12 个关键字,可以分为以下几类。

  1. 选择语句:if…else 和switch(包括case 和 default)。
  2. 循环语句:for、while和do…while。
  3. 转向语句:continue、break 和goto。
  4. 返回语句:return。

提示:以下是本篇文章正文内容,下面案例可供参考

一、选择语句(分支语句)

if语句

  • c语言中用0表示假,非0表示真。
  • “if”是c语言的关键字,“表达式”可以是任意合法的c语言表达式,包括关系表达式和逻辑表达式等,并且表达式两侧的括号不能省略。
  • 语句体中可以是一条语句,也可以是c语言中任意合法的复合语句。
  • 表达式的类型不限于关系表达式或者逻辑表达式,它也可以是任意的数值类型(整形、实型、字符型、等)

if语句的基本形式

简单的if语句有三种基本形式,他们分别是if单分支选择语句、if双分支选择语句和if多分支选择语句。

  1. 单分支选择语句
//1.单分支选择语句
if(表达式)
{
    //语句体
}

执行过程如下:
【步骤1】 计算圆括号中表达式的值
【步骤2】若表达式的值为真(条件成立),则执行if语句;否则(条件不成立)不执行if语句 ,而去执行if语句后的下一个语句。

例:

int main()
{
    int age=0;
    scanf("%d",&age);
    if(age<18)  //如果age小于18  则打印未成年  否则什么都不输出,执行下条语句
    printf("未成年\n"); //如果后面只跟一条语句 可以不带大括号 

    return 0;
}

如果if条件成立(表达式为真,既表达的逻辑值为1),就执行其中的语句体。


  1. 双分支选择语句
//2.双分支
if(表达式)
{
   //语句体1 
}
else
{
   //语句体2
}
//表达式如果条件成立(表达式的逻辑值为1),就执行语句体1;
//“else”也是c语言的关键字,如果条件不成立(表达式的逻辑值为0),就执行语句体2。

执行过程如下:
【步骤1】计算表达式的值
【步骤2】若表达式取值为真(非0) (条件成立),执行语句体1;否则(条件不成立)执行语句体2。
【步骤3】无论表达式的值是真还是假,在执行语句体1或语句体2后都会执行if语句后面的语句

例:

int main()
{
    int age=0;
    scanf("%d",&age);
    if(age<18) //如果age小于18  则打印未成年  否则打印成年 
    {
        printf("未成年\n");
    }
    else
    {
        printf("成年\n");
    }
    
    return 0;
}

如果if条件成立,就执行其中的语句体1;否则(else),就执行其中的语句体2。


  1. 多分支选择语句
//3.多分支
if(表达式1)
{ 
    //语句体1
}
else if(表达式2)
{
    //语句体2
}
else
{
    //语句体3
}

【步骤1】计算表达式1的值
【步骤2】如果表达式1的取值为真(条件成立),则执行语句体1;否则(条件不成立)计算表达式2的取值
【步骤3】判断表达式2的取值,如果为真(条件成立),则执行语句体2,否则(条件不成立)执行语句体3

例:

int main()
{
    int age=0;
    scanf("%d",&age);
    if(age<18)
    {
        printf("未成年\n");
    }
    else if(age>=18&&age<30)  //并且 
    {
        printf("青年\n");
    }
    else if(age>=300&&age<60)
    {
        printf("中年\n");
    }
    else if(age>=60&&age<90)
    {
        printf("老年\n");
    }
    else
    {
        printf("寿星\n");
    }
    
    return 0;
}

if语句的嵌套

if语句的嵌套是指在if或者else子句中又包含了一个或多个if语句。内层的if语句既可以嵌套在if子句中,也可以嵌套在else子句中。形式一般如下:

if(表达式1)
{
    if(表达式2)
    {
        //语句1
    }
    else
    {
        //语句2
    }

}
else
{
    if(表达式3)
    {
        //语句3
    }
    else
    {
        //语句4
    }
}

小结

1.不要误认为双分支选择语句是两个语句,他们同属于一个if语句。else不能作为语句单独使用,它必须与if配对使用。
2.应注意if与else的配对关系。原则是else总是与它上面最近的、未配对的if配对。
3.为了避免在if与else配对时出错,建议使用{ }来限定内嵌if语句的范围。
例如下面形式:

 if(a==1)
 {
    if(b==2)
    printf("hehe\n");
 }
else    //else 和最近且未配对的if配对
    printf("haha\n"); 

这里,大括号{ }限定了内嵌if语句的范围,因此else与第一个if配对


switch语句

switch语句形式如下:

switch(表达式)
{
    case 常量表达式1:
    语句1;
    case 常量表达式2:
    语句2;
    case 常量表达式n:
    语句n;
    default:
    语句n+1;
}
  • switch是C语言的关键字,switch后面用{ }括起来的部分称为switch语句体。
  • 紧跟在switch后一对圆括号中的表达式可以是整型表达式或字符型表达式等。表达式两边的一对括号不能省略。
  • case也是关键字,与其后面的常量表达式合称case语句标号。常量表达式的类型必须与swicth后圆括号中的表达式类型相同,各case语句标号的值应该互不相同。
  • default也是关键字,起标号的作用,代表所有case标号之外的那些标号。default标号可以出现在语句体中任何标号位置上。在switch语句体中也可以没有default标号。
  • case语句标号后的语句1,语句2等,可以是一条语句,也可以是若干语句。
  • 必要时,case语句标号后的语句可以省略不写。
  • 在关键字case和常量表达式之间一定要有空格,例如“case 10:"不能写成“case10:”

switch语句的执行过程

当执行swicth语句时,首先计算紧跟其后一对括号中的表达式的值,然后在switch语句体内寻找与该值吻合的case标号。如果有与该值相等的标号,则执行该标号后开始的各语句,包括在其后的所有case和 default中的语句,直到switch语句体结束:如果没有与该值相等的标号,并且存在default标号,则从 default标号后的语句开始执行,直到switch语句体结束;如果没有与该 值相等的标号,同时又没有default标号,则跳过switch语句体,去执行switch语句之后的语句。

例 根据输入的数字给出相应的星期

int main()
{
    int n = 0;
    scanf("%d",&n);
    switch(n) //必须是整形表达式
    {
    case 1:  //整形常量表达式
    {
        printf("星期一\n");
    }
    case 2:
    {
        printf("星期二\n");
    }
    case 3:
    {
        printf("星期三\n");
    }
    case 4:
    {
        printf("星期四\n");
    }
    case 5:
    {
        printf("星期五\n");
    }
    case 6:
    {
        printf("星期六\n");
    }
    case 7:
    {
        printf("星期日\n");
    }
    default:
    printf("输入错误\n");
    }
}

当执行了以上程序,输入了一个5之后,接着执行switch语句,首先计算switch括号中的表达式:它的值为5。然后寻找与5吻合的case 5分支,开始执行其后的各语句。执行结果如下:
在这里插入图片描述
在输出了与5相关的星期五之后,又同时输出了与星期五毫不相关的星期六、星期日等,这显然不符合原意。为了改变这种多余输出的情况,switch语句常常需要与break语句配合使用。


在switch语句中使用break语句

break是c语言关键字,可以将break语句放在case标号之后的任意位置,通常是在case之后的语句最后加上break语句。
每当执行到break语句时。立刻跳出switch语句体。swtich语句通常总是和break语句联合使用,使得swtich语句真正起到分支的作用

现在用break语句修改上面例子,程序如下。

int main()
{
    int n = 0;
    scanf("%d",&n);
    switch(n) //必须是整形表达式
    {
    case 1:  //整形常量表达式
    {
        printf("星期一\n");
        break;
    }
    case 2:
    {
        printf("星期二\n");
        break;
    }
    case 3:
    {
        printf("星期三\n");
        break;
    }
    case 4:
    {
        printf("星期四\n");
        break;
    }
    case 5:
    {
        printf("星期五\n");
        break;
    }
    case 6:
    {
        printf("星期六\n");
        break;
    }
    case 7:
    {
        printf("星期日\n");
        break;
    }
    default:
    printf("输入错误\n");
    }
    return 0;
}

在这里插入图片描述


二、循环语句

for循环语句

for是C语言的关键字,其后的一对圆括号中通常含有三个表达式,各表达式之间用“;”隔开。这三个表达式可以是任意形式的表达式,通常主要用于for循环的控制。紧跟在for(…)之后的循环体语句在语法上要求是一条语句,若在循环体内需要多条语句,应该使用复合语句。

for循环语句的一般形式如下:

for(表达式1;表达式2;表达式3)//初始化;判断;调整
{
	//循环体
}

for循环语句的执行过程如下:
【步骤1】计算表达式1的值。
【步骤2】计算表达式2的值。若值为真(非0),转步骤③执行;若值为假(0),转步骤⑤执行。
【步骤3】执行一次for 循环体。
【步骤4】计算表达式3的值,转回步骤②执行。
【步骤5】结束循环,执行for 循环之后的语句。


例:使用for循环在屏幕上打印1~10

int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		printf("%d ", i);
	}
	return 0;
}

在这里插入图片描述


小结

①“表达式1”可以省略,此时应在该for 语句之前给循环变量赋初值。其后的分号不能省略。
②“表达式2”可以省略,即不对循环条件进行判断,循环无终止地进行下去。需要在循环体中用break 等语句退出循环。
③“表达式3”可以省略,此时需要在循环体中让循环变量产生变化,以保证循环能够正常结束。
④“表达式1”和“表达式3”可以同时省略,这样① 和3 两种情况同时出现,需要使用相关语句保证循环结束。
⑤ 3个表达式都可以省略,但分号间隔符不能少。这样② 和④ 两种情况同时出现,需要使用相关语句保证循环结束。

while语句

while循环语句的一般形式如下:

while(表达式)
{
	//循环体
}
//while后面一对圆括号中的表达式称为 循环条件。
//它可以是c语言中任意合法的表达式,由它来判断循环体是否执行。
//循环体可以是一条语句,也可以是由 { }括起来的多条语句。

while语句执行过程如下:
【步骤1】计算while后一对圆括号内表达式的值,当值非0时,执行【步骤2】,当值为0时,执行【步骤4】。
【步骤2】执行循环体中的语句。
【步骤3】转去执行【步骤1】。
【步骤4】结束循环,执行while循环之后的语句。


例:用while循环打印1-10的奇数

int main()
{
	//1~10
	int i = 1;//初始化

	while (i <= 10)//判断
	{
		printf("%d ", i);
		i+=2;//调整
	}
	return 0;
}

在这里插入图片描述


小结

在循环体中一定要有使循环结束的操作。以上循环体中“i+=2”使得每执行一次循环体变量都自增2,当表达式“i<=10”不成立时,循环结束。


do…while语句

do…while语句的一般形式如下:

do
{
	//循环体
}while(表达式)//do...while语句的表达式后面必须加分号。

执行过程如下:
【步骤1】执行do后的循环体。
【步骤2】计算while后一对圆括号内表达式的值,当值为非0时转去执行【步骤1】;当值为0时,执行【步骤3】。
【步骤3】结束循环,执行do…while循环之后的语句。


例:使用do while 在屏幕上输出1~10

int main()
{
	int i = 1;
	do
	{
		printf("%d ", i);
		i++;
	} while (i<=10);

	return 0;
}

在这里插入图片描述


小结

在do while循环体中,循环体至少要被执行1次,而在while循环中,循环体可能一次都不被执行。


三、 break语句和continue语句

break语句

break 语句只用在switch 语句或循环语句中,用在 switch 语句中,其作用是无条件跳出switch 语句,转去执行switch 后面的程序。而用在循环语句中,其作用是跳出本层循环,转去执行循环语句后面的程序。

continue语句

continue 语句只能用在循环结构中,其作用是结束本次循环,即不再执行循环体中continue 语句之后的语句,而是立即转入对循环条件的判断与执行。
对于while 和do…while 语句而言,程序会跳过循环体中continue 语句之后的语句,而立即执行 while后括号中的条件表达式;对于for 语句而言,程序会跳过循环体中continue 语句之后的语句,而执行“表达式3”,再执行“表达式2”。


完。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值