【C语言】分支与循环(巩固知识笔记)

前言

第一次尝试在这里总结一些知识,构建框架,可能会有一些不足之处,在此真诚希望各位能多多指教。

在接触分支与循环之前,我们需要熟悉并掌握逻辑表达式、关系运算符和判等运算符。在这里只做一些简单介绍

逻辑运算符

关系运算符

关系运算符都是双目运算符,其结合性均为左结合。关系运算符的优先级低于算术运算符,高于赋值运算符。在六个关系运算符中,<、<=、>、>=的优先级相同,高于==和!=,==和!=的优先级相同。

判等运算符

1. == (等于)ps:单独的“=”的意义是赋值,不要与“==”搞混了   

2.!=(不等于)


接下来让我们把目光转向目录,可看到,我们将要了解的有三种语句:一,分支(选择)语句   二,循环语句  三,退出循环语句(跳转语句)。

分支部分

if语句

if语句的运作过程如同一个人走一条形如“Y”的路,走到分叉点要去选择一个方向继续前进。它允许程序通过表达式的值从两种选项中选择一种。基本语法如下

if(表达式) 
{
  语句
}

C语言对可以出现在if语句内部的语句类型没有限制,if语句内部可以嵌套多个if语句

举个用if语句判断两个数字数量关系的质子

#include <stdio.h>
int main()
{
   int a = 0, b = 0;
   scanf("%d %d",&a,&b);
   if(a >= b)
   {
     if(a > b)// if语句里可套多个“if语句”
        {
          printf("a大于b");
        }
     else// if语句中可以有else子句
        {
          printf("a等于b");
        }
   }
   else
   {
    printf("a小于b");
   }
  return 0;
}

上面质子进行了展开,让我们隐约看到了else子句,级联式if子句,接下来让我们轻轻地向它扔个二向箔,使它转变为二维平面,方便“查看”

else子句

else子句的基本语法如下

if(表达式)
{
  语句;//不要忘记给语句加分号!
}
else//如果if表达式为假,则执行else后边的语句
{
  语句;
}

注意!由于if语句可以嵌套任何层,可能会发生嵌套混乱!参考下例

if(i > j)
if(i > k)
   {max = i;}
else
   {max = k;}
else
if(j > k)
   {max = j;}
else
   {max = k;}

显然,这样写的if~else语句看起来比较混乱,层次不清。解决上述问题的方法是:把每个else同它所匹配的if语句对齐。

if(i > j)
   if(i > k)
    {max = i;}
   else
    {max = k;}
else
   if(j > k)
    {max = j;}
   else
    {max = k;}

这样看着就舒服多了,后续程序也会更容易进行修改

级联式if子句

级联式if语句非常实用,它可以让程序通过判定一系列条件,一旦其中某一个条件为真就立刻停止。

参考下例:用级联式if语句判定n与0之间的数量关系

if(n < 0)
 {
  printf("n < 0");
 }
else
  if(n == 0)
    {
      printf("n = 0");//此处为数学意义上的=
    }
  else
    {
      printf("n > 0");
    }   
 

简单来说,级联式语句是if~else语句中,有另一个if语句作为else语句的子句,而这“另一个if语句”又有另另外一条if语句作为它自己的else子句(可以这样不断类推、延申)

“悬空else”的问题

圣喵大佬对这个问题讲的非常生动详细,大家可以从这个入口进去看看

https://blog.csdn.net/m0_66769266/article/details/124145982

switch语句

switch语句可以视作级联式if语句的替代,其基本语法如下

switch(控制表达式)
{
case 常量表达式1:
         语句
         break://没有break的话就会执行下一条语句
case 常量表达式2:
         语句
         break:
...
default:
         语句n   
    break;//最后一个break可以不要,建议写,养个好习惯
}

看一下它的组成部分
控制表达式:switch后边必须跟着由圆括号括起来的整型表达式。C语言把字符当成整数来处理,                        因此在switch语句中可以对字符进行判定。但是,这不适用于浮点数和字符串。
分支标号:每个分支的开头都有一个标号,格式如下:
                  case 常量表达式:
常量表达式:很像普通的表达式,只是不能包含变量和函数调用。因此,5是常量表达式,5+10也                        是常量表达式,但n + 10不是常量表达式(除非n 是表示常量的宏)。分支标号中常                        量表达式的   值必须是整数(字符也可以)。
语句:每个分支标号的后边可以跟任意数量的语句,并且不需要用花括号把这些语句括起来。每               组语句的最后一条通常是break语句(其中break语句会导致程序"跳"出switch语句,继续执行switch后面的语句)

C语言对switch中的分支没有要求,特别是default语句不一定要放置在最后。

注意:switch 语句不要求一定有default分支。如果 default不存在,而且控制表达式的值和任何一个分支标号都不匹配的话,控制会直接传给 switch语句后面的语句。

举个例子

#include <stdio.h>

int main() 
{
    int choice;
    
    printf("请选择一个数字:\n");
    printf("1. 篮球\n");
    printf("2. 足球\n");
    printf("3. 乒乓球\n");
    scanf("%d", &choice);
    
    switch(choice) {
        case 1:
            printf("您选择了篮球。\n");
            break;
        case 2:
            printf("您选择了足球。\n");
            break;
        case 3:
            printf("您选择了乒乓球。\n");
            break;
        default:
            printf("您输入的不是一个有效的选择。\n");
    }
    
    return 0;
}

该程序首先提示用户选择一个数字,
然后使用 Switch 语句根据用户的选择输出相应的文本。
如果用户未输入有效的选择,则输出默认消息。

多个分支标号可以放置在同一组语句的前面:

switch (grade)
{
  case 4:
  case 3:
  case 2:
  case 1:
      printf("Passing");
      break;
  case 0:
      printf("Failing");
      break;
  default:
      printf("Illegal grade"); 
      break;
}


循环部分

我们先简要了解一下while、do~while和for循环之间的区别

while循环在循环体执行之前测试控制表达式,do~while循环在循环体执行之后测试控制表达式,for语句适合那些递增或递减计数变量的循环。

while循环语句

C语言中,while循环用于重复执行一段代码,直到满足指定的条件才会停止循环。基本语法如下

while(控制表达式)
{
  语句  //花括号之间的部分称为循环体
}

其中“控制表达式”是一个逻辑表达式,当这个表达式的结果为真时,循环体中的代码会执行,否则循环会终止。

下面是一个示例程序,演示了如何使用 while 循环输出从 1 到 10 的所有整数:

#include <stdio.h>

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

该程序使用 while 循环来迭代变量 i 的值。在每次循环中,程序会首先检查 i 是否小于等于 10,如果是,就输出 i 的当前值,然后将 i 的值加 1。直到 i 大于 10 时,循环会终止,程序结束执行。

do while循环语句

C语言中,使用do while循环的基本语法如下:

do
{
  语句//循环体
}while(控制表达式);

do while循环会先执行循环体中的代码,再判断循环条件是否成立。如果循环条件成立,则继续执行循环体中的代码;如果循环条件不成立,则跳出循环。

举个例子,可以使用do while循环计算1到10的整数和,代码如下:

#include <stdio.h>

int main()
{
   int sum = 0;
   int i = 1;
    do   
     {
       sum += i;
       i++;
     } while (i <= 10);
    printf("1到10的整数和为:%d\n", sum);
  return 0;
}

在上面的代码中,先初始化sum和i的值,然后进入do while循环,循环体中先执行sum += i和i++操作,然后再检查循环条件i <= 10是否成立,如果成立,则继续执行循环体中的代码,反之则跳出循环,并输出结果。

for 循环语句

for循环的基本语法如下

for(初始化表达式; 循环条件; 更新表达式)
{
   语句//循环体
}

其中,初始化表达式在循环开始前只执行一次,一般用于初始化循环变量;循环条件是一个布尔表达式,如果为真则继续执行循环体,否则跳出循环;更新表达式在每次循环结束后执行一次,一般用于更新循环变量的值。

下面是一个计算1到10所有整数之和的例子:

#include <stdio.h>
 int main()
{   
   int sum = 0;
   for (int i = 1; i <= 10; i++) 
     {
        sum += i;
     }
   printf("1到10的整数之和为:%d\n", sum);
   return 0;
}

//其运行结果为  1到10的整数之和为:55

可以看到,for循环可以方便地完成类似于计数、遍历等任务。


退出循环的语句

break语句

break语句用于在循环中提前结束循环。当代码执行到break语句时,循环中的代码将立即停止执行,并跳出循环体,继续执行下面的代码。

break语句通常与if语句一起使用,以便在满足某些条件时跳出循环。例如:

#include <stdio.h>
int main()
{
    int num;
     while (1)
  {
     scanf("%d", &num);
     if (num == -1) 
       {
         break;
       }
     printf("%d\n", num);
  }
  return 0;
}

在这个例子中,代码将不断地从用户输入中读取数字,直到用户输入数字-1为止。当用户输入-1时,if语句将检测到这个条件,break语句将被执行,循环将立即退出。

除了在while循环中使用,break语句还可以在for循环、do-while循环等其他类型的循环中使用,用法类似

continue语句

continue语句可以用于循环语句(如for、while、do-while)中,用于跳过本次循环中剩余的语句,直接进入下一次循环。

当程序执行到continue语句时,会跳过本次循环中位于continue后面的语句,直接进入下一次循环。

以下是一个简单的for循环示例,演示了如何在循环中使用continue语句:

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

以上代码的输出结果将是:0 1 2 3 4 6 7 8 9

在第5次循环时,由于i等于5,执行了continue语句,直接跳过了本次循环中位于continue后面的printf语句,进入下一次循环。因此,输出结果中不包含数字5。

注意:在使用continue语句时,需要保证其位于某个循环体内,否则会出现语法错误。同时,过多地使用continue语句也会降低代码的可读性和可维护性,要小心一点用。

goto语句

在C语言中,goto语句可以用于循环内部的跳转,通常用于程序中断或错误处理。下面是几个示例:

示例1:跳转到循环体顶部

int i = 0;
loop:
    语句//跳到了这里

 if (i < 10)
    {
        语句// 循环体
        i++;
        goto loop;  // 跳转到循环体顶部
    }

示例2:跳转到循环体结束处

int i = 0;
if (i < 10) 
    {
        语句// 循环体
        i++;
        goto end;
    }

end://跳到了这里
    语句
    

示例三:在循环中跳出多层循环

for (int i = 0; i < 10; i++) 
{
    for (int j = 0; j < 10; j++) 
       {
           if (j == 5) 
               {
                 goto end;   // 跳出两层循环
               }
       }
}

end://跳到了这里
    语句

注意:虽然goto语句可以在某些情况下简化代码,但过多的使用会让程序难以维护和理解。因此,应该尽量避免在循环中使用goto语句,而是使用其他结构化控制语句,如break和continue来实现类似的功能。

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值