入门学习计算机第八天—循环语句

入门学习计算机第八天—循环语句

编译器:Microsoft Visual Studio 2010


一、循环语句

1、while语句

while 语句用来实现当型循环,即先判断循环条件,再执行循环体。
其一般语法格式为:

while(表达式)
    循环语句;

例如:在屏幕上打印1-10的数字;

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

在这里插入图片描述
在while语句里加入break、continue。

加入break: 结束循环

#include <stdio.h>
int main()
{    int a = 1;
    while(a<=10)
	{   if(5 == a)
           break;//结束循环    
       printf("%d ",a);
	   a++;
    }
  return 0;
}

加入continue:跳过本次循环,直接再次跳转到while的判断部分

#include <stdio.h>
int main()
{    int a = 1;
    while(a<=10)
	{   if(5 == a)
          continue;	//跳过本次循环,而导致a无法增值,出现死循环    
       printf("%d ",a);
	   a++;
    }
  return 0;
}

在这里插入图片描述
将a++更换位置:

#include <stdio.h>
int main()
{    int a = 0;//因为更改了a++的位置,要打印出1-10,a要被先赋值。
    while(a<10)
	{   a++;
	   if(5 == a)  
	      continue;
       printf("%d ",a);	
    }
  return 0;
}

在这里插入图片描述

  • 再看几个代码:

代码1:

#include <stdio.h>
 int main()
 { 
   int ch =0;
   while((ch=getchar())!= EOF)
       putchar(ch);
   return 0;
}

getchar()接收键盘敲下的一个字符;
putchar()输出键盘敲下的一个字符;
在这里插入图片描述
ctrl + Z:获取一个EOF,end of file,文件结束标志,值为-1。

代码2:
输入密码后,按下Y/N确认密码,输出确认成功或者失败。

#include <stdio.h>
int main()
 {
     int ret = 0;
     char password[20] = {0};
     printf("请输入密码:>");
     scanf("%s",password);
     printf("请确认(Y/N):>");
     ret = getchar();
     if(ret == 'Y')
       printf("确认成功\n");
     else
       printf("确认失败\n");
    return 0;
}

但是在还未输入Y/N时就已经提示确认失败,什么原因?
进入调试窗口:输入密码后
在这里插入图片描述
在这里插入图片描述
很明显ret的值不是输入的Y,而是10,10是哪里来?代表的是什么?
通过查ASCII表可得,10代表的是\n,是换行的转义字符。所以\n是在输入密码之后,敲下回车得到的。
scanf(),getchar()是输入函数,它们都有输入缓冲区,是用来接收数据的。在输入密码123456时,输入缓冲区就得到了“123456\n”的数据,scanf读取了其中的“123456”,留下了\n。getchar读取了\n。所以ret的值就变成了10。

所以需要清空缓冲区。

#include <stdio.h>
int main()
 {
     int ret = 0;
     char password[20] = {0};
     printf("请输入密码:>");
     scanf("%s",password);
     getchar();//在加一个getchar()
     printf("请确认(Y/N):>");
     ret = getchar();
     if(ret == 'Y')
       printf("确认成功\n");
     else
       printf("确认失败\n");
    return 0;
}

在这里插入图片描述

如果输入的值是123456 ABCD,scanf()只会读走空格前面的123456,剩下的就是空格ABCD。
又会出问题了,所以一个getchar是不能解决问题的。代码要更改为:

#include <stdio.h>
int main()
 {
     int ch =0 ;
     int ret = 0;
     char password[20] = {0};
     printf("请输入密码:>");
     scanf("%s",password);
     while (ch = getchar()!= '\n')//在加一个循环的getchar()
         {
                 ;
         }
     printf("请确认(Y/N):>");
     ret = getchar();
     if(ret == 'Y')
       printf("确认成功\n");
     else
       printf("确认失败\n");
    return 0;
}


2,for循环

经常用到的循环语句。
for语句的一般形式:

for(表达式1;表达式2;表达式3)
    循环体语句

表达式1为初始化部分,用于初始化循环变量的。
表达式2为条件判断部分,用于判断循环是否终止。
表达式3为为调整部分。

用for循环打印出1-10的数字

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

	 return 0;
}

在这里插入图片描述

在for语句里加入break、continue。

加入break

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

	 return 0;
}

在这里插入图片描述
输出结果和while语句是一样的。

使用continue语句。

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

	 return 0;
}

在这里插入图片描述
可知,for语句遇到continue时跳过本次循环,会进入调整语句,从而不会出现死循环。

  • 使用for语句的一些建议:

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

例如:

本意是在第5次的时候多打印个hahaha,但是在写if语句时,将判断相等的== 写成了赋值=

#include <stdio.h>
int main()
 {
     int i =0;
	 for(i=1;i<=10;i++)
	 {     if(i = 5)
	          printf("hahaha\n");
	     printf("hehehe\n");
	 }
	 return 0;
}

结果变成了死循环。
在这里插入图片描述

2、建议for语句的循环控制变量的取值采用“前闭后开区间”写法。

#include <stdio.h>
int main()
 {
	 int arr[10]={1,2,3,4,5,6,7,8,9,10};
	 int i = 0;//前闭
	 for(i=0; i<10; i++ )//后开
		 printf("%d ",arr[i]);
	
	 return 0;
}

方便易懂,i<10,10次打印,10次循环,10个元素。

一些for循环的变种
变种1,

#include <stdio.h>
 int main()
 {
    for(; ; ;)
     {
        printf("hehe");
     }
    return 0;
}

1、for循环的初始化,调整,判断都可以省略
但是:for循环的判断部分如果被省略,那判断条件就是恒为正
2、如果不是非常熟练,不要随便省略。

int main()
{    
    int i = 0;
    int j = 0;
    for(i=0; i<10; i++)
    {
       for(j=0; j<10; j++)
       {
           printf("hehe");
         }
          
    }
  return 0;
}

输出的是100个hehe。
但是如果随便省略掉了初始化。

int main()
{    
    int i = 0;
    int j = 0;
    for(; i<10; i++)
    {
       for(; j<10; j++)
       {
           printf("hehe");
         }
          
    }
  return 0;
}

输出的是10个hehe。当输出10个hehe之后,跳出小循环,返回大循环,大循环再次进入小循环时,j还是等于10,所以会跳出小循环,循环往复,就只输出了10个hehe。

变种2,

int main()
{
    int x, y;
    for(x=0, y=0; x<2 && y<5; x++, y++)
  {
    printf("hehe\n");
  }
    return 0;
}    

打印出2个hehe。


3,do…while循环

do…while语句的一般形式:

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

先执行一次循环体语句,然后判断表达式是否为非0,如果为真,则再次执行循环体语句,如此反复,直到表达式为0。

用do…while语句打印1-10的数字

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

  return 0;
}

在这里插入图片描述

加入break语句

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

  return 0;
}

在这里插入图片描述

加入continue语句

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

  return 0;
}

在这里插入图片描述
死循环了,与while死循环时同理。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值