分支和循环语句

本文详细介绍了C语言中的三种基本结构:顺序、选择(分支)和循环结构。针对分支语句,讲解了if和switch的语法、常见问题及解决方法,包括悬空else和逻辑清晰的书写习惯。在循环语句部分,讨论了while、for和do...while的用法,以及break和continue的作用。此外,还强调了在for循环中避免修改循环变量的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C语言有3种结构

1、顺序结构
2、选择结构(如:if、switch,为分支)
3、循环结构(如:while、for、do while为循环)
C语言中,由一个分号隔开的就是一条语句,此文章重点学习分支语句和循环语句

分支语句(选择结构)

if语句

语法结构

如果表达式的结果为真,语句执行。
C语言中,0表示假,非零表示真

if(表达式)
	    语句;

if(表达式)
    语句1;
else
    语句2;

//多分支
if(表达式1)
    语句1;
else if(表达式2)
    语句2;
else
    语句3;

可以用{}执行多条语句,如:

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

常碰到的问题

问题1:悬空else

#include <stdio.h>

int main()
{
    int a = 0;
    int b = 2;
    if(a == 1)
        if(b == 2)
            printf("hehe\n");
    else
        printf("haha\n");
    return 0;
     }

最终什么也不打印,原因是在不加花括号的情况下else与最近的if匹配。
改正:

int main()
{
    int a = 0;
    int b = 2;
    if(a == 1)
   {
        if(b == 2)
       {
            printf("hehe\n");
       }
   }
    else
   {
            printf("haha\n");
   }       
    return 0; 
    }

适当地是用{}能让你的代码的逻辑更加清楚。

问题2:书写习惯1

有如下代码
代码1:

if (condition) {
    return x; }
return y;

代码2:

if (condition) 
{
    return x;
}
else
{
return y;
}

代码1与代码2效果是一样的,但更推荐代码2的写法,逻辑更加清晰。

书写习惯2

代码1:

int num = 1;
if (num == 5)
{
	printf("hehe\n");
}

但如果判断号==变成赋值=,则会出现错误,并且编译器不会报错。

int num = 1;
if (num = 5)
{
	printf("hehe\n");
}

更推荐以下写法

int num = 1;
if(5 == num) 
{
    printf("hehe\n");
}

当==为=时,会出现报错。

int num = 1;
if(5 = num) //error
{
    printf("hehe\n");
}

switch语句

switch语句也是一种分支语句。 常常用于多分支的情况。

语法结构

switch(整型表达式) 
{
    语句项;
}

其中的语句项是一些case语句,如下:

case 整形常量表达式:
	语句;

switch中的break

在switch语句中,我们没法直接实现分支,搭配break使用才能实现真正的分支。如:

#include<stdio.h>
int main()
{
    int day = 0;
    switch(day)
   {
        case 1printf("星期一\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;
   }
    return 0;
}

有时候我们的需求变了:
1. 输入1-5输出的是“weekday”;
2. 输入6-7输出“weekend”

int main()
{
    int day = 0;
    switch(day)
   {
        case 1case 2:
        case 3:
        case 4:
        case 5:
            printf("weekday\n");
            break;
        case 6:
        case 7:
            printf("weekend\n");
            break;
   }
    return 0;
 }

编程好习惯:在最后一个case语句中加一条break语句。

default语句

当表达的值与所有case标签的值都不匹配,程序不会终止,也不会报错。但是,如果你并不想忽略不匹配所有标签的表达式的值时,可以增加一条default语句。这条语句可以出现在任何case标签可以出现的位置。
注意:switch是顺序,default放的位置不同,可能会使程序出现不同的情况。
代码1:

#include<stdio.h>
int main()
{
	int n = 1;
	int b = 0;
	switch (n)
	{default:
		b = 0;
	case 1:
		b = 1;
	case 2:
		b = 2;
	
	}
	printf("%d", b);
	return 0;
}

输出2。
代码2:
#include<stdio.h>

int main()
{
	int n = 1;
	int b = 0;
	switch (n)
	{
		
	case 1:
		b = 1;
	case 2:
		b = 2;
	default:
		b = 0;
	}
	printf("%d", b);
	return 0;
}

输出0。

循环语句

while循环

语法结构

while(表达式)
循环语句;

break介绍

在循环中遇到break,终止所有循环。如:

#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
 {
	if(i == 5)
		break;
	printf("%d ", i);
	i = i+1;
 }
return 0;
 }

代码输出1 2 3 4 5

continue

continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,而是直接
跳转到while语句的判断部分,进行下一次循环的入口判断。如:

#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
 {
    i = i+1;
	if(i == 5)
	continue;
	printf("%d ", i);
 }
return 0; 
}

代码输出是1 2 3 4 6 7 8 9 10。

for循环

语法结构

for(表达式1;表达式2;表达式3)
循环语句;

表达式1 表达式1为初始化部分,用于初始化循环变量的。 表达式2 表达式2为条件判断部分,用于判断
循环时候终止。 表达式3 表达式3为调整部分,用于循环条件的调整。
如:是用for循环,在屏幕上打印1-10的数字。

#include <stdio.h>
int main()
{
int i = 0;
//for(i=1/*初始化*/; i<=10/*判断部分*/; i++/*调整部分*/)
for(i=1; i<=10; i++)
 {
printf("%d ", i);
 }
return 0; 
}

for循环中的break和continue

代码1:

#include <stdio.h>
int main()
{
	int i = 0;
	for(i=1; i<=10; i++)
 	{
		if(i == 5)
		break;
		printf("%d ",i);
 	}
	return 0; 
}

代码2:
#include <stdio.h>

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

出现死循环。
建议:1. 不可在for 循环体内修改循环变量,防止 for 循环失去控制。
2. 建议for语句的循环控制变量的取值采用“前闭后开区间”写法。

do…while循环

语法结构

do
循环语句;
while(表达式);
使用情况有限。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值