C语言从入门到入土(入门篇)(分支语句与循环语句p2)

目录

getchar和putchar

3.2 for循环

3.2.1 break和continue在for循环中

3.2.2 for语句的循环控制变量

3.2.3 一些for循环的变种

3.2.4 一道笔试题:

3.3 do...while()循环

3.3.1 do语句的语法:

3.3.2 do语句的特点

3.3.3do while循环中的break和continue

3.4 练习


getchar和putchar

//PS:在进行本文讲解时,我们先用以下这些图来了解一下gerchar和putchar这两个函数:

这是msdn上面定义的getchar函数

 

 上图意思就是当getchar读取错误或者读到文件结束标志的时候就返回一个EOF。

这是msdn上面定义的putchar函数

 

 

 

 //linux上面是 Ctrl+D

 

ps:此时getchar拿的是空格 

 

 ps:当然如果想要读取到空格的话我们可以去用gets这个函数,目前也只是提一下。

//以上就是给小伙伴们补充的getchar和putchar两个函数啦!!!

//再次回来!上文我们讲完了while循环,这节课我们接着来讲for循环和do...while循环

3.2 for循环

我们已经知道了 while 循环,但是我们为什么还要一个 for 循环呢?
首先来看看 for 循环的语法:
for ( 表达式 1 ; 表达式 2 ; 表达式 3 )
循环语句 ;
表达式 1
表达式 1 初始化部分 ,用于初始化循环变量的。
表达式 2
表达式 2 条件判断部分 ,用于判断循环时候终止。
表达式 3
表达式 3 调整部分 ,用于循环条件的调整。
实际的问题:
使用 for 循环 在屏幕上打印 1-10 的数字。
         
现在我们对比一下 for 循环和 while循环。
int i = 0 ;
// 实现相同的功能,使用 while
i = 1 ; // 初始化部分
while ( i <= 10 ) // 判断部分
{
printf ( "hehe\n" );
i = i + 1 ; // 调整部分
}
// 实现相同的功能,使用 while
for ( i = 1 ; i <= 10 ; i ++ )
{
printf ( "hehe\n" );
}
可以发现在 while 循环中依然存在循环的三个必须条件,但是由于风格的问题使得三个部分很可能偏离较 远,这样查找修改就不够集中和方便。所以, for 循环的风格更胜一筹; for 循环使用的频率也最高。

3.2.1 breakcontinuefor循环中

     
我们发现在 for 循环中也可以出现 break continue ,他们的意义和在 while 循环中是一样的。
但是还是有些差异:
// 代码 1
// 代码 2

3.2.2 for语句的循环控制变量

建议:
1. 不可在 for 循环体内修改循环变量,防止 for 循环失去控制。
2. 建议 for 语句的循环控制变量的取值采用 前闭后开区间 写法。
int i = 0 ;
// 前闭后开的写法
for ( i = 0 ; i < 10 ; i ++ )
{}
// 两边都是闭区间
for ( i = 0 ; i <= 9 ; i ++ )
{}
//一般建议用前闭后开的方法,因为这样可以使后开的那个值赋有一定的意义。

3.2.3 一些for循环的变种

  //for 循环中的初始化部分,判断部分,调整部分是可以省略的,但是不建议初学时省略,容易导致问 题。
   
    // 代码 2
    int i = 0 ;
    int j = 0 ;
    // 这里打印多少个 hehe?
    for ( i = 0 ; i < 10 ; i ++ )
  {
        for ( j = 0 ; j < 10 ; j ++ )
      {
printf ( "hehe\n" );
      }
  }
//打印100个
  // 代码 3
    int i = 0 ;
    int j = 0 ;
    // 如果省略掉初始化部分,这里打印多少个 hehe?
    for (; i < 10 ; i ++ )
  {
        for (; j < 10 ; j ++ )
      {
printf ( "hehe\n" );
      }
  }
   
//打印10个
// 代码 4- 使用多余一个变量控制循环 

3.2.4 一道笔试题:

// 请问循环要循环多少次?
#include <stdio.h>
int main ()
{
int i = 0 ;
int k = 0 ;
for ( i = 0 , k = 0 ; k = 0 ; i ++ , k ++ )
        k ++ ;
return 0 ;
}
//循环0次,因为for里面的k是赋值,并不是判断,赋值为0直接为假,跳出循环,所以是0次

3.3 do...while()循环

3.3.1 do语句的语法:

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

3.3.2 do语句的特点

循环至少执行一次,使用的场景有限,所以不是经常使用。

3.3.3do while循环中的breakcontinue

ps:break只能跳出一条循环 

//上面的知识点就讲完了哈!!!现在我们来自己尝试编写下面的程序来巩固知识吧!!!

//当然,下面的题也有很多新奇的东西,大家一时半会想不出来很正常,先接触一下哈!!!到后面自然就熟悉了!!!不要想不开哈!这是大部分人都会经历的!当然,我只是说初学者哈!!

3.4 练习

1. 计算 n 的阶乘。
2. 计算 1!+2!+3!+……+10!
3. 在一个有序数组中查找具体的某个数字 n 。(讲解二分查找)
4. 编写代码,演示多个字符从两端移动,向中间汇聚。
1.思路:

 

例2   求1到n阶乘的和(用以上相关联的方法就是再套一个循环然后加在一起)

法一:

法二:

 

对于法一,重复算了很多值,所以来个更有效的方法

例3:

用二分法

法一:

 法二:

 

 

 这就是二分查找,找不到就缩小一半查找范围

例4:

演示多个代码从两边向中间汇聚

 PS:

还有一点说掉啦,就是arr1和arr2数组要一样长才可以哈!不然超过的部分就会打印随机数的哈!

今天的内容就到处结束了哈!感谢大家的观看!!要是觉得对你有一点用的话,就来一个点赞加关注吧!!!谢谢大家!!!

编程就是永不放弃!永不放弃有两个原则,第一个原则是永不放弃,第二个原则就是:当你想放弃时回头看第一个原则!加油!!!

猜你喜欢

转载自blog.csdn.net/weixin_62700590/article/details/120998811