内容简介

1、课程大纲

2、第一部分第七课: 循环语句

3、第一部分第八课预告: 第一个C语言小游戏

课程大纲

我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案。还会带大家用C语言编写三个游戏。

C语言编程基础知识

  • 什么是编程?

  • 工欲善其事,必先利其器

  • 你的第一个程序

  • 变量的世界

  • 运算那点事

  • 条件表达式

  • 循环语句

  • 实战:第一个C语言小游戏

  • 函数

  • 练习题

  • 习作:完善第一个C语言小游戏

C语言高级技术

  • 模块化编程

  • 进击的指针,C语言王牌

  • 数组

  • 字符串

  • 预处理

  • 创建你自己的变量类型

  • 文件读写

  • 动态分配

  • 实战:“悬挂小人”游戏

  • 安全的文本输入

  • 练习题

  • 习作:用自己的语言解释指针

用基于C语言的SDL库开发2D游戏

  • 安装SDL

  • 创建窗口和画布

  • 显示图像

  • 事件处理

  • 实战:“超级玛丽推箱子”游戏

  • 掌握时间的使用

  • 用SDL_ttf编辑文字

  • 用FMOD控制声音

  • 实战:可视化的声音谱线

  • 练习题

数据结构

  • 链表

  • 堆,栈和队列

  • 哈希表

  • 练习题

第一部分第七课:循环语句

上一课【条件表达式】很重要,这一课我们一起来学习同样很重要的【循环语句】,明天我们就来一起编写第一个C语言的小程序啦,激动不?那就快点把今天这课学完吧!

循环是什么呢?

简单地说:循环使你能够重复执行同样的指令

放轻松,这一课的内容比较简单,不像之前的【变量】和【条件表达式】那么难以消化,所以好好享受这一课,因为第二部分要开始难起来咯!

循环是什么

重复一次: 循环是一种结构,使指令可以被执行多次

与 条件语句/条件表达式 类似,循环语句也有几种形式,但是至终,目的仍然是一样的:多次执行同样的指令

我们一起来看C语言中常用的三种循环:

  1. while循环

  2. do...while循环

  3. for循环

这三种循环的基本原理都是一样的,如下图所示:

上图中,依次进行的是:

  1. 电脑从上到下执行各条指令,像往常一样

  2. 执行完最后一条命令,重新回到第一条命令,从上往下开始执行

  3. 如此周而复始

上图中存在的问题是:如果我们不停止循环,那么电脑是有能力一直执行下去的(我一路向北 离开有你的季节 方向盘周围 回转着我的后悔...)

是的,我们的电脑兄不像有些人,它是从来不抱怨的,叫它干什么就干什么,这也是我们喜欢它的原因

永不停止的循环有一个术语叫“死循环”,陷入死循环的电脑很容易卡机,这也是程序员经常抱怨的问题之一

怎么能够让循环停下来呢?

聪明的读者已经想到了:条件表达式

对了,上一课我们学了条件表达式,现在到它派上用场的时候了

事实上,我们创建循环语句的时候,总会给它一个条件,这个条件指明: 在条件为真时,才继续执行循环,否则停止

下面我么就来看看第一种循环: while循环

while循环

while循环的结构是这样的:

while (/* 条件 */)

{

   // 重复执行的指令

}

不难理解吧,while在英语中是“当...时”,所以就是说:当括号里的“条件”为真时,执行大括号里的指令,一旦条件变为假,不执行指令,while循环结束

用一个小程序来看一下吧,这个程序中,我们要让用户输入数字27,只有当用户输入的是27时,程序才会停止,否则会一直让用户输入数字(我懂的,我懂的,我很任性):

#include <stdio.h>

int main(int agrc, char *argv[]){

int number = 0;



   while (number != 27)

   {

       printf("请输入 27 ! ");

       scanf("%d", &number);

   }

return 0;

}

运行程序,会如下显示:

请输入 27 ! 10
请输入 27 ! 17
请输入 27 ! 30
请输入 27 ! 27

接下来,我们用while循环来做一点更有意思的事情:让循环执行一定次数

int counter = 0;



while (counter< 10)

{

   printf("你好 !\n");

   counter++;

}

它会显示10次“你好!”,如下:

你好!

你好!

你好!

你好!

你好!

你好!

你好!

你好!

你好!

你好!

逻辑到底是怎么样的呢?

  1. counter初始值为0

  2. 我们的while循环的循环条件是 counter < 10,也就是说,只有在counter变量的值小于10的时候,才会执行循环体(大括号里)的指令: 打印“你好!”

  3. 因为初始counter是0,循环条件为真,所以执行printf,显示“你好!”

  4. 在循环体中,我们将counter的值加1

  5. 第二次判断条件的时候,counter的值已经是1了,但还是满足counter < 10这个条件,因此再次显示“你好!”

  6. 如此这般,一直到counter的值变为10,不满足counter < 10这个条件了,while循环才结束,所以一共打印了十个“你好!”

为了加深理解,我们再来写一个小程序,这次我们让while循环每次输出变量的值:

int counter= 0;



while (counter< 10)

{

   printf("变量的值是 %d\n", counter);

   counter++;

}

执行程序,显示如下:

变量的值是 0

变量的值是 1

变量的值是 2

变量的值是 3

变量的值是 4

变量的值是 5

变量的值是 6

变量的值是 7

变量的值是 8

变量的值是 9

do...while循环

这种类型和while循环非常类似,不过比较少用到

与while循环唯一的不同点就是循环条件的位置,while循环中循环条件是在一开始,而do...while循环中是在最后:

int counter = 0;



do

{

   printf("你好 !\n");

   counter++;

} while (counter < 10);

这样的不同改变了什么呢?

很简单,while循环可能会一次也不执行循环体(大括号里)的指令,假如条件一开始就不满足;而do...while循环是先执行循环体的指令,再做条件判断,所以do...while的指令至少会被执行一次

如果我们将do...while循环中的变量counter初始化为40,那么do...while会显示一次“你好!”,对于while循环,如果counter初始为40,那么一次也不会显示“你好!”

for循环

理论上,for循环可以实现我们想要的任何类型循环

之前已经说过,for循环就是另一种形式而已

之前while循环的例子:

int counter = 0;



while (counter < 10)

{

   printf("你好 !\n");

   counter++;

}

以上的代码,我么可以写一个for循环的版本,它们做的是同样的事情:

int counter;



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

{

   printf("你好 !\n");

}

这两个循环都会显示十次“你好!”

for循环和while循环有什么区别呢?

  1. for循环的例子中,counter变量并没有在声明的时候初始化

  2. 在for后面的括号中,有更多的东西(下面我们会详述)

  3. 在循环体(大括号里的内容)中,没有counter++这个指令

我们最感兴趣的是for后面的括号中的内容,因为那也是for循环吸引人的地方

可以看到括号中有三条指令,用分号(;)分隔:

  1. 第一条指令用于初始化:在我们的情况,我们将counter的值初始化为0

  2. 第二条指令用于规定条件:和while循环一样,这个条件用于判断循环是否继续执行,当这个条件为真时,for循环才会继续

  3. 第三条指令用于做自增:这条指令是在循环体中的指令执行完后才执行的,用于更新变量的值;大多数情况下我们是做自增,当然我们也可以做自减(counter--)或者减少任意值(counter-=2) (关于自增和自减,请回去看之前的运算符那一课)

因此,for循环的逻辑是这样的:

  1. 括号里的第一句指令用于初始化变量,只会执行一次,之后不再执行

  2. 对括号里的第二句指令做判断,如果条件为真,则执行循环体(大括号里)的指令,如果为假,则不执行循环体,for循环结束

  3. 执行完循环体里的指令,接着执行括号里的第三句指令,用于更新变量的值

  4. 再次对括号里的第二句指令做判断,如果条件为真,则执行循环体(大括号里)的指令,如果为假,则不执行循环体,for循环结束

  5. 如此周而复始,注意,括号里的第一句指令只会执行一次,之后就用不上了

简单说来,for循环浓缩了很多内容在for后面的括号里

一定要熟练掌握for循环,因为以后会很常用

总结

  1. 循环使你能够重复执行一系列指令

  2. 有好几种循环:while,do...while,for ;依场景不同,选择某个循环会更适合

  3. for循环可能是使用最频繁的循环语句了,在里面我们经常会做变量的增减

第一部分第八课预告:第一个C语言小游戏

今天的课就到这里,一起加油咯。

下一次我们学习第八课,来编写我们的第一个C语言小游戏吧!



程序员联盟
微信公众号*您若觉得本文不错,请点击画面右上角《···》按钮“分享到朋友圈”或“发送给朋友”或“收藏”

*新朋友请关注「程序员联盟」微信搜公众号
 ProgrammerLeague

小编的微信号:

frogoscar

小编的QQ号:  379641629

小编的邮箱:    enmingx@gmail.com

(微信和邮箱最常用)

PS: 有朋友反映看手机端的文章太累,其实是可以用浏览器网页来看的

方法1. 点击画面右上角的《···》按钮,然后选择“复制链接”,再把链接黏贴到你的浏览器里面或用邮件发送给自己,就可以在电脑的浏览器里打开了

方法2. 头条网www.toutiao.com,搜索我的自媒体“程序员联盟”,里面有所有文章,也可以直接进这个链接:http://www.toutiao.com/m3750422747/

新朋友如何查看所有文章:

点击“查看公众号”,再点击“查看历史消息”

“程序员联盟”公众号专为程序员,App设计师,各位喜爱编程和热爱分享的小伙伴们推送各样编程相关知识,优秀软件推荐,业界动态等。搜索

ProgrammerLeague 加关注~

持续关注 程序员联盟 微信公众号,更多有趣,有料,有亮点的内容等着你哦!



【C语言探索之旅】 第一部分第七课:循环语句的更多相关文章

  1. 【C语言探索之旅】 第二部分第二课:进击的指针,C语言的王牌!

    内容简介 1.课程大纲 2.第二部分第二课: 进击的指针,C语言的王牌 3.第二部分第三课预告: 数组 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言 ...

  2. 【C语言探索之旅】 第二部分第九课: 实战"悬挂小人"游戏 答案

    内容简介 1.课程大纲 2.第二部分第九课: 实战"悬挂小人"游戏 答案 3.第二部分第十课预告: 安全的文本输入 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题, ...

  3. 【C语言探索之旅】 第一部分第九课:函数

    内容简介 1.课程大纲 2.第一部分第九课:函数 3.第一部分第十课预告: 练习题+习作 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏. ...

  4. 【C语言探索之旅】 第一部分第六课:条件表达式

    内容简介 1.课程大纲 2.第一部分第六课:条件表达式 3.第一部分第七课预告:循环语句 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏. ...

  5. 【C语言探索之旅】 第三部分第二课:SDL开发游戏之创建窗口和画布

    内容简介 1.第三部分第二课: SDL开发游戏之创建窗口和画布 2.第三部分第三课预告: SDL开发游戏之显示图像 第三部分第二课:SDL开发游戏之创建窗口和画布 在上一课中,我们对SDL这个开源库做 ...

  6. 【C语言探索之旅】 第二部分第一课:模块化编程

    内容简介 1.课程大纲 2.第二部分第一课: 模块化编程 3.第二部分第二课预告: 进击的指针,C语言王牌 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C ...

  7. 【C语言探索之旅】 第一部分第十课:练习题+习作

    内容简介 1.课程大纲 2.第一部分第十课: 练习题+习作 3.第二部分第一课预告: 模块化编程 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三 ...

  8. 【C语言探索之旅】 开宗明义及第一课:什么是编程?

    内容简介 1.课程大纲 2.第一部分第一课:什么是编程? 3.第一部分第二课预告:工欲善其事,必先利其器 ​ 课程大纲 不知道为什么,一直对C语言有一种很深厚的“情怀”(类似老罗对锤子手机的那种),说 ...

  9. 【C语言探索之旅】 第三部分第一课:SDL开发游戏之安装SDL

    内容简介 1.课程大纲 2.第三部分第一课: SDL开发游戏之安装SDL 3.第三部分第二课预告: SDL开发游戏之创建窗口和画布 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会 ...

随机推荐

  1. WPF自定义ListBox样式

    <!--竖向--> <Style x:Key="ListBoxStyle1" TargetType="{x:Type ListBox}"> ...

  2. dsbskrhkme看么哦么

    http://pan.baidu.com/share/link?shareid=3011665141&uk=338692646&third=15                http ...

  3. ASIHttpRequest 摘要

    向server端上传数据 ASIFormDataRequest ,模拟 Form表单提交,其提交格式与 Header会自己主动识别. 没有文件:application/x-www-form-urlen ...

  4. 辛星一起了解下后续PHP性能功能

    关于第一个发言,这篇文章是我的原创.但,这些数据不被总结出来我,你可以搜索下"百度project师HDK",这些数据提供了他,我只是给一个总结.因为他很长的文章,我在这里提炼几点. ...

  5. C语言获取文件SHA1哈希

    安全散列算法(Secure Hash Algorithm)主要适用于数字签名标准 (Digital Signature Standard DSS)它定义了数字签名算法(Digital Signatur ...

  6. PHP 类属性 类静态变量的访问

    php的类属性其实有两种,一种是类常量,一种是类静态变量.两种容易引起混淆. 如同静态类方法和类实例方法一样,静态类属性和实例属性不能重定义(同名),但静态属性可以和类常量同名. <?php c ...

  7. Web中的性能优化

    优化Web中的性能 简介 web的优化就是一场阻止http请求最终访问到数据库的战争.优化的方式就是加缓存,在各个节点加缓存. web请求的流程及节点 熟悉流程及节点,才能定位性能的问题.而且优化的顺 ...

  8. 使用ToggleButton和StackPanel+Border实现圆角开关按钮动画效果

    <ToggleButton Height=" HorizontalAlignment="Left" Margin="138,122,0,0" N ...

  9. .net MVC AutoFac基地的环境建设

    在Nuget在运行安装引用 Install-Package Autofac -Version 3.1.0 Install-Package Autofac.Mvc4 public static void ...

  10. 站点搭建从零開始(四) server的配置

    原文发表在我的个人站点,欢迎大家訪问~转载请保留本段,或注明原文:http://www.hainter.com/website-primer-4 域名解析设置好了,通常我们就能够訪问我们的网站了,上篇 ...