分支和循环语句(下)

3.循环语句

while

for

do while

3.1 while循环

我们已经掌握了,if语句:

if(条件)

   语句;

当条件满足的情况下,if语句后的语句执行,否则不执行。

但是这个语句只会执行一次。

由于我们发现生活中很多的实际的例子是:同一件事情我们需要完成很多次。

那我们怎么做呢?

C语言中给我们引入了:while语句,可以实现循环。

//while 语法结构

while(表达式)

循环语句;

while语句执行的流程:

 

 break在while循环中的作用:其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。所以:while中的break是用于永久终止循环的。

continue在while循环中的作用就是: continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。


 注意点:

1.如何清理缓冲区

//代码什么意思?
//代码1
#include <stdio.h>
int main()
{
 int ch = 0;
 while ((ch = getchar()) != EOF)
       putchar(ch);
 return 0;
}
这里的代码适当的修改是可以用来清理缓冲区的.

2.getchar,putchar的用法 

//代码2
#include <stdio.h>
int main()
{
 char ch = '\0';
 while ((ch = getchar()) != EOF)
 {
     if (ch < ‘0’ || ch > ‘9’)
        continue;
     putchar(ch);
 }
 return 0;
}
//这个代码的作用是:只打印数字字符,跳过其他字符的、

 

 

 

  

 


 

 

 3.2 for循环

3.2.1 语法

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

循环语句;

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

表达式2表达式2为条件判断部分,用于判断循环时候终止。

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

例题:使用for循环 在屏幕上打印1-10的数字。

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

 

对比一下for循环和while循环:

在while循环中依然存在循环的三个必须条件,但是由于风格的问题使得三个部分很可能偏离较远,这样查找修改就不够集中和方便。

所以,for循环的风格更胜一筹;for循环使用的频率也最高。 


3.2.2 break和continue在for循环中

我们发现在for循环中也可以出现break和continue,他们的意义和在while循环中是一样的。

但是还是有些差异: 

练习代码:

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

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

 代码1 输出:1 2 3 4

代码2 输出:1 2 3 4 6 7 8 9 10


3.2.3 for语句的循环控制变量

建议:

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

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

 


3.2.4 一些for循环的变种 

#include <stdio.h>
int main()
{
 //代码1
 for(;;)
 { 
    printf("hehe\n");
 }
  
}//for循环中的初始化部分,判断部分,调整部分是可以省略的,但是它容易导致问题,不太建议这么做。
//代码2-使用多余一个变量控制循环 
int x, y;
for (x = 0, y = 0; x<2 && y<5; ++x, y++)   
{  
      printf("hehe\n");
}
return 0;

 


3.2.5 一道笔试题:

 思路:因为表达式2,k=0是个赋值表达式,其为假,所以程序不执行,故执行次数为0。


3.3 do...while()循环

3.3.1 do语句的语法:

do 循环语句;

while(表达式);


 3.3.2 执行流程

 


3.3.3 do语句的特点

循环至少执行一次


3.3.4 do while循环中的break和continue

//代码1
#include <stdio.h>
int main()
{
 int i = 10;
 do
 {    
    if(5 == i)      
      break;
 printf("%d\n", i);
 }while(i<10);
 return 0;
}

//代码2
#include <stdio.h>
int main()
{
 int i = 10; 
 do
 {       
     if(5 == i)       
       continue;
 printf("%d\n", i);
 }while(i<10);
 return 0;
}

3.4 练习

编写代码,演示多个字符从两端移动,向中间汇聚。

//编写代码,演示多个字符从两端移动,向中间汇聚
#include <stdio.h>
int main()
{
 char arr1[] = "welcome to bit...";
 char arr2[] = "#################";
 int left = 0;
 int right = strlen(arr1)-1;
 printf("%s\n", arr2);
 //while循环实现
 while(left<=right)
 {
 Sleep(1000);
 arr2[left] = arr1[left];
 arr2[right] = arr1[right];
 left++; right--;
 printf("%s\n", arr2);
 }
 //for循环实现 
 for (left=0, right=strlen(src)-1;left <= right; left++, right--)
 {
    Sleep(1000); 
    arr2[left] = arr1[left];
    arr2[right] = arr1[right];
    printf( "%s\n", target);
 }
 retutn 0;
}

重点内容:二分查找

 

//实现在主函数内:
#include<stdio.h>
int main()
{
 int arr[] = {1,2,3,4,5,6,7,8,9,10}; 
 int left = 0;
 int right = sizeof(arr)/sizeof(arr[0])-1;
 int key = 7;
 int mid = 0;
 while(left<=right)
{
  mid = (left+right)/2;
 	if(arr[mid]>key) 
    { 
    	right = mid-1;
    }
	else if(arr[mid] < key)
	{ 
		left = mid+1;
	}
	else
		break;
    }
 	if(left <= right)
  		printf("找到了,下标是%d\n", mid);
   else
    	printf("找不到\n");
}

 主要对二分查找的思想有一定理解掌握,主要通过下标,每次查找范围减半。

 中间元素下标,求解思路:


 

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 14
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

♪Yiiiiiiiiiiiiii

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

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

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

打赏作者

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

抵扣说明:

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

余额充值