万字C语言之分支语句和循环语句

这篇具有很好参考价值的文章主要介绍了万字C语言之分支语句和循环语句。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:

📕作者简介:热爱编程的小七,致力于C、Java、Python等多编程语言,热爱编程和长板的运动少年!

📘相关专栏Java基础语法,JavaEE初阶,数据库,数据结构和算法系列等,大家有兴趣的可以看一看。

😇😇😇有兴趣的话关注博主一起学习,一起进步吧!

一、什么是语句

C语句可分为以下五类:

1. 表达式语句

2. 函数调用语句

3. 控制语句

4. 复合语句

5. 空语句

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

可分成以下三类: 1. 条件判断语句也叫分支语句:if语句、switch语句; 2. 循环执行语句:do while语句、while语句、for语句; 3. 转向语句:break语句、goto语句、continue语句、return语句。


二、分支语句(选择结构)

2.1 if语句

语法结构:
//1.第一种表示
if(表达式)
    语句;
if(表达式)
    语句1;
else
    语句2;
//2.第二种方式(多分支)
if(表达式1)
    语句1;
else if(表达式2)
    语句2;
else
    语句3;

在C语言中:0表示假,非0表示真。

#include<stdio.h>
int main()
{
  int age=0;
  printf("请输入年龄:\n");
  scanf("%d",&age);
  if(age>=0 && age<18)
  {
      printf("未成年\n!");
  }
  else if(age>=18 && age <=35)
  {
    printf("中年人!\n");
  }
  else if(age>35 && age< 80)
  {
    printf("老年人!\n");
  }
  else{
    printf("老不死\n!");
  }
  return 0;
}
//执行结果:
[root@VM-16-7-centos Day909]# ./test
请输入年龄:
44
老年人!
[root@VM-16-7-centos Day909]# ./test
请输入年龄:
15
未成年
![root@VM-16-7-centos Day909]# ./test
请输入年龄:
99
老不死

 2.1.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;
}
#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;
}
[root@VM-16-7-centos Day909]# ./test
[root@VM-16-7-centos Day909]# 

万字C语言之分支语句和循环语句,初阶C语言,c语言,开发语言万字C语言之分支语句和循环语句,初阶C语言,c语言,开发语言

总结:代码风格很重要,我们可以使用适当的{}使我们的逻辑更加清楚。

#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的匹配:else是和它离的最近的if匹配的。

2.1.2if书写形式的对比

//代码1
if (condition) {
        return x;
}
return y;
//代码2
if (condition)
{
        return x;
}
else
{
        return y;
}
//代码3
int num = 1;
if (num == 5)
{
        printf("hehe\n");
}
//代码4
int num = 1;
if (5 == num)
{
        printf("hehe\n");
}

代码2和代码4更好,逻辑更加清晰,不容易出错。

2.1.3练习

1. 判断一个数是否为奇数

#include<stdio.h>
int main()
{
  printf("请输入一个整数:\n");
  int num=0;
  scanf("%d",&num);
  if(num%2==0)
  {
    printf("这是一个偶数!\n");
  }
  else{
    printf("这是一个奇数!\n");
  }
  return 0;
}

[root@VM-16-7-centos Day909]# ./test1
请输入一个整数:
7
这是一个奇数!
[root@VM-16-7-centos Day909]# ./test1
请输入一个整数:
8
这是一个偶数!

2. 输出1-100之间的奇数

#include<stdio.h>
int main()
{
  //输出1-100之间的奇数
  for(int i=1;i<=100;1++)
  {
    if(i % 2==1)
    {
      pritnf("%d ",i);
    }
  }
  return 0;
}

[root@VM-16-7-centos Day909]# ./test1
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99 [root@VM-16-7-centos Day909]# 

2.2switch语句

switch语句也是一种分支语句。

比如:

输入1,输出星期一

输入2,输出星期二

输入3,输出星期三

输入4,输出星期四

输入5,输出星期五

输入6,输出星期六

输入7,输出星期日

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

 而语句项是什么呢?

//是一些case语句:
//如下:
case 整形常量表达式:
    语句;

2.2.1在switch语句中的 break

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

#include<stdio.h>
int main()
{
  printf("请输入:\n");
  int num=0;
  scanf("%d",&num);
  switch(num)
  {
    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");
      break;
  }
  return 0;
}

[root@VM-16-7-centos Day909]# ./test1
请输入:
1
星期一
[root@VM-16-7-centos Day909]# ./test1
请输入:
5
星期五
[root@VM-16-7-centos Day909]# ./test1
请输入:
8
您的输入有误,请重试

有时候我们的需求变了:

  1. 输入1-5,输出的是“weekday”;

  2. 输入6-7,输出“weekend”

#include<stdio.h>
int main()
{
  printf("请输入:\n");
  int num=0;
  scanf("%d",&num);
  switch(num)
  {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
      printf("工作日\n");
      break;
    case 6:
    case 7:
      printf("工作日\n");
      break;
    default:
      printf("您的输入有误,请重试\n");
      break;
  }
  return 0;
}

[root@VM-16-7-centos Day909]# ./test1
请输入:
4
工作日
[root@VM-16-7-centos Day909]# ./test1
请输入:
6
工作日

break语句的实际效果是把语句列表划分为不同的分支部分。

编程好习惯:

一般情况下:在最后一个 case 语句的后面加上一条 break语句。

实际根据情况而选择是否添加break。

2.2.2default子句

如果表达的值与所有的case标签的值都不匹配怎么办?其实也没什么,结构就是所有的语句都被跳过而已。

程序并不会终止,也不会报错,因为这种情况在C中并不认为是个错误。但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢?你可以在语句列表中增加一条default子句,把下面的标签default:写在任何一个case 标签可以出现的位置。当 switch 表达式的值并不匹配所有case 标签的值时,这个default 子句后面的语句就会执行。所以,每个switch语句中只能出现一条default子句。但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句。

在每个 switch 语句中都放一条default子句是个好习惯,甚至可以在后边再加一个 break 。

2.3循环语句

  • while

  • for

  • do while

2.3.1while循环

应用场景:同一件事情我们需要完成很多次。

//while 语法结构
while(表达式)
    循环语句;

练习:在屏幕上打印1-10的数字。

#include<stdio.h>
int main()
{
  int i=0;

  for(i=0;i<10;i++)
  {
    printf("%d ",i);
  }
  printf("\n");
  return 0;
}

[root@VM-16-7-centos Day909]# ./test1
0 1 2 3 4 5 6 7 8 9
2.3.1.1while语句中的break和continue

break介绍:

#include<stdio.h>
int main()
{
  int i=0;

  while(i<10)
  {
    
    if(i==5){
      break;
    }
    printf("%d ",i);
    i++;
  }
  printf("\n");
  return 0;
}
//当i等于5的时候退出循环,不再进行接下来的操作
[root@VM-16-7-centos Day909]# ./test1
0 1 2 3 4

总结:break在while循环中的作用:

其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。

所以:while中的break是用于永久终止循环的。

continue介绍:

#include<stdio.h>
int main()
{
  int i=0;

  while(i<10)
  {
    if(i==5){
      continue;
    }
    i++;
    printf("%d ",i);
  }
  printf("\n");
  return 0;
}
//当i==5的时候,跳过本次循环进入下一次循环。
//执行结果如下:
[root@VM-16-7-centos Day909]# ./test1
0 1 2 3 4 6 7 8 9

continue在while循环中的作用就是:

continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,

而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。

2.3.1.2练习
//代码1
#include <stdio.h>
int main()
{
        int ch = 0;
        while ((ch = getchar()) != EOF)
                putchar(ch);
        return 0;
}
这里的代码适当的修改是可以用来清理缓冲区的.
//代码2
#include <stdio.h>
int main()
{
        char ch = '\0';
        while ((ch = getchar()) != EOF)
        {
                if (ch < ‘0’ || ch > ‘9’)
                        continue;
                putchar(ch);
        }
        return 0;
}
//这个代码的作用是:只打印数字字符,跳过其他字符的、

2.3.2for循环

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

表达式1为初始化部分,用于初始化循环变量的。

表达式2为条件判断部分,用于判断循环时候终止。

表达式3为调整部分,用于循环条件的调整。

#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循环和while循环:

int i = 0;
//实现相同的功能,使用while
i = 1;//初始化部分
while (i <= 10)//判断部分
{
        printf("hehe\n");
        i = i + 1;//调整部分
}
//实现相同的功能,使用while
for (i = 1; i <= 10; i++)
{
        printf("hehe\n");
}

可以发现在while循环中依然存在循环的三个必须条件,但是由于风格的问题使得三个部分很可能偏离较远,这样查找修改就不够集中和方便。所以,for循环的风格更胜一筹;for循环使用的频率也最高。

2.3.2.1break和continue在for循环中
//代码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;
}
2.3.2.2for语句的循环控制变量
  1. 不可在for 循环体内修改循环变量,防止 for 循环失去控制。

  2. 建议for语句的循环控制变量的取值采用“前闭后开区间”写法。

//同样都是进行十次循环
int i = 0;
//前闭后开的写法
for (i = 0; i < 10; i++)
{
}
//两边都是闭区间
for (i = 0; i <= 9; i++)
{
}
2.3.2.3一些for循环的变种
int main()
{
        //代码1
        for (;;)
        {
                printf("hehe\n");
        }
        //for循环中的初始化部分,判断部分,调整部分是可以省略的,但是不建议初学时省略,容易导致问
        题。
        //代码2
        int i = 0;
        int j = 0;
        //这里打印多少个hehe?
        for (i = 0; i < 10; i++)
        {
                for (j = 0; j < 10; j++)
                {
                        printf("hehe\n");
                }
        }
        //代码3
        int i = 0;
        int j = 0;
        //如果省略掉初始化部分,这里打印多少个hehe?
        for (; i < 10; i++)
        {
                for (; j < 10; j++)
                {
                        printf("hehe\n");
                }
        }
        //代码4-使用多余一个变量控制循环
        int x, y;
        for (x = 0, y = 0; x < 2 && y < 5; ++x, y++)
        {
                printf("hehe\n");
        }
        return 0;
}

2.3.3do...while()循环

do语句的语法:

do
    循环语句;
while(表达式);

执行流程:万字C语言之分支语句和循环语句,初阶C语言,c语言,开发语言

2.3.3.1do语句的特点

循环至少执行一次,使用的场景有限,所以不是经常使用。 

#include <stdio.h>
int main()
{
        int i = 10;
        do
        {
                printf("%d\n", i);
        } while (i < 10);
        return 0;
}
//输出结果:10
2.3.3.2do while循环中的break和continue
#include <stdio.h>
int main()
{
        int i = 10;
        do
        {
                if (5 == i)
                        break;
                printf("%d\n", i);
        } while (i < 10);
        return 0;
}
#include <stdio.h>
int main()
{
        int i = 10;
        do
        {
                if (5 == i)
                        continue;
                printf("%d\n", i);
        } while (i < 10);
        return 0;
}

2.4练习

2.4.1编写代码,演示多个字符从两端移动,向中间汇聚。

#include <stdio.h>
#include <string.h>
#include <windows.h>//sleep()函数
int main()
{
        char arr1[] = "welcome to bit...";
        char arr2[] = "#################";
        int left = 0;
        int right = strlen(arr1) - 1;
        printf("%s\n", arr2);
        //while循环实现
        while (left <= right)
        {
                Sleep(1000);
                arr2[left] = arr1[left];
                arr2[right] = arr1[right];
                left++;
                right--;
                printf("%s\n", arr2);
        }
        //for循环实现
        for (left = 0, right = strlen(src) - 1;
                left <= right;
                left++, right--)
        {
                Sleep(1000);
                arr2[left] = arr1[left];
                arr2[right] = arr1[right];
                printf("%s\n", target);
        }
        retutn 0;
}

2.4.2编写代码实现,模拟用户登录情景,并且只能登录三次。

//代码2
int main()
{
        char psw[10] = "";
        int i = 0;
        int j = 0;
        for (i = 0; i < 3; ++i)
        {
                printf("please input:");
                scanf("%s", psw);
                if (strcmp(psw, "password") == 0)
                        break;
        }
        if (i == 3)
                printf("exit\n");
        else
                printf("log in\n");
}

2.4.3猜数字游戏实现
 

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void menu()
{
        printf("**********************************\n");
        printf("*********** 1.play **********\n");
        printf("*********** 0.exit **********\n");
        printf("**********************************\n");
}
//RAND_MAX--rand函数能返回随机数的最大值。
void game()
{
        int random_num = rand() % 100 + 1;
        int input = 0;
        while (1)
        {
                printf("请输入猜的数字>:");
                scanf("%d", &input);
                if (input > random_num)
                {
                        printf("猜大了\n");
                }
                else if (input < random_num)
                {
                        printf("猜小了\n");
                }
                else
                {
                        printf("恭喜你,猜对了\n");
                        break;
                }
        }
}
int main()
{
        int input = 0;
        srand((unsigned)time(NULL));
        do
        {
                menu();
                printf("请选择>:");
                scanf("%d", &input);
                switch (input)
                {
                case 1:
                        game();
                        break; 
                case 0:
                                break;
                        default:
                                printf("选择错误,请重新输入!\n");
                                break;
                }
        } while (input);
        return 0;
}

2.5goto语句

C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。

从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。

但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程。例如:一次跳出两层或多层循环。多层循环这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。

goto语言真正适合的场景如下:
for (...)
for (...)
{
        for (...)
        {
                if (disaster)
                        goto error;
        }
}
…
error :
if (disaster)
// 处理错误情况

一个关机程序:

#include <stdio.h>
int main()
{
        char input[10] = { 0 };
        system("shutdown -s -t 60");
again:
        printf("电脑将在1分钟内关机,如果输入:我是猪,就取消关机!\n请输入:>");
        scanf("%s", input);
        if (0 == strcmp(input, "我是猪"))
        {
                system("shutdown -a");
        }
        else
        {
                goto again;
        }
        return 0;
}

而如果不适用goto语句,则可以使用循环:

#include <stdio.h>
#include <stdlib.h>
int main()
{
        char input[10] = { 0 };
        system("shutdown -s -t 60");
        while (1)
        {
                printf("电脑将在1分钟内关机,如果输入:我是猪,就取消关机!\n请输入:>");
                scanf("%s", input);
                if (0 == strcmp(input, "我是猪"))
                {
                        system("shutdown -a");
                        break;
                }
        }
        return 0;
}

shutDown命令拓展https://baike.baidu.com/item/%E8%87%AA%E5%8A%A8%E5%85%B3%E6%9C%BA/7875386?fr=aladdin&fromtitle=shutdown&fromid=10469108文章来源地址https://www.toymoban.com/news/detail-703641.html

到了这里,关于万字C语言之分支语句和循环语句的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言:分支语句和循环语句(超详解)

    目录 ​编辑 什么是语句?  分支语句(选择结构) if语句: 应该注意的是: switch语句: 运用练习: 循环语句 while循环: for循环: break和continue在for循环中: for循环的变换使用: do...while()循环 do while循环中的break和continue: goto语句 以上就是个人学习见解和学习的解析,欢

    2024年02月12日
    浏览(57)
  • 『C语言入门』分支和循环语句

    在编程中,我们需要让程序 根据不同情况作出选择,并重复执行某些任务 。C语言的分支和循环结构为实现这些目标提供了强大的工具。本文将探索C语言中的分支(如 if 和 switch )以及循环(如 while 、 for 和 do...while )结构,帮助你理解如何更有效地控制程序的流程和逻辑。

    2024年02月11日
    浏览(56)
  • C语言_分支和循环语句(2)

    C语言:结构化的程序设计语言 顺序结构、选择结构、循环结构 导引 过于分散 使用for循环打印1~10 循环体默认只能控制一条语句 想控制多条语句的话,要加大括号 示例 建议: 1.不可在 for 循环体内修改循环变量,防止 for 循环失去控制。 2.建议 for 语句的循环控制变量的取值

    2024年02月10日
    浏览(43)
  • 【C语言】深入了解分支和循环语句

    💓 博客主页:江池俊的博客 ⏩ 收录专栏:C语言初阶之路 🎉如果觉得博主的文章还不错的话,请点赞👍收藏🌟 三连支持一下博主💞 💫“每一天都是一个全新的机会,用积极的心态去迎接挑战吧!” 前言  一、什么是语句? 二、分支语句(选择结构) 2.1.if语句 2.1.1 悬

    2024年02月17日
    浏览(52)
  • 《C语言初阶篇》循环语句还没搞懂?这篇文章带你轻松学会循环语句!

    🎬 鸽芷咕 :个人主页  🔥 个人专栏 :《C语言初阶篇》 《C语言进阶篇》 ⛺️生活的理想,就是为了理想的生活!    🌈 hello! 各位宝子们大家好啊,又是新的一天开始了,今天给大家带来的循环语句的全面讲解!    ⛳️ 历时一天终于给肝出来了,本文详细讲解了wh

    2024年02月15日
    浏览(48)
  • C语言学习笔记---C语言分支与循环语句

    前言: 什么是语句? C语言可分为以下五类: 表达式语句 函数调用语句 控制语句 复合语句 空语句 语句 :C语言中,由分号隔开的句子就是一条语句 如: C语言中用 非零 表示 真 ,用 零 表示 假 ,即: 逻辑真,逻辑假 三大语法结构 :顺序结构、分支(选择)结构、循环结构

    2024年02月16日
    浏览(50)
  • 【C语言+代码风格】认识分支与循环语句及代码风格

    🚩 纸上得来终觉浅, 绝知此事要躬行。 🌟主页:June-Frost 🚀专栏:C语言 ⚡注:此篇文章的 代码风格部分 将根据 《高质量 C++/C 编程指南》 —— 林锐 进行说明。 该部分将用紫色表示 此篇文章将详细说明 分支与循环语句 以及它们的 代码风格 c语言是 结构化 的程序设计

    2024年02月05日
    浏览(115)
  • C语言初学者:原来分支和循环语句可以这样简单!

    目录 1.分支语句 1.if 语句 2.else语句 3.嵌套if  4.悬空else的问题 5.Switch语句 2.循环语句  1.while循环 2.for循环 3do-while循环 3.break和continue语句 1.break语句 2.continue语句 4.goto语句  5.小结 6.为你们点赞呢~ 7.完结散花                            不是每个人都能做自己想做的事,成

    2024年04月12日
    浏览(46)
  • 【初始C语言】分支语句和循环语句和转向语句的用法,文章末尾还有精品小礼物噢。

     夜里醒来,听雨滴 打在窗台雨搭上,更细密的一阵雨 落在窗外小树林里 雨落在更远的地方,落在另一场雨中 绵密的一片雨声 从芭蕉的昏暗 词林升起。一场夜雨紧邻古代 在巴山秋池,无需梦 无需修剪火焰,听雨 是一个人靠近古人的地方 而今晚是另一个夜晚 时间稀落,听

    2024年02月05日
    浏览(60)
  • 【C语言初阶】分支语句If与switch的具体用法,有这篇博客就够了

    君兮_的个人主页 勤时当勉励 岁月不待人 C/C++ 游戏开发 Hello,这里是君兮_,今天又来给大家更新0基础学习C语言中的文章啦! 今天带来的是对分支语句的详解,初学者建议先看看总集哦, 这里是链接: 【C语言初阶】万字解析,带你0基础快速入门C语言(上) 【C语言初阶】万字解析

    2024年02月11日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包