麓饶袒舜男界抒牟叉溶起界钨
第1讲 了解计算机的工作原理 课后测验:了解计算机的工作原理
1、 通常所说的主机是指:
A:CPU
B:计算机机箱
C:显示器
D:CPU、内存和外存
答案: CPU、内存和外存
2、 所谓“裸机”是指:
A:单片机
B:单板机
C:不装备任何软件的计算机
D:只装备操作系统的计算机
答案: 不装备任何软件的计算机
3、 CPU包含
A:运算器和控制器
B:运算器和存储器
C:控制器和存储器
D:运算器、控制器、存储器、输入设备和输出设备
答案: 运算器和控制器
4、 在计算机系统中,一个字节的二进制位数为
A:16
B:8
C:32
D:由 CPU的型号决定
答案: 8
5、 在计算机中,一个字长的二进制位数是
A:8
B:16
C:32
D:随CPU的型号而定
答案: 随CPU的型号而定
6、 软件与程序的区别是∶
A:程序价格便宜、软件价格昂贵;
B:程序是用户自己编写的,而软件是由厂家提供的;
C:程序是用高级语言编写的,而软件是由机器语言编写的;
D:软件是程序以及开发、使用和维护所需要的所有文档的总称,而程序只是软件的一部分。
答案: 软件是程序以及开发、使用和维护所需要的所有文档的总称,而程序只是软件的一部分。
7、 计算机软件可以分为:
A:操作系统和应用软件
B:系统软件和应用软件
C:常用软件和不常用软件
D:操作系统和网络软件
答案: 系统软件和应用软件
8、 应用软件是指∶
A:所有能够使用的软件
B:能被各应用单位共同使用的某种软件
C:所有微机上都应使用的基本软件
D:专门为某一应用目的而编制的软件
答案: 专门为某一应用目的而编制的软件
9、 切断计算机电源后,下列存储器中的信息会丢失的是:
A:RAM
B:ROM
C:硬盘
D:U盘
答案: RAM
10、 课程学习过程中需要使用到编程工具CodeBlocks,它属于______。
A:系统软件
B:应用软件
C:必需软件
D:支撑软件
答案: 应用软件
11、 计算机由运算器、_、存储器、输入设备、输出设备五部分组成。
答案: 控制器
12、 计算机中执行各种算术和逻辑运算操作的部件是_。
答案: 运算器
13、 计算机中控制执行指令,协调各部件运行,为各部件提供控制信号的部件是______。
答案: 控制器
14、 显示器和打印机都属于计算机体系结构中______部件的范畴。
答案: 输出设备
15、 计算机的指令包括_和操作数两部分。
答案: 操作码
第2讲 信息在计算机中的表示 课后测验:信息在计算机中的表示
1、 用8位无符号二进制数能表示的最大十进制数为
A:127
B:128
C:255
D:256
答案: 255
2、 十进制数127转换成二进制数是
A:11111111
B:01111111
C:10000000
D:11111110
答案: 01111111
3、 下列数值最大的是
A:1100000B
B:144O
C: 64H
D:101
答案: 101
4、 若[x]原=10000011,则[x]补=
A: 10000011
B:11111100
C:01111100
D:11111101
答案: 11111101
5、 如果X为负数,由[X]补求[-X]补是将
A:[X]补各值保持不变
B:[X]补符号位变反,其它各位不变
C:[X]补除符号位外,各位变反,末位加1
D:[X]补连同符号位一起各位变反,末位加1
答案: [X]补连同符号位一起各位变反,末位加1
6、 ASCII码(含扩展)可以用一个字节表示,则可以表示的ASCII码值个数为
A:1024
B: 256
C:128
D:80
答案: 256
7、 英文小写字母d的ASCII码为100,英文大写字母D的ASCII码为
A:50
B:66
C:52
D:68
答案: 68
8、 在计算机系统中,存储一个汉字的国标码所需要的字节数为
A:1
B:2
C:3
D:4
答案: 2
9、 已知某数X的原码为10110100B,它的反码是
A:10110100B
B:00110100B
C:11001011B
D:11001100B
答案: 11001011B
10、 用8位二进制描述数据,计算(-83)补+(-80)补的结果是
A:01011101B
B:溢出
C:101011101B
D:001011101B
答案: 溢出
第3讲 编程的理论基础 课后测验:编程的理论基础
1、 下列计算机语言中,CPU能直接识别的是
A:自然语言
B:高级语言
C:汇编语言
D:机器语言
答案: 机器语言
2、 可移植性最好的计算机语言是∶
A:机器语言
B:汇编语言
C:高级语言
D:自然语言
答案: 高级语言
3、 要把高级语言编写的源程序转换为目标程序,需要使用
A:编辑程序
B:驱动程序
C:诊断程序
D:编译程序和解释程序
答案: 编译程序和解释程序
4、 计算机语言有许多种,其中与硬件直接相关的是
A:机器语言
B:网络语言
C:高级语言
D:自然语言
答案: 机器语言
5、 计算机算法指的是
A:计算方法
B:排序方法
C:解决问题的有限运算序列
D:调度方法
答案: 解决问题的有限运算序列
6、 计算机算法必须具备输入、输出和( )等5个特性。
A:可行性、可移植性和可扩充性
B:可行性、确定性和有穷性
C: 确定性、有穷性和稳定性
D:易读性、稳定性和安全性
答案: 可行性、确定性和有穷性
7、 结构化程序设计所规定的三种基本控制结构是( )。
A: 输入、处理、输出
B:树形、网形、环形
C:顺序、选择、循环
D:主程序、子程序、函数
答案: 顺序、选择、循环
8、 下面选项中不属于面向对象程序设计特征的是( )。
A:继承性
B:多态性
C: 类比性
D:封装性
答案: 类比性
9、 结构化程序设计的主要特征是
A:封装和数据隐藏
B: 继承和重用
C: 数据和处理数据的过程分离
D:把数据和处理数据的过程看成一个整体
答案: 数据和处理数据的过程分离
10、 面向对象程序设计将数据与( )放在一起,作为一个互相依存、不可分割的整体来处理。
A:信息
B: 数据抽象
C:数据隐藏
D:对数据的操作
答案: 对数据的操作
第4讲 编写第一个C程序 课后测验:编写第一个C程序
1、 以下叙述中正确的是
A:C语言比其他语言高级
B: C语言可以不用编译就能被计算机识别执行
C:C语言以接近英语国家的自然语言和数学语言作为语言的表达形式
D:C语言出现的最晚,具有其他语言的一切优点
答案: C语言以接近英语国家的自然语言和数学语言作为语言的表达形式
2、 以下叙述中正确的是( )。
A: C程序中注释部分可以出现在程序中任意合适的地方
B:花括号”{“和”}”只能作为函数体的定界符
C:构成C程序的基本单位是函数,所有函数名都可以由用户命名
D:分号是C语句之间的分隔符,不是语句的一部分
答案: C程序中注释部分可以出现在程序中任意合适的地方
3、 C程序是由 ( )组成的。
A:过程
B: 函数
C: 子程序
D: 主程序和子程序
答案: 函数
4、 一个C程序的基本结构是( )。
A:一个主函数和若干个非主函数
B:若干个主函数和若干个非主函数
C: 一个主函数和最多一个非主函数
D:若干个主函数和最多一个非主函数
答案: 一个主函数和若干个非主函数
5、 用C语言编写的源程序文件( )。
A:可立即执行
B: 是一个源程序
C:经过编译连接,正确后可以执行
D:经过编译解释才能执行
答案: 经过编译连接,正确后可以执行
6、 以下四个程序中,完全正确的是( )。
A: #include int main();{ /programming/ printf(“programming!”); return 0;}
B:#include int main(){ /programming/ printf(“programming!”); return 0;}
C:include void main(){ /programming/ printf(“programming!”); return 0;}
D: #include int mian(){ /programming/ printf(“programming!”); return 0;}
答案: #include int main(){ /programming/ printf(“programming!”); return 0;}
7、 C程序编译时,程序中的注释部分( )。
A:参加编译,并会出现在目标程序中
B:参加编译,但不会出现在目标程序中
C: 不参加编译,但会出现在目标程序中
D:不参加编译,也不会出现在目标程序中
答案: 不参加编译,也不会出现在目标程序中
8、 以下叙述中错误的是( )。
A:C语言源程序经编译后生成后缀为obj的目标程序
B:C程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件
C:用C语言编写的程序称为源程序,它以ASCII代码形式存放在一个文本文件中
D:C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令
答案: C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令
9、 编写C++程序一般需经过的几个步骤依次是( )
A:编译、编辑、连接、调试
B: 编辑、编译、连接、调试
C: 编译、调试、编辑、连接
D: 编辑、调试、编译、连接
答案: 编辑、编译、连接、调试
10、 在C语言中,main函数默认返回一个( )类型的值。
A: int
B: float
C: char
D:void
答案: int
11、 以下不属于C语言语法允许使用的字符集合的是( )
A:汉字
B:大小写字母
C:数字
D:空白符
答案: 汉字
12、 以下属于C语言语法保留字的是( )
A:return
B:Int
C:value
D:main
答案: return
13、 以下属于合法的C语言标识符的是( )
A:Main
B:short
C:npu-2015
D:8849
答案: Main
14、 C语言源程序文件的后缀名为( )
A:.c
B:.h
C:.cpp
D:.res
答案: .c
15、 以下说法正确的是( )
A:大型C程序可以包含多个源程序文件,并且每个源程序文件可以单独编译。
B:一个C程序只能包括一个源程序文件。
C:C程序中main函数必须放在其他函数之前。
D:C程序的函数可以不书写函数头,而只编写包括声明和执行语句的函数体。
答案: 大型C程序可以包含多个源程序文件,并且每个源程序文件可以单独编译。
第5讲 将简单数据引入C程序中 课后测验:将简单数据引入C程序中
1、 ( )是C语言的数据类型说明保留字。
A:Float
B:signed
C:integer
D:Char
答案: signed
2、 类型修饰符unsigned不能修饰( )。
A:char
B:int
C:long int
D:float
答案: float
3、 下列选项中,均是合法的C语言整型常量的是( )。
A:160-0xffff0011
B:–0xcdf01a0xe
C:–01986,0120668
D:–0x48a2e50x
答案: 160-0xffff0011
4、 下列选项中,均是合法的C语言实型常量的是( )。
A:+1e+15e-9.403e2
B:-.6012e-4-8e5
C:123e1.2e-.4+2e-1
D:–e38e-45.e-0
答案: -.6012e-4-8e5
5、 设char a=’\70′;则变量a( )。
A:包含1个字符
B:包含2个字符
C:包含3个字符
D:说明不合法
答案: 包含1个字符
6、 ( )是非法的C语言转义字符。
A:’\b’
B:’\0xf’
C:’\037′
D:”’
答案: ‘\0xf’
7、 以下选项中( )不是C语言常量。
A:e-2
B:012
C:”a”
D:”
答案: e-2
8、 以下不是C语言支持的存储类别的是( )。
A:auto
B:static
C:dynamic
D:register
答案: dynamic
9、 以下叙述中错误的是( )。
A:C语言的标识符允许使用保留字。
B:C语言的标识符应尽量做到“见其名知其意”。
C:C语言的标识符必须以字母或下划线开头。
D:C语言的标识符中,大、小写字母代表不同标识。
答案: C语言的标识符允许使用保留字。
10、 在以下各组标识符中,合法的C语言标识符是( )。
A:B01Int
B:table_1t*.1
C:0_tW10
D:k%point
答案: B01Int
11、 下面关于符号常量的说法正确的是()
A:符号常量是以标识符形式出现的常量,一经定义,它所代表的常量值在其作用域内不能改变。
B:可以将圆周率这个常量值定位为符号常量,定义方法为:#define PI=3.1415926
C:符号常量名可以不遵循C语言的标识符命名规则。
D:使用符号常量不仅便于程序的调试和维护,还能大大提高程序的运行速度。
答案: 符号常量是以标识符形式出现的常量,一经定义,它所代表的常量值在其作用域内不能改变。
12、 已定义ch为字符型变量,以下赋值表达式中错误的是( )。
A:ch=”
B:ch=62+3
C:ch=NULL
D:ch=’\xaa’
答案: ch=”
第6讲 数值数据的运算与处理 课后测验:数值数据的运算和处理
1、 在C语言中,要求参加运算的数必须是整数的运算符是( )。
A:/
B:*
C:%
D:=
答案: %
2、 表达式0x13 ^ 0x17的值是( )
A:0x04
B:0x13
C:0xe8
D:0x17
答案: 0x04
3、 表达式3.6-5/2+1.2+5%2的值是( )。
A:4.3
B:4.8
C:3.3
D:3.8
答案: 3.8
4、 在位运算中,操作数每右移一位,其结果相当于( )。
A:操作数乘以2
B:操作数除以2
C:操作数除以4
D:操作数乘以4
答案: 操作数除以2
5、 若有定义char c1=92,c2=92;则以下表达式中值为零的是( )。
A:~c2
B:c1&c2
C:c1^c2
D:c1|c2
答案: c1^c2
6、 设x,y,u,v均为浮点型,与数学公式
不等价的C语言表达式是( )。
A:xy/uv
B:xy/u/v
C:xy/(uv)
D:x/(uv)y
答案: xy/u*v
7、 若变量a、b已经正确定义并赋值,符合C语言语法的表达式是( )。
A:
B:aa+b
C:a×a+b
D:a•a+b
答案: aa+b
8、 以下不能正确计算数学公式
值的C语言表达式是( )。
A:1/3sin(1/2)sin(1/2)
B:sin(0.5)sin(0.5)/3
C:pow(sin(0.5),2)/3
D:1/3.0pow(sin(1.0/2),2)
答案: 1/3sin(1/2)sin(1/2)
9、 若有定义int x=2,y=3;则x & y的值是( )。
A:0
B:2
C:3
D:5
答案: 2
第7讲 逻辑数据的运算与处理 课后测验:逻辑数据的运算和处理
1、 关于C程序关系运算、逻辑运算后得到的逻辑值的表述中,正确的是( )。
A:假为0,真为随机的一个非0值
B:假为0,真为1
C:假为-1,真为1
D:假为0,真为不确定的值
答案: 假为0,真为1
2、 下列运算符中,优先级从高到低依次为( )。
A:&& ! ||
B:|| && !
C:&& || !
D:! && ||
答案: ! && ||
3、 设int i=10;表达式30-i<=i<=9的值是( )。
A:0
B:1
C:9
D:20
答案: 1
4、 表达式!x等效于( )。
A:x==1
B:x==0
C:x!=1
D:x!=0
答案: x==0
5、 已有定义int x=3,y=4,z=5;则表达式!(x+y)+z-1 && y+z/2的值是( )。
A:6
B:2
C:1
D:0
答案: 1
6、 以下运算符优先级最低的是( )。
A:&&
B:&
C:||
D:|
答案: ||
7、 若x和y为整型数,以下表达式中不能正确表示数学关系
的是( )。
A:abs(x-y)<10
B:x-y>-10 && x-y<10
C:!(x-y)<-10 || !(y-x)>10
D:(x-y)*(x-y)<100
答案: !(x-y)<-10 || !(y-x)>10
第8讲 赋值和类型转换 课后测验:赋值与类型转换
1、 下列运算符中,优先级最高的是( )。
A:( )
B:%
C:++
D:,
答案: ( )
2、 设int a=0,b=0,m=0,n=0;则执行(m=a==b)||(n=b==a)后m和n的值是( )。
A:0,0
B:0,1
C:1,0
D:1,1
答案: 1,0
3、 若有int i=5,j=4,k=6;float f;执行语句f=(i<j&&j<k)?i:(j<k)?j:k;后f的值为( )。=”” =”” a:4.0=”” b:5.0=”” c:6.0=”” d:7.0=”” 答案:=”” <span=””>4.0</j&&j<k)?i:(j<k)?j:k;后f的值为(>
4、 以下选项中非法的表达式是( )。
A:0<=x<100
B:i=j==0
C:(char)(x<100)
D:x+1=x+1
答案: x+1=x+1
5、 设 int m1=5,m2=3;表达式m1>m2 ? (m1=1):(m2=-1)运算后,m1和m2的值分别是()。
A:1和3
B:1和-1
C:5和-1
D:5和3
答案: 1和3
6、 以下叙述中错误的是( )。
A:表达式a&=b等价于a=a&b
B:表达式a|=b等价于a=a|b
C:表达式a∧=b等价于a=a∧b
D:表达式a!=b等价于a=a!b
答案: 表达式a!=b等价于a=a!b
7、 假设某表达式中包含int、long、unsigned、char类型的数据,则表达式最后的运算结果是( )类型。
A:int
B:long
C:unsigned
D:char
答案: long
8、 若int k=7,x=12;则值为3的表达式是( )。
A:x%=(k%=5)
B:x%=(k-k%5)
C:x%=k-k%5
D:(x%=k)-(k%=5)
答案: (x%=k)-(k%=5)
9、 对于语句:f=(3.0,4.0,5.0),(2.0,1.0,0.0);的判断中,( )是正确的。
A:语法错误
B:f为5.0
C:f为0.0
D:f为2.0
答案: f为5.0
10、 设变量n为float类型,m为int型,则以下( )表达式能实现将n中的数值保留小数点后两位,第三位进行四舍五入运算。
A:n=(n100+0.5)/100.0
B:m=n100+0.5,n=m/100.0
C:n=n100+0.5/100.0
D:n=(n/100+0.5)100.0
答案: m=n*100+0.5,n=m/100.0
11、 假定有变量定义:int k=6,x=12;则能使x、k值为5、6的表达式是( )。
A:x%=++k%10
B:x%=k+k%5
C:x-=++k%5
D:x-=k++%5
答案: x%=k+k%5
12、 若变量a为int类型,且其值为3,则执行表达式a+=a-=a*a后,a的值是( )。
A:-3
B:9
C:-12
D:6
答案: -12
13、 sizeof(char)的值是( )。
A:1
B:2
C:非法
D:8
答案: 1
14、 若变量已正确定义并赋值,下面符合C语言语法的表达式是( )。
A:a:=b+1
B:a=b=c+2
C:int(18.5%3)
D:a=a+7=c+b
答案: a=b=c+2
15、 判断年份y是否为闰年的表达式为()
A:y%4==0
B:y%4==0 && y%100!=0
C:(y%4==0&&y%100!=0)||(y%400==0)
D:(y%4==0)||(y%400==0&&y%100!=0)
答案: (y%4==0&&y%100!=0)||(y%400==0)
16、 判断整型变量n是否是负的偶数的C语言表达式为( )
A:n<0 &&n%2==0
B:n<0 ||n%2==0
C:n%-2==0
D:n<0&&n/2==0
答案: n<0 &&n%2==0
17、 已知x、y分别为a、b、c中的最大值和最小值,下面表达式能求出a、b、c中中间值的是( )
A:(x==a||y==a) ? a : (x==b||y==b) ? b : c
B:(a+b+c)-(x+y)
C:(abc)/x/y
D:(a+b+c)/3
答案: (a+b+c)-(x+y)
18、 若int x=0123,则表达式(5+(int)(x))&(~2)的值是__。
答案: 88
19、 表达式((4|1)&3)的值是__。
答案: 1
20、 表达式10<<3+1的值是_____。
答案: 160
21、 已知A=7.5,B=2,C=3.6,表达式A>B && C>A || AB的值是_____。
答案: 0
22、 设int a=-3,b=7,c=-1;则执行(a==0)&&(a=a%b-3
第9讲 编写程序语句 课后测验:编写程序语句
1、 以下叙述中错误的是( )。
A:C语言的简单语句必须以分号结束
B:空语句出现在任何位置都不会影响程序运行
C:复合语句在语法上被看作一条语句
D:赋值表达式末尾加分号就构成赋值语句
答案: 空语句出现在任何位置都不会影响程序运行
2、 C语言的语句类型不包括()
A:简单语句
B:控制语句
C:复合语句
D:预处理命令
答案: 预处理命令
3、 以下不是C语言简单语句的是( )
A:表达式语句
B:函数调用语句
C:声明语句
D:跳转语句
答案: 跳转语句
4、 下面是C语言合法的复合语句的是( )
A:{ int t,a=4,b=7; t=a,a=b,b=t};
B:{ double v1,r=5; v1=43.14rrr/3; { double v2,h=12; v2=3.14rrh; } printf(“%lf,%lf”,v1,v2);}
C:{ #define PI=3.14; double v1,r=3; v1=PIrr;}
D:{ double s,a=5,b=10,h=8 s=(a+b)h/2.0 printf(“area=%lf”,s)}
答案: { double v1,r=5; v1=43.14rrr/3; { double v2,h=12; v2=3.14rr*h; } printf(“%lf,%lf”,v1,v2);}
5、 以下关于C语言注释的说法正确的是()
A:可以采用/……/的形式书写多行注释,其中的注释内容可以是任何字符。
B://注释表示从//开始直到本行末尾的所有字符均是注释内容。
C:C语言的注释将参与编译器编译,并形成指令。
D:写C语言程序时必须书写注释,否则会对程序的功能造成影响。
答案: //注释表示从//开始直到本行末尾的所有字符均是注释内容。
6、 关于C语言语句书写格式的说法错误的是()
A:C语言程序必须一行一个语句。
B:C语言允许一行书写多个语句。
C:C语言允许将一个语句分成多行书写。
D:编写C程序时,建议使用空格或Tab来做合理的间隔、缩进或对齐,使得程序形成逻辑相关的块状结构。
答案: C语言程序必须一行一个语句。
7、 使用getchar和putchar函数进行单个字符输入输出时,必须使用预处理命令”#include”包括()文件。
A:stdio.h
B:stdlib.h
C:math.h
D:string.h
答案: stdio.h
8、 以下关于使用C语言实现输入输出的说法错误的是()
A:C语言自身具备输入输出语句,可以直接实现输入输出功能。
B:输入指从外部输入设备(如键盘、鼠标等)向计算机输入数据。
C:输出指将数据从计算机送到外部输出设备(如打印机、显示器等)。
D:C语言输入输出操作本质上是函数调用语句。
答案: C语言自身具备输入输出语句,可以直接实现输入输出功能。
9、 要使用putchar函数实现向显示器输出字符’A’,则可以使用()。
A:putchar(A)
B:putchar(“A”)
C:putchar(65)
D:putchar(‘\65’)
答案: putchar(65)
10、 有以下程序段: char c1=’1′,c2=’2′;c1=getchar(); c2=getchar();putchar(c1); putchar(c2);运行时从键盘上输入:a↙ 后,以下叙述中正确的是( )。
A:变量c1被赋予字符a,c2被赋予回车符
B:程序将等待用户输入第2个字符
C:变量c1被赋予字符a,c2中仍是原有字符’2′
D:变量c1被赋予字符a,c2中将无确定值
答案: 变量c1被赋予字符a,c2被赋予回车符
第10讲 编程实现简单数据的输出 课后测验:编程实现简单数据的输出
1、 以下叙述中正确的是( )。
A:调用printf函数时,必须至少有一个输出项。
B:使用printf函数时,必须在之前包含头文件stdio.h
C:在C语言中,整数可以以多种进制。例如十二进制、八进制或十六进制的形式输出。
D:调用printf函数时,可以省略格式控制串。
答案: 使用printf函数时,必须在之前包含头文件stdio.h
2、 下面程序段执行后的输出结果是()。注:└┘符号代表空格int a=123;printf(“[%4d],[%-4d],[%04d]”,a,a,a);
A: [123],[└┘123],[1230]
B: [123└┘ ],[└┘123],[0123]
C: [└┘123],[123└┘],[0123]
D: [└┘123],[123└┘],[173]
答案: [└┘123],[123└┘],[0123]
3、 设有int a=123;执行语句printf(“%d”,5,a);的输出结果是()。
A:123
B:5123
C:└┘└┘123
D: 编译错误
答案: └┘└┘123
4、 下面程序段执行后的输出结果是( )。 float x=-1023.012;printf(“%8.3f,”,x);printf(“%10.3f”,x);
A:1023.012,-1023.012
B:–1023.012,-1023.012
C:1023.012, └┘-1023.012
D: –1023.012, └┘-1023.012
答案: –1023.012, └┘-1023.012
5、 下面程序段执行后的输出结果是( )。 int x=13,y=5;printf(“%d”,x%=(y/=2));
A:3
B:2
C:1
D:0
答案: 1
6、 下面程序段执行后的输出结果是( )。 int x=’f’;printf(“%c”,’A’+(x-‘a’+1));
A:G
B:H
C:I
D:J
答案: G
7、 设int a=1234;执行语句printf(“%2d”,a);后的输出结果是( )。
A:12
B:34
C:1234
D:出错
答案: 1234
8、 设int a=7,b=8;执行语句printf(“%d,%d”,(a+b,a),(b,a+b));后的输出结果是( )。
A:出错
B:8,15
C:15,7
D: 7,15
答案: 7,15
9、 执行语句printf(“a\bre’hi’y\\bou”);后的输出结果是( )。
A:abre’hi’ybou
B:a\bre’hi’y\\bou
C:re’hi’you
D:abre’hi’y\bou
答案: re’hi’you
10、 下面程序段执行后的输出结果是( )。 int x=102,y=012;printf(“%2d,%2d”,x,y);
A:10,01
B:02,12
C:102,10
D:102,12
答案: 102,10
11、 下面程序段执行后的输出结果是( )。 int m=0256,n=256;printf(“%o└┘%o”,m,n);
A:0256└┘0400
B:0256└┘256
C:256└┘400
D: 400└┘400
答案: 256└┘400
12、 下面程序段执行后的输出结果是( )。 int a; char c=10; float f=100.0; double x;a=f/=c*=(x=6.5);printf(“%d└┘%d└┘%3.1f└┘%3.1f”,a,c,f,x);
A:1└┘65└┘1└┘6.5
B:1└┘65└┘1.5└┘6.5
C:1└┘65└┘1.0└┘6.5
D:2└┘65└┘1.5└┘6.5
答案: 1└┘65└┘1.5└┘6.5
13、 设 char c1=’A’,执行语句printf(“%%”,c1);的输出结果是()。
A:执行异常
B:A
C:%%
D:%
答案: %
14、 下面程序段执行后的输出结果是( )。 char a=’1′,b=’2′;printf(“%c,”,b++); printf(“%d”,b-a);
A:3,2
B: 2,2
C:50,2
D:2,50
答案: 2,2
第11讲 编程实现简单数据的输入 课后测验:编程实现简单数据的输入
1、 以下叙述中错误的是( )。
A:调用scanf函数时,每个输入项必须为地址形式。
B: 使用scanf函数时,必须在之前包含头文件stdio.h
C:在C语言中,整数可以以多种进制例如十进制、八进制或十六进制的形式输入。
D:调用scanf函数时,如果输入项个数比给定的格式说明符多,将会出现编译错误。
答案: 调用scanf函数时,如果输入项个数比给定的格式说明符多,将会出现编译错误。
2、 关于scanf函数的格式控制字符串,()是错误的说法。
A:格式说明必须包括%和type字符,其他域可以省略。
B: type类型字符可以描述应输入的信息类型,可以支持整数的任意进制输入。
C: *禁止字符是指从输入数据中读取类型相当的数据,但不将它保存在输入项中。
D:宽度说明控制从输入数据中读出的最大字符数,有可能实际执行时读入的字符个数少于宽度说明的个数。
答案: type类型字符可以描述应输入的信息类型,可以支持整数的任意进制输入。
3、 已知如下定义和输入语句,若要求a1,a2,c1,c2的值分别为10,20,A和B,当从第一列开始输入数据时,正确的数据输入方式是( )。 int a1,a2; char c1,c2;scanf(“%d%d”,&a1,&a2);scanf(“%c%c”,&c1,&c2);
A:1020AB↙
B:10└┘20↙ AB↙
C:10└┘20└┘AB↙
D:10└┘20AB↙
答案: 10└┘20AB↙
4、 有输入语句:scanf(“a=%d,b=%d,c=%d”,&a,&b,&c);为使变量a的值为1,b的值为3,c的值为2,正确的数据输入方式是( )。
A:132↙
B: 1,3,2↙
C:a=1└┘b=3└┘c=2↙
D:a=1,b=3,c=2↙
答案: a=1,b=3,c=2↙
5、 若定义x为double型变量,则能正确输入x值的语句是( )。
A:scanf(“%f”,x);
B: scanf(“%f”,&x);
C:scanf(“%lf”,&x);
D: scanf(“%5.1f”,&x);
答案: scanf(“%lf”,&x);
6、 下面程序段运行时从键盘上输入:12345678↙,其输出结果是( )。 int a , b ;scanf(“%2d%*2d%3d”,&a,&b);printf(“%d”,a+b);
A:46
B:579
C: 5690
D:出错
答案: 579
第12讲 编程实现选择分支 课后测验:编程实现选择分支
1、 C语言对嵌套if语句的规定是else总是与( )配对。
A:之前最近的尚未配对的if
B:第一个if
C:缩进位置相同的if
D: 最前面的if
答案: 之前最近的尚未配对的if
2、 关于goto语句的说法错误的是()
A:goto语句的作用是使程序无条件跳转到别的位置。
B: goto语句的语法形式为:goto 标号;
C:goto语句可以跳转到程序中的任意位置,不受函数界限限制。
D: goto语句无条件的跳转破坏了程序的结构化,应该少用或不用。
答案: goto语句可以跳转到程序中的任意位置,不受函数界限限制。
3、 “if(表达式) ”中的“表达式”( )。
A:只能是逻辑表达式
B:只能是关系表达式
C:只能是算术表达式
D:逻辑表达式、关系表达式和算术表达式都可以
答案: 逻辑表达式、关系表达式和算术表达式都可以
4、 对于下面程序,( )是正确的判断。#include int main(){ int x,y; scanf(“%d%d”,&x,&y); if (x>y) x=y;y=x; else x++;y++; printf(“%d,%d”,x,y); return 0;}
A:有语法错误,不能通过编译
B:若输入3和4,则输出4和5
C:若输入4和3,则输出3和4
D:若输入4和3,则输出4和5
答案: 有语法错误,不能通过编译
5、 对于下面程序段,( )是正确的判断。 int x=0,y=0,z=0;if (x=y+z) printf(““);else printf(“###”);
A:有语法错误,不能通过编译
B:输出:
C:可以编译,但不能通过连接,所以不能运行
D: 输出:###
答案: 输出:###
6、 若int i=10;执行下面程序段后,变量i的值是( )。 switch (i) { case 9: i+=1 ; case 10: i+=1 ; case 11: i+=1 ; default: i+=1 ;}
A:10
B:11
C:12
D:13
答案: 13
7、 若int i=1;执行下面程序段后,变量i的值是( )。 switch (i) { case ‘1’: i+=1 ; case ‘2’: i+=1 ; case ‘3’: i+=1 ; default : i+=1 ;}
A:2
B:3
C:4
D:5
答案: 2
8、 若有定义:float w; int a,b;则合法的switch语句是( )。
A:switch (w) { case 1.0:printf(““); case 2.0:printf(““); }
B:switch (a); { case 1:printf(“*”); case 2:printf(““); }
C:switch (b) { case 1:printf(““); default:printf(“”); case 1+2:printf(““); }
D:switch (a+b); { case 1:printf(“*”); case 2:printf(““); default:printf(“”); }
答案: switch (b) { case 1:printf(““); default:printf(“”); case 1+2:printf(“*”); }
9、 无条件转移语句的一般形式是:goto语句标号;其中的语句标号可以是( )。
A:整型数
B:标识符
C:保留字
D: 实型数
答案: 标识符
10、 关于if语句的说法正确的是()。
A:作为if语句条件的表达式只能是关系表达式或者逻辑表达f式。
B: if-else语句的语法格式为 if (表达式1)语句1;else (表达式2) 语句2;
C: if语句中的子语句可以是简单语句或复合语句,但不能是控制语句。
D:if语句完全可以实现条件运算符的功能。
答案: if语句完全可以实现条件运算符的功能。
11、 关于switch语句的说法正确的是()。
A:switch语句的每个case分支中只能设置一个语句。
B:switch语句中各个case分支顺序没有规定,但是default分支必须处在所有case分支之后,否则会影响程序执行效果。
C:switch语句中default分支是可选的。
D:switch语句后边的圆括号可以省略。
答案: switch语句中default分支是可选的。
12、 switch语句语法中的case分支必须是常量表达式且互不相同,值不能为()类型。
A:整型
B:字符型
C:枚举型
D:浮点型
答案: 浮点型
13、 switch语句可以用if语句完全代替。
A:正确
B:错误
答案: 正确
14、 switch语句的case表达式中可以包括变量。
A:正确
B:错误
答案: 错误
15、 条件表达式可以取代if语句。
A:正确
B:错误
答案: 错误
16、 switch语句中case分支和default分支的个数都是任意的。
A:正确
B:错误
答案: 错误
17、 switch中多个case分支可以执行相同的程序段。
A:正确
B:错误
答案: 正确
18、 内层break语句可以终止嵌套的switch,使最外层的switch结束。
A:正确
B:错误
答案: 错误
19、 switch语句的case分支可以使用复合语句、多个语句序列。
A:正确
B:错误
答案: 正确
20、 switch语句的表达式与case表达式的类型必须一致。
A:正确
B:错误
答案: 错误
第13讲 编程实现嵌套的选择分支 课后测验:编程实现嵌套的选择分支
1、 若a=1,b=3,c=5,d=4,则执行下面程序段后x的值是( )。 if (a<b) if=”” (c<d)=”” x=”1″ ;=”” else=”” (a<c)=”” (b<d)=”” ;else=”” =”” a:1=”” b:2=”” c:3=”” d:4=”” 答案:=”” <span=””>2</b)>
2、 执行语句序列 int x; scanf(“%d”,&x);if(x>250) printf(“X”); if(x<250) printf(“Y”); else printf(“X”); 时,不可能出现的情况是()。
A:显示:X
B:显示:Y
C:显示:XY
D:显示:XX
答案: 显示:XY
3、 与y=(x>0 ? 1: x<0 ? -1:0);的功能相同的if语句是( )。
A:y=0;if (x>=0) if (x>0) y=1; else y=-1;
B:if (x) if (x>0) y=1; else if (x<0) y=-1; else y=0;
C:y=-1;if (x) if (x>0) y=1; else if (x==0) y=0; else y=-1;
D:if (x>0) y=1; else if (x<0) y=-1; else y=0;
答案: if (x>0) y=1; else if (x<0) y=-1; else y=0;
4、 下面程序段表示以下( )式子。 if(a<b) {=”” if(c=”=d)” x=”1;}else” =”” a:<img=”” src=”http://nos.netease.com/edu-image/AFF26B92DFAE64744552184BFD405A38-1444706367996?imageView&thumbnail=520×520&quality=100″></b)>
B:
C:
D:
答案:
5、 下面程序执行后的输出结果是( )。#include int main(){ int x=1,y=0,a=0,b=0; switch(x) { case 1: switch (y) { case 0 : a++ ; break ; case 1 : b++ ; break ; } case 2: a++; b++; break ; case 3: a++ ; b++ ; } printf(“a=%d,b=%d”,a,b); return 0;}
A:a=1,b=0
B:a=2,b=1
C:a=1,b=1
D:a=2,b=2
答案: a=2,b=1
6、 #include int main(){ int n=0,m=1,x=2; if(!n) x-=1; if(m) x-=2; if(x) x-=3; printf(“%d”,x); return 0;}的运行结果是( )。
A:1
B:0
C:2
D:-4
答案: -4
第14讲 编程实现循环 课后测验:编程实现循环
1、 有以下程序段: int k=2;while (k=0) { printf(“%d”,k) ; k– ; }则下面描述中正确的是( )。
A:while循环执行10次
B:循环是无限循环
C:循环体语句一次也不执行
D:循环体语句执行一次
答案: 循环体语句一次也不执行
2、 下面程序段执行后的输出结果是( )。int a=1,b=2,c=3,t; while (a<b<c){ t=”a;a=b;b=t;c–;” }=”” printf(“%d,%d,%d”,a,b,c);=”” =”” a:1,2,0=”” b:2,1,0=”” c:1,2,1=”” d:2,1,1=”” 答案:=”” <span=””>1,2,1</b<c){>
3、 下面程序段执行后的输出结果是( )。#include int main(){ int x=0,y=5,z=3; while(z–>0&&++x<5) y=y-1; printf(“%d,%d,%d”,x,y,z); return 0;}
A:3,2,0
B: 3,2,-1
C:4,3,-1
D:5,-2,-5
答案: 3,2,-1
4、 下面程序的功能是从键盘输入一组字符,从中统计大写字母和小写字母的个数,选择( )填入到 中。#include int main(){ int m=0,n=0; char c; while (( )!=”) { if (c>=’A’ && c<=’Z’) m++ ; if (c>=’a’ && c<=’z’) n++ ; } return 0;}
A:c=getchar()
B:getchar()
C:c==getchar()
D:scanf(“%c”,&c)
答案: c=getchar()
5、 语句while (!E){……}; 中的表达式!E等价于( )。
A:E==0
B: E!=1
C:E!=0
D:E==1
答案: E==0
6、 以下程序段( )。 x=-1;do{ x=x*x;}while (!x);
A:是死循环
B: 循环执行2次
C:循环执行1次
D:有语法错误
答案: 循环执行1次
7、 以下叙述正确的是( )。
A:do-while语句构成的循环不能用其它语句构成的循环来代替
B:do-while语句构成的循环只能用break语句退出
C:用do-while语句构成的循环,在while后的表达式为非零时结束循环
D:用do-while语句构成的循环,在while后的表达式为零时结束循环
答案: 用do-while语句构成的循环,在while后的表达式为零时结束循环
8、 有以下程序段: int n=0,p;do { scanf(“%d”,&p); n++; } while (p!=12345 && n<3);此处do—while循环的结束条件是( )。
A:p的值不等于12345并且n的值小于3
B:p的值等于12345并且n的值大于等于3
C:p的值不等于12345或者n的值小于3
D:p的值等于12345或者n的值大于等于3
答案: p的值等于12345或者n的值大于等于3
9、 已知:int i=5,下列do-while循环语句的循环次数为( )。do{ printf(“%d”,i–); i–;}while(i!=0);
A:0
B:1
C:5
D:无限
答案: 无限
10、 下面程序段( )。x=3;do { y=x–; if(!y) { printf(“%d”,x); continue; }printf(”#”);}while(x>=1 && x<=2);
A:将输出##
B:将输出###
C:是死循环
D:含有不合法的控制表达式.
答案: 将输出###
11、 下面程序执行后的输出结果是( )。#include int main(){ char c=’A’; int k=0; do{ switch(c++){ case’A’:k++; break; case ‘B’:k–; case ‘C’:k+=2; break; case ‘D’:k%=2; continue; case ‘E’:k*=10; break; default:k/=3; } k++; }while (c<‘G’); printf(“k=%d”,k); return 0;}
A:k=3
B:k=4
C: k=2
D:k=0
答案: k=4
12、 下面for循环语句( )。 int i,k;for (i=0,k=-1; k=1 ; i++,k++ ) printf(“***”);
A:判断循环结束的条件非法
B:是无限循环
C:只循环一次
D:一次也不循环
答案: 是无限循环
13、 下面程序执行后的输出结果是( )。#include int main(){ int x=9; for(;x>0;x–){ if(x%3==0){ printf(“%d”,–x); continue; }} return 0;}
A:741
B: 852
C:963
D:875421
答案: 852
14、 下面程序段的循环次数是( )。 for (i=2; i==0; ) printf(“%d”,i–);
A:无限次
B:0次
C:1次
D:2次
答案: 0次
15、 下面程序执行后的输出结果是( )。#include int main(){ int i,sum=0; for(i=1;i<6;i++) sum+=i; printf(“%d”,sum); return 0;}
A:不确定
B:0
C:14
D:15
答案: 15
16、 若有以下程序段,其中s、a、b、c均已定义为整型变量,且a、c均已赋值(c大于0) s=a;for(b=1;b<=c;b++) s=s+1;则与上述程序段功能等价的赋值语句是( )。
A:s=a+b;
B:s=a+c;
C: s=s+c;
D:s=b+c;
答案: s=a+c;
17、 下面程序执行后的输出结果是( )。#include int main(){ int a=0,i; for(i=1;i<5;i++) switch(i) { case 0: case 3:a+=2; case 1: case 2:a+=3; default:a+=5; } printf(“%d”,a); return 0;}
A:31
B:13
C:10
D:20
答案: 31
18、 若变量已正确定义,不能完成求5!的程序段是( )。
A:for(i=1,p=1;i<=5;i++) p=i;
B:for(i=1;i<=5;i++){ p=1; p=i;}
C: i=1;p=1;while(i<=5){p=i; i++;}
D:i=1;p=1;do{p=i; i++; }while(i<=5);
答案: for(i=1;i<=5;i++){ p=1; p*=i;}
19、 下面程序段中,( )与其他三个程序段的作用不同。
A:k=1;s=0;while (1) { s+=k ; k=k+1; if (k>100) break ;}printf(“%d”,s);
B:k=1;s=0;Repeat : s+=k ; if (++k<=100) goto Repeat; printf(“%d”,s);
C:int k,s=0;for (k=1;k<=100;s+=++k);printf(“%d”,s);
D:k=1;s=0;do s+=k;while (++k<=100);printf(“%d”,s);
答案: int k,s=0;for (k=1;k<=100;s+=++k);printf(“%d”,s);
20、 以下不是死循环的程序段是( )。
A:int i=100;while (1) { i=i%100+1 ; if (i>100) break ;}
B:for ( ; ; ) ;
C:int k=0;do { ++k ; } while (k>=0);
D:int s=36;while (s) ; –s ;
答案: int k=0;do { ++k ; } while (k>=0);
21、 以下是死循环的程序段是( )。
A:for (i=1;;) { if (i++%2==0) continue ;if (i++%3==0) break ;}
B:for (i=1;;) if (++i<10) continue ;
C:i=32767;do { if (i<0) break ; } while (++i) ;
D:i=1 ;while (i–);
答案: for (i=1;;) if (++i<10) continue ;
22、 do-while允许从外部转到循环体内。
A:正确
B:错误
答案: 错误
23、 do-while循环中,根据情况可以省略while。
A:正确
B:错误
答案: 错误
24、 for循环中三个表达式可以任意省略,while、do-while的表达式也是如此。
A:正确
B:错误
答案: 正确
25、 continue语句只能用于三个循环语句中。
A:正确
B:错误
答案: 正确
26、 for循环的循环体语句中,可以包含多条语句,但必须用大括号括起来。
A:正确
B:错误
答案: 正确
27、 写出下面程序执行后的运行结果。#include int main(){ int i,k=19; while (i=k-1) { k-=3 ; if (k%5==0) { i++ ; continue ; } else if (k<5) break ; i++; } printf(“i=%d,k=%d”,i,k); return 0;}#include int main(){ int i,k=19; while (i=k-1) { k-=3 ; if (k%5==0) { i++ ; continue ; } else if (k<5) break ; i++; } printf(“i=%d,k=%d”,i,k); return 0;}#include int main(){ int i,k=19; while (i=k-1) { k-=3 ; if (k%5==0) { i++ ; continue ; } else if (k<5) break ; i++; } printf(“i=%d,k=%d”,i,k); return 0;}#include int main(){ int i,k=19; while (i=k-1) { k-=3 ; if (k%5==0) { i++ ; continue ; } else if (k<5) break ; i++; } printf(“i=%d,k=%d”,i,k); return
答案: i=6,k=4
28、 下面程序运行时从键盘上输入:420↙,写出程序的运行结果。#include int main(){ char c; while ((c=getchar())!=”) switch(c-‘0’) { case 0: case 1:putchar(c+2); case 2:putchar(c+3);break; case 3:putchar(c+4); default:putchar(c+1);break; } return 0;}
答案: 5523
29、 写出下面程序执行后的运行结果。#include int main(){ int k=1,n=263 ; do { k*=n%10 ; n/=10 ; } while (n) ; printf(“%d”,k); return 0;}
答案: 36
30、 写出下面程序执行后的运行结果。#include int main(){ int i=5 ; do { switch (i%10) { case 4: i– ; break ; case 6: i– ; continue ; } i– ; i– ; printf(“%d”,i); } while (i>0); return 0;}
答案: 31-1
31、 写出下面程序执行后的运行结果。#include int main(){ int x,i ; for (i=1 ; i<=100 ; i++) { x=i; if (++x%2==0) if (++x%3==0) if (++x%7==0) printf(“%d,”,x); } return 0;}
答案: 28,70,
32、 写出下面程序执行后的运行结果。#include int main(){ int i; for(i=0; i<5; i++) switch(i%2) { case 0: printf(“1”); break; case 1: printf(“0”); break; } return 0;}
答案: 10101
33、 下面程序按公式
求和并输出结果。请填空使程序完整、正确。#include int main(){ int k ; double s=0; for (k=1 ; k<=100 ; k++) s+=k ; for (k=1 ; k<=50 ; k++) s+=______; for (k=1 ; k<=10 ; k++) s+=1.0/k; printf(“sum=%f”,s); return 0; }
答案: k*k
第15讲 循环的终止、加快和嵌套 课后测验:循环的终止、加快和嵌套
1、 下面关于循环语句的描述中,( )是错误的。
A:循环体内可以包含有循环语句
B:循环体内必须同时出现break语句和continue语句
C:循环体内可以出现选择语句
D:循环体内可以是空语句
答案: 循环体内必须同时出现break语句和continue语句
2、 C语言的跳转语句中,对于break和continue说法正确的是( )
A:break语句只应用与循环体中
B:continue语句只应用于循环体中
C:break是无条件跳转语句,continue不是
D:break和continue的跳转范围不够明确,容易产生问题
答案: continue语句只应用于循环体中
3、 下面程序段运行时从键盘上输入:2473↙,其输出结果是( )。#include int main(){ int c; while ((c=getchar())!=”) switch (c-‘2’) { case 0: case 1: putchar(c+4); case 2: putchar(c+4); break ; case 3: putchar(c+3); default: putchar(c+2); break ; } printf(“”); return 0;}
A:668977
B: 668966
C:66778777
D:6688766
答案: 668977
4、 下面程序段中while循环的循环次数是( )。 int i=0;while (i<10) { if (i<1) continue; if (i==5) break; i++;}
A:1
B:10
C:6
D: 死循环,不能确定次数
答案: 死循环,不能确定次数
5、 下面程序执行后的输出结果是( )。#include int main(){ int i=0,s=0; for (;;) { if(i==3||i==5) continue; if (i==6) break; i++; s+=i; }; printf(“%d”,s); return 0;}#include int main(){ int i=0,s=0; for (;;) { if(i==3||i==5) continue; if (i==6) break; i++; s+=i; }; printf(“%d”,s); return 0;}#include int main(){ int i=0,s=0; for (;;) { if(i==3||i==5) continue; if (i==6) break; i++; s+=i; }; printf(“%d”,s); return 0;}#include int main(){ int i=0,s=0; for (;;) { if(i==3||i==5) continue; if (i==6) break; i++; s+=i; }; printf(“%d”,s); return 0;}
A:10
B:13
C:21
D:死循环
答案: 死循环
6、 下面程序执行后的输出结果是( )。#include int main(){ int k=0,m=0,i,j; for (i=0; i<2; i++) { for (j=0; j<3; j++) k++ ; k-=j ; } m = i+j ; printf(“k=%d,m=%d”,k,m); return 0;}
A:k=0,m=3
B: k=0,m=5
C:k=1,m=3
D:k=1,m=5
答案: k=0,m=5
第16讲 编程实现枚举算法 课后测验:编程实现枚举算法
1、 下面程序的功能是计算两个整数的( )。#include int main(){ int m,n,w; scanf(“%d,%d”,&m,&n); while (n) { w=m; m=n; n=w%n; } printf(“%d”,m); return 0; }
A:最大公约数
B:最小公倍数
C:m和n值交换
D:m和n的乘积
答案: 最大公约数
2、 下面程序的功能是计算s=1+12+123+1234+12345+……+123456789,下划线处应填写( )。#include int main(){ int t=0,s=0,i; for( i=1; i<=9; i++) { t=______; s=s+t; } printf(“s=%d”,s); return 0;}
A:10t+i
B:t+i
C:10i+t
D:s10+i
答案: 10t+i
3、 一个三位整数(100~999),若各位数的立方和等于该数自身,则称其为“水仙花数”(如:153=13+53+33),下面程序的功能是找出所有的这种数,下划线处应填写()。#include int main() { int n, a, b, c; /n、a、b和c分别为三位数及其个位、十位和百位/ scanf(“%d”,&n); for(c=1;c<=9;c++) for (b=0;b<=9;b++) for( 1 ;a++) { n= 2 ; if(aaa+bbb+ccc== 3 ) printf(“%d”,n); } return 0; }
A:1 a=0;a<9 2 c100+b10+a 3 n
B:1 a=1;a<9 2 c100+b10+a 3 n
C:1 a=0;a<9 2 a100+b10+c 3 n
D:1 a=b+1;a<9 2 c100+b10+a 3 n
答案: 1 a=0;a<9 2 c100+b10+a 3 n
4、 下面程序段的功能是计算1000!的末尾有多少个零。请填空使程序完整、正确。提示:只要偶数乘5就会产生0,因为1000!中有一半是偶数,所以求1000!的末尾有多少个零,其方法就是统计1000!中有多少5的因子。例如10有1个5的因子,25有2个5的因子,100有2个5的因子等。#include int main(){ int i,k,m; for (k=0,i=5; i<=1000; i+=5) { m = i ; while (___) { k++; m=m/5 ; } } return 0;}#include int main(){ int i,k,m; for (k=0,i=5; i<=1000; i+=5) { m = i ; while (1 ) { k++; m=m/5 ; } } return 0;}
答案: m%5==0
5、 写出下面程序执行后的运行结果。#include int main(){ int i=0,a=0; while(i<40) { for(;;) { if((i%10)==0) break; else i–; } i+=11; a+=i; } printf(“%d”,a); return 0;}
答案: 104
第17讲 调用函数-返回与参数传递 课后测验: 调用函数-返回与参数传递
1、 以下关于函数的叙述中正确的是( )。
A:每个函数都可以被其它函数调用(包括main函数)
B:每个函数都可以被单独编译
C:每个函数都可以单独运行
D:在一个函数内部可以定义另一个函数
答案: 每个函数都可以被单独编译
2、 对于函数,正确的说法是( )。
A:必须有形式参数
B:必须有返回信息
C:必须有返回语句
D:必须包含函数体
答案: 必须包含函数体
3、 以下叙述中正确的是( )。
A:函数的定义可以嵌套,但函数的调用不可以嵌套
B:函数的定义不可以嵌套,但函数的调用可以嵌套
C:函数的定义和函数的调用均不可以嵌套
D:函数的定义和函数的调用均可以嵌套
答案: 函数的定义不可以嵌套,但函数的调用可以嵌套
4、 以下叙述中正确的是( )。
A:C语言编译时不检查语法
B:C语言的子程序有过程和函数两种
C:C语言的函数可以嵌套定义
D:C语言所有函数本质上都是外部函数
答案: C语言所有函数本质上都是外部函数
5、 以下函数定义正确的是( )。
A:double f(int x,int y){ z=x+y ; return z ;}
B:double f(int x,y){ double z=x+y ; return z ; }
C:double f(x,y){ int x, y ; double z ; z=x+y; return z ; }
D:double f(int x,int y){ double z ; z = x+y ; return z ; }
答案: double f(int x,int y){ double z ; z = x+y ; return z ; }
6、 若调用一个函数int f(),且此函数中没有return语句,则正确的说法是( )。
A:该函数没有返回值
B:该函数返回一个系统默认值
C:该函数返回一个确定的值
D:该函数返回一个不确定的值
答案: 该函数返回一个不确定的值
7、 若定义函数:fun(int a,float b) { return a+b;}则该函数的返回类型是( )。
A:void
B:int
C:float
D:不确定
答案: int
8、 C语言规定,函数返回值的类型是由( )决定的。
A:return语句中的表达式类型
B:调用该函数时的主调函数
C:调用该函数时由系统临时
D:在定义函数时所指定的函数类型
答案: 在定义函数时所指定的函数类型
9、 对于函数返回类型,不正确的说法是( )。
A:可以是int类型
B:可以是数组类型
C:可以是char类型
D:可以是void类型
答案: 可以是数组类型
10、 若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是( )。
A:函数调用可以作为独立的语句存在
B:函数调用可以作为一个函数的实参
C:函数调用可以出现在表达式中
D:函数调用可以作为一个函数的形参
答案: 函数调用可以作为一个函数的形参
11、 基本类型变量做实参时,它和对应的形参之间的数据传递方式是( )。
A:值传递
B:地址传递
C:由实参传给形参,再由形参传给实参
D:由函数定义指定传递方式
答案: 值传递
12、 以下叙述中错误的是( )。
A:实参可以是常量、变量或表达式
B:形参可以是常量、变量或表达式
C:实参可以为任意类型
D:如果形参与实参的类型不一致,以形参类型为准
答案: 形参可以是常量、变量或表达式
13、 以下函数调用语句中,含有的实参个数是( )。 Fcalc(exp1,(exp3,exp4,exp5));
A:1
B:2
C:3
D:4
答案: 2
14、 在函数调用时,以下叙述中正确的是( )。
A:函数调用后必须带回返回值
B:实际参数和形式参数可以同名
C:函数间的数据传递不可以使用全局变量
D:主调函数和被调函数总是在同一个文件里
答案: 实际参数和形式参数可以同名
15、 下面程序执行后的输出结果是( )。#include void F(int x) { return (3xx); }int main(){ printf(“%d”,F(3+5)); return 0;}
A:192
B:29
C:25
D:编译出错
答案: 编译出错
16、 设函数f的定义形式为: void f(char ch, float x ) { …… }则以下对函数f的调用语句中,正确的是( )。
A:f(“abc”,3.0);
B:t=f(‘D’,16.5);
C:f(’65’,2.8);
D:f(32,32);
答案: f(32,32);
17、 C语言函数返回类型的默认定义类型是____(使用类型标识符描述)。
答案: int
18、 可以将被调函数中获得的值返回给主调函数的语句是____(使用C语言保留字描述)。
答案: return
19、 函数fun的功能是计算
double fun(double x,int n){ int i; double y=1; for(i=1;i<=n;i++) y=y*x; return y;}主函数中已经正确定义m,a,b变量并赋值,调用fun函数计算
: 的调用语句为 ______(注意保持原算式的各操作数和运算符顺序,不添加非必需的运算符)。
答案: m=fun(a,4)+fun(b,4)-fun(a+b,3);
20、 若函数定义为: int data() { float x=9.9; return(x);}则函数返回的值是____。
答案: 9
第18讲 调用函数-原型与声明 课后测验:调用函数-原型与声明
1、 若各选项中所用变量已正确定义,函数fun中通过return语句返回一个函数值,以下选项中错误的程序是( )。
A:int main(){…… x=fun(2,10); ……}float fun(int a,int b){……}
B:float fun(int a,int b){……}int main(){…… x=fun(i,j); ……}
C:float fun(int,int);int main(){…… x=fun(2,10); ……}float fun(int a,int b){……}
D:int main(){float fun(int i,int j);…… x=fun(i,j); ……}float fun(int a,int b){……}
答案: int main(){…… x=fun(2,10); ……}float fun(int a,int b){……}
2、 若程序中定义了以下函数:double f(double a,double b) { return (a+b); }并将其放在调用语句之后,则在调用之前应该对该函数进行函数原型说明,以下选项中错误的说明是( )。
A:double f(double a,b);
B:double f(double,double);
C:double f(double b,double A);
D:double f(double x,double y);
答案: double f(double a,b);
3、 关于函数原型声明,以下叙述中错误的是( )。
A:如果函数定义出现在函数调用之前,可以不必加函数原型声明
B:如果在所有函数定义之前,在函数外部已做了声明,则各个主调函数不必再做函数原型声明
C:函数在调用之前,一定要给出函数原型或函数定义,保证编译系统进行调用检查
D:标准库函数不需要函数原型声明
答案: 标准库函数不需要函数原型声明
4、 在C语言中,计算
正确的是( )。
A:x^y
B:pow(x,y)
C:x**y
D:power(x,y)
答案: pow(x,y)
5、 有以下程序:#include void f(int n);int main(){ void f(int n); f(5); return 0;}void f(int n){ printf(“%d”,n);}以下叙述中错误的是( )。
A:若只在主函数中对函数f进行说明,则只能在主函数中正确调用函数f
B:若在主函数前对函数f进行说明,则在主函数和其后的其它函数中都可以正确调用函数f
C:对于以上程序,编译时系统会提示出错信息:“提示对f函数重复说明”。
D:函数f无返回值,所以可用void将其类型定义为无值型
答案: 对于以上程序,编译时系统会提示出错信息:“提示对f函数重复说明”。
第19讲 调用函数-调用形式 课后测验:调用函数-调用形式
1、 下列哪个类型函数不适合声明为内联函数( )。
A:函数体语句较多
B:函数体语句较少
C:函数执行时间较短
D:函数调用比较频繁
答案: 函数体语句较多
2、 在( )情况下适宜采用inline定义内联函数。
A:函数体含有循环语句
B:函数体含有递归语句
C:需要加快程序的执行速度
D:函数代码多、不常调用
答案: 需要加快程序的执行速度
3、 在函数调用过程中,如果函数A调用了函数 B,函数B又调用了函数A,则( )。
A:称为函数的直接递归调用
B:称为函数的间接递归调用
C:称为函数的循环调用
D:C语言中不允许这样的调用
答案: 称为函数的间接递归调用
4、 下面程序执行后的输出结果是( )。#include char f(char x , char y){ if(x>y) return y; else return x;}int main(){ char a=’9′,b=’8′,c=’7′,d=’6′; printf(“%c”,f(f(a,b),f(c,d))); return 0;}
A:9
B:8
C:7
D:6
答案: 6
5、 有以下程序段:int fun1(double a) { return a*=a;}int fun2(double x,double y){ double a=0,b=0; a=fun1(x); b=fun1(y); return (int)(a+b);}且double w;执行语句w=fun2(1.1,2.0);后变量w的值是( )。
A:5.21
B:5
C:5.0
D:0.0
答案: 5.0
6、 下面程序执行后的输出结果是( )。#include void fun(int x, int y, int z){ z=xx+yy; }int main(){ int a=31; fun(5,2,a); printf(“%d”,a); return 0;}
A:0
B:29
C:31
D:无定值
答案: 31
7、 下面程序执行后的输出结果是( )。#include long fib(int n){ if(n>2) return (fib(n-1)+fib(n-2)); else return(2);}int main(){ printf(“%d”,fib(3)); return 0;}
A:2
B:4
C:6
D:8
答案: 4
8、 下面程序执行后的输出结果是( )。#include int f(int n){ if (n==1) return 1; return f(n-1)+1;}int main(){ int i,j=0; for(i=1;i<3;i++) j+=f(i); printf(“%d”,j); return 0;}
A:1
B:2
C:3
D:4
答案: 3
9、 设存在函数int max(int,int)返回两参数中较大值,若求22,59,70三者中最大值,下列表达式不正确的是( )。
A:int m = max(22,max(59,70));
B:int m = max(max(22,59),70);
C:int m = max(22,59,70);
D:int m = max(59,max(22,70));
答案: int m = max(22,59,70);
10、 对于以下递归函数f,调用f(4)的返回值是____。int f(int n) { if (n) return f(n-1)+n; else return n;}
A:无穷递归
B:4
C:10
D:14
答案: 10
第20讲 设计函数-函数间的数据传递(1) 课后测验:设计函数-函数间的数据传递(1)
1、 以下叙述中错误的是( )。
A:在不同函数中可以使用相同名字的变量
B:形式参数只在本函数范围内有定义
C:在函数内的复合语句中定义的变量在本函数范围内有定义
D:全局变量在函数内有同名变量定义时,在该函数范围内被屏蔽
答案: 在函数内的复合语句中定义的变量在本函数范围内有定义
2、 在某源程序文件中,若全局变量与局部变量同名,则( )。
A:视为同一个变量
B:变量作用域不确定
C:不允许
D:允许
答案: 允许
3、 如果在一个函数的复合语句中定义了一个变量,则该变量( )。
A:只在该复合语句中有效
B:在该函数中有定义
C:在本程序范围内有定义
D:为非法定义
答案: 只在该复合语句中有效
4、 下面程序执行后的输出结果是( )。#include int a=3;int main(){ int s=0; { int a=5; s+=a++; } s+=a++; printf(“%d”,s); return 0;}
A:7
B:8
C:10
D:11
答案: 8
5、 以下叙述中错误的是( )。
A:形参的存储单元是动态分配的
B:函数中的局部变量都是动态存储
C:全局变量都是静态存储
D:动态分配变量的存储空间在函数结束调用后就被释放了
答案: 函数中的局部变量都是动态存储
6、 以下叙述中错误的是( )。
A:全局变量、静态变量的初值是在编译时指定的
B:静态变量如果没有指定初值,则其初值是0
C:局部变量如果没有指定初值,则其初值不确定
D:函数中的静态变量在函数每次调用时,都会重新设置初值
答案: 函数中的静态变量在函数每次调用时,都会重新设置初值
7、 若函数中局部变量的值经函数调用后仍然保留,则该局部变量定义为( )。
A:自动变量
B:内部变量
C:外部变量
D:静态变量
答案: 静态变量
8、 若变量定义时未初始化,则其值不确定的是( )。
A:静态全局变量
B:局部变量
C:静态局部变量
D:全局变量
答案: 局部变量
9、 以下叙述中正确的是( )。
A:局部变量说明为static存储类型,其生存期将得到延长
B:全局变量说明为static存储类型,其作用域将被扩大
C:任何存储类型的变量在未赋初值时,其值都是不确定的
D:形参可以使用的存储类型说明符与局部变量完全相同
答案: 局部变量说明为static存储类型,其生存期将得到延长
10、 全局变量的存储类型可以定义为( )。
A:auto或static
B:extern或register
C:auto或extern
D:extern或static
答案: extern或static
11、 以下只有在使用时才为该类型变量分配内存的存储类型是( )。
A:auto和 static
B:auto和 register
C:register和 static
D:extern和 register
答案: auto和 register
12、 下面程序执行后的输出结果是( )。#include int f(){ static int i=0; int s=1; s+=i; i++; return s;}int main(){ int i,a=0; for(i=0;i<5;i++) a+=f(); printf(“%d”,a); return 0;}
A:20
B:24
C:25
D:15
答案: 15
13、 下面程序执行后的输出结果是( )。#include int a=2;int f(int n){ static int a=3; int t=0; if(n%2) { static int a=4; t+=a++; } else { static int a=5; t += a++; } return t+a++;}int main(){ int s=a, i; for(i=0; i<3; i++) s+=f(i); printf(“%d”, s); return 0;}
A:24
B:26
C:28
D:29
答案: 29
14、 凡在函数中未指定存储类别的局部变量,其默认的存储类别为( )。
A:auto
B:register
C:static
D:extern
答案: auto
15、 被调用函数执行结束时,此函数中定义的( )类型的变量不被释放。
A:auto
B:register
C:static
D:所有的存储类型
答案: static
第21讲 设计函数-函数间的数据传递(2) 课后测验:设计函数-函数间的数据传递(2)
1、 自动型局部变量分配在( )。
A:内存的数据区中
B:CPU的通用寄存器中
C:内存的程序区中
D:内存的堆栈区中
答案: 内存的堆栈区中
2、 用于存放程序执行的机器指令的内存段是( )。
A:栈
B:代码段
C:堆
D:未初始化的数据段
答案: 代码段
3、 程序在内存中的布局不包括( )。
A:栈
B:堆
C:代码段
D:寄存器
答案: 寄存器
4、 C程序中所有已经赋初值的全局变量和静态变量被存放在内存的()
A:已初始化的数据段
B:代码段
C:未初始化的数据段
D:栈
答案: 已初始化的数据段
5、 C语言中基本类型的常量保存在内存的( )
A:已初始化的数据段
B:代码段
C:未初始化的数据段
D:栈
答案: 代码段
6、 C程序中所有未赋初值的全局变量和静态变量被存放在内存的( )
A:已初始化的数据段
B:代码段
C:未初始化的数据段
D:栈
答案: 未初始化的数据段
7、 C程序中所有局部的非静态变量、临时变量以及函数形参被存放在内存的( )
A:堆
B:代码段
C:未初始化的数据段
D:栈
答案: 栈
8、 C程序中动态分配的存储空间位于内存的( )
A:堆
B:代码段
C:未初始化的数据段
D:栈
答案: 堆
9、 C源程序经过编译和连接后,成为二进制形式的可执行文件,称为程序映像。
A:正确
B:错误
答案: 正确
10、 进程即为运行程序时,由操作系统载入到计算机内存中的可执行文件。
A:正确
B:错误
答案: 正确
第22讲 设计函数-接口与实现分离 课后测验:设计函数-接口与实现分离
1、 对象初始化指创建对象时给它提供初始值。
A:正确
B:错误
答案: 正确
2、 C语言规定给对象设置的初始值可以是变量。
A:正确
B:错误
答案: 错误
3、 C语言规定未初始化的全局对象和静态局部对象其初值由0填充。
A:正确
B:错误
答案: 正确
4、 C语言规定未初始化的局部对象其初始值对于数值型来说为0。
A:正确
B:错误
答案: 错误
5、 C语言允许对对象进行多次定义,但需保证多次定义一致。
A:正确
B:错误
答案: 错误
6、 C语言中对一个对象进行多次声明是合法的,但要保证多次声明一致。
A:正确
B:错误
答案: 正确
7、 在一个项目的多个源程序文件中,只需要出现一次对所调用函数的声明即可支持项目全部源程序文件对该函数进行调用。
A:正确
B:错误
答案: 错误
8、 对象的存储空间可以通过对象声明获得。
A:正确
B:错误
答案: 错误
9、 可以在对象声明时对其进行初始化。
A:正确
B:错误
答案: 错误
10、 C语言支持将对象的定义和声明分离,以适应多文件的程序结构。
A:正确
B:错误
答案: 正确
第23讲 编写规模化程序 课后测验:编写规模化程序
1、 C语言支持在一个函数定义前加上( )修饰,将函数设置成内部函数。
A:auto
B:static
C:private
D:internal
答案: static
2、 如果在一个源文件中定义的函数,只能被本文件中的函数调用,而不能被同一程序其它文件中的函数调用,则说明这个函数为( )。
A:私有函数
B:内部函数
C:外部函数
D:库函数
答案: 内部函数
3、 支持在另一个文件中调用的函数其类型是( )。
A:私有函数
B:内部函数
C:外部函数
D:库函数
答案: 外部函数
4、 C语言编译器编译时的基本单位是( )。
A:函数
B:源文件
C:项目
D:语句
答案: 源文件
5、 C语言连接器的工作不包括( )。
A:检查全局函数或全局变量是否在不同文件中重复定义
B:检查全局范围内是否有相同名字的对象
C:检查在多个目标代码或库函数中是否存在全局函数和全局变量的定义
D:检查在多个目标代码或库函数中是否存在内部函数和局部变量的重复定义
答案: 检查在多个目标代码或库函数中是否存在内部函数和局部变量的重复定义
6、 C语言的头文件中不包括( )。
A:函数声明
B:全局性常量信息
C:宏定义
D:函数定义
答案: 函数定义
7、 C语言编译器的功能一般不包括( )。
A:预编译头文件
B:增量编译
C:编译缓存
D:规范代码风格
答案: 规范代码风格
第24讲 编程任务的自动化工具 课后测验:编程任务的自动化工具
1、 以下叙述中错误的是( )。
A:预处理命令行都必须以#开始
B:在程序中凡是以#开始的语句行都是预处理命令行
C:C程序在执行过程中对预处理命令行进行处理
D:预处理命令行可以出现在C程序中任意一行上
答案: C程序在执行过程中对预处理命令行进行处理
2、 以下叙述中正确的是( )。
A:在程序的一行上可以出现多个有效的预处理命令行
B:使用带参数的宏时,参数的类型应与宏定义时的一致
C:宏替换不占用运行时间,只占用编译时间
D:C语言的编译预处理就是对源程序进行初步的语法检查
答案: 宏替换不占用运行时间,只占用编译时间
3、 以下有关宏替换的叙述中错误的是( )。
A:宏替换不占用运行时间
B:宏名无类型
C:宏替换只是字符替换
D:宏名必须用大写字母表示
答案: 宏名必须用大写字母表示
4、 设#define L(x) 23.14x,则L(x)是( )。
A:函数名
B:函数调用
C:无参数的宏名
D:带参数的宏名
答案: 带参数的宏名
5、 设#define P(x) x/x执行语句printf(“%d”,P(4+6));后的输出结果是( )。
A:1
B:8.5
C:11
D:11.5
答案: 11
6、 若有宏定义#define MOD(x,y) x%y ,下面程序段的结果是( )。int z,a=15; float b=100;z=MOD(b,a);printf(“%d”,z++);
A:11
B:10
C:6
D:语法错误
答案: 语法错误
7、 在任何情况下计算平方都不会引起二义性的宏定义是( )。
A:#define POWER(x) xx
B:#define POWER(x) (x)(x)
C:#define POWER(x) (xx)
D:#define POWER(x) ((x)(x))
答案: #define POWER(x) ((x)*(x))
8、 下面程序执行后的输出结果是( )。#include #define ADD(x) x+xint main(){ int m=1,n=2,k=3,sum ; sum = ADD(m+n)*k ; printf(“%d”,sum); return 0;}
A:9
B:10
C:12
D:18
答案: 10
9、 下面程序执行后的输出结果是( )。#include #define X 5#define Y X+1#define Z Y*X/2int main(){ int a=Y; printf(“%d “,Z); printf(“%d”,–a); return 0;}
A:7 6
B:12 6
C:12 5
D:7 5
答案: 7 5
10、 下面程序执行后的输出结果是( )。#include #define DOUBLE(r) r*rint main(){ int x=1,y=2,t; t = DOUBLE(x+y); printf(“%d”,t);return 0;}
A:5
B:6
C:7
D:8
答案: 5
11、 定义宏将两个float类型变量的数据交换,下列写法中最好的是( )。
A:#define jh(a,b) t=a;a=b;b=t;
B:#define jh(a,b) {float t;t=a;a=b;b=t;}
C:#define jh(a,b) a=b;b=a;
D:#define jh(a,b,t) t=a;a=b;b=t;
答案: #define jh(a,b) {float t;t=a;a=b;b=t;}
12、 若有宏定义:#define N 3#define Y(n) ((N+1)n)则表达式2(N+Y(5+1))的值是( )。
A:出错
B:42
C:48
D:54
答案: 48
13、 已知宏定义#define p(x,y,z) x=yz;则宏替换p(a,x+5,y-3.1)应为( )。
A:a=x+5y-3.1;
B:a=(x+5)(y-3.1);
C:a=x+5y-3.1
D:a=(x+5)(y-3.1)
答案: a=x+5y-3.1;
14、 下面程序执行后的输出结果是( )。#include #define MA(x) x*(x-1)int main(){ int a=1,b=2; printf(“%d”,MA(1+a+b)); return 0;}
A:6
B:8
C:10
D:12
答案: 8
15、 下面程序执行后的输出结果是( )。#include #define f(x) (x*x)int main(){ int i1, i2; i1=f(8)/f(4); i2=f(4+4)/f(2+2); printf(“%d,%d”,i1,i2);return 0;}
A:64, 28
B:4, 4
C:4, 3
D:64, 64
答案: 4, 3
16、 下面程序执行后的输出结果是( )。#include #define MAX(x,y) (x)>(y) ? (x):(y)int main(){ int a=5,b=2,c=3,d=3,t; t=MAX(a+b,c+d)*10; printf(“%d”,t); return 0;}
A:9
B:8
C:7
D:6
答案: 7
17、 下面程序执行后的输出结果是( )。#include #define R 0.5#define AREA(x) Rxxint main(){ int a=1, b=2; printf(“%5.1f”, AREA(a+b)); return 0;}
A: 0.0
B: 0.5
C: 3.5
D: 4.5
答案: 4.5
18、 C语言中的预定义宏__DATE__指定程序编译的日期格式为( )。
A:Mmm dd yyyy
B:yyyy Mmm dd
C:yyyy-Mmm-dd
D:d Mmm yyyy
答案: Mmm dd yyyy
19、 写出下面程序执行后的运行结果。#include #define N 2#define M N+1#define NUM 2*M+1int main(){ int i; for(i=1;i<=NUM;i++) printf(“%d”,i); return 0;}
答案: 123456
20、 写出下面程序执行后的运行结果。#include #define SQR(X) X*Xint main(){ int a=16, k=2, m=1; a/=SQR(k+m)/SQR(k+m); printf(“%d”,a); return 0;}
答案: 2
21、 写出下面程序执行后的运行结果。#include #define F(X,Y) (X)*(Y)int main(){ int a=3, b=4; printf(“%d”, F(a++, b++)); return 0;}
答案: 12
22、 写出下面程序执行后的运行结果。#include #include #define ROUND(x,m) ((int)((x)*pow(10,m)+0.5)/pow(10,m))int main(){ printf(“%f,%f”, ROUND(12.3456,1),ROUND(12.3456,2)); return 0;}
答案: 12.300000,12.350000
23、 头文件CH09K006.h的内容是:#define N 5#define M1 N3写出下面程序执行后的运行结果。#include #include “CH09K006.h”#define M2 N2int main(){ int i; i=M1+M2; printf(“%d”,i); return 0;}
答案: 25
第25讲 编程任务的接口与版本控制 课后测验:编程任务的接口与版本控制
1、 在“文件包含”预处理命令形式中,当#include后面的文件名用” “(双引号)括起时,寻找被包含文件的方式是( )。
A:直接按系统设定的标准方式搜索目录
B:先在源程序所在目录中搜索,再按系统设定的标准方式搜索
C:仅仅搜索源程序所在目录
D:仅仅搜索当前目录
答案: 先在源程序所在目录中搜索,再按系统设定的标准方式搜索
2、 在“文件包含”预处理命令形式中,当#include后面的文件名用< >(尖括号)括起时,寻找被包含文件的方式是( )。
A:直接按系统设定的标准方式搜索目录
B:先在源程序所在目录中搜索,再按系统设定的标准方式搜索
C:仅仅搜索源程序所在目录
D:仅仅搜索当前目录
答案: 直接按系统设定的标准方式搜索目录
3、 关于文件包含命令说法错误的是( )。
A:文件包含命令的作用是把指定的文件插入到该命令所处的位置上取代该命令,然后再进行编译处理。
B:一个文件包含命令可以包括多个头文件。
C:文件包含命令中的头文件名可以写成绝对路径的形式。
D:一般地,调用标准库函数或专业库函数包含头文件时,使用#include <头文件>的形式。
答案: 一个文件包含命令可以包括多个头文件。
4、 下面叙述中正确的是( )。
A:可以把define和if定义为用户标识符
B:可以把define定义为用户标识符,但不能把if定义为用户标识符
C:可以把if定义为用户标识符,但不能把define定义为用户标识符
D:define和if都不能定义为用户标识符
答案: define和if都不能定义为用户标识符
5、 以下叙述中正确的是( )。
A:用#include包含的头文件的后缀必须是“.h”
B:若一些源程序中包含某个头文件;当该头文件有错时,只需对该头文件进行修改, 包含此头文件所有源程序不必重新进行编译
C:宏命令行可以看作是一行C语句
D:C编译中的预处理是在编译后运行前进行的
答案: 用#include包含的头文件的后缀必须是“.h”
6、 下面叙述中正确的是( )。
A:宏定义是C语句,所以要在行末加分号
B:可以使用#undef命令来终止宏定义的作用域
C:在进行宏定义时,宏定义不能层层嵌套
D:对程序中用双引号括起来的字符串内的字符,与宏名相同的要进行置换
答案: 可以使用#undef命令来终止宏定义的作用域
7、 在C语言标准库头文件中,包含了许多系统函数的原型声明,因此只要程序中使用了这些函数,则应包含这些头文件,以便编译系统能对这些函数调用进行检查。
A:正确
B:错误
答案: 正确
8、 #include命令可以包含一个含有函数定义的C语言源程序文件。
A:正确
B:错误
答案: 正确
9、 用#include预处理命令能够提高程序运行效率。
A:正确
B:错误
答案: 错误
10、 #include “C:\USER\F1.H”是正确的包含命令,表示文件F1.H存放在C盘的USER目录下。
A:正确
B:错误
答案: 正确
11、 可以使用条件编译命令来选择某部分程序是否被编译。
A:正确
B:错误
答案: 正确
12、 在软件开发中,常用条件编译命令来形成程序的调试或正式版本。
A:正确
B:错误
答案: 正确
13、 写出下面程序执行后的运行结果。#include int main(){ int b=5,y=3;#define b 2#define f(x) b*x printf(“%d:”,f(y+1));#undef b printf(“%d:”,f(y+1));#define b 3 printf(“%d”,f(y+1)); return 0;}
答案: 7:16:10
14、 写出下面程序执行后的运行结果。#include #define DEBUGint main(){ int a=20 , b=10 , c; c=a/b;#ifdef DEBUG printf(“%d/%d=”,a,b);#endif printf(“%d”,c); return 0;}
答案: 20/10=2
15、 写出下面程序执行后的运行结果。#include int main(){ int a=20 , b=10 , c; c=a/b;#ifdef DEBUG printf(“%d/%d=”,a,b);#endif printf(“%d”,c); return 0;}
答案: 2
第27讲 批量数据的表示与处理 课后测验:批量数据的表示与处理
1、 在C语言中,一维数组的定义方式为: 类型说明符 数组名( )。
A:[常量表达式]
B:[整型表达式]
C:[整型常量]或[整型表达式]
D:[整型常量]
答案: [整型常量]或[整型表达式]
2、 以下关于数组的描述正确的是( )。
A:数组的大小是固定的,但可以有不同的类型的数组元素
B:数组的大小是可变的,但所有数组元素的类型必须相同
C:数组的大小是固定的,所有数组元素的类型必须相同
D:数组的大小是可变的,可以有不同的类型的数组元素
答案: 数组的大小是固定的,所有数组元素的类型必须相同
3、 执行下面的程序段后,变量k中的值为( )。 int k=3, s[2]; s[0]=k; k=s[1]*10;
A:不定值
B:33
C:30
D:0
答案: 不定值
4、 以下能正确定义一维数组a的选项是( )。
A:int a[5]={0,1,2,3,4,5};
B:char a[]={0,1,2,3,4,5};
C:char a={‘A’,’B’,’C’};
D:int a[5]=”0123″;
答案: char a[]={0,1,2,3,4,5};
5、 以下能正确定义一维数组a的选项是( )。
A:int a(10);
B:int n=10,a[n];
C:int n;scanf(“%d”,&n);int a[n];
D:#define SIZE 10int a[SIZE];
答案: #define SIZE 10int a[SIZE];
6、 若有定义:int a[10];则正确引用数组a元素的是( )。
A:a[10]
B:a[3]
C:a(5)
D:a[-10]
答案: a[3]
7、 以下叙述中错误的是( )。
A:对于double类型数组,不可以直接用数组名对数组进行整体输入或输出
B:数组名代表的是数组所占存储区的首地址,其值不可改变
C:当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息
D:可以通过赋初值的方式确定数组元素的个数
答案: 当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息
8、 若有说明:int a[3][4;则数组a中各元素( )。
A:可在程序的运行阶段得到初值
B:可在程序的编译阶段得到初值0
C:不能得到确定的初值
D:可在程序的编译或运行阶段得到初值0
答案: 不能得到确定的初值
9、 以下正确的二维数组定义是( )。
A:int a[][]={1,2,3,4,5,6};
B:int a[2][]={1,2,3,4,5,6};
C:int a[][3]={1,2,3,4,5,6};
D:int a[2,3]={1,2,3,4,5,6};
答案: int a[][3]={1,2,3,4,5,6};
10、 以下对二维数组a进行初始化正确的是( )。
A:int a[2][]={{1,0,1},{5,2,3}} ;
B:int a[][3]={{1,2,3},{4,5,6}} ;
C:int a[2][4]={{1,2,3},{4,5},{6}} ;
D:int a[3][]={{1,0,1},{},{1,1}} ;
答案: int a[][3]={{1,2,3},{4,5,6}} ;
11、 若有定义:int a[3][4];则正确引用数组a元素的是( )。
A:a[2][4]
B:a[3][3]
C:a[0][0]
D:a[3][4]
答案: a[0][0]
12、 若定义了int b[][3]={1,2,3,4,5,6,7};则b数组第一维的长度是( )。
A:2
B:3
C:4
D:无确定值
答案: 3
13、 若有定义:int a[3][4]={0};以下叙述中正确的是( )。
A:只有元素a[0][0]可得到初值0
B:此说明语句不正确
C:数组a中各元素都可得到初值,但其值不一定为0
D:数组a中每个元素均可得到初值0
答案: 数组a中每个元素均可得到初值0
14、 若有定义:int a[][4]={0,0};以下叙述中错误的是( )。
A:数组a的每个元素都可得到初值0
B:二维数组a的第一维大小为1
C:因为初值个数除以a中第二维大小的值的商为0,故数组a的行数为1
D:只有元素a[0][0]和a[0][1]可得到初值0,其余元素均得不到初值0
答案: 只有元素a[0][0]和a[0][1]可得到初值0,其余元素均得不到初值0
15、 若二维数组a有m列,则计算元素a[i][j]在数组中相对位置的公式为( )。
A:im+j
B:jm+i
C:im+j-1
D:im+j+1
答案: i*m+j
16、 设char x[]=”12345″,y[]={‘1′,’2′,’3′,’4′,’5′,’\0’};以下叙述中正确的是( )。
A:x数组的长度等于y数组的长度
B:x数组的长度大于y数组的长度
C:x数组的长度少于y数组的长度
D:x数组与y数组的存储区域相同
答案: x数组的长度等于y数组的长度
17、 假定一个int型变量占用4个字节,若有定义:int x[10]={0,2,4}; 则数组x在内存中所占字节数是( )。
A:3
B:12
C:10
D:40
答案: 40
18、 若有定义:int a[3][4]={{1,2},{0},{4,6,8,10}};则初始化后a[1][2]的值为____。
答案: 0
19、 若有定义:double x[3][5];则x数组中行下标的上限为____。
答案: 2
第28讲 批量数据的遍历与访问 课后测验:批量数据的遍历与访问
1、 以下程序的输出结果是( )。 int main() { int a[4][4]={{1,3,5},{2,4,6},{3,5,7}}; printf(“%d%d%d%d”,a[0][3],a[1][2],a[2][1],a[3][0]); return 0;}
A:0650
B:1470
C:5430
D:不确定
答案: 0650
2、 以下程序的输出结果是( )。 int main() { int m[][3]={1,4,7,2,5,8,3,6,9}; int i,j,k=2; for(i=0;i<3;i++){ printf(“%d “,m[k][i]); } return 0; }
A:4 5 6
B:2 5 8
C:3 6 9
D:7 8 9
答案: 3 6 9
3、 下面程序段执行后的输出结果是( )。int k,a[3][3]={1,2,3,4,5,6,7,8,9};for (k=0;k<3;k++) printf(“%d”,a[k][2-k]);
A:3 5 7
B:3 6 9
C:1 5 9
D:1 4 7
答案: 3 5 7
4、 下面程序执行后的输出结果是( )。#include int main(){ int a[3][3]={ {1,2},{3,4},{5,6} },i,j,s=0; for(i=1;i<3;i++) for(j=0;j<=i;j++) s+=a[i][j]; printf(“%d”,s); return 0;}
A:18
B:19
C:20
D:21
答案: 18
5、 下列程序的主要功能是输入10个整数存入数组a,再输入一个整数x,在数组a中查找x。找到则输出x在10个整数中的序号(从1开始);找不到则输出0。程序缺少的是 ( )。 int main() { int i,a[10],x,flag=0; for(i=0;i<10;i++) scanf(“%d”,&a[i]); scanf(“%d”,&x); for(i=0;i<10;i++) if _ { flag=i+1; break; } printf(“%d”, flag); return 0; }
A:x!=a[i]
B:!(x==a[i])
C:x==a[i]
D:!x==a[i]
答案: x==a[i]
6、 写出下面程序执行后的运行结果。#include int main(){ int i,n[]={0,0,0,0,0}; for(i=1;i<=4;i++) { n[i]=n[i-1]*2+1; printf(“%d:”,n[i]); } return 0;}
答案: 1:3:7:15:
7、 下面程序运行时从键盘上输入:1└┘2└┘3└┘-4↙,写出程序的运行结果。(└┘代表空格,↙代表回车)#include int main(){ int i,k=0,s=0,a[10]; while (1) { scanf(“%d”,&a[k]); if (a[k]<=0) break ; s=s+a[k++]; } for(i=0;i<k;i++) printf(“%d”,a[i]);=”” printf(“%d”,s);=”” return=”” 0;}=”” 答案:=”” <span=””>1236</k;i++)>
8、 写出下面程序执行后的运行结果。#include int main(){ int x[]={1,3,5,7,2,4,6,0},i,j,k; for(i=0;i<3;i++) for (j=2;j>=i;j–) if(x[j+1]>x[j]) { k=x[j]; x[j]=x[j+1]; x[j+1]=k;} for(i=0;i<3;i++) for(j=4;j<7-i;j++) if(x[j+1]>x[j]) { k=x[j]; x[j]=x[j+1]; x[j+1]=k;} for (i=0;i<3;i++) for(j=4;j<7-i;j++) if(x[j]>x[j+1]) { k=x[j]; x[j]=x[j+1]; x[j+1]=k;} for (i=0;i<8;i++) printf(“%d”,x[i]); return 0;}
答案: 75310246
9、 写出下面程序执行后的运行结果。#include int main(){ int a[4][4]={{1,2,3,4},{5,6,7,8},{11,12,13,14},{15,16,17,18}}; int i=0,j=0,s=0; while(i++<4) { if(i==2||i==4) continue; j=0; do { s+=a[i][j]; j++; } while(j<4); } printf(“%d”,s); return 0;}
答案: 92
10、 .写出下面程序执行后的运行结果。#include int main(){ int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1; for(i=0;i<3;i++) for(j=i;j<=i;j++) t=t+b[i][b[j][j]]; printf(“%d”,t); return 0;}
答案: 4
11、 写出下面程序执行后的运行结果。#include int main(){ int i,j,a[4][4]; for(i=0;i<4;i++) for(j=0;j<4;j++) a[i][j]=1+i-j; for(i=0;i<4;i++) { for(j=0;j<4;j++) if(a[i][j]>0) printf(“%3d”,a[i][j]); putchar(”); } return 0;}
答案: 1
2 1
3 2 1
4 3 2 1
12、 写出下面程序执行后的运行结果。#include int main(){ int a[4][3]={{1,2,3},{-2,0,2},{1,0,1},{-1,2,-3} }; int b[3][2]={{-1,3},{-2,2},{2,1}}; int c[4][2],i,j,k,s; for(i=0;i<4;i++) { for(k=0;k<2;k++) { s=0; for (j=0;j<3;j++) s+=a[i][j]*b[j][k]; c[i][k]=s; printf(“%4d”,s); } printf(“”); }return 0;}
答案: 1 10
6 -4
1 4
-9 -2
13、 下面程序的功能是将十进制整数n转换成base进制。请填空使程序完整、正确。#include int main(){ int i=0,base,n,j,num[20] ; scanf(“%d”,&n); scanf(“%d”,&base); do { i++ ; num[i]=__; n=n/base; } while (n!=0); for (j=i ;j>=1 ;j–) printf(“%d”,num[j]); return 0;}
答案: n%base
14、 下面程序的功能是输入10个数,找出最大值和最小值所在的位置,并把两者对调,然后输出调整后的10个数。请填空使程序完整、正确。#include int main(){ int a[10],max,min,i,j,k; for (i=0; i<10; i++) scanf(“%d”,&a[i]); max=min=a[0], j=k=0; for (i=0; i<10; i++) { if (a[i]<min) {=”” min=”a[i];” _____________;}=”” if=”” (a[i]=””>max) { max=a[i]; k=i;} } a[j]=max , a[k]=min; for (i=0; i<10; i++) printf(“%d”,a[i]); return 0;}
答案: j=i</min)>
15、 下面程序的功能是向数组输入数据,逆序置换后输出。逆序置换是指数组的首元素和末元素置换,第二个元素和倒数第二个元素置换,………。请填空使程序完整、正确。#include #define N 8int main(){ int i,j,t,a[N]; for(i=0;i<n;i++) scanf(“%d”,&a[i]);=”” i=”0;j=N-1;” while(i<j)=”” {=”” t=”a[i],” _________=”” ,=”” a[j]=”t” ;=”” i++=”” ,j–;=”” }=”” for(i=”0;i<N;i++)” printf(“%5d”,a[i]);=”” return=”” 0;}=”” 答案:=”” <span=””>a[i]=a[j]</n;i++)>
16、 写出下面程序执行后的运行结果。#include int main(){ int a[6][6],i,j ; for (i=1; i<6 ; i++) for (j=1; j<6 ; j++) a[i][j]=(i/j)*(j/i) ; for (i=1; i<6 ; i++) { for (j=1; j<6 ; j++) printf(“%2d”,a[i][j]); printf(“”); } return 0;}
答案: 1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
第29讲 函数之间实现批量数据传递 课后测验:函数之间实现批量数据传递
1、 若用数组名作为函数调用的实参,传递给形参的是( )。
A:数组的首地址
B:数组中第一个元素的值
C:数组中的全部元素的值
D:数组元素的个数
答案: 数组的首地址
2、 设主调用函数为如下程序段,则函数f中对形参数组定义错误的是( )。int a[3][4];f(a);
A:f(int array[3][4])
B:f(int array[][4])
C:f(int array[3][])
D:f(int array[4][3])
答案: f(int array[3][])
3、 下面程序执行后的输出结果是( )。#include int f(int b[],int m,int n){ int i,s=0; for(i=m;i<n;i++) s=”s+b[i-1];” return=”” s;}int=”” main(){=”” int=”” x,a[]=”{1,2,3,4,5,6,7,8,9};” x=”f(a,3,7);” printf(“%d”,x);=”” 0;}=”” =”” a:10=”” b:18=”” c:8=”” d:15=”” 答案:=”” <span=””>18</n;i++)>
4、 下面程序执行后的输出结果是( )。#include #define N 20 void fun(int a[],int n,int m) { int i; for(i=m;i>=n;i–) a[i+1]=a[i]; } int main() { int i; int a[N]={1,2,3,4,5,6,7,8,9,10}; fun(a,2,9); for(i=0;i<5;i++) printf(“%d”,a[i]); return 0;}
A:10234
B:12344
C:12334
D:12234
答案: 12334
5、 下面程序执行后的输出结果是( )。#include void f(int a[],int i,int j){ int t; if (i<j) {=”” t=”a[i];” a[i]=”a[j];a[j]=t;” f(a,i+1,j-1);=”” }}int=”” main(){=”” int=”” i,aa[5]=”{1,2,3,4,5};” f(aa,0,4);=”” for(i=”0;i<5;i++)” printf(“%d”,aa[i]);=”” return=”” 0;}=”” =”” a:54321=”” b:52341=”” c:12345=”” d:12543=”” 答案:=”” <span=””>54321</j)>
6、 设函数fun的定义形式为:void fun(char ch[], float x) { …… },则以下对函数fun的调用语句中,正确的是( )。
A:fun(“abc”,3.0);
B:t=fun(‘D’,16.5);
C:fun(’65’,2.8);
D:fun(32,32);
答案: fun(“abc”,3.0);
7、 写出下面程序执行后的运行结果。#include float f(float a,float b){ static float x; float y; x=(y=a>b ? a:b)>x ? y : x; return x;}int main(){ float a[5]={2.5,-1.5,7.5,4.5,6.5}; int i; for(i=0;i<4;i++) printf(“%.1f “,f(a[i],a[i+1])); return 0;}
答案: 2.5 7.5 7.5 7.5
第30讲 构建大数和高精度类型 课后测验:构建大数和高精度类型
1、 程序填空,使下面程序实现输出N!(N<=10000)的最低三位。#include int main(){ int N,M=1; scanf(“%d”,&N); for (int i=1;i<=N;i++){ M=M*i; M=____; } printf(“%03d”,M); return 0;}
答案: M%1000
2、 程序填空,使下面程序实现输出N!(N<=10000)的十进制位数。#include #include int main (){ int i, n; double sum; sum = 0.0; scanf(“%d”, &n); for (i = 2; i <= n; i++) { sum +=___; } printf (“%d”, (int)ceil(sum)); return 0;}
答案: log10(i)
3、 下面的程序实现计算整数n的_。#includeint main(){ int n,j,i,t,p; int FACT[10000]; while(scanf(“%d”,&n)!=EOF){ t=p=0; FACT[0]=1; for(j=1;j<=n;j++){ for(i=0;i<=t;i++){ FACT[i]=FACT[i]*j+p; p=FACT[i]/100000; FACT[i]%=100000; } if(p){ t++; FACT[t]=p; p=0; } } printf(“%d”,FACT[t]); for(i=t-1;i>=0;i–) printf(“%05d”,FACT[i]); printf(“”); } return 0;}
答案: 阶乘
第31讲 文字信息的表示与处理 课后测验:文字信息的表示与处理
1、 下面是对字符数组s进行初始化,其中不正确的是( )。
A:char s[5]={“abc”};
B:char s[5]={‘a’,’b’,’c’};
C:char s[5]=””;
D:char s[5]=”abcde”;
答案: char s[5]=”abcde”;
2、 字符数组s不能作为字符串使用的是( )。
A:char s[]=”happy”;
B:char s[6]={‘h’,’a’,’p’,’p’,’y’,’\0′};
C:char s[]={“happy”};
D:char s[5]={‘h’,’a’,’p’,’p’,’y’};
答案: char s[5]={‘h’,’a’,’p’,’p’,’y’};
3、 下面有关字符数组的描述中错误的是( )。
A:字符数组可以存放字符串
B:字符串可以整体输入、输出
C:可以在赋值语句中通过赋值运算对字符数组整体赋值
D:不可以用关系运算符对字符数组中的字符串进行比较
答案: 可以在赋值语句中通过赋值运算对字符数组整体赋值
4、 下面程序段执行后的输出结果是( )。char c[5]={‘a’,’b’,’\0′,’c’,’\0′};printf(“%s”,c);
A:’a”b’
B:ab
C:ab c
D:abc
答案: ab
5、 有两个字符数组a、b,则以下( )是正确的输入语句。
A:gets(a,b);
B:scanf(“%s%s”,a,b);
C:scanf(“%s%s”,&a,&b);
D:gets(“a”);gets(“b”);
答案: scanf(“%s%s”,a,b);
6、 下面程序段执行后的输出结果是( )。char a[7]=”abcdef”;char b[4]=”ABC”;strcpy(a,b);printf(“%c”,a[5]);
A:空格
B:\0
C:e
D:f
答案: f
7、 下面程序段执行后的输出结果是( )。char c[]=”\t\b\\0will”;printf(“%d”,strlen(c));
A:14
B:3
C:9
D:6
答案: 3
8、 判断字符串a是否大于b,应当使用( )。
A:if (a>b)
B:if (strcmp(a,b))
C:if (strcmp(b,a)>0)
D:if (strcmp(a,b)>0)
答案: if (strcmp(a,b)>0)
9、 表达式strcmp(“3.14″,”3.278”)的值是( )。
A:非零整数
B:浮点数
C:0
D:字符
答案: 非零整数
10、 有以下程序:#include #include int main(){ char p[]={‘a’,’b’,’c’}, q[10]={‘a’,’b’,’c’}; printf(“%d %d”, strlen(p), strlen(q)); return 0;}以下叙述中正确的是( )。
A:在给p和q数组置初值时,系统会自动添加字符串结束符,故输出的长度都为3
B:由于p数组中没有字符串结束符,长度不能确定;但q数组中字符串长度为3
C:由于q数组中没有字符串结束符,长度不能确定;但p数组中字符串长度为3
D:由于p和q数组中都没有字符串结束符,故长度都不能确定
答案: 由于p数组中没有字符串结束符,长度不能确定;但q数组中字符串长度为3
11、 下面程序运行时从键盘上输入:123 456 789↙,其输出结果是( )。#include int main(){ char s[100]; int c, i; scanf(“%c”,&c); scanf(“%d”,&i); scanf(“%s”,s); printf(“%c,%d,%s”,c,i,s); return 0;}
A:123,456,789
B:1,456,789
C:1,23,456,789
D:1,23,456
答案: 1,23,456
12、 下面程序运行时从键盘上输入:ABC↙,其输出结果是( )。#include #include int main(){ char ss[10]=”12345″; gets(ss); strcat(ss, “6789”); printf(“%s”,ss); return 0;}
A:ABC6789
B:ABC67
C:12345ABC6
D:ABC456789
答案: ABC6789
13、 下面程序执行后的输出结果是( )。#include #include int main(){ char arr[2][4]; strcpy(arr[0],”you”); strcpy(arr[1],”me”); arr[0][3]=’&’; printf(“%s”,arr); return 0;}
A:you&me
B:you
C:me
D:错误
答案: you&me
14、 下面程序执行后的输出结果是( )。#include int main(){ char str[]=” SSWLIA” , c; int k; for (k=2;(c=str[k])!=’\0′;k++) { switch (c) { case ‘I’: ++k; break ; case ‘L’: continue; default : putchar(c); continue ; } putchar(‘‘); } return 0;}
A:SSW
B:SW
C:SWA
D:SW
答案: SW
15、 下面程序执行后的输出结果是( )。#include int main(){ char w[][10]={“ABCD”,”EFGH”,”IJKL”,”MNOP”} , k; for(k=1;k<3;k++) printf(“%s”,w[k]); return 0;}
A:ABCDFGHKL
B:ABCDEFGIJM
C:EFGJKO
D:EFGHIJKL
答案: EFGHIJKL
16、 下面程序运行时从键盘上输入:AabD↙,写出程序的运行结果。#include int main(){ char s[80]; int i=0; gets(s); while (s[i]!=’\0′) { if (s[i]<=’z’ && s[i]>=’a’) s[i]=’z’+’a’-s[i] ; i++; } puts(s); return 0;}
答案: AzyD
17、 写出下面程序执行后的运行结果。#include int main(){ int i=0; char c,s[]=”SABC”; while(c=s[i]) { switch(c) { case ‘A’: i++; break; case ‘B’: ++i; default : putchar(c);i++; } putchar(‘‘); } return 0;}
答案: SB
18、 写出下面程序执行后的运行结果。#include int main(){ int i,c; char s[2][5]={“1980″,”9876”}; for (i=3; i>=0 ; i–) { c=s[0][i]+s[1][i]-2*’0′; s[0][i] = c % 10 ; } for (i=0; i<=1 ; i++) puts(s[i]); return 0;}
答案: 9876
19、 写出下面程序执行后的运行结果。#include #include int main(){ char ch[]=”abc”,x[3][4]; int i; for(i=0;i<3;i++) strcpy(x[i],ch); for(i=0;i<3;i++) printf(“%s”,&x[i][i]); return 0;}
答案: abcbcc
20、 写出下面程序执行后的运行结果。#include #include void f(char p[][10],int N){ char t[20]; int i,j; for(i=0;i<n-1;i++) for(j=”i+1;j<N;j++)” if(strcmp(p[i],p[j])<0)=”” {=”” strcpy(t,p[i]);=”” strcpy(p[i],p[j]);=”” strcpy(p[j],t);=”” }}int=”” main(){=”” char=”” p[][10]=”{“abc”,”aabdfg”,”abbd”,”dcdbe”,”cd”};” f(p,5);=”” printf(“%d”,strlen(p[0]));=”” return=”” 0;}=”” 答案:=”” <span=””>5</n-1;i++)>
21、 输入hello↙,写出下面程序的运行结果。#include #include int main(){ char s[80],t[200]; int i,sl ; gets(s); sl = strlen(s); for(i=0 ;iollehhello
22、 运行下面程序输入abcbcbded↙和bc↙,写出程序的输出结果。#include int main(){ char substr[80],str[80]; int i,j,k,num=0; gets(str); gets(substr); for(i = 0; str[i]; i++) for(j=i,k=0;substr[k]==str[j];k++,j++) if (substr[k+1]==’\0′) { num++; break; } printf(“num=%d”, num); return 0;}
答案: num=2
23、 运行程序输入adebdwe↙和d↙,写出输出结果。#include #include int main(){ char c , t[50]; int len,j,k; gets(t); c=getchar(); len = strlen(t); for (k=0; k<len; k++)=”” if=”” (t[k]=”=c)” {j=”k;” break;}=”” else=”” j=”-1;” printf(“%d”,j);=”” return=”” 0;}=”” 答案:=”” <span=””>1</len;>
24、 运行程序输入hello↙和world↙,写出输出结果。#include int main(){ char a[100], b[100]; int i=0,j=0 ; gets(a); gets(b); while (a[i]!=’\0′) i++ ; while (b[j]!=’\0′) { a[i]=b[j] ; i++ ; j++ ; } a[i]=’\0′; printf(“%s”,a); return 0;}
答案: helloworld
第32讲 实现排序算法 课后测验:实现排序算法
1、 一个排序算法是稳定的,就是当有两个相等记录的关键字R和S,且在原本的列表中R出现在S之前,在排序过的列表中R也将会是在S之前。
A:正确
B:错误
答案: 正确
2、 冒泡排序法是一种稳定的排序算法。
A:正确
B:错误
答案: 正确
3、 选择排序法是一种稳定的排序算法。
A:正确
B:错误
答案: 错误
4、 插入排序的基本思想是每步将一个待排序的记录按其排序码值的大小,插到前面已经排好的文件中的适当位置,直到全部插入完为止。
A:正确
B:错误
答案: 正确
5、 选择排序的基本思想是每步从待排序的记录中选出排序码最小的记录,顺序存放在已排序的记录序列的后面,直到全部排完。
A:正确
B:错误
答案: 正确
6、 冒泡排序和快速排序属于交换类排序算法,其基本思想是:两两比较待排序记录的排序码,并交换不满足顺序要求的那些偶对,直到满足条件为止。
A:正确
B:错误
答案: 正确
7、 插入排序是将两个或两个以上的有序子表合并成一个新的有序表。
A:正确
B:错误
答案: 错误
8、 快速排序用到了分治法的算法思想,将原问题分解为若干个规模更小但结构与原问题相似的子问题,递归地解这些子问题,然后将这些子问题的解组合为原问题的解。
A:正确
B:错误
答案: 正确
9、 选择合适的排序方法应综合考虑下列因素:①待排序的记录数目n;②记录的大小(规模);③关键字的结构及其初始状态;④对稳定性的要求;⑤语言工具的条件;⑥存储结构;⑦时间和辅助空间复杂度等。
A:正确
B:错误
答案: 正确
10、 一般情况下,快速排序算法的时间性能比冒泡排序算法的时间性能要好。
A:正确
B:错误
答案: 正确
11、 写出下面程序执行后的运行结果。#include void sort(int a[],int s, int N){ int i,j,t; for(i=s;i<n-1;i++) for(j=”i+1;j<N;j++)” if(a[i]<a[j])=”” {=”” t=”a[i]” ,=”” a[i]=”a[j]” a[j]=”t” ;=”” }}int=”” main(){=”” int=”” aa[10]=”{1,2,3,4,5,6,7,8,9,10},i;” sort(aa,3,8);=”” for(i=”0;i<10;i++)” printf(“%d=”” “,aa[i]);=”” return=”” 0;}=”” 答案:=”” <span=””>1 2 3 8 7 6 5 4 9 10</n-1;i++)>
12、 写出下面程序执行后的运行结果。#include void reverse(int a[],int n){ int i,t; for(i=0;i<n;i++) {=”” t=”a[i];” a[i]=”a[n-1-i];” a[n-1-i]=”t;}}int” main(){=”” int=”” b[10]=”{1,2,3,4,5,6,7,8,9,10};” i,s=”0;” reverse(b,8);=”” for(i=”6;i<10;i++)” s+=”b[i];” printf(“%d”,s);=”” return=”” 0;}=”” 答案:=”” <span=””>34</n;i++)>
13、 运行下面程序,输入10└┘9└┘8└┘7└┘6└┘5└┘4└┘3└┘2└┘1↙写出下面程序执行后的运行结果。#include void Sort(int A[],int low,int high){ if(low<high){ int=”” temp,t=”A[low];” l=”low,h=high;” while(l<h){=”” while(a[l]<t)=”” l++;=”” while(a[h]=””>=t) h–; if(h>l){ temp=A[l]; A[l]=A[h]; A[h]=temp; } } Sort(A,low,l-1); Sort(A,l+1,high); }}int main(){ int A[10]; for (int i=0;i<10;i++) scanf(“%d”,&A[i]); Sort(A,3,8); for (int i=0;i<10;i++) printf(“%d “,A[i]); return 0;}
答案: 10 9 8 2 3 4 5 6 7 1</high){>
14、 写出程序的运行结果。#include int main(){ int c[10],i=0,j=0,k=0 ; int a[3]={5,9,10} ; int b[5]={12,24,26,37,48} ; while (i<3 && j<5) if (a[i]>b[j]) { c[k]=b[j] ; k++ ; j++ ; } else { c[k]=a[i] ; k++ ; i++ ; } while (i<3) { c[k]=a[i] ; i++ ; k++ ; } while (j<5) { c[k]=b[j] ; j++ ; k++ ; } for (i=0; i<k; i++)=”” printf(“%d=”” “,c[i]);=”” return=”” 0;}=”” 答案:=”” <span=””>5 9 10 12 24 26 37 48</k;>
15、 读程序写出运行结果。#include int main(){ int a[10]={191,3,6,4,11,7,25,13,89,10} ; int i,j,k ; for (i=1; i<10; i++) { k = a[i] ; j = i-1; while (j>=0 && k>a[j] ) { a[j+1]=a[j] ; j–; } a[j+1]= k ; } for (i=0; i<10; i++) printf(“%d “,a[i]); return 0;}
答案: 191 89 25 13 11 10 7 6 4 3
16、 运行程序,输入4,写出程序的输出结果。#include int search(int a[10],int m){ int x1=0,x2=9,mid; while (x1<=x2) { mid=(x1+x2)/2; if (m<a[mid]) x2=”mid-1;” else=”” if=”” (m=””>a[mid]) x1=mid+1; else return (mid); } return (-1);}int main(){ int A[10]={1,2,3,4,5,6,7,8,9,10}, b; scanf(“%d”,&b); printf(“%d”,search(A,b)); return 0;}
答案: 3</a[mid])>
第33讲 用空间换取时间编程方法 课后测验:用空间换取时间编程方法
1、 下面程序尝试使用空间换取时间的策略实现第1至100项中任意菲波那切数列的求解,请填空完善程序。# include # define N 100int fab[N]={-1,-1,-1,-1,……};//将数组fab全部初始化为-1int Fab(int n){ if (_____){ if ((n==1)||(n==2)) fab[n]=1; else fab[n]=Fab(n-1)+Fab(n-2); } return fab[n];}int main(){ int n; scanf(“%d”,&n); printf(“%d”,Fab(n)); return 0; }
A:fab[n]==-1
B:fab[n]==1
C:fab[n]!=-1
D:fab[n]!=0
答案: fab[n]==-1
2、 算法复杂度分为时间复杂度和空间复杂度。其作用: 时间复杂度是度量算法执行的时间长短;而空间复杂度是度量算法所需存储空间的大小。
A:正确
B:错误
答案: 正确
3、 对于一个算法,其时间复杂度和空间复杂度往往是相互影响的。当追求一个较好的时间复杂度时,可能会使空间复杂度的性能变差,即可能导致占用较多的存储空间;反之,当追求一个较好的空间复杂度时,可能会使时间复杂度的性能变差,即可能导致占用较长的运行时间。
A:正确
B:错误
答案: 正确
4、 当设计一个算法(特别是大型算法)时,要综合考虑算法的各项性能,算法的使用频率,算法处理的数据量的大小,算法描述语言的特性,算法运行的机器系统环境等各方面因素,才能够设计出比较好的算法。
A:正确
B:错误
答案: 正确
5、 进行a,b两个变量值交换时使用{ a=a+b;b=a-b;a=a-b;}比使用{ int c; c=a; a=b;b=a;}获得了更好的空间性能,但是具有比其差的时间性能。
A:正确
B:错误
答案: 正确
6、 有时可以通过使用带参数的宏定义来替换掉相应的函数定义,从而获得更好的时间性能。
A:正确
B:错误
答案: 正确
第34讲 探究指针的本质与使用 课后测验: 探究指针的本质与使用
1、 变量的指针,其含义是指该变量的( )。
A:值
B:地址
C:名
D:一个标志
答案: 地址
2、 下面对于指针的描述不正确的是( )。
A:指针是地址变量
B:指针不能用除0以外的常量赋值
C:两个指针变量的加减法无意义
D:指针指向不同基类型的变量长度不同
答案: 指针指向不同基类型的变量长度不同
3、 若有定义int p,m=5,n;以下程序段正确的是( )。
A:p=&n;scanf(“%d”,&p);
B:p=&n ;scanf(“%d”,p);
C:scanf(“%d”,&n);p=n ;
D:p=&n;p=m;
答案: p=&n;*p=m;
4、 假如指针p已经指向整型变量x,则(p)++相当于( )。
A:x++
B:p++
C:(p++)
D:&x++
答案: x++
5、 若程序中已包含头文件stdio.h,以下选项中正确运用指针变量的程序段是( )。
A:int i=NULL;scanf(“%d”,i);
B:float f=NULL;f=10.5;
C:char t=’m’,c=&t;c=&t;
D:long L;L=’\0′;
答案: long *L;L=’\0′;
第35讲 指针运用的风险控制 课后测验:指针运用的风险控制
1、 若有int p,a=4;和p=&a;下面( )均代表地址。
A:a,p,&a
B:&a,&a,p
C:&p,p,&a
D:&a,&p,p
答案: &a,&p,p
2、 若变量已正确定义并且指针p已经指向变量x,则&x相当于( )。
A:x
B:p
C:&x
D:&p
答案: x
3、 若定义了int m,n=0,p1=&m;则下列( )表达式与m=n等价。
A:m=p1
B:p1=&n
C:&p1=&n
D:p1=&n
答案: p1=&n
4、 对于基类型相同的两个指针变量之间,不能进行的运算是( )。
A:<
B:=
C:+
D:-
答案: +
5、 有四组对指针变量进行操作的语句,以下判断正确的选项是( ) (1) int p,q; q=p; int a,p,q; p=q=&a; (2) int a,p,q; q=&a; p=q; int a=20,p; p=a; (3) int a=b=0,p; p=&a; b=p; int a=20,p,q=&a; p=q; (4) int a=20,p,q=&a; p=q; int p,q; q=&p;
A:正确:(1) 不正确:(2)(3)(4)
B:正确:(1)(4) 不正确:(2)(3)
C:正确:(3) 不正确:(1)(2)(4)
D:以上结论都不正确
答案: 以上结论都不正确
6、 执行以下程序后,a的值为( )。int main() { int a,b,k=4,m=6,p1=&k,p2=&m; a=p1==&m; b=(-p1)/(p2)+7; printf(“a=%d”,a); printf(“b=%d”,b); return 0; }
A:-1
B:1
C:0
D:4
答案: 0
7、 已有定义int k=2;int ptr1,ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值是( )。
A:k=ptr1+ptr2
B:ptr2=k
C:ptr1=ptr2
D:k=ptr1(*ptr2)
答案: ptr2=k
8、 有如下函数和变量定义int a=25;执行语句print_value(&a);后的输出结果是( )。void print_value(int x){ printf(“%d”,++x); }
A:23
B:24
C:25
D:26
答案: 26
9、 若有定义int a=3,b,p=&a;则下列语句中( )使b不为3。
A:b=&a;
B:b=p;
C:b=a;
D:b=a;
答案: b=*a;
10、 若有定义int n=0,p=&n,q=&p;则以下选项中,正确的赋值语句是( )。
A:p=1;
B:q=2;
C:q=p;
D:p=5;
答案: p=5;
11、 下面程序执行后的输出结果是( )。#include int main(){ int x[5]={2,4,6,8,10}, *p,pp; p=x , pp=&p; printf(“%d”,*(p++)); printf(“%3d”,pp); return 0;}
A:4 4
B:2 4
C:2 2
D:4 6
答案: 2 4
12、 下列关于指针的操作中,错误的是( )。
A:基类型不同的指针不可以进行比较运算
B:可以用一个空指针赋给某个指针
C:一个指针可以加上两个整数之差
D:两个同类型的指针可以相加
答案: 两个同类型的指针可以相加
13、 运行下面程序,输入www.nwpu.edu.cn和5,写出输出结果。#include int main(){ char a[100],b[100],p,q; int m; gets(a); scanf(“%d”,&m); p=a;q=b; for(p=p+m-1;p!=’\0′;p++,q++) q=p; q=’\0′; printf(“%s”,b); return 0;}
答案: nwpu.edu.cn
第36讲 数组元素的简洁表示 课后测验:数组元素的简洁表示
1、 若有定义 char s[10];则在下面表达式中不表示s[1]的地址的是( )。
A:s+1
B:s++
C:&s[0]+1
D:&s[1]
答案: s++
2、 若有定义int a[5],p=a;则对a数组元素的正确引用是( )。
A:&a[5]
B:a+2
C:(p+5)
D:(a+2)
答案: *(a+2)
3、 若有定义int a[5],p=a;则对a数组元素地址的正确引用是( )。
A:p+5
B:a+1
C:&a+1
D:&a[0]
答案: &a[0]
4、 若要对a进行合法的自减运算,则之前应有下面( )的说明。
A:int p[3];int a=p;
B:int k;int a=&k;
C:char a[3];
D:int b[10];int a=b+1;
答案: int b[10];int *a=b+1;
5、 若有定义int x[10]={0,1,2,3,4,5,6,7,8,9},p1;则数值不为3的表达式是( )。
A:x[3]
B:p1=x+3,p1++
C:p1=x+2,(p1++)
D:p1=x+2,++p1
答案: p1=x+2,*(p1++)
6、 设int x[]={1, 2, 3, 4, 5, 6, 7, 8, 9, 0},p=x,k;且0≤k<10, 则对数组元素x[k]的错误引用是( )。
A:p+k
B:(x+k)
C:x[p-x+k]
D:*(&x[k])
答案: p+k
7、 设double *p[6];则( )。
A:p是指向double型变量的指针
B:p是double型数组
C:p是指针数组,其元素是指向double型变量的指针
D:p是数组指针,指向double型数组
答案: p是指针数组,其元素是指向double型变量的指针
8、 若有定义int x[6]={2,4,6,8,5,7},p=x,i;要求依次输出x数组6个元素中的值,不能完成此操作的语句是( )。
A:for(i=0;i<6;i++) printf(“%2d”,(p++));
B:for(i=0;i<6;i++) printf(“%2d”,(p+i));
C:for(i=0;i<6;i++) printf(“%2d”,p++);
D:for(i=0;i<6;i++) printf(“%2d”,(p)++);
答案: for(i=0;i<6;i++) printf(“%2d”,(p)++);
9、 下面程序执行后的输出结果是( )。#include void sum(int *a) { a[0]=a[1];}int main(){ int aa[10]={1,2,3,4,5,6,7,8,9,10},i; for(i=2;i>=0;i–) sum(&aa[i]); printf(“%d”,aa[0]); return 0;}
A:1
B:2
C:3
D:4
答案: 4
10、 下面程序执行后的输出结果是( )。#include int main() { int a[10]={1,2,3,4,5,6,7,8,9,10}, p=&a[3], q=p+2; printf(“%d”, p+q); return 0;}
A:16
B:10
C:8
D:6
答案: 10
11、 若有定义int a[2][3];则对a数组的第i行,第j列元素值的正确引用是( )。
A:((a+i)+j)
B:(a+i)[j]
C:(a+i+j)
D:(a+i)+j
答案: ((a+i)+j)
12、 若有定义int a[2][3];则对a数组的第i行第j列元素地址的正确引用是( )。
A:(a[i]+j)
B:(a+i)
C:(a+j)
D:a[i]+j
答案: a[i]+j
13、 若有定义 int a[4][6]; 则能正确表示a数组中任一元素a[i][j](i、j均在有效范围内)地址的表达式( )。
A:&a[0][0]+6i+j
B:&a[0][0]+4j+i
C:&a[0][0]+4i+j
D:&a[0][0]+6j+i
答案: &a[0][0]+6*i+j
14、 若有定义int t[3][2];能正确表示t数组元素地址的表达式是( )。
A:&t[3][2]
B:t[1][1]
C:t[2]
D:t[3]
答案: t[2]
15、 若有定义int a[4][5];下列( )表达式是错误的。
A:a
B:(*(a+2)+3)
C:&a[2][3]
D:++a
答案: ++a
16、 下面程序执行后的输出结果是( )。#include int main(){ int a[3][3], *p,i;p=&a[0][0];for(i=0; i<9; i++) p[i]=i+1;printf(“%d”,a[1][2]);return 0;}
A:3
B:6
C:9
D:随机值
答案: 6
17、 定义如下一维数组:int a[5],*p;则下面描述错误的是( )
A:表达式p=p+1是合法的
B:表达式a=a+1是合法的
C:表达式p-a是合法的
D:表达式a+2是合法的
答案: 表达式a=a+1是合法的
18、 若有语句int a[10]={0,1,2,3,4,5,6,7,8,9},p=a;则( )不是对a数组元素的正确引用(其中0≤i<10)。
A:p[i]
B:((a+i))
C:a[p-a]
D:(&a[i])
答案: ((a+i))
19、 有如下程序段:int p,a[6]={-1,0,1,2,3,4}; p=a+3; 执行该程序段后,p的值为 ( )
A:4
B:2
C:1
D:NULL
答案: 2
20、 若有定义int a[3][4],p=&a[0][0];则对a数组的第i行,第j列元素值的正确引用是( )。
A:((p+i)+j)
B:(p+i)[j]
C:(p+4i+j)
D:(p+i)+j
答案: (p+4i+j)
21、 在C语言中,数组名是一个地址_____(常量/变量),不能对它进行赋值运算。
答案: 常量
22、 若有定义int w[10]={23,54,10,33,47,98,72,80,61},p=w;则不移动指针p,且通过指针p引用值为98的数组元素的表达式是_____。
答案: (以下答案任选其一都对)p[5];
(p+5)
23、 若有定义int a[2][3]={2,4,6,8,10,12};则(&a[0][0]+22+1)的值是_____
答案: 12
24、 若有定义int a[2][3]={1,2,3,4,5,6};*(a[1]+2)的值是_____。
答案: 6
如需购买完整答案,请点击下方红字:
为了方便下次阅读,建议在浏览器添加书签收藏本网页
添加书签方法:
1.电脑按键盘的Ctrl键+D键即可收藏本网页
2.手机浏览器可以添加书签收藏本网页
获取更多慕课答案,欢迎在浏览器访问我们的网站:http://mooc.mengmianren.com
注:请切换至英文输入法输入域名,如果没有成功进入网站,请输入完整域名:http://mooc.mengmianren.com/
我们的公众号
打开手机微信,扫一扫下方二维码,关注微信公众号:萌面人APP
本公众号可查看各种网课答案,还可免费查看大学教材答案
点击这里,可查看公众号功能介绍
APP下载
APP功能说明
1.可查看各种网课答案
点击【萌面人官网】,可查看知到智慧树,超星尔雅学习通,学堂在线等网课答案
点击【中国大学慕课答案】,可查看mooc慕课答案
2.可一键领取淘宝/天猫/京东/拼多多无门槛优惠券
如图所示,点击对应图标即可领取淘宝/天猫/京东/拼多多无门槛优惠券
届彤缸嵌散谰魂摔橡巳敦秦官