探究C语言循环分支

分支语句和循环语句

分支语句

if

语句结构

  if(表达式)
     语句;
  if(表达式1)
     语句1; 
  else if(表达式2)
      语句2;
  else 
      语句3;     
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age >= 18)
	{
		printf("成年\n");
	}
	else
	{
		printf("未成年\n");
	}
     return 0;
}
C语言中0表示假,1表示真。
else和最近的if匹配。
int main()
{
   int confidence=1;
   if(confidence)
   {
      return x;
   }   
   else
   {
      return y;
   }   
   return 0;
}   

而当上述代码变为

if(confidence){
   return x;}
   return y;

则编译器不能很好识别。

比较一个变量和一个常量是否相等的时候,建议把常量放在等号的左边。

练习1:
判断奇偶

int main()
{
    int num=0;
    scanf("%d",&num};
    if(num%2==1)
   {
    printf("奇数\n");
    }
    else
    {
    printf("不是奇数\n");
    }
    return 0;
}    

练习2
输出一百内的奇数

int main()
{
    int i=1;
    while(i<=100)
    {
      if(i%2==1)
      {
        printf("%d",i);
      }
    }
    return 0;
}      

switch

switch常常用于多分支的情况。
比如:

输入1,输出星期一;
输入2,输出星期二;
输入3,输出星期三;
输入4,输出星期四;
输入5,输出星期五;
输入6,输出星期六;
输入7,输出星期七;
int main()
{
   int day=0;
   scanf("%d",&day);
   switch(day)
   {
    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”);
    default:
        printf("错误“);
        break;     
    }  
    return 0;
}       
  
case决定入口,break决定出口。

当我们有重复的的打印可以简化

switch(day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
    printf("工作日”);
    break;
case 6:
case 7:
    printf("休息日“);       
    break;
default:
    printf("错误“);
        break;  
 }         
switch()括号内必须更整形表达式。
case后必须是整形常量表达式。

循环

while 循环

我们将if和while进行对比。
在这里插入图片描述
在这里插入图片描述

当条件满足的情况,if语句后的语句执行,否则不执行。
但这个语句只会执行一次。
当需要执行很多次时,可以使用while循环。
while(表达式)
     循环语句;

while语句执行流程图

!=0
continue
==0
break
expr
stmt

简单whle 语句
在这里插入图片描述

while后大括号里是循环内容

其中在while循环中,有break和contuine两种关键词。

break介绍

break在while中的作用:

在循环中只要遇到braeak,就是停止所有循环,直接终止循环。
所以:while中的break是用于永久终止循环的。
int main()
{
   int n=10;
   while(n<=10)
  {
      if(5==n)
      {
         break;
      }
      printf("%d",n) ;
      n++;
  }       
  return 0;
  }   

continue

当我们把break改变成continue时候,在n的值到5时候不会改变。

continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会在
执行,而是直接跳转到while语句判断部分,进行下一次循环入口判断。
int main()
{
    int n=0;
    while(n<=10{
       n++;
       if( 5==n)
       {
       comtinue;
       }
       printf("%d\n",n)
     }
     return 0;
}       

当把n++提前则可避免continue所带来的影响。

getchar putchar

int main()
{
    char ch=0;
    ch=getchar();//等于scanf("%d",&ch);
    putchar(ch);//等于printf("%c\n",ch);
    return 0;
}    

getchar–>输入缓冲区(拿走键盘输入的)–>输出

int main()
{
	int ch = 0;
	while ((ch = getchar()) != EOF)
	{
		putchar(ch);
	}
	return 0;
}
scanf在存入数据在缓存区时会拿走数据本身而保留“\n"而getchar会
读取到”\n“.

在这里插入图片描述
为避免有遗漏的字符干扰我们可以加入清理循环区。

while (getchar()!='\n'
{
   ;
}

for

for(表达式1;表达式2;表达式3)

打出从1到10;

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

break


```c
int main()
{
     int i;
     for(i=1;i<=10;i++)
     {
        if(i==5)
        break;
        printf("%d",i);
     }
     return 0;
}      

和在while一致,终止循环。

continue

int main()
{
     int i;
     for(i=1;i<=10;i++)
     {
        if(i==5)
        continue;
        printf("%d",i);
     }
     return 0;
}     
打印时缺少五而不出循环继续打印。

循环控制变量

建议

1.不可在for循环体中修改循环变量,防止for循环失去控制。
2.建议在for循环控制变量的取值采用"前闭后开区”。

循环变种

int main()
{
    for(;;;)
    {
       printf("hh")
    }
    return 0;
}       

打印会一直持续。

for循环初始化,判断和调整三个部分可以省略,但缺少判断会死循环。判断恒真。

在这里插入图片描述
当省略了初始化
在这里插入图片描述

循环减少是因为在j取三后跳出循环,j的值一直是3不变导致外部循环无法进入。

do while

do 
    循环语句;
while(表达式);
int main()
{
   int i=1;
   do
   {
      printf("%d",i)
      i++;
   }while(i<=10);
   
   return 0;  
}   

因运用较少所以简单描述。

例题

求5!

int main()
{
    int n=0;
    int ret=0;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
       ret=ret*i:
    }
    return 0;
}       

求 1!+2!+3!+4!+…+10!

int main()
{
    int n=0;
    int i=0;
    int ret=1;
    int sum=0;
    for(n=1;n<=n;n++)
    {
      ret=1; 
      for(i=1;i<=n;i++)
      {
         ret=ret*i;
      }
      sum=sum+ret;
    }
    return 0; 
}        
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿在线码字

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值