c语言修炼第二章--分支与循环(2.2)

目录

2.2循环语句

2.2.1while循环语句

2.2.2for语句

2.2.2.1for语句的语法形式

2.2.2.2break和continue在for语句中的应用

2.2.2.3关于for循环变量的建议

2.2.2.4for循环的一些变种

初始化,判断,调整都进行省略 

使用多个变量控制循环

2.2.3do while语句

2.2.3.1do while语法形式

2.3goto 语句

2.3.2利用goto语句实现关机小游戏


前言:

快开始学习叭!开始内容的学习叭

2.2循环语句

2.2.1while循环语句

在初识c语言的学习中我们已经认识过了,还记得while的语法形式嘛,现在一起来回顾一下吧

while(判断项)
{
   表达式;
}

以题目为例,打印1到7的数字!

#include<stdio.h>
int main()
{
	int i = 1;
	while (i <= 7)
	{
		printf("%d ", i);
		i++;//调整部分
	}
	return 0;
}

 简单回顾一下吧,接下来介绍一下for语句。在介绍之前我们得先了解为什么需要for语句,这还是要针对while语句来说明问题,while主要由三部分来组成,初始化部分,判断部分,调整部分。由代码来直观看看叭

#include<stdio.h>
int main()
{
   int i = 1;//初始化部分
   while(i<=7)//判断部分
   {
     printf("%d ",i);
     i++;//调整部分
   }
   return 0;
}

但是也有个弊端,当初始化部分和判断部分,调整部分隔得太远时此时容易出错

int main()
{
	int i = 1;
	printf("hehe\n");
	printf("hehe\n");
	printf("hehe\n");
	printf("hehe\n");
	printf("hehe\n");
	printf("hehe\n");
	printf("hehe\n");
	printf("hehe\n");
	printf("hehe\n");
	while (i <= 7)
	{
		printf("%d ", i);
		printf("haha\n");
		printf("haha\n");
		printf("haha\n");
		printf("haha\n");
		printf("haha\n");
		printf("haha\n");
		printf("haha\n");
		printf("haha\n");
		printf("haha\n");
		i++;
	}
	return 0;
}

此时呢我们就需要用for语句来实现啦

2.2.2for语句

2.2.2.1for语句的语法形式

for(初始化部分;判断部分;调整部分)
{
   语句项;
}

从这里来看,For语句得初始化判断调整三部分紧挨在一起相比较while语句的来说会显得更加紧凑,再出现上面的情况呢也不容易出现错误

#include<stdio.h>
int main()
{
	int i =0;
    printf("hehe\n);
    printf("hehe\n);
    printf("hehe\n);
    printf("hehe\n);
    for(i=1;i<=7;i++)
    {
      printf("haha\n");
      printf("haha\n");
      printf("haha\n");
      printf("haha\n");
    } 
	return 0;
}

通过以上例子我们能够明白,为什么需要for语句啦

2.2.2.2break和continue在for语句中的应用

还记得,break和continue在while语句中的应用嘛,break是直接跳出循环,continue是跳过后面语句直接来到while的判断部分!break和continue在for语句中的应用比较类似!还是以打印1到7的题目为例,先来试试break叭

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

此时的打印结果是多少呢?一起来运行代码瞧瞧吧

 再来调试一下看看怎么实现的吧

 当i的值为5时

 if语句为真,执行语句项来到break部分,再请按一次ctrl+f10看看叭

 此时会发现,箭头直接来到return 位置,然后调试直接结束!所以break在for语句中的作用也是直接跳出循环!再来看看continue叭,上代码

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

直接来看看结果叭

 哇哦,至少了一个5欸,是不是和在while循环中的作用一样直接跳过后面的语句来到判断部分再来调试一下吧,当i==5时If语句为真执行表达式,再按依次f10会发现见箭头来到44行,同时i的值变为6

 由此可以得出结论:continue在for循环中直接跳过后面的部分来到调整部分!

2.2.2.3关于for循环变量的建议

在for语句的循环控制变量采取“前闭后开”的写法

所谓的闭指的是闭区间,开指的开区间

以打印0到9为例
//前闭后开的写法
for(i=0;i<10;i++)

//其他写法
for(i=0;i=9;i++)

 第一种写法比第二种会更加的直观!

不可在for循环体内修改变量,防止for循环失去控制

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

此时我们会发现光标一直在闪烁中,这是为什么呢?这是因为在if判断项里将i的值改为5,判断项为真,执行语句项 continue,然后来到for语句得调整部分再次进入if语句项再次为真再次执行!!!再次强调不可以在循环体内修改循环变量的值!

2.2.2.4for循环的一些变种

初始化,判断,调整都进行省略 

int main()
{
	int i = 0;
	for ( ; ; )
	{
		printf("haha\n");
	}
	return 0;
}

 

此时会发现屏幕上一直打印haha直至栈溢出!这是为什么呢?这是因为初始化调整省略表示啥也不干,判断省略表示判断恒为真! 要根据实际需求来进行省略但还是不建议进行省略!还是以代码为例叭

#include<stdio.h>
int main()
{
	int i = 0;
	int j = 0;
	for (i = 0; i < 4; i++)
	{
		for (j = 0; j < 4; j++)
		{
			printf("haha\n");
		}
	}
	return 0;
}

 i循环1次j循环4次,i总共循环4次,此时会进行打印16个haha。再来看看省略版的吧

#include<stdio.h>
int main()
{
	int i = 0;
	int j = 0;
	for (i = 0; i < 4; i++)
	{
		for ( ; j < 4; j++)
		{
			printf("haha\n");
		}
	}
	return 0;
}

 当我们把for循环中j的初始值省略之后,此时只打印4个haha,这是为什么呢?这是因为在i循环完依次加加变成2再进行j的循环但因为j的初始值被省略,此时j的值还是之前的4,此时判断为假直接跳出循环!根据实际需求来进行省略不然容易出错!

使用多个变量控制循环

上代码!

#include<stdio.h>
int main()
{
	int x, y;
	for (x = 0, y = 0; x < 3&&y < 3; x++, y++)
	{
		printf("haha\n");
	}
	return 0;
}

此时只会打印3个haha

2.2.3do while语句

2.2.3.1do while语法形式

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

do while循环特点:先执行再判断!还是以打印1到7的题为例

#include<stdio.h>
int main()
{
	int i = 1;//初始化
	do
	{
		printf("%d ", i);
		i++;//调整
	} while (i <= 7);//判断
//不要遗忘了while之后的逗号噢
	return 0;
}

  do while循环的使用有其特定的环境,一般使用较少!

再来看看,break和continue在do while的使用叭

#include<stdio.h>
int main()
{
	int i = 1;
	do
	{
		printf("%d ", i);
		if (3 == i)
		{
			break;
		}
		i++;
	} while (i <= 7);
	return 0;
}

我们会发现当i==3时先打印了i然后if语句为真进行执行 语句项,Break直接跳出循环,此时只打印1,2,3!说明break在while,for,do while中的作用都是一样的都是跳出循环!再来看看continue叭

#include<stdio.h>
int main()
{
	int i = 1;
	do
	{
		printf("%d ", i);
		if (3 == i)
		{
			continue;
		}
		i++;
	} while (i <= 7);
	return 0;
}

 在打印1,2之后打印满屏的3直至到栈溢出才会停止打印3!这是为什么呢,当i等于3时if语句为真执行语句再次跳过后面的调整语句直接来到判断部分!通过以上的学习会发现,continue在while,for,do while中都是跳过后面的语句直接来到判断部分!

总结一下叭!从结构上来说,do while的初始化判断调整部分也是分开的没有for循环的那样紧凑!,从使用次数来说:for>while>do while!

2.3goto 语句

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

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

#include<stdio.h>
int main()
{
again:
	printf("haha\n");
	goto again;
	return 0;
}

此时我们会发现会一直循环打印haha,但是这种效果也可以利用循环来写

#include<stdio.h>
int main()
{
   while(1)
   {
     printf("haha\n);
   }
   return 0;
}

但是在某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程。

例如:一次跳出两层或多层循环

多层循环这种情况使用break是达不到目的,它只能从最内层的循环退出到上一层循环!

goto语句真正的使用常用如下:

for()
{
   for( )
   {  
     for( )
     {
       for( )
       {
         if(error)
         {
           goto again;
         }
       }
     }
   }
}
again:
   printf("error");

2.3.2利用goto语句实现关机小游戏

  • 提示还有60秒关机
  • 输入我是猪可以取消关机

思路:第一步:先进行关机操作然后再提示一下即将关机。

那么怎么实现关机操作呢?这里就要用到system和cmd命令里面的shutdown -s -t XX 。其中system是一个函数用来控制外部程序的命令,在使用system时要引用头文件windows.h。输入cmd 运行命令提示符2.输入 shutdown -s -t XX [注:XX为倒计时的秒数-t是设置关机的时间,

第二步:再进行提示输入”我是猪“可以取消关机,这里要输入字符串并且把输入的字符串和我是猪进行比较

取消关机依旧要用到cmd,利用shutdown -a即可,比较字符串则要用到strcmp函数。通过cplusplus网站对strcmp进行查找,了解用法需要引用的头文件

 

第三步:输入正确取消关机,输入错误重新回到提示关机那里 

上代码叭

#include<stdio.h>
#include<windows.h>
#include<string.h>
int main()
{
	char user[20] = { 0 };
again:
	printf("你的电脑将在60秒后关机\n");
	system("shutdown -s -t 60 ");
	printf("输入“我是猪”可以取消关机\n");
	printf("请输入:>");
	scanf("%s", user);
	if (strcmp(user, "我是猪") == 0)
	{
		system("shutdown -a");
		printf("取消关机成功\n");
	}
	else
       goto again;
	return 0;
}

 以上就是今天的学习啦

 

猜你喜欢

转载自blog.csdn.net/2301_77886098/article/details/131514082