程序员人生 网站导航

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

栏目:php教程时间:2015-01-30 08:17:13


内容简介


1、课程大纲

2、第1部份第10课: 练习题+习作

3、第2部份第1课预告: 模块化编程


课程大纲


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


C语言编程基础知识


  • 甚么是编程?

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

  • 你的第1个程序

  • 变量的世界

  • 运算那点事

  • 条件表达式

  • 循环语句

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

  • 函数

  • 练习题

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


C语言高级技术


  • 模块化编程

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

  • 数组

  • 字符串

  • 预处理

  • 创建你自己的变量类型

  • 文件读写

  • 动态分配

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

  • 安全的文本输入

  • 练习题

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


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


  • 安装SDL

  • 创建窗口和画布

  • 显示图象

  • 事件处理

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

  • 掌握时间的使用

  • 用SDL_ttf编辑文字

  • 用FMOD控制声音

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

  • 练习题


数据结构


  • 链表

  • 堆,栈和队列

  • 哈希表

  • 练习题



第1部份第10课:练习题+习作


第1部份课程已全部结束,在开始第2部份的探索之旅之前,我们必须巩固好第1部份学到的知识


所以为大家准备了1些练习题: 15道选择题+1个小小的习作

15道题目(单选)在本课最后有附答案,但是希望大家先做完再对答案。


练习题


  1. 负责将源代码转换成2进制码的程序叫甚么?

    A. 扬声器

    B. 编译器

    C. 转码器


  2. 下面哪个不是IDE(集成开发环境)?

    A. NotePad++

    B. Visual Studio

    C. Code::Blocks

    D. Xcode


  3. C语言将哪个值视为布尔值的false(假)?

    A. 1

    B. 0

    C. ⑴

    D. ⑵


  4. 下面这段代码中的 return 0; 意味着甚么?

    #include <stdio.h>

    int main()

    {

    printf("Hello world! ");

    return 0;

    }


    A. 程序没有履行操作

    B. 程序没有正常运行

    C. 程序正常运行


  5. 以下哪个是C语言中的换行符?

    A.

    B.

    C. 按1下键盘上的回车键就够了


  6. 如果我有1个变量bankAccount(银行账户),类型是long,其值为6500000(土豪啊),那下面的代码会输出甚么?

    printf("您的银行账户上有 %ld 元 ", bankAccount);


    A. 您的银行账户上有 %ld 元

    B. 您的银行账户上有 6500000 元

    C. 您的银行账户上有 ld 元, bankAccount


  7. 以下哪种存储器是在电脑关闭以后不会被清空的?

    A. 寄存器

    B. 高速缓存

    C. 内存

    D. 硬盘


  8. 经过这个操作,result变量的值是多少?

    result = (8 / 3) - 2;


    A. ⑵

    B. 0

    C. 1

    D. 2


  9. 以下switch语句的问题是甚么?

    switch (variable)

    {  

    case 5:    

    printf("Hello");  

    case 12:    

    printf("你好");  

    default:    

    printf("再见");

    }


    A. 少了break语句

    B. 在switch的最后的大括号后面少了1个分号

    C. 对每个case下面的指令需要用1个大括号括起来

    D. default应当写成case default


  10. 用哪个for循环可以在屏幕上显示以下信息?

    Line n°1

    Line n°3

    Line n°5

    Line n°7


    A. for (count = 1 ; count < 9 ; count += 2)

    B. for (count = 1 ; count <= 7 ; count++)

    C. for (count = 0 ; count < 9 ; count += 2)

    D. for (count = 1 ; count < 8 ; count++)


  11. 以下代码会显示多少次“Hello”?

    int count = 14;

    while (count < 15)

    {  

    printf("Hello ");

    }


    A. 0

    B. 1

    C. 14

    D. 15

    E. 这是1个无穷循环


  12. 在哪一种情况下return语句不是必须的?

    A. 函数没有参数

    B. 函数的类型是void

    C. 函数需要返回0值


  13. 甚么是函数的参数?

    A. 标明函数的名字

    B. 标明函数的返回值

    C. 我们传给函数使它用来工作的变量


  14. 以下函数存在甚么问题?

    int square(int number)

    {    

    int result = 0;    

    result = number * number;

    }


    A. 函数没有返回任何值

    B. 函数运行不了,由于我们在某处忘了1个分号

    C. 完全没有问题


  15. 在1个程序中可以包括多少个函数?

    A. 只有1个,就是main函数

    B. 最多100个

    C. 最多1024个

    D. 没有限制



练习题答案

  1. B. 编译器

  2. A. NotePad++

  3. B. 0

  4. C. 程序正常运行

  5. B.

  6. B. 您的银行账户上有 6500000 元

  7. D. 硬盘

  8. B. 0

  9. A. 少了break语句

  10. A. for (count = 1 ; count < 9 ; count += 2)

  11. E. 这是1个无穷循环

  12. B. 函数的类型是void

  13. C. 我们传给函数使它用来工作的变量

  14. A. 函数没有返回任何值

  15. D. 没有限制


题目都不难,认真温习1下肯定能得高分,你都答对了吗?

有甚么疑问可以在公众号里直接留言发问,或联系小编,谢谢!



习作: 完善“或多或少”这个小游戏


前面1个我们编写了第1个C语言小游戏,虽然很简单,没有好看的图形界面(以后会有的,牛奶和面包都会有的),但是也能够小小自豪1下!

现在我们重新给出它的源代码:


#include <stdio.h>

#include <stdlib.h>

#include <time.h>


int main (int argc, char** argv)

{

int mysteryNumber = 0, guessNumber = 0;

const int MAX = 100, MIN = 1;

// 生成随机数

srand(time(NULL));

mysteryNumber = (rand() % (MAX - MIN + 1)) + MIN;

/* 程序的循环部份, 如果用户没猜中数字,就1直进行循环 */

do

{

 // 要求用户输入所猜数字

 printf("这个数字是甚么 ? ");

 scanf("%d", &guessNumber);

 // 比较用户输入的数字和神秘数字

 if (mysteryNumber > guessNumber)

     printf("猜小了 ! ");

 else if (mysteryNumber < guessNumber)

     printf("猜大了 ! ");

 else

     printf ("太棒了,你猜到了这个神秘数字 !! ");

} while (guessNumber != mysteryNumber);


return 0;

}


程序的解释(从上到下的顺序):

  1. 预处理指令:就是开头的那3行,以#开始,include是英语“包括,引入”的意思。所以表示引入甚么库。之前我已给大家这部份的代码了,所以如果你的程序运行起来出错是在这部份的话,那你也是够够的了 :P

  2. 变 量:这个游戏中,不需要太多变量,只有1个用于记录用户输入的数字的变量guessNumber,和1个电脑随机抽取的数字mysteryNumber。 同时也定义了两个常量(const变量,其实叫只读变量比较准确)MAX和MIN,值分别是100和1。这样定义的好处是,如果你后面要改这两个数值,会 很方便,直接改这1行的两个值就行了。如果没有用MAX和MIN而是在程序里每个地方写100和1的话,那如果以后要改数值,工作量就大了。

  3. 随机数:srand和rand那两行,产生在1和100之间的1个随机数,值赋给mysteryNumber。

  4. 循 环:我选择了用do...while循环。理论上1个while循环也能够做到,但我觉得这里用do...while可能更合逻辑。为何呢?还记得 do...while循环的特点吗?就是循环体里的指令最少会履行1次,不像while循环可能1次也不履行。这里我们最少要让用户输入1次数字,不可能 用户1次也不输入就猜到了数字。

  5. 在每次进入循环体里运行时,我们都要求用户输入1个数字,并且把这个数字的值赋给guessNumber变量,接下来就比较guessNumber和mysteryNumber(需要猜的数字)的大小:

    mysteryNumber大于guessNumber,那末输出“猜小了”,继续循环

    mysteryNumber小于guessNumber,那末输出“猜大了”,继续循环

    mysteryNumber等于guessNumber,也就是else语句的情况,即是说我们猜对了,输出“太棒了,你猜到了这个神秘数字!”,结束循环


循环也需要1个条件,我们给出的条件是:只要猜的数字和神秘数字不1样,循环就继续。


现在这个游戏还是很基础很简单的,但是可以有以下的改进方案:

  1. 增加1个记录步数的计数器,在你猜对的时候输出:“太棒了,你用**步猜到了这个神秘数字!”

  2. 目 前的程序只进行1轮就结束了,如果玩家不过瘾,还想继续下1轮怎样办呢?可以加入1个问题:“你还想继续玩吗?”,等待用户输入数字来回答。定义1个布尔 值continue来存储用户输入的回答,比如continue的默许值是1,就是用户默许是继续玩下1轮的,但如果用户输入0,那末程序停止,游戏结束

  3. 增加1个模式:两人模式。可以你出题我来猜。但是我希望你能够在程序1开始就让用户选择是玩哪种模式,是经典的人机对战,还是人人对战。如果是两人模式的人人对战,那末就不是用srand和rand来产生神秘数字了,而是让玩家1通过scanf来输入这个数字

  4. 设 置几个难度级别,让玩家选择:低级(1⑴00中的1个数),中级(1⑴000中的1个数),高级(1⑴0000中的1个数)。如果你这样设计,就需 要改写MAX值了,而此时MAX就不能再是1个const变量了,必须要把MAX前面的const去掉,MIN的还能保存。


大家可以自己改进和扩充这个小游戏,使之更具可玩性和难度

完善好的源代码可以用公众号直接发给小编,或发到小编的联系方式中,欢迎交换,谢谢!



第2部份第1课预告:


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

第1部份结束了,该开启第2部份的旅程了!

下1次我们学习第2部份第1课,来认识1下模块化编程吧!




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

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

小编微信号 frogoscar

小编QQ号:  379641629

小编邮箱:    enmingx@gmail.com

微信和邮箱最经常使用


PS: 有朋友反应看手机真个文章太累,实际上是可以用阅读器网页来看的

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



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



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

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





程序员同盟”公众号专为程序员,App设计师,各位爱好编程和酷爱分享的小火伴们推送各样编程相干知识,优秀软件推荐,业界动态等。搜索 ProgrammerLeague 加关注~


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



点击下方浏览原文查看 Dennis Ritchie编著的《C程序设计语言》第2版中文版PDF 百度云盘下载 (可以在手机上点开文件直接看)
↓↓↓
------分隔线----------------------------
------分隔线----------------------------

最新技术推荐