美文网首页C语言学习简书收藏--C语言C语言探索之旅
C语言探索之旅 | 第一部分第十课:练习题+习作

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

作者: 程序员联盟 | 来源:发表于2016-10-09 20:05 被阅读772次

    -- 简书作者 谢恩铭 转载请注明出处

    第一部分第十课:练习题+习作


    上一课是C语言探索之旅 | 第一部分第九课:函数

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

    所以为大家准备了一些练习题:

    15道选择题+一个小小的习作。

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

    练习题


    1. 负责将源代码转换成二进制码的程序叫什么?
      A. 扬声器
      B. 编译器
      C. 转码器

    2. 下面哪一个不是IDE(集成开发环境)?
      A. NotePad++
      B. Visual Studio
      C. Code::Blocks
      D. Xcode

    3. C语言将哪一个值视为布尔值的false(假)?
      A. 1
      B. 0
      C. -1
      D. -2

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

    #include <stdio.h>
    int main()
    {
        printf("Hello world!\n");
        return 0;
    }
    

    A. 程序没有执行操作
    B. 程序没有正常运行
    C. 程序正常运行

    1. 以下哪一个是C语言中的换行符?
      A. \t
      B. \n
      C. 按一下键盘上的回车键就够了

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

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

    A. 您的银行账户上有 %ld 元
    B. 您的银行账户上有 6500000 元
    C. 您的银行账户上有 ld 元, bankAccount

    1. 以下哪一种存储器是在电脑关闭之后不会被清空的?
      A. 寄存器
      B. 高速缓存
      C. 内存
      D. 硬盘

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

    result = (8 / 3) - 2;
    

    A. -2
    B. 0
    C. 1
    D. 2

    1. 以下switch语句的问题是什么?
    switch (variable)
    {
        case 5:
          printf("Hello");
        case 12:
          printf("你好");
        default:
          printf("再见");
    }
    

    A. 少了break语句
    B. 在switch的最后的大括号后面少了一个分号
    C. 对每一个case下面的指令需要用一个大括号括起来
    D. default应该写成case default

    1. 用哪一个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++)

    1. 以下代码会显示多少次“Hello”?
    int count = 14;
    while (count < 15)
    {
          printf("Hello\n");
    }
    

    A. 0
    B. 1
    C. 14
    D. 15
    E. 这是一个无限循环

    1. 在哪种情况下return语句不是必须的?
      A. 函数没有参数
      B. 函数的类型是void
      C. 函数需要返回0值

    2. 什么是函数的参数?
      A. 标明函数的名字
      B. 标明函数的返回值
      C. 我们传给函数使它用来工作的变量

    3. 以下函数存在什么问题?

    int square(int number)
    {
          int result = 0;
          result = number * number;
    }
    

    A. 函数没有返回任何值
    B. 函数运行不了,因为我们在某处忘了一个分号
    C. 完全没有问题

    1. 在一个程序中可以包含多少个函数?
      A. 只有一个,就是main函数
      B. 最多100个
      C. 最多1024个
      D. 没有限制

    练习题答案


    1. B. 编译器

    2. A. NotePad++

    3. B. 0

    4. C. 程序正常运行

    5. B. \n

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

    7. D. 硬盘

    8. B. 0

    9. A. 少了break语句

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

    11. E. 这是一个无限循环

    12. B. 函数的类型是void

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

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

    15. 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;
    }
    

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

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

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

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

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

    5. 在每一次进入循环体里运行时,我们都请求用户输入一个数字,并且把这个数字的值赋给guessNumber变量,接下来就比较guessNumber和mysteryNumber(需要猜的数字)的大小:
      mysteryNumber大于guessNumber,那么输出“猜小了”,继续循环
      mysteryNumber小于guessNumber,那么输出“猜大了”,继续循环
      mysteryNumber等于guessNumber,也就是else语句的情况,即是说我们猜对了,输出“太棒了,你猜到了这个神秘数字!”,结束循环

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

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

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

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

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

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

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

    完善好的源代码可以用公众号直接发给我,或者发到我的邮箱(enmingx@gmail.com)中,欢迎交流,谢谢!

    下回预告:第二部分开始了!


    C语言探索之旅 | 第二部分第一课:模块化编程

    相关文章

      网友评论

      本文标题:C语言探索之旅 | 第一部分第十课:练习题+习作

      本文链接:https://www.haomeiwen.com/subject/tdcmyttx.html