基础循环和条件判断—FY的蓝桥

今天就花点时间去归纳一下我们常用的基础循环条件判断语句。
不出意外的话所有系列文都是会用C去写。

循环结构

for循环

在c语言里,for循环是一个非常常见的基础语法,具体格式为:
for( a; b; c){d;}
其中 a为初始语句,b为条件语句,c为结束执行语句 ,d为循环体。
具体流程为 a->b->d->c->b->d->c…
在我们看来,有时候的a可以被省略掉,即初始的语句在for语句外就被定义了,下面是一个最基础的打印1-10的c语言源码:

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

接下来我们试着把a删除:

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

同理也可以删除b,c就不再赘述,这是最基础的for循环使用。

while循环

while循环常用于指定数读入(我个人习惯),基本就是在题目要求读入数字n,然后读入n个数据时,使用while循环会比for循环方便很多。while循环的基本格式如下:
while(a){b}
不太一样的是a是判断条件,b是循环体,所以在使用while循环时一般要记住,循环体内要有对判断语句变量的处理,在不执行死循环的目的下,一般的b里是会更改a的判断变量的.
具体执行过程为:a->b->a->b…
下面同样是输出1-10:

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

当然我最喜欢用的while是这样的,
读入一个数字n,然后读入n个数,打印出这n个数:

#include<stdio.h>
int main()
{
  int i,n;
  scanf("%d",&n);
  while(n--)
  {
  	scanf("%d",&i);
  	printf("%d\n",i);
  }
}

对,细心的也发现了,while循环的判断里也可以对变量本身进行操作,只要操作的返回值不为0,即可执行循环体,所以while循环有一个漂亮的死循环结构:

while(1){}

do-while循环

do-while和while十分类似,具体结构是这样的:
do
{a}
while(b);

当然你也可以写的更好看一点,需要注意的是,do-while循环的while结束后需要加个分号 ; .而在整个do-while的结构里,a、b和while里的正好相反,而循环路径则是a->b->a->b->a…
所以经典的打印1-10可以写成:

#include<stdio.h>
int main()
{
  int i;
  i=1;
  do
  {
  	printf("%d",i);
  	i++;
  }while(i<=10);
}

emmm,仔细看看整个循环过程,感觉用do-while还不如用for,基本框架和执行步骤都差不多,所以一般我们的do-while循环用的会比较少。

结束循环

在循环里,我们通常会碰到需要中途退出的情况,所以基本上我们使用两种方式对循环过程进行处理,就是breakcontinue

break语句

break的作用是在循环中退出当前全部循环,他只能用于循环之中,不然编译器会报错,简单的举个🌰,如果输出1-10,但是我不想输出8和8以后的数怎么办,有的人就说了我输出1-7就行了。不,这次我们用break语句写写:

#include<stdio.h>
int main()
{
  int i;
  for(i=1;i<=10;i++)
  {
  	if(i>=8)break;
  	printf("%d",i);
  }
}

当i=8时,执行了break语句,直接退出了for的循环。在while、do-while、switch语句中同理。

continue语句

continue的作用是退出当次循环,什么意思呢?就是说我想输出1-10,又不想输出8,那么代码如下:

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

当i=8时,执行了continue语句,退出了当次循环,即循环体不再向下执行,下一步执行的是i++语句,再进行循环判断。

通过对breakcontinue的对比我们可以看出来,在题目需要对特殊条件筛选时,如果没必要进行不符合条件的循环的循环体的话,可以使用这两个语句进行代码时间和空间的节约,合理使用breakcontinue,可以更为容易的拿到题目部分点的分。

选择结构

大概我们常用的就下面这三种,具体的使用方式也是十分基础,没什么好说的。

if语句

if语句的结构就是这样:
if(a){b}
其中a为条件,b为执行语句。具体的理解就是满足a条件的时候执行语句b,在不加花括号{}时,if只执行一句话。
其中a的条件判断就很有意思,涉及到了单一条件和多条件,这时候我们会用到&&,||,!等多种链接符号。

if-else语句

if-else语句是if语句的进阶版本,用途更为广泛,具体的结构是这样的:
if(a){b}
else{c}

意思是如果a成立则执行b,否则执行c。
还有一种拓展的用法,就是将if-else进行嵌套链接,是比较常规的用法。比如:
if( a ){b}
else if( c ){d}
else{e}

意思是如果a成立则执行b,否则如果c成立则执行d,否则执行e。这种判断适合执行多种条件判断,在符合特定条件的时候使用可读性更高。当然在执行条件重复的时候可以对判断语句进行&&或者||的处理可以更加优化。

switch语句

switch语句是很少使用的选择语句,他的局限性很高,能选择的变量好像只能是字符和数字,具体格式是:
switch(a)
case … : 操作1
case … : 操作2
default : 操作3

这样子可能看的不太明白,举个例子,读入一个1-5的数字,数字小于等于3打印1,大于3打印2,这种判断在程序可以用if直接写,但在switch中是这样写:

#include<stdio.h>
int main()
{
  int i;
  scanf("%d",&i);
  switch(i)
  {
  	case 1:printf("1");break;
  	case 2:printf("1");break;
  	case 3:printf("1");break;
  	default:printf("2");
   } 
}

这里的每一个case语句后面都使用了break去退出,原因是不使用break的话,会使程序执行该case语句及下面的break出现之前的所有case语句,所以,我们可以对重复语句进行优化:

#include<stdio.h>
int main()
{
  int i;
  scanf("%d",&i);
  switch(i)
  {
  	case 1:
  	case 2:
  	case 3:printf("1");break;
  	default:printf("2");
   } 
}

这样可以使代码看起来更加简洁,可读性更高。对switch语句做个总结的话,就是一种人工的枚举法,在写一些简单的系统的时候,可以充当选择的按钮,配合子函数可以让主程序方面看着更容易让人懂,实际上使用起来没有if-else普遍,是一种竞赛中不常用的语句,我们还是得了解他。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值