【C语言探索之旅】 第一部分第十课:练习题+习作
内容简介
1、课程大纲
2、第一部分第十课: 练习题+习作
3、第二部分第一课预告: 模块化编程
课程大纲
我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案。还会带大家用C语言编写三个游戏。
C语言编程基础知识
什么是编程?
工欲善其事,必先利其器
你的第一个程序
变量的世界
运算那点事
条件表达式
循环语句
实战:第一个C语言小游戏
函数
练习题
习作:完善第一个C语言小游戏
C语言高级技术
模块化编程
进击的指针,C语言王牌
数组
字符串
预处理
创建你自己的变量类型
文件读写
动态分配
实战:“悬挂小人”游戏
安全的文本输入
练习题
习作:用自己的语言解释指针
用基于C语言的SDL库开发2D游戏
安装SDL
创建窗口和画布
显示图像
事件处理
实战:“超级玛丽推箱子”游戏
掌握时间的使用
用SDL_ttf编辑文字
用FMOD控制声音
实战:可视化的声音谱线
练习题
数据结构
链表
堆,栈和队列
哈希表
练习题
第一部分第十课:练习题+习作
第一部分课程已经全部结束,在开始第二部分的探索之旅之前,我们必须巩固好第一部分学到的知识
所以为大家准备了一些练习题: 15道选择题+一个小小的习作
15道题目(单选)在本课最后有附答案,但是希望大家先做完再对答案。
练习题
负责将源代码转换成二进制码的程序叫什么?
A. 扬声器
B. 编译器
C. 转码器
下面哪一个不是IDE(集成开发环境)?
A. NotePad++
B. Visual Studio
C. Code::Blocks
D. Xcode
C语言将哪一个值视为布尔值的false(假)?
A. 1
B. 0
C. -1
D. -2
下面这段代码中的 return 0; 意味着什么?
#include <stdio.h>
int main()
{
printf("Hello world!\n");
return 0;
}
A. 程序没有执行操作
B. 程序没有正常运行
C. 程序正常运行
以下哪一个是C语言中的换行符?
A. \t
B. \n
C. 按一下键盘上的回车键就够了
如果我有一个变量bankAccount(银行账户),类型是long,其值为6500000(土豪啊),那下面的代码会输出什么?
printf("您的银行账户上有 %ld 元\n", bankAccount);
A. 您的银行账户上有 %ld 元
B. 您的银行账户上有 6500000 元
C. 您的银行账户上有 ld 元, bankAccount
以下哪一种存储器是在电脑关闭之后不会被清空的?
A. 寄存器
B. 高速缓存
C. 内存
D. 硬盘
经过这个操作,result变量的值是多少?
result = (8 / 3) - 2;
A. -2
B. 0
C. 1
D. 2
以下switch语句的问题是什么?
switch (variable)
{
case 5:
printf("Hello");
case 12:
printf("你好");
default:
printf("再见");
}
A. 少了break语句
B. 在switch的最后的大括号后面少了一个分号
C. 对每一个case下面的指令需要用一个大括号括起来
D. default应该写成case default
用哪一个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++)
以下代码会显示多少次“Hello”?
int count = 14;
while (count < 15)
{
printf("Hello\n");
}
A. 0
B. 1
C. 14
D. 15
E. 这是一个无限循环
在哪种情况下return语句不是必须的?
A. 函数没有参数
B. 函数的类型是void
C. 函数需要返回0值
什么是函数的参数?
A. 标明函数的名字
B. 标明函数的返回值
C. 我们传给函数使它用来工作的变量
以下函数存在什么问题?
int square(int number)
{
int result = 0;
result = number * number;
}
A. 函数没有返回任何值
B. 函数运行不了,因为我们在某处忘了一个分号
C. 完全没有问题
在一个程序中可以包含多少个函数?
A. 只有一个,就是main函数
B. 最多100个
C. 最多1024个
D. 没有限制
练习题答案
B. 编译器
A. NotePad++
B. 0
C. 程序正常运行
B. \n
B. 您的银行账户上有 6500000 元
D. 硬盘
B. 0
A. 少了break语句
A. for (count = 1 ; count < 9 ; count += 2)
E. 这是一个无限循环
B. 函数的类型是void
C. 我们传给函数使它用来工作的变量
A. 函数没有返回任何值
D. 没有限制
题目都不难,认真复习一下肯定能得高分,你都答对了吗?
有什么疑问可以在公众号里直接留言提问,或者联系小编,谢谢!
习作: 完善“或多或少”这个小游戏
前面一个我们编写了第一个C语言小游戏,虽然很简单,没有好看的图形界面(之后会有的,牛奶和面包都会有的),但是也可以小小自豪一下!
现在我们重新给出它的源代码:
#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;
/* 程序的循环部分, 如果用户没猜中数字,就一直进行循环 */
do
{
// 请求用户输入所猜数字
printf("这个数字是什么 ? ");
scanf("%d", &guessNumber);
// 比较用户输入的数字和神秘数字
if (mysteryNumber > guessNumber)
printf("猜小了 !\n\n");
else if (mysteryNumber < guessNumber)
printf("猜大了 !\n\n");
else
printf ("太棒了,你猜到了这个神秘数字 !!\n\n");
} while (guessNumber != mysteryNumber);
return 0;
}
程序的解释(从上到下的顺序):
预处理指令:就是开头的那三行,以#开始,include是英语“包含,引入”的意思。所以表示引入什么库。之前我已经给大家这部分的代码了,所以如果你的程序运行起来出错是在这部分的话,那你也是够够的了 :P
变 量:这个游戏中,不需要太多变量,只有一个用于记录用户输入的数字的变量guessNumber,和一个电脑随机抽取的数字mysteryNumber。 同时也定义了两个常量(const变量,其实叫只读变量比较准确)MAX和MIN,值分别是100和1。这样定义的好处是,如果你后面要改这两个数值,会 很方便,直接改这一行的两个值就好了。如果没有用MAX和MIN而是在程序里每一个地方写100和1的话,那如果以后要改数值,工作量就大了。
随机数:srand和rand那两行,产生在1和100之间的一个随机数,值赋给mysteryNumber。
循 环:我选择了用do...while循环。理论上一个while循环也可以做到,但我觉得这里用do...while可能更合逻辑。为什么呢?还记得 do...while循环的特点吗?就是循环体里的指令至少会执行一次,不像while循环可能一次也不执行。这里我们至少要让用户输入一次数字,不可能 用户一次也不输入就猜到了数字。
在每一次进入循环体里运行时,我们都请求用户输入一个数字,并且把这个数字的值赋给guessNumber变量,接下来就比较guessNumber和mysteryNumber(需要猜的数字)的大小:
mysteryNumber大于guessNumber,那么输出“猜小了”,继续循环
mysteryNumber小于guessNumber,那么输出“猜大了”,继续循环
mysteryNumber等于guessNumber,也就是else语句的情况,即是说我们猜对了,输出“太棒了,你猜到了这个神秘数字!”,结束循环
循环也需要一个条件,我们给出的条件是:只要猜的数字和神秘数字不一样,循环就继续。
现在这个游戏还是很基础很简单的,但是可以有以下的改进方案:
增加一个记录步数的计数器,在你猜对的时候输出:“太棒了,你用**步猜到了这个神秘数字!”
目 前的程序只进行一轮就结束了,如果玩家不过瘾,还想继续下一轮怎么办呢?可以加入一个问题:“你还想继续玩吗?”,等待用户输入数字来回答。定义一个布尔 值continue来存储用户输入的回答,比如continue的默认值是1,就是用户默认是继续玩下一轮的,但如果用户输入0,那么程序停止,游戏结束
增加一个模式:两人模式。可以你出题我来猜。但是我希望你能够在程序一开始就让用户选择是玩哪一种模式,是经典的人机对战,还是人人对战。如果是两人模式的人人对战,那么就不是用srand和rand来产生神秘数字了,而是让玩家一通过scanf来输入这个数字
设 置几个难度级别,让玩家选择:初级(1-100中的一个数),中级(1-1000中的一个数),高级(1-10000中的一个数)。如果你这样设计,就需 要改写MAX值了,而此时MAX就不能再是一个const变量了,必须要把MAX前面的const去掉,MIN的还能保留。
大家可以自己改进和扩充这个小游戏,使之更具可玩性和难度
完善好的源代码可以用公众号直接发给小编,或者发到小编的联系方式中,欢迎交流,谢谢!
第二部分第一课预告:
今天的课就到这里,一起加油咯。
第一部分结束了,该开启第二部分的旅程了!
下一次我们学习第二部分第一课,来认识一下模块化编程吧!
程序员联盟
微信公众号*您若觉得本文不错,请点击画面右上角《···》按钮“分享到朋友圈”或“发送给朋友”
*新朋友请关注「程序员联盟」微信搜公众号
ProgrammerLeague
小编微信号:
frogoscar
小编QQ号: 379641629
小编邮箱: enmingx@gmail.com
(微信和邮箱最常用)
PS: 有朋友反映看手机端的文章太累,其实是可以用浏览器网页来看的
方法1. 点击画面右上角的《···》按钮,然后选择“复制链接”,再把链接黏贴到你的浏览器里面或用邮件发送给自己,就可以在电脑的浏览器里打开了
方法2. 头条网www.toutiao.com,搜索我的自媒体“程序员联盟”,里面有所有文章,也可以直接进这个链接:http://www.toutiao.com/m3750422747/
新朋友如何查看所有文章:
点击“查看公众号”,再点击“查看历史消息”
“程序员联盟”公众号专为程序员,App设计师,各位喜爱编程和热爱分享的小伙伴们推送各样编程相关知识,优秀软件推荐,业界动态等。搜索
ProgrammerLeague 加关注~
持续关注 程序员联盟 微信公众号,更多有趣,有料,有亮点的内容等着你哦!
点击下方“阅读原文”查看 Dennis
Ritchie编著的《C程序设计语言》第二版中文版PDF 百度云盘下载 (可以在手机上点开文件直接看)
↓↓↓
【C语言探索之旅】 第一部分第十课:练习题+习作的更多相关文章
- 【C语言探索之旅】 第二部分第二课:进击的指针,C语言的王牌!
内容简介 1.课程大纲 2.第二部分第二课: 进击的指针,C语言的王牌 3.第二部分第三课预告: 数组 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言 ...
- 【C语言探索之旅】 第二部分第九课: 实战"悬挂小人"游戏 答案
内容简介 1.课程大纲 2.第二部分第九课: 实战"悬挂小人"游戏 答案 3.第二部分第十课预告: 安全的文本输入 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题, ...
- 【C语言探索之旅】 第一部分第九课:函数
内容简介 1.课程大纲 2.第一部分第九课:函数 3.第一部分第十课预告: 练习题+习作 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏. ...
- 【C语言探索之旅】 第三部分第二课:SDL开发游戏之创建窗口和画布
内容简介 1.第三部分第二课: SDL开发游戏之创建窗口和画布 2.第三部分第三课预告: SDL开发游戏之显示图像 第三部分第二课:SDL开发游戏之创建窗口和画布 在上一课中,我们对SDL这个开源库做 ...
- 【C语言探索之旅】 第二部分第一课:模块化编程
内容简介 1.课程大纲 2.第二部分第一课: 模块化编程 3.第二部分第二课预告: 进击的指针,C语言王牌 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C ...
- 【C语言探索之旅】 开宗明义及第一课:什么是编程?
内容简介 1.课程大纲 2.第一部分第一课:什么是编程? 3.第一部分第二课预告:工欲善其事,必先利其器 课程大纲 不知道为什么,一直对C语言有一种很深厚的“情怀”(类似老罗对锤子手机的那种),说 ...
- 【C语言探索之旅】 第三部分第一课:SDL开发游戏之安装SDL
内容简介 1.课程大纲 2.第三部分第一课: SDL开发游戏之安装SDL 3.第三部分第二课预告: SDL开发游戏之创建窗口和画布 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会 ...
- 【C语言探索之旅】 第一部分第八课:第一个C语言小游戏
内容简介 1.课程大纲 2.第一部分第八课:第一个C语言小游戏 3.第一部分第九课预告: 函数 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写 ...
- 【C语言探索之旅】 第一部分第七课:循环语句
内容简介 1.课程大纲 2.第一部分第七课: 循环语句 3.第一部分第八课预告: 第一个C语言小游戏 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编 ...
随机推荐
- IOS获取来电去电来电归属系统通知达到效果(一)
这里的原理是获得到呼叫系统通知,然后根据本地呼叫电话号码,相应的电话联系. 一世. 来电显示是不是在地址簿中的联系人, 这是当第一个加入一个临时的联系人在您的电话簿(它是创建一个新的接触,并保存相 ...
- ARM体系结构与编程
ARM处理器的7中执行模式:usr.fiq.irq.svc.abt.und.sys. ARM处理器共37个寄存器:31个通用寄存器(未备份寄存器R0-R7,在全部模式下指的都是同一个物理寄存器:备份寄 ...
- python实现了字符串的按位异或和php中的strpad函数
近期在写自己主动化測试,因为开发加密中用到strpad和字符串的按位异或,而python中没有这种函数和功能,所以必须自己写一套,要不自己主动化測试无法进行,所以就用python实现了一下,因为在写字 ...
- 前端控件之Jquery datetimepicker的使用总结
效果图 在介绍jquery datetimepicker的使用方法前,我们先来看一下它的实现效果图,这样以便让你更快地了解它是否是你所需要的. 下面我截了四张常用的效果图(截取自http://xdso ...
- ios7开发者必知
如果你想为iOS 设备开发app,你需要知道如何与软件交互,如何设计,你还要知道苹果独特的开发理念和开发工具.真正的能力还需要成功地从其他行业领域借鉴核心概念.最后把所有这些东西糅合进你的信息库中, ...
- Cocos2d-X研究之v3.x瓦片地图具体解释
在游戏开发过程中,我们会遇到超过屏幕大小的地图,比如即时战略游戏,使得玩家能够在地图中滚动游戏画面.这类游戏一般会有丰富的背景元素,假设直接使用背景图切换的方式,须要为每一个不同的场景准备一张背景图, ...
- Android应用Activity、Dialog、PopWindow、Toast窗体加入机制及源代码分析
[工匠若水 http://blog.csdn.net/yanbober 转载烦请注明出处.尊重劳动成果] 1 背景 之所以写这一篇博客的原因是由于之前有写过一篇<Android应用setCont ...
- 关于git的ssh-key:解决本地多个ssh-key的问题
在设置github的时候,官方的说明文档要求备份当前的id_rsa.然后生成一份新的私钥用于github的登陆.假设真这样做,那么新的私钥是无法再继续登陆之前的机器的. 这样的方法有点暴力- 还好ss ...
- 集成学习---bagging and boosting
作为集成学习的二个方法,其实bagging和boosting的实现比较容易理解,但是理论证明比较费力.下面首先介绍这两种方法. 所谓的集成学习,就是用多重或多个弱分类器结合为一个强分类器,从而达到提升 ...
- tarjan算法(割点/割边/点连通分量/边连通分量/强连通分量)
tarjan算法是在dfs生成一颗dfs树的时候按照访问顺序的先后,为每个结点分配一个时间戳,然后再用low[u]表示结点能访问到的最小时间戳 以上的各种应用都是在此拓展而来的. 割点:如果一个图去掉 ...