C语言分支与循环语句

分支语句 :
if
switch
循环语句 :
while
for
do while

1. 什么是语句?

C语言中由一个分号隔开的就是一条语句。例如:
printf("nihao\n");

;//这一行除了有一个分号其他什么都没有,这是空语句

2. 分支语句(选择结构)

如果你好好学习,校招时拿一个好 offer
如果你不学习,毕业等于失业,回家搬砖
这就是选择!

2.1 if语句

如果表达式的结果为真,则语句执行。
在C语言中如何表示真假?
0表示假,非0表示真。注意:负数也为真
语法结构:
if(表达式)
   语句;
#include <stdio.h>  //如果输入小于18的数,输出打印未成年。
 
int main()
{
 int age = 0;
    scanf("%d", &age);
    if(age<18)       //当输入的数小于18时条件为真,输出打印未成年。
   {                  //当输入的数大于等于18时条件为假,直接下一代码,这里直接执行return 0 ;
        printf("未成年\n");  
   }
  return 0 ;
}
//if后面只能跟一条有效语句,如果需要多条语句时可以加个{}把需要的语句新进大括号里。
if(表达式)
   语句1;
else
   语句2;
//如果输入小于18的数,输出打印未成年,输入大于等于18的数打印成年。
#include <stdio.h>   
int main()
{
 int age = 0;
    scanf("%d", &age);
    if(age<18)
   {
        printf("未成年\n");
   }
    else
   {
        printf("成年\n");
   }
  return 0 ;
}
//多分支    
if(表达式1)
   语句1;
else if(表达式2)
   语句2;
else
   语句3;
/*如果输入小于18的数,输出打印未成年,输入大于等于18并且小于30的数输出打印青年,
   输入大于等于30并且小于50的输出打印中年... */
#include <stdio.h>
int main()
{
 int age = 0;
    scanf("%d", &age);
    if(age<18)
   {
        printf("少年\n");
   }
    else if(age>=18 && age<30)   //当输入的数大于等于18并且小于30时条件为真,输出打印青年。
   {
        printf("青年\n");
   }
    else if(age>=30 && age<50)
   {

        printf("中年\n");
   }
    else if(age>=50 && age<80)
   {
        printf("老年\n");
   }
    else
   {
        printf("老寿星\n");
   }
    
  return 0 ;
}
       else的匹配:else是和它离的最近的if匹配的。
//适当的使用{}可以使代码的逻辑更加清楚。
//代码风格很重要
#include <stdio.h>
int main()
{
    int a = 0;
    int b = 2;
    if(a == 1)                    //程序输出的结果为haha
   {
        if(b == 2)
       {
            printf("hehe\n");     //a等于零不等于一,为假,执行else语句。
       }
   }
    else
   {
         printf("haha\n");     
   }       
    return 0;
 }
  

2.2 switch语句

switch ( 整型表达式 )
{
    语句项;
}
语句项 是什么呢?
// 是一些 case 语句:
// 如下:
case 整形常量表达式 :
    语句 ;

2.2.1 在switch语句中的 break
#include <stdio.h>
int main()
{
    int day = 0;
   scanf("%d",&day);
    switch(day)
   {
        case 1:   //case 整形常量表达式:  case 1+0 也是没有问题的;估计也没有人会这样写。
            printf("星期一\n");
            break;
        case 2:
            printf("星期二\n");
            break;
        case 3:
            printf("星期三\n");
            break;    
        case 4:
            printf("星期四\n"); //最好在你想停止的case语句后面加上一条break语句。
            break;    
        case 5:
            printf("星期五\n");// case 语句遇到break 时才会停止;不懂下一个代码就懂了。
            break;
        case 6:
            printf("星期六\n");
            break;
        case 7:
            printf("星期天\n");    
            break;

       default:
            printf("输入错误\n"); //尽量每个switch语句都放一条deafult语句,最多只能有一条;
            break;
          
   }
    return 0; }
break 语句 的实际效果是把语句列表划分为不同的分支部分。
编程好习惯
在最后一个 case 语句的后面加上一条 break 语句。
(之所以这么写是可以避免出现在以前的最后一个 case 语句后面忘了添加 break 语句)。
#include <stdio.h>
int main()
{
    int day = 0;
   scanf("%d",&day);
    switch(day)
   {
        case 1:
        case 2:
        case 3:  //当你输入1时,由于没有case 1:后没有跟break,所以会执行case 2 case 3...
        case 4:  //直到遇到break为止。
        case 5:
            printf("weekday\n");
            break;
        case 6:
        case 7:
            printf("weekend\n");
            break;
        default:
            printf("输入错误\n");
   }
    return 0; }
2.2.2 default 子句
如果表达的值与所有的 case 标签的值都不匹配怎么办?
其实也没什么,结构就是所有的语句都被跳过而已。
程序并不会终止,也不会报错,因为这种情况在 C 中并不认为是个错误。
但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢?
你可以在语句列表中增加一条 default 子句,把下面的标签
default:
写在任何一个 case 标签可以出现的位置。
switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。
所以,每个 switch 语句中只能出现一条 default 子句。
但是它可以出现在语句列表的任何位置,而且语句流会像执行一个 case 标签一样执行 default 子句。
编程好习惯
在每个 switch 语句中都放一条default子句是个好习惯,甚至可以在后边再加一个 break 。

3.循环语句

3.1while循环

//while 语法结构
while ( 表达式 )
循环语句 ;
执行过程:
第一步 :计算紧跟while后括号中表达式的值,当表达式的值为非0时,则接着执行while语句中都内嵌语句;当表达式值为0时,则跳过while语句,执行该while结构后的其他语句。
第二步:执行循环体内嵌语句。
第三步:返回去执行步骤1,直到条件不满足,即表达式的值为0时,退出循环,while循环结束。
例:在屏幕上打印 1-10 的数字。
#include <stdio.h>
int main()
{
 int i = 1;
 while(i<=10)
 {
 printf("%d ", i);
 i = i+1;
 }
 return 0; 
}
3.1.1 while语句中的break和continue
//break 代码实例
#include <stdio.h>
int main()
{
 int i = 1;
 while(i<=10)
 {
 if(i == 5)
 break;
printf("%d ", i);
 i = i+1;
 }
 return 0; 
}

总结:
break在while循环中的作用:
其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。
所以:while中的break是用于永久终止循环的。

//continue 代码实例1
#include <stdio.h>
int main()
{
 int i = 1;
 while(i<=10)
 {
 if(i == 5)   //当i=5时跳过本次循环continue后面的代码,重新进入循环,i还是等于5,不断往复。
 continue;   
 printf("%d ", i);      //结果如下图,到4后光标一直闪。死循环了。
 i = i+1;
 }
 return 0;
}

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

3.2 for循环

3.2.1 语法

for ( 表达式 1 ; 表达式 2 ; 表达式 3 )
循环语句 ;
表达式 1
表达式 1 初始化部分 ,用于初始化循环变量的。
表达式 2
表达式 2 条件判断部分 ,用于判断循环时候终止。
表达式 3
表达式 3 调整部分 ,用于循环条件的调整。

执行过程:

步骤一:先求表达式1的值

步骤二:求表达式2的值,若其值为真(非0),则执行for语句中指定的内嵌语句,然后执行下面步骤三,若其值为假(0),则退出循环,执行for语句一下的其他语句;

步骤三:求表达式3的值;

步骤四:重复执行步骤二。

使用for循环 在屏幕上打印1-10的数字。
#include <stdio.h>
int main()
{
 int i = 0;
                      //for(i=1/*初始化*/; i<=10/*判断部分*/; i++/*调整部分*/)
 for(i=1; i<=10; i++)  //for循环中的初始化部分,判断部分,调整部分是可以省略的,但是不建议初学时                                                               
                       //省略,容易导致出现问题。
 {
 printf("%d ", i);
 }
 return 0;
 }
3.2.2 break和continue在for循环中
我们发现在 for 循环中也可以出现 break continue ,他们的意义和在 while 循环中是一样的。
但是还是有些差异:

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

 for 遇到break,就停止后期所有循环,直接终止循环....输出结果为1234

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

for 遇到continue,就停止本次循环,后重新i++后进行判断,输出结果为1234678910

for循环的嵌套:

#include<stdio.h>
int main()
{
	int i = 0;
	int j = 0;
	for (i = 0; i < 10; i++)
	{
		for (j = 0; j < 10; j++)
		{
			printf("你好\n"); //一共打印100个你好。
		}
	}
 return 0 ;
}

3.3 do...while()循环

do
循环语句 ;
while ( 表达式 );
执行过程:
步骤一:先执行一次指定的循环体语句。
步骤二:执行完成后,判断while后面的表达式的值,当表达式的值为非0(真)时,程序流程返回,去重新执行循环体语句。
步骤三:如此反复,直到表达式的值等于零(假)为止,此时循环结束。
3.3.1 do 语句的特点
循环至少执行一次,然后判断循环条件是否成立。

#include <stdio.h>
int main()
{
 int i = 10;
 do
 {
 printf("%d\n", i);
 }while(i<10);
 return 0;
 }
3.3.2 do while循环中的break和continue

#include <stdio.h>
int main()
{
 int i = 5;
 
 do
 {
        if(5 == i)
            break;
 printf("%d\n", i);

 }while(i<10);
    
 return 0; 
}
#include <stdio.h>
int main()
{
	int i = 2;

	do
	{
		printf("%d\n", i);
		i = i + 1;
		if (5 == i)   //当i=5时,执行continue,执行continue则跳过本次循环中continue后的代码。
			continue;    // 然后进行下一次循环的入口判段
		printf("good time\n");
		
	} while (i < 10);

	return 0;
}
运行结果:

4. goto语句

C 语言中提供了可以随意滥用的 goto 语句和标记跳转的标号。
从理论上 goto 语句是没有必要的,实践中没有 goto 语句也可以很容易的写出代码。
这里不做展开。感兴趣的可以自己查一下。
本篇文章就到这里了,希望能给你带来帮助!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

记忆&碎片

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值