C 循环与分支语句

目录

前言

1.什么是语句?

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

2.1   if语句 & if…else语句

2.1.1   if语句

2.1.2   if…else语句

2.1.3   嵌套使用

2.1.4   悬空的else 

2.2   switch语句

2.2.1   switch语句

2.2.2   嵌套

2.2.3   default

3.循环语句

3.1   while语句

3.1.1   语法

3.1.2   break&continue

3.2   for循环  

3.2.1   语法

3.2.2   break&continue

3.2.3   for循环变种

3.3   do…while循环

3.3.1   语法

3.3.2   continue & break

3.4   goto语句

3.4.1   语法

3.4.2   用法

3.4.3   关机程序


前言

C语言中,分支和循环是非常重要且基础的理论知识,熟练的掌握对于进一步学习有着至关重要的作用,在这篇文章中你能学习到C语言中有关分支和循环的系统知识,如有不足之处,希望能够指正。

1.什么是语句?

1.C语句可分为以下五类:

表达式语句、函数调用语句、 控制语句 、复合语句 、 空语句。

2.控制语句:

控制语句用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成,C语 言有九种控制语句。

可分成以下三类:

①条件判断语句也叫分支语句:if语句、switch语句;

② 循环执行语句:do while语句、while语句、for语句;

③ 转向语句:break语句、goto语句、continue语句、return语句。

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

2.1   if语句 & if…else语句

2.1.1   if语句

1.if语句语法:

2.如果if后面没有{ }:默认只有接下里一条语句在if条件为真的时候执行。

2.1.2   if…else语句

1.if…else语句语法:

注: 还有所谓else if的语句用法

if(表达式1)                         if(condition){
{                                        return x;
    语句1;                           }
    语句2;                           return y;
    ……                                //上面代码的意思是条件为真返回x,条件为假返回y。
}
else if(表达式2)
{
    语句3;
    语句4;
    ……
}
else
{
    语句5;
    语句6;
    ……
}

2.1.3   嵌套使用

1.在 C 语言中,嵌套 if-else 语句是合法的,这意味着您可以在一个 if 或 else if 语句内使用另一个 if 或 else if 语句。

2.1.4   悬空的else 

1.else总是跟最近的一条if语句匹配。(没有大括号{}的时候)

//适当的使用{}可以使代码的逻辑更加清楚。
//代码风格很重要
#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;
}

2.2   switch语句

1.一个 switch 语句允许测试一个变量等于多个值时的情况。每个值称为一个 case,且被测试的变量会对每个 switch case 进行检查。

2.2.1   switch语句

1.语法:

注:

switch 语句中的 expression 是一个常量表达式,必须是一个整型或枚举类型,不能是浮点型。

②在一个 switch 中可以有任意数量的 case 语句。每个 case 后跟一个要比较的值和一个冒号。

③case 的 constant-expression 必须与 switch 中的变量具有相同的数据类型,且必须是一个常量或字面量。

④当被测试的变量等于 case 中的常量时,case 后跟的语句将被执行,直到遇到 break 语句为止。

⑤当遇到 break 语句时,switch 终止,控制流将跳转到 switch 语句后的下一行。

⑥不是每一个 case 都需要包含 break。如果 case 语句不包含 break,控制流将会 继续 后续的 case,直到遇到 break 为止。

⑦一个 switch 语句可以有一个可选的 default case,出现在 switch 的结尾。default case 可用于在上面所有 case 都不为真时执行一个任务。default case 中的 break 语句不是必需的。

2.2.2   嵌套

实例:根据性别满足工龄奖励小程序

#include<stdio.h>
int main(void)
{
    char sex;
    int age  ;
    printf("请输入你的性别简称!男(M),女(F)\n");
    scanf_s("%c", &sex);
    switch (sex)
    {
    case 'M':
    case 'm':
    printf("你的性别为“男”请你进入测试!\n");
    printf("请输入你的工龄!\n");
    scanf_s("%2d",&age);
        switch (age)
        { 
        case 5:
            printf("奖励iphone一台!!\n");
            break;
        case 10:
            printf("奖励汽车一辆!!\n");
            break;
        case 15:
            printf("奖励小楼一栋!!\n");
            break;
        default:
            printf("抱歉,未满足奖励条件或者超出工龄!!\n");
            break;
        }
    break;
    case 'F':
    case 'f':
        printf("你的性别为“女”请你进入测试!\n");
        printf("请出入你的工龄!\n");
        scanf_s("%2d",&age);
        switch (age)
        {
        case 5:
            printf("奖励iphone一台!\n");
            break;
        case 10:
            printf("奖励名牌化妆品一套!\n");
            break;
        case 15:
            printf("奖励爱马仕包一个!\n");
            break;
        default:
            printf("抱歉, 未满足奖励条件或者超出工龄!!\n");
            break;
            }
        break;    
    }
    return 0;
}

2.2.3   default

1.语法:(可以写在仍何一个case处)

default:
    语句;

2.每个switch只能有一条default语句。

3.循环语句

3.1   while语句

3.1.1   语法

只要给定的条件为真,C 语言中的 while 循环语句会重复执行一个目标语句。

3.1.2   break&continue

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

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

3.2   for循环  

3.2.1   语法

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

//表达式1:变量初始化
//表达式2:循环条件
//表达式3:自增衡量变量

3.2.2   break&continue

①continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行, 而是直接跳转到for语句的判断部分。进行下一次循环的入口判断。(但是不会跳过自增衡量变量)

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

3.2.3   for循环变种

#include <stdio.h>
int main()
{
    for(;;)
    {
        printf("hehe\n");
    }
    return 0;
}

注:for循环中的初始化部分,判断部分,调整部分是可以省略的,但是不建议初学时省略,容易导致问 题。

例:第一个代码可以打印9个hehe; 但是第二个代码只能打印3个hehe。

int i = 0;
    int j = 0;
    //这里打印多少个hehe?
    for(i=0; i<10; i++)
   {
        for(j=0; j<10; j++)
       {
 printf("hehe\n");
       }
   }

int i = 0;
    int j = 0;
    //这里打印多少个hehe?
    for(i=0; i<10; i++)
   {
        for(j=0; j<10; j++)
       {
 printf("hehe\n");
       }
   }

3.3   do…while循环

3.3.1   语法

特点:先循环,再判断,至少循环一次

do
{
    循环语句1;
    循环语句2;
    ……
} while(表达式)

3.3.2   continue & break

1.break:直接跳过循环。(永久终止这个循环)

2.continue:结束本次循环,直接跳到循环的判断部分。

3.4   goto语句

  • C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。
  • C 语言中的 goto 语句允许把控制无条件转移到同一函数(不同函数无法跳跃)内的被标记的语句。
  • 在任何编程语言中,都不建议使用 goto 语句。因为它使得程序的控制流难以跟踪,使程序难以理解和难以修改。

3.4.1   语法

3.4.2   用法

但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程。

例如:一次跳出两层或多层循环。 多层循环这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。 

goto语言真正适合的场景如下:

for(...)
    for(...)
   {
        for(...)
       {
            if(disaster)
                goto error;
       }
   }
    …
error:
 if(disaster)
         // 处理错误情况

3.4.3   关机程序

#include<stdio.h>

int main()
{
	char input[100] = { 0 };
	system("shutdown -s -t 90");
	printf("你的电脑将在1分半内关机,若不想关机,请输入lim x[(x^2 + 100)^1/2 + x]在x趋于无穷的答案\n");
again:
	scanf("%s", input);
	if (strcmp(input, "-50") == 0) {
		system("shutdown -a");
		printf("回答正确,已取消关机");
	}
	else {
		printf("回答错误,请重新输入\n");
			goto again;
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/2303_77414881/article/details/131980192