(C语言之路-----p1:分支和循环)

在现实中,事情发展的顺序可以概括成三种

在c语言中程序的运行顺序也是如此划分为几种,一种是从上至下运行,一种是分支结构,另一种是循环结构,c语言比现实生活中多出的一种是跳转(goto语句)

接下来,我们将介绍怎么用分支语句,循环语句和goto语句来控制程序运行的顺序

分支语句:1.if语句

                  2.switch语句

循环语句:1.while循环

                  2.for循环

                  3.do while循环

goto语句:

一、分支语句

首先是分支语句的if语句

#include <stdio.h>

//if语句可以分为单分支语句,双分支语句,多分支语句


int main()
{
int age = 0;
scanf("%d",&age);//输入年龄

//单分支
if(age<18)
{
   printf("未成年\n");
}

//双分支
if(age<18)
{
   printf("未成年\n");
}
else
{
   printf("已成年\n");
}

//多分支
if ((age > 0) && (age < 18))
{
    printf("未成年\n");
}
else if ((age >= 18) && (age < 40))
{
	printf("青壮年\n");
}
else if ((age >= 40) && (age < 60))
{
	printf("中年\n");
}
else if ((age >= 60) && (age < 80))
{
	printf("老年\n");
}
else
{
	printf("老寿星\n");
}

return 0;
}

接下来是switch语句
 

#include <stdio.h>

int main()
{
int day = 0;
scanf("%d", &day);

//输入1到5会输出weekday,而输入6和7会输出weekend,输入其他数字会提示你重新输入
//switch语句中,如果没有break中断,程序会继续走下去,所以视情况而定添加break语句
//default子句表示输入的day为1——7以外的值,程序就会执行default子句下面的指令
//default子句和case子句的顺序可以打乱,但是一般按顺序,default子句一般放在switch语句的最后一行
switch (day)
{
   case 1:
   case 2:
   case 3:
   case 4:
   case 5:
      printf("weekday\n");
      break;
   case 6:
   case 7:
      printf("weekend\n");
      break;
   default:
      printf("输入错误,请输入1_7之间的数字\n");
      break;
}









return 0;
}

二、循环语句

while语句

int i = 0;
while(i<10)
{
    printf("%d ",i);

    if(5==i)//如果i等于5,跳出循环,打印1 2 3 4 6 7 8 9 
    {
        break; 
    }
  
    if(5==i)//如果i等于5,结束当前循环,直接来到判断部分,打印1 2 3 4 _死循环
    {
        continue; 
    }

    i++;

}

for语句

①语法

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

代码段;
...

}

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

表达式2:条件判断部分,用于判断循环什么时候终止

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

实际的问题:在屏幕上打印1~10

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

相比while循环,for循环有什么优点吗?

while循环的初始化部分,条件判断部分,调整部分是分开书写的,不够集中和方便,而一个循环最重要的三点就是这三部分,while循环要对这三部分进行修改,如果循环体代码量较多,那么难度会很大,for循环则把这三部分放在了一起,修改很方便。

for循环略胜一筹,for循环的使用效率也更高

②在for循环中的break和continue

for循环的break与continue和while的一样,其作用都分别是终止循环和跳过当前循环直接来到判断。但是,for循环和while循环的continue还是存在一些细微的差异

int i = 0;
while(i<10)
{
    printf("%d ",i);

    if(5==i)//如果i等于5,结束当前循环,直接来到判断部分,打印1 2 3 4 _死循环
    {
        continue; 
    }

    i++;

}

int i = 0;
for(i=1; i<=10; i++)
{    
    if(5 == i)
    {
        continue;
    }
    
    printf("%d ",i);    //打印1 2 3 4 6 7 8 9 10
}

在这个例子中,两个循环都用了相同的判断条件和continue,但是产生不同的两种结果,其原因是while循环的continue跳过了循环条件的改变,而for循环的continue则没有跳过这部分

③for循环的循环控制变量

1.尽量不要在循环体中改变循环控制变量,防止循环失去控制

2.循环控制变量尽量采取左闭右开的写法,如下:

for(i=0; i<10; i++)

这样,我们一眼就可以看出来,这个for循环的循环次数就是10次,但如果我们改成:

for(i=0; i<=9; i++)

这样循环的次数就不能一目了然,不明白这个9的含义

 do while语句

 语法

do
{
...
    代码段;
...
}while(表达式);

代码至少执行一次,使用场景受限,不是很常用

三.goto语句

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

goto语句从理论上来说是没有必要存在的,因为goto语句可以改变程序的运行顺序,这个功能完全可以由循环语句来实现。滥用goto语句会打乱程序的运行顺序,导致程序难以维护,有很多编程者使用goto语句来逃避思考,在思维上偷懒,这样是不对的。

但是,goto语句也不是一无是处,当循环多次内嵌的时候,想要马上跳出循环就可以采用goto语句,用break跳出多层内嵌循环就像是下楼梯,而goto语句是直接跳下去,省去很多功夫的同时,对程序运行顺序的影响也较小。

while()
{
    ...
    while
    {
        ...
        while
        {
            ...
            if(disaster)
            {
                goto quit;
            }
        }    
    }
}
quit:
...

四.分支循环goto的组合运用

①获取一个二进制数的每一位数字

int main()
{
	int a = 0;
	scanf("%d", &a);

	int i = 32;
	for (i = 31; i >= 0; i--)
	{
		printf("%d", (a >> i) & 1);
	}

	return 0;
}

②反转一个n位十进制数

int main()
{
	int a = 0;
	scanf("%d", &a);

	do
	{
		printf("%d", a % 10);	
	} while (a /= 10);

	return 0;
}

③利用循环和getchar清空缓冲区

//请输入密码
char arr[20] = "";
scanf("%s",arr);

//请确认
char a ='\0';
scanf("%c",&a);

char ch = '\0';

//利用循环清空缓冲区
while((ch = getchar()) != '\n')
{
    ;
}

//判断确认成功还是失败
if(a == 'Y')
{
    printf("确认成功\n");
}
else if(a == 'N')
{
    printf("确认失败\n");
}
else
{
    printf("请再次输入\n");
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值