分支循环语句,一篇博客帮你搞定2

简介: 1

分支循环语句,一篇博客帮你搞定1https://developer.aliyun.com/article/1477736

while循环

while(循环条件){
    执行语句;
}

当满足循环条件时,将会执行下方大括号内语句

在循环条件返回非0时才会运行

主要要注意的地方就是在执行循环时不要忘记调整条件,防止陷入死循环。

for循环

先来看看for循环格式

for (初始化;条件;调节语句) {
    执行语句;
}

for循环也是编程中用到的比较多的一种循环了

想先通过一张图来让大家基本的了解for循环

由于博主目前不太会用画图工具,所以直接用了书写来展示for循环的运行过程,其实如果你再仔细观察for循环和while循环,也许不难发现,其实for是对循环所需要必要条件的一个集合,里面包含了变量初始化,条件判断以及变量每次循环后的调整,大大简洁了代码,也是在实际运用和做题中运用相对比较多的一个语句。

还有就是要提醒一点,就是for后面小括号中的初始化,条件改变和条件判断是可以省略的,但条件改变和条件判断省略之后很容易导致死循环,所以建议初学者开始不要随意省略这些内容,到后期熟练运用后再根据需要调整

do...while语句

这个语句其实和while语句差不多,while语句是先判断条件是否符合再运行语句,而do...while是先运行语句再判断是否继续循环运行语句,运用如下

do {
    执行语句;
} while (执行条件);

do...while语句其实在实际编程中运用的还是比较少的,大多数问题运用while和for循环语句都能够解决。

到这里其实以及把分支和循环语句介绍的差不多了,再往下其实还有一点要告诉你,这些分支和循环之间都是可以嵌套的,这样其实就大大提高了代码的灵活性

语句之间的嵌套

接下来我将用一个筛选100-200之间素数的代码来介绍嵌套

#include <stdio.h>
int main()
{
  for (int i = 100; i <= 200; i++) {  //初始化i将100-200每个数都枚举一遍
    int flag = 1;//初始化一个flag当flag==1时表示此时i为质数
    for (int j = 2; j <= i - 1; j++) {//检验i是否为质数
      if (i % j == 0) {
        flag = 0;//如果不是质数设置为0
        break;
      }
    }
    if (flag == 1)//华丽打印
      printf("%d ", i);
  }
  return 0;
}

此代码不但嵌套了循环,还嵌套了分支语句,很完美的展现了语句的灵活性,大家可以自己手打或者偷偷CV一下我的代码去试试。

其实在质数判断那一块其实还可以进一步优化,想问问你是否发现在j试到根号i之前其实就已经可以把质数都筛出来了,咱们可以把i-1换成sqrt(i),这个函数的作用是将一个数字开平方,最终返回开出来的值,不过在调用此函数前别忘了头文件#include,不然此函数是无法调用的。

关于对循环的控制语句

大家是否在前面注意到我使用了break这样的语句,其实这是一种对循环的控制语句,类似这样的语句还有continue,goto,接下来给大家分别再介绍一下

break

break在程序中运用相对来说其实比较多,当你想直接从一个循环中跳出时可以调用此语句,可以看看我刚才放在上面那个筛质数的代码,里面就用到了break,可以让其从for(int j=2;j<=i-1;j++)这个循环中直接跳出,对于while,do...while等循环运用也是如此

continue

continu在循环中的作用是直接结束当前循环进入下一次循环,可以看看以下代码

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

该程序运行的结果是0 1 2 3 4 6 7 8 9,是应为在当i==5时,通过continue直接跳过了后面的语句直接运行i++判断i<10后进入下一次循环,while和do...while也是同理,只不过少了i++这一项语句而已。

goto

goto是一种在程序中可以任意调整跳转的语句,看看下方代码

#include <stdio.h>
int main()
{
  printf("hehe\n");
  goto jump1;//此处jump1只是一个跳转标签,取什么名看你心情
  printf("lala\n");
jump1:;//这里是跳转的出口
  printf("haha\n");
  return 0;
}

最后打印的结果如下

可以看到程序运行时直接跳过了lala,这样的跳转便是goto的一种基本用法

合理运用goto和滥用goto

最后再聊聊goto,其实在当今有许多书籍和技术人员批判goto的低逻辑性,并且容易把一个代码的思路和调理打乱,我这里的建议是goto经量避免去用,但有时候用于跳出多层循环时还是相对高效的。

想给大家展示下滥用goto产生的效果,这是我做的一道洛谷的1205题,我对这乱用goto表示抱歉,不过最后题目还是成功AC了,不多说看看源码吧

#include <stdio.h>
char primitive[11][11];
char trans[11][11];
char ultimate[11][11];
int main()
{
  int n;
  scanf("%d\n", &n);
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) {
      scanf("%c", &primitive[i][j]);
    }
    scanf("\n");
  }
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) {
      scanf("%c", &ultimate[i][j]);
    }
    scanf("\n");
  }
  for(int i=1;i<=n;i++)
    for (int j = 1; j <= n; j++) {
      if (primitive[i][j] != ultimate[j][n - i + 1]) { goto end1; }
    }
  printf("%d", 1);
  return 0;
end1:;
  for(int i=1;i<=n;i++)
    for (int j = 1; j <= n; j++) {
      if (primitive[i][j] != ultimate[n - i + 1][n - j + 1]) { goto end2; }
    }
  printf("%d", 2);
  return 0;
end2:;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++) {
      if (primitive[i][j] != ultimate[n-j+1][i]) { goto end3; }
    }
  printf("%d", 3);
  return 0;
end3:;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++) {
      if (primitive[i][j] != ultimate[i][n-j+1]) { goto end4; }
    }
  printf("%d", 4);
  return 0;
end4:;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++) {
      trans[i][j] = primitive[i][n - j + 1];
    }
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++) {
      if (trans[i][j] != ultimate[j][n - i + 1]) { goto out1; }
    }
  goto end5;
out1:;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++) {
      if (trans[i][j] != ultimate[n - i + 1][n - j + 1]) { goto out2; }
    }
  goto end5;
out2:;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++) {
      if (trans[i][j] != ultimate[n - j + 1][i]) { goto out3; }
    }
end5:;
  printf("%d", 5);
  return 0;
out3:;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++) {
      if (primitive[i][j] != ultimate[i][j]) { goto end6; }
    }
  printf("%d", 6);
  return 0;
end6:;
  printf("%d", 7);
  return 0;
}

题目就不再这里展示了,如果感兴趣可以去洛谷搜搜看看哈。

结尾

感谢能用心看我博客的友友们,一篇博客真的太耗费心力了,整个人都要爆炸,如果这篇博客对你有帮助的话还请点个小小的赞加个收藏,是我前进的巨大动力。不多说了,写高数作业去了呜呜。。。

相关文章
|
6月前
|
C语言
分支和循环语句
分支和循环语句
36 1
|
6月前
|
算法 Unix 数据安全/隐私保护
分支和循环语句2
分支和循环语句2
56 0
|
5月前
|
数据安全/隐私保护
分支和循环语句(2)
分支和循环语句(2)
30 1
|
5月前
|
C语言
分支和循环语句(3)
分支和循环语句(3)
30 0
分支和循环语句(3)
|
5月前
分支、循环语句的简介
分支、循环语句的简介
|
5月前
|
C语言
分支和循环语句(1)
分支和循环语句(1)
41 0
|
6月前
|
C语言
分支循环语句,一篇博客帮你搞定1
分支循环语句,一篇博客帮你搞定
|
算法
分支与循环语句的练习
分支与循环语句的练习
|
6月前
|
存储 缓存 Linux
分支与循环语句1
分支与循环语句1
39 0
|
C语言
【C】分支和循环语句的简单介绍
什么是语句呢? 在C语言中由分号(;)隔开的就是一条语句。