大学MOOC 计算机基础(二)程序设计实验(浙江外国语学院)1454263165 最新慕课完整章节测试答案
第1周——初识C语言从认识变量和常量开始
文章目录
codeblocks介绍——从HelloWorld开始
1、单选题:
#include <stdio.h>是
选项:
A: 编译预处理指令
B: 语句
C: 函数
D: 程序入口
答案: 【 编译预处理指令】
debug
1、单选题:
codeblocks中运行到下一步(next line)的快捷键是
选项:
A: F7
B: F5
C: F8
D: F11
答案: 【 F7】
变量在内存中所占的字节数
1、单选题:
C语言用sizeof计算变量在内存中的字节数,其中sizeof是()
选项:
A: 函数
B: 运算符
C: 标识符
D: 语句
答案: 【 运算符】
宏常量与const常量
1、单选题:
宏定义是()
选项:
A: 一条语句
B: 一种编译预处理指令
C: 一个标识符
D: 一个变量
答案: 【 一种编译预处理指令】
2、判断题:
const常量有数据类型。
选项:
A: 正确
B: 错误
答案: 【 正确】
第2周——数字间的那些事儿做点计算哈
不同类型数据的运算
1、判断题:
通常情况下,不同类型数据的运算结果的类型是取值范围较大的那种类型。
选项:
A: 正确
B: 错误
答案: 【 正确】
在定义变量的时候对变量进行初始化
1、单选题:
下列语句中错误的是()。
选项:
A: int a, b, c;a=b=c=0;
B: int a, b, c;a=0;b=0;c=0;
C: int a=0;int b=0;int c=0;
D: int a=b=c=0;
答案: 【 int a=b=c=0;】
强制类型转换
1、判断题:
强制类型转换运算符就是强制改变一个变量原有的数据类型。
选项:
A: 正确
B: 错误
答案: 【 错误】
运算符的优先级和结合性
1、判断题:
二元的算术运算符的结合性都是左结合。
选项:
A: 正确
B: 错误
答案: 【 正确】
第3周——从键盘中来到键盘中去开始输入和输出啦
%c格式转换说明
1、判断题:
用c格式符输入字符型数据的时候,为了避免将输入缓冲区中的空白字符(空格、回车换行符、Tab键)作为有效字符读入,可以在%c前面加一个空格。
选项:
A: 正确
B: 错误
答案: 【 正确】
单个字符的输入输出
1、判断题:
单个字符既可以以c格式符也可以以d格式符输出,前者是输出这个字符,后者是输出这个字符的ASCII码值。
选项:
A: 正确
B: 错误
答案: 【 正确】
格式字符
1、判断题:
在调用printf函数输出数据时,当数据的实际位宽大于printf函数中的指定位宽时,将按照数据的实际位宽输出数据。
选项:
A: 正确
B: 错误
答案: 【 正确】
第4周——无处不在的抉择
判断ch是英文字母大写或者小写
1、判断题:
下面判断ch是大写或者小写英文字母的表达式是否正确?ch >= 'A' && ch <= 'Z' || ch >= 'a' && ch <= 'z'
选项:
A: 正确
B: 错误
答案: 【 正确】
条件运算符
1、单选题:
下列关于if-else语句的说法中哪个是正确的。
选项:
A: else总是和离它最近的if配对
B: else总是和前面离它最近的且还未和其他else匹配的在同一语句块内同一层次的if配对
C: else总是和前面离它最近的且位于花括号内的if配对
D: else可以和它前面的尚未与其他else匹配的任何一个if配对
答案: 【 else总是和前面离它最近的且还未和其他else匹配的在同一语句块内同一层次的if配对】
2、判断题:
条件运算符是C语言中唯一的一个三元运算符.
选项:
A: 正确
B: 错误
答案: 【 正确】
浮点数的表数精度
1、单选题:
下列说法错误的是()。
选项:
A: 浮点数并非真正意义上的实数,只是其在某种范围内的近似。
B: 浮点数能精确表示的数字位数取决于这种类型的浮点数的有效数字位数。
C: 使用更多的位来存储阶码,将会扩大浮点数的表数精度。
D: 受浮点数表数精度的限制,因此对于浮点数不能直接比较其是否相等,应该比较其是否近似相等。
答案: 【 使用更多的位来存储阶码,将会扩大浮点数的表数精度。】
程序测试
1、单选题:
下列说法错误的是()。
选项:
A: 软件测试的目的就是证明程序的正确性,即给定特定的输入,通过运行被测程序,检查程序的输出是否与预期结果一致,进而验证程序的正确性。
B: 白盒测试就是在完全了解程序的结构和处理过程的情况下,按照程序内部的逻辑测试程序,检验程序中的每条逻辑路径是否都能按预定要求正确工作。黑盒测试就是把系统看成一个黑盒子,不考虑程序内部的逻辑结构和处理过程,只根据需求规格说明书的要求,设计测试用例,检查程序的功能是否符合它的功能说明。
C: 在选择测试用例时,不仅要选取合理的输入数据,还要选取一些不合理的输入数据,以及某些极端的边界点或临界点等,对程序进行测试
D: 由于修复了旧的bug的同时,往往又会产生新的bug,因此往往还需要对所有出现过的bug重新测试一遍,看其是否会重新出现,并给确认代码修改后没有引入新的bug,即修改代码后需要进行回归测试。
答案: 【 软件测试的目的就是证明程序的正确性,即给定特定的输入,通过运行被测程序,检查程序的输出是否与预期结果一致,进而验证程序的正确性。】
赋值中的自动类型转换
1、单选题:
在赋值操作中,当赋值表达式左侧的变量的类型与右侧的表达式的类型不一致的时候,下面说法正确的是()。
选项:
A: 在赋值操作中,当赋值运算符左侧的变量的类型与右侧的表达式的类型不一致的时候,会发生自动类型转换,赋值表达式的结果类型是赋值运算符左侧变量的类型。
B: 在赋值操作中,当赋值运算符左侧的变量的类型与右侧的表达式的类型不一致的时候,赋值表达式的结果类型是赋值运算符右侧表达式的类型。
C: 在赋值操作中,只要赋值运算符左侧的变量的类型与右侧的表达式的类型不一致,就会发生数值溢出。
D: 在赋值操作中,当赋值运算符左侧的变量的类型与右侧的表达式的类型不一致的时候,要么发生数值溢出,要么发生数值精度的损失。
答案: 【 在赋值操作中,当赋值运算符左侧的变量的类型与右侧的表达式的类型不一致的时候,会发生自动类型转换,赋值表达式的结果类型是赋值运算符左侧变量的类型。】
第5周——周而复始的循环之道
嵌套循环
1、单选题:
下列说法错误的是( )。
选项:
A: 执行嵌套循环时是先执行内层循环,后执行外层循环。
B: 嵌套循环的内层和外层循环的循环控制变量不能同名。
C: 嵌套循环的循环次数等于外层循环的循环次数与内层循环的循环次数之积。
D: 如果一个循环的循环体中又完整地包含了另一个循环,则称为嵌套循环。
答案: 【 执行嵌套循环时是先执行内层循环,后执行外层循环。】
流程的转移控制
1、单选题:
下面程序段中的break语句是转移到哪里去执行()。for(...)
{
for(...)
{
switch(...)
{
case 1: ...
break;
case 2:...
...
}
A: //code
}
B: //code
}
C: //code
选项:
A: 转到标号A所在的语句行与执行
B: 转到标号B所在的语句行与执行
C: 转到标号C所在的语句行与执行
D: 不进行流程转移,而是继续执行break后面的语句
答案: 【 转到标号A所在的语句行与执行】
程序调试
1、单选题:
下列说法错误的是()。
选项:
A: 程序测试的目的就是验证程序的正确性。
B: 程序中常见的错误有三种:编译错误,链接错误,以及运行时错误。
C: 编译错误通常是由语法错误造成的。
D: 运行时错误是指在程序运行时发生的错误,运行时错误有两种:一种是导致程序的运行结果与预期的不一致,另一种是导致程序无法正常运行。
答案: 【 程序测试的目的就是验证程序的正确性。】
逗号运算符
1、单选题:
下列说法错误的是()。
选项:
A: 逗号运算符也称为顺序求值运算符,由逗号运算符构成的表达式称为逗号表达式。
B: 多数情况下,我们并不使用整个逗号表达式的值,主要用它来顺序求得到各个子表达式的值。
C: 逗号表达式主要用在循环语句中同时对多个变量赋初值等。
D: 在逗号表达式中,其第一个表达式的值就是整个逗号表达式的值。
答案: 【 在逗号表达式中,其第一个表达式的值就是整个逗号表达式的值。】
随机数的生成
1、单选题:
下列说法错误的是()。
选项:
A: 函数rand()用于生成一个[0,RAND_MAX]间的随机数,RAND_MAX是不大于双字节整数的最大值32767的宏常量。使用函数rand()必须在程序开头加上这样一条编译预处理指令:#include <stdio.h>
B: magic = rand()%100 + 1用于生成[1,100]之间的随机数。
C: 事实上,函数rand()产生的都是伪随机数。
D: 函数srand()用于为rand()设置随机数种子,使rand()产生的随机数“随机化”。
答案: 【 函数rand()用于生成一个[0,RAND_MAX]间的随机数,RAND_MAX是不大于双字节整数的最大值32767的宏常量。使用函数rand()必须在程序开头加上这样一条编译预处理指令:#include <stdio.h>】
第6周——函数分工与合作的艺术
函数原型
1、单选题:
下列说法错误的是()。
选项:
A: 当函数原型与函数定义中的形参类型不一致时,编译器一般都会指出参数类型不匹配的编译错误。因此,写上函数原型有助于编译器对函数参数进行类型匹配检查。
B: 函数声明是一条语句,不包括函数体。
C: 无论何种情况,只要把用户自定义的所有函数都放在main函数的前面,就可以不用写函数原型了。
D: 函数调用时,要求实参与形参的数量相等,它们的类型也要匹配,匹配的原则与变量赋值的原则一致。当函数调用时的实参与函数定义中的形参的类型不匹配时,有的编译器会发出警告,提示有可能出现数据信息丢失,而有的编译器则不会发出警告。
答案: 【 无论何种情况,只要把用户自定义的所有函数都放在main函数的前面,就可以不用写函数原型了。】
函数名的命名
1、多选题:
下面所列举的函数名正确且具有良好风格的是()
选项:
A: 2_abcd()
B: GetNumber()
C: change_directory()
D: chushihua@()
答案: 【 GetNumber() ;
change_directory() 】
函数封装与程序的健壮性
1、单选题:
下列说法错误的是()。
选项:
A: 我们常将程序具有遇到不正确使用或非法数据输入时仍能保护自己避免出错的能力称为程序的健壮性。
B: 在函数的入口处增加对函数参数合法性的检查以及对函数调用是否成功的检查,是一种常用的增强程序健壮性的方法。
C: 对于一个封装好的函数,外界对函数的影响仅限于入口参数,函数对外界的影响仅限于函数的返回值和数组、指针形参 。
D: 编译器给出的警告信息无关紧要,因此可以忽略。
答案: 【 编译器给出的警告信息无关紧要,因此可以忽略。】
函数的参数和返回值
1、单选题:
下列说法中错误的是()。
选项:
A: 函数中的return语句可以有多个,但是多个return语句并不表示函数可以用return返回多个值,用return返回的函数值只能有一个。
B: 在C语言中,只有当实参与其对应的形参同名时,才共占同一个存储单元,此时形参值的变化会影响到实参的值。
C: 形参也是局部变量,只能在函数体内访问。
D: 在C语言中,实参与其对应的形参各占独立的存储单元,函数调用时的参数传递就是把实参的值复制一份给形参,即由实参向形参进行单向传值,因此形参值的变化不影响实参的值。
答案: 【 在C语言中,只有当实参与其对应的形参同名时,才共占同一个存储单元,此时形参值的变化会影响到实参的值。】
断言
1、单选题:
下列说发错误的是()。
选项:
A: assert()其实是一个在<assert.h>中定义的宏,用来验证“不应该”发生的情况是否的确不会发生。
B: assert()的功能就是验证assert后括号内表达式值的真假,当该表达式的值为真时,它什么也不做。反之,则立即终止程序的执行,并报告错误,但是不会对错误采取其他处理措施。
C: 在使用assert()时,必须在源文件中用编译预处理指令包含头文件<assert.h>。
D: 断言不仅可以用于调试程序,还可以作为程序的功能,检查有可能发生的程序错误。
答案: 【 断言不仅可以用于调试程序,还可以作为程序的功能,检查有可能发生的程序错误。】
断言的使用场合
1、多选题:
在下列哪些情况下适合使用断言?
选项:
A: 检查程序中的各种假设的正确性。
B: 证实或测试某种不可能发生的状况确实不会发生。
C: 捕捉不应该或者不可能发生的非法情况。
D: 捕捉程序中有可能出现的错误。
答案: 【 检查程序中的各种假设的正确性。;
证实或测试某种不可能发生的状况确实不会发生。;
捕捉不应该或者不可能发生的非法情况。】
第7周——盗梦空间的逻辑探寻递归的奥秘
全局变量的副作用
1、判断题:
全局变量破坏了函数的封装性,不能实现信息隐藏,依赖全局变量的函数很难在其他程序中复用,对于使用全局变量的程序维护也比较困难,因此建议尽量不用全局变量。
选项:
A: 正确
B: 错误
答案: 【 正确】
函数的嵌套调用和递归调用
1、单选题:
下列说法错误的是()
选项:
A: 函数既可以嵌套定义,也可以嵌套调用。
B: 函数直接或间接调用自己,称为递归调用。
C: 一个递归算法必须包含一般条件和基本条件两个基本要素。
D: 基本条件是一个能控制递归过程结束的条件,是递归的出口,它本身不再使用递归的方式来定义。一般条件定义了递归关系,控制递归调用向着基本条件的方向转化。
答案: 【 函数既可以嵌套定义,也可以嵌套调用。】
变量的作用域
1、单选题:
下列说法错误的是()。
选项:
A: 变量的作用域是指变量的作用范围,即在程序中可以被读写访问的区域,它取决于变量被定义的位置。
B: 局部变量与全局变量同名时,全局变量隐藏局部变量,即全局变量起作用,局部变量不起作用。
C: 形参也是局部变量,形参变量和实参变量的作用域是不同的,因此形参变量和实参变量同名时,二者互不干扰。
D: 只要同名的变量出现在不同的作用域内,二者互不干扰,编译器有能力区分不同作用域中的同名变量
答案: 【 局部变量与全局变量同名时,全局变量隐藏局部变量,即全局变量起作用,局部变量不起作用。】
变量的存储类型与变量的作用域
1、单选题:
下列说法错误的是()。
选项:
A: 变量的作用域决定了变量可以被访问的范围,而变量的存储类型决定了变量的生存期。
B: 静态变量和全局变量都是在静态存储区中分配内存的,而自动变量是在动态存储区中分配内存的。
C: 用extern声明变量为外部变量的时候,编译器是对其分配内存的。
D: 静态局部变量和静态全局变量的生存期是相同的,但二者的作用域是不同的,而静态局部变量和自动变量的作用域都是局部的,但二者的生存期是不同的。
答案: 【 用extern声明变量为外部变量的时候,编译器是对其分配内存的。】
尾递归
1、判断题:
当递归调用是整个函数体中最后执行的语句且它的返回值不属于任何表达式的一部分(即在回归阶段不需要任何计算)时,这种递归调用就是尾递归。
选项:
A: 正确
B: 错误
答案: 【 正确】
递归的数学基础
1、判断题:
数学归纳法是递归的数学基础。
选项:
A: 正确
B: 错误
答案: 【 正确】
递归算法的执行过程
1、判断题:
递归算法的执行过程可分为递推和回归两个阶段。在递推阶段,必须要有终止递归的情况。当满足递归终止条件时,即获得最简单情况的解以后,开始进入回归阶段,即递归返回阶段。
选项:
A: 正确
B: 错误
答案: 【 正确】
第8周——一堆数据来了你准备好了吗
二分查找算法的基本思想
1、判断题:
二分查找算法就是先将表的中间位置记录的关键字与查找关键字相比较,如果两者相等,则查找成功,否则将表分成前、后两个子表,根据比较结果,决定查找前一子表还是后一子表。
选项:
A: 正确
B: 错误
答案: 【 正确】
数组做函数参数
1、单选题:
下列说法错误的是()。
选项:
A: 简单变量做函数参数时,是将实参的值传给形参,实参和形参在内存中占用不同的存储单元,因此形参值的改变不会影响实参。
B: 数组做函数参数时,是将实参数组的首地址传给形参,形参数组和实参数组在内存中共享相同的存储单元,因此对形参数组元素值的修改也就相当于是对实参数组元素值的修改。
C: 在声明函数的二维数组形参时,可省略数组第二维的长度,但不能省略数组第一维的长度。
D: 在声明函数的一维数组形参时,通常不指定数组的大小,而用另一个形参来指定数组的大小。
答案: 【 在声明函数的二维数组形参时,可省略数组第二维的长度,但不能省略数组第一维的长度。】
数组的定义和初始化
1、单选题:
下列说法错误的是()。
选项:
A: C语言中的二维数组在内存中是按列存储的。
B: 在C语言中,数组的下标都是从0开始的。
C: 在C语言中,不带下标的数组名代表数组的首地址,即第一个元素在内存中的地址。
D: 不能使用变量定义数组的大小,但是在访问数组元素时在下标中可以使用变量或表达式。
答案: 【 C语言中的二维数组在内存中是按列存储的。】
线性查找与二分查找
1、判断题:
线性查找算法不要求数据表是已排好序的,而二分查找算法要求数据表是已排好序的。
选项:
A: 正确
B: 错误
答案: 【 正确】
计算最大值
1、判断题:
在计算一组数据的最大值之前,通常假设这组数据中的第一个数为最大,即用这组数据中的第一个数为存放最大值的变量初始化。
选项:
A: 正确
B: 错误
答案: 【 正确】
第9周——指针C语言世界中所向披靡的金箍棒”
函数指针的定义和初始化
1、判断题:
int (*f)(int, int);这条语句定义的是一个函数指针f,它可以指向一个有两个整型形参和整型返回值的函数。假设int Fun(int a, int b);那么必须用f=Fun();对f进行初始化,让其指向函数Fun()。
选项:
A: 正确
B: 错误
答案: 【 错误】
指针变量做函数参数与普通变量做函数参数的区别
1、判断题:
普通变量做函数参数,是将实参值的一个副本传给形参,而指针变量做函数参数是将变量的地址值传给形参,因此你想要修改哪个变量的值,将这个变量的地址传给指针形参就好了。
选项:
A: 正确
B: 错误
答案: 【 正确】
指针的概念
1、单选题:
下列说法错误的是()。
选项:
A: 指针变量占用的内存单元字节数就是它所指向的变量所占用的内存单元字节数。
B: 指针变量指向的数据的类型,称为指针的基类型。指针变量只能指向同一基类型的变量。
C: 指针变量使用之前必须初始化,如果你不知道该用什么值对其进行初始化的话,那么就先用NULL对其进行初始化。使用未初始化的结果将是无法预知的。
D: 通过间接寻址运算符引用指针变量指向的变量的值,称为指针的解引用。
答案: 【 指针变量占用的内存单元字节数就是它所指向的变量所占用的内存单元字节数。】
第9周测验
1、单选题:
下面程序的功能是输入某年某月某日,计算并输出它是这一年的第几天。程序的运行结果如下:Please enter year, month, day:2014,12,29↙yearDay = 363按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
int DayofYear(int year, int month, int day);
int dayTab[2][13] = {{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31}};
int main()
{
int year, month, day, yearDay;
printf("Please enter year, month, day:");
scanf("%d,%d,%d", &year, &month, &day);
yearDay = DayofYear(year, month, day);
printf("yearDay = %dn", yearDay);
return 0;
}
/* 函数功能:对给定的某年某月某日,计算并返回它是这一年的第几天 */
int DayofYear(int year, int month, int day)
{
int i, leap;
leap = ________________________; /* 若year为闰年,即leap值为1,则用第1行元素dayTab[1][i]计算;
否则leap值为0,用第0行dayTab[0][i]计算 */
for (i=1; _______; i++)
{
day = ________________;
}
return day; /* 返回计算出的day的值 */
}
选项:
A: 第18行: ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)第20: i<month第22行: day + dayTab[leap][i]
B: 第18行: ((year % 4 == 0) || (year %
