c程序设计中国大学mooc完整答案-买球的app软件下载

当前位置:正规买球app首页 » » 正文

7266 人参与  2022-11-05 00:16:53    点这评论
第1讲 了解计算机的工作原理

课后测验:了解计算机的工作原理

1、通常所说的主机是指:
    a、cpu
    b、计算机机箱
    c、显示器
    d、cpu、内存和外存

2、所谓“裸机”是指:
    a、单片机
    b、单板机
    c、不装备任何软件的计算机
    d、只装备操作系统的计算机

3、cpu包含
    a、运算器和控制器
    b、运算器和存储器
    c、控制器和存储器
    d、运算器、控制器、存储器、输入设备和输出设备

4、在计算机系统中,一个字节的二进制位数为
    a、16
    b、8
    c、32
    d、由 cpu的型号决定

5、在计算机中,一个字长的二进制位数是
    a、8
    b、16
    c、32
    d、随cpu的型号而定

6、软件与程序的区别是∶
    a、程序价格便宜、软件价格昂贵;
    b、程序是用户自己编写的,而软件是由厂家提供的;
    c、程序是用高级语言编写的,而软件是由机器语言编写的;
    d、软件是程序以及开发、使用和维护所需要的所有文档的总称,而程序只是软件的 一部分。

7、计算机软件可以分为:
    a、操作系统和应用软件
    b、系统软件和应用软件
    c、常用软件和不常用软件
    d、操作系统和网络软件

8、应用软件是指∶
    a、所有能够使用的软件
    b、能被各应用单位共同使用的某种软件
    c、所有微机上都应使用的基本软件
    d、专门为某一应用目的而编制的软件

9、切断计算机电源后,下列存储器中的信息会丢失的是:
    a、ram
    b、rom
    c、硬盘
    d、u盘

10、课程学习过程中需要使用到编程工具codeblocks,它属于______。
    a、系统软件
    b、应用软件
    c、必需软件
    d、支撑软件

11、计算机由运算器、_______、存储器、输入设备、输出设备五部分组成。

12、计算机中执行各种算术和逻辑运算操作的部件是_______。

13、计算机中控制执行指令,协调各部件运行,为各部件提供控制信号的部件是____________。

14、显示器和打印机都属于计算机体系结构中______部件的范畴。

15、计算机的指令包括_______和操作数两部分。

第2讲 信息在计算机中的表示

课后测验:信息在计算机中的表示

1、用8位无符号二进制数能表示的最大十进制数为
    a、127‍
    b、128
    c、255
    d、256

2、十进制数127转换成二进制数是
    a、11111111‍
    b、01111111‍
    c、10000000‍
    d、11111110

3、下列数值最大的是
    a、1100000b‍
    b、144o‍
    c、64h‍
    d、101

4、若[x]原=10000011,则[x]补=‍
    a、10000011‍
    b、11111100‍
    c、01111100‍
    d、11111101

5、如果x为负数,由[x]补求[-x]补是将‍
    a、[x]补各值保持不变‍
    b、[x]补符号位变反,其它各位不变‍
    c、[x]补除符号位外,各位变反,末位加1‍
    d、[x]补连同符号位一起各位变反,末位加1

6、ascii码(含扩展)可以用一个字节表示,则可以表示的ascii码值个数为‍
    a、1024‍
    b、256‍
    c、128
    d、80

7、英文小写字母d的ascii码为100,英文大写字母d的ascii码为‍
    a、50
    b、66
    c、52‍
    d、68

8、在计算机系统中,存储一个汉字的国标码所需要的字节数为‍
    a、1
    b、2
    c、3
    d、4

9、已知某数x的原码为10110100b,它的反码是
    a、10110100b
    b、00110100b
    c、11001011b
    d、11001100b

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语言出现的最晚,具有其他语言的一切优点

2、以下叙述中正确的是( )。
    a、c程序中注释部分可以出现在程序中任意合适的地方
    b、花括号"{"和"}"只能作为函数体的定界符
    c、构成c程序的基本单位是函数,所有函数名都可以由用户命名
    d、分号是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!\n"); return 0; }
    b、#include int main() { /*programming*/ printf("programming!\n"); return 0; }
    c、include void main() { /*programming*/ printf("programming!\n"); return 0; }
    d、#include int mian() { /*programming*/ printf("programming!\n"); return 0; }

7、c程序编译时,程序中的注释部分( )。
    a、参加编译,并会出现在目标程序中
    b、参加编译,但不会出现在目标程序中
    c、不参加编译,但会出现在目标程序中
    d、不参加编译,也不会出现在目标程序中

8、以下叙述中错误的是( )。
    a、c语言源程序经编译后生成后缀为obj的目标程序
    b、c程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件
    c、用c语言编写的程序称为源程序,它以ascii代码形式存放在一个文本文件中
    d、c语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令

9、编写c 程序一般需经过的几个步骤依次是( )
    a、编译、编辑、连接、调试
    b、编辑、编译、连接、调试
    c、编译、调试、编辑、连接
    d、编辑、调试、编译、连接

10、在c语言中,main函数默认返回一个( )类型的值。
    a、int
    b、float
    c、char
    d、void

11、以下不属于c语言语法允许使用的字符集合的是( )
    a、汉字
    b、大小写字母
    c、数字
    d、空白符

12、以下属于c语言语法保留字的是( )
    a、return
    b、int
    c、value
    d、main

13、以下属于合法的c语言标识符的是( )
    a、main
    b、short
    c、npu-2015
    d、8849

14、c语言源程序文件的后缀名为( )
    a、.c
    b、.h
    c、.cpp
    d、.res

15、以下说法正确的是( )
    a、大型c程序可以包含多个源程序文件,并且每个源程序文件可以单独编译。
    b、一个c程序只能包括一个源程序文件。
    c、c程序中main函数必须放在其他函数之前。
    d、c程序的函数可以不书写函数头,而只编写包括声明和执行语句的函数体。

第5讲 将简单数据引入c程序中

课后测验:将简单数据引入c程序中

1、( )是c语言的数据类型说明保留字。
    a、float
    b、signed
    c、integer
    d、char

2、类型修饰符unsigned不能修饰( )。
    a、char
    b、int
    c、long int
    d、float

3、下列选项中,均是合法的c语言整型常量的是( )。
    a、160 -0xffff 0011
    b、–0xcdf 01a 0xe
    c、–01 986,012 0668
    d、–0x48a 2e5 0x

4、下列选项中,均是合法的c语言实型常量的是( )。
    a、 1e 1 5e-9.4 03e2
    b、-.60 12e-4 -8e5
    c、123e 1.2e-.4 2e-1
    d、–e3 8e-4 5.e-0

5、设char a='\70';则变量a( )。
    a、包含1个字符
    b、包含2个字符
    c、包含3个字符
    d、说明不合法

6、( )是非法的c语言转义字符。
    a、'\b'
    b、'\0xf'
    c、'\037'
    d、'\''

7、以下选项中( )不是c语言常量。
    a、e-2
    b、012
    c、"a"
    d、'\n'

8、以下不是c语言支持的存储类别的是( )。
    a、auto
    b、static
    c、dynamic
    d、register

9、以下叙述中错误的是( )。
    a、c语言的标识符允许使用保留字。
    b、c语言的标识符应尽量做到“见其名知其意”。
    c、c语言的标识符必须以字母或下划线开头。
    d、c语言的标识符中,大、小写字母代表不同标识。

10、在以下各组标识符中,合法的c语言标识符是( )。
    a、b01 int
    b、table_1 t*.1
    c、0_t w10
    d、k% point

11、下面关于符号常量的说法正确的是()
    a、符号常量是以标识符形式出现的常量,一经定义,它所代表的常量值在其作用域内不能改变。
    b、可以将圆周率这个常量值定位为符号常量,定义方法为:#define pi=3.1415926
    c、符号常量名可以不遵循c语言的标识符命名规则。
    d、使用符号常量不仅便于程序的调试和维护,还能大大提高程序的运行速度。

12、已定义ch为字符型变量,以下赋值表达式中错误的是( )。
    a、ch='\'
    b、ch=62 3
    c、ch=null
    d、ch='\xaa'

第6讲 数值数据的运算与处理

课后测验:数值数据的运算和处理

1、在c语言中,要求参加运算的数必须是整数的运算符是( )。
    a、/
    b、*
    c、%
    d、=

2、表达式0x13 ^ 0x17的值是( )
    a、0x04
    b、0x13
    c、0xe8
    d、0x17

3、表达式3.6-5/2 1.2 5%2的值是( )。
    a、4.3
    b、4.8
    c、3.3
    d、3.8

4、在位运算中,操作数每右移一位,其结果相当于( )。
    a、操作数乘以2
    b、操作数除以2
    c、操作数除以4
    d、操作数乘以4

5、若有定义char c1=92,c2=92;则以下表达式中值为零的是( )。
    a、~c2
    b、c1&c2
    c、c1^c2
    d、c1|c2

6、设x,y,u,v均为浮点型,与数学公式 不等价的c语言表达式是( )。
    a、x*y/u*v
    b、x*y/u/v
    c、x*y/(u*v)
    d、x/(u*v)*y

7、若变量a、b已经正确定义并赋值,符合c语言语法的表达式是( )。
    a、
    b、a*a b
    c、a×a b
    d、a•a b

8、以下不能正确计算数学公式 值的c语言表达式是( )。
    a、1/3*sin(1/2)*sin(1/2)
    b、sin(0.5)*sin(0.5)/3
    c、pow(sin(0.5),2)/3
    d、1/3.0*pow(sin(1.0/2),2)

9、若有定义int x=2,y=3;则x & y的值是( )。
    a、0
    b、2
    c、3
    d、5

第7讲 逻辑数据的运算与处理

课后测验:逻辑数据的运算和处理

1、关于c程序关系运算、逻辑运算后得到的逻辑值的表述中,正确的是( )。
    a、假为0,真为随机的一个非0值
    b、假为0,真为1
    c、假为-1,真为1
    d、假为0,真为不确定的值

2、下列运算符中,优先级从高到低依次为( )。
    a、&& ! ||
    b、|| && !
    c、&& || !
    d、! && ||

3、设int i=10;表达式30-i<=i<=9的值是( )。
    a、0
    b、1
    c、9
    d、20

4、表达式!x等效于( )。
    a、x==1
    b、x==0
    c、x!=1
    d、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

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

第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

3、若有int i=5,j=4,k=6;float f;执行语句f=(i    a、4.0
    b、5.0
    c、6.0
    d、7.0

4、以下选项中非法的表达式是( )。
    a、0<=x<100
    b、i=j==0
    c、(char)(x<100)
    d、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

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

7、假设某表达式中包含int、long、unsigned、char类型的数据,则表达式最后的运算结果是( )类型。
    a、int
    b、long
    c、unsigned
    d、char

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)

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

10、设变量n为float类型,m为int型,则以下( )表达式能实现将n中的数值保留小数点后两位,第三位进行四舍五入运算。
    a、n=(n*100 0.5)/100.0
    b、m=n*100 0.5,n=m/100.0
    c、n=n*100 0.5/100.0
    d、n=(n/100 0.5)*100.0

11、假定有变量定义:int k=6,x=12;则能使x、k值为5、6的表达式是( )。
    a、x%= k
    b、x%=k k%5
    c、x-= k%5
    d、x-=k %5

12、若变量a为int类型,且其值为3,则执行表达式a =a-=a*a后,a的值是( )。
    a、-3
    b、9
    c、-12
    d、6

13、sizeof(char)的值是( )。
    a、1
    b、2
    c、非法
    d、8

14、若变量已正确定义并赋值,下面符合c语言语法的表达式是( )。
    a、a:=b 1
    b、a=b=c 2
    c、int(18.5%3)
    d、a=a 7=c b

15、判断年份y是否为闰年的表达式为()
    a、y%4==0
    b、y%4==0 && y0!=0
    c、(y%4==0&&y0!=0)||([email protected]==0)
    d、(y%4==0)||([email protected]==0&&y0!=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

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、(a*b*c)/x/y
    d、(a b c)/3

18、若int x=0123,则表达式(5 (int)(x))&(~2)的值是______________。

19、表达式((4|1)&3)的值是________。

20、表达式10<<3 1的值是_____。

21、已知a=7.5,b=2,c=3.6,表达式a>b && c>a || ab的值是_____。

22、设int a=-3,b=7,c=-1;则执行(a==0)&&(a=a%b
第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=4*3.14*r*r*r/3; { double v2,h=12; v2=3.14*r*r*h; } printf("%lf,%lf",v1,v2); }
    c、{ #define pi=3.14; double v1,r=3; v1=pi*r*r; }
    d、{ double s,a=5,b=10,h=8 s=(a b)*h/2.0 printf(“area=%lf”,s) }

5、以下关于c语言注释的说法正确的是()
    a、可以采用/*……*/的形式书写多行注释,其中的注释内容可以是任何字符。
    b、//注释表示从//开始直到本行末尾的所有字符均是注释内容。
    c、c语言的注释将参与编译器编译,并形成指令。
    d、写c语言程序时必须书写注释,否则会对程序的功能造成影响。

6、关于c语言语句书写格式的说法错误的是()
    a、c语言程序必须一行一个语句。
    b、c语言允许一行书写多个语句。
    c、c语言允许将一个语句分成多行书写。
    d、编写c程序时,建议使用空格或tab来做合理的间隔、缩进或对齐,使得程序形成逻辑相关的块状结构。

7、使用getchar和putchar函数进行单个字符输入输出时,必须使用预处理命令”#include”包括()文件。
    a、stdio.h
    b、stdlib.h
    c、math.h
    d、string.h

8、以下关于使用c语言实现输入输出的说法错误的是()
    a、c语言自身具备输入输出语句,可以直接实现输入输出功能。
    b、输入指从外部输入设备(如键盘、鼠标等)向计算机输入数据。
    c、输出指将数据从计算机送到外部输出设备(如打印机、显示器等)。
    d、c语言输入输出操作本质上是函数调用语句。

9、要使用putchar函数实现向显示器输出字符’a’,则可以使用()。
    a、putchar(a)
    b、putchar(“a”)
    c、putchar(65)
    d、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中将无确定值

第10讲 编程实现简单数据的输出

课后测验:编程实现简单数据的输出

1、以下叙述中正确的是( )。
    a、调用printf函数时,必须至少有一个输出项。
    b、使用printf函数时,必须在之前包含头文件stdio.h
    c、在c语言中,整数可以以多种进制。例如十二进制、八进制或十六进制的形式输出。
    d、调用printf函数时,可以省略格式控制串。

2、下面程序段执行后的输出结果是()。注:└┘符号代表空格 int a=123; printf(“[m],[%-4d],[d]”,a,a,a);‍
    a、[123],[└┘123],[1230]
    b、[123└┘ ],[└┘123],[0123]
    c、[└┘123],[123└┘],[0123]
    d、[└┘123],[123└┘],[173]

3、设有int a=123;执行语句printf(“%*d”,5,a);的输出结果是()。
    a、*123
    b、5123
    c、└┘└┘123
    d、编译错误

4、下面程序段执行后的输出结果是( )。 float x=-1023.012; printf("%8.3f,",x); printf(".3f",x);
    a、1023.012,-1023.012
    b、–1023.012,-1023.012
    c、1023.012, └┘-1023.012
    d、–1023.012, └┘-1023.012

5、下面程序段执行后的输出结果是( )。 int x=13,y=5; printf("%d",x%=(y/=2));
    a、3
    b、2
    c、1
    d、0

6、下面程序段执行后的输出结果是( )。 int x='f'; printf("%c",'a' (x-'a' 1));
    a、g
    b、h
    c、i
    d、j

7、设int a=1234;执行语句printf("-",a);后的输出结果是( )。
    a、12
    b、34
    c、1234
    d、出错

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

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

10、下面程序段执行后的输出结果是( )。 int x=102,y=012; printf("-,-",x,y);
    a、10,01
    b、02,12
    c、102,10
    d、102,12

11、下面程序段执行后的输出结果是( )。 int m=0256,n=256; printf("%o└┘%o",m,n);
    a、0256└┘0400
    b、0256└┘256
    c、256└┘400
    d、400└┘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

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

第11讲 编程实现简单数据的输入

课后测验:编程实现简单数据的输入

1、以下叙述中错误的是( )。
    a、调用scanf函数时,每个输入项必须为地址形式。
    b、使用scanf函数时,必须在之前包含头文件stdio.h
    c、在c语言中,整数可以以多种进制例如十进制、八进制或十六进制的形式输入。
    d、调用scanf函数时,如果输入项个数比给定的格式说明符多,将会出现编译错误。

2、关于scanf函数的格式控制字符串,()是错误的说法。
    a、格式说明必须包括%和type字符,其他域可以省略。
    b、type类型字符可以描述应输入的信息类型,可以支持整数的任意进制输入。
    c、*禁止字符是指从输入数据中读取类型相当的数据,但不将它保存在输入项中。
    d、宽度说明控制从输入数据中读出的最大字符数,有可能实际执行时读入的字符个数少于宽度说明的个数。

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↙

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↙

5、若定义x为double型变量,则能正确输入x值的语句是( )。
    a、scanf("%f",x);
    b、scanf("%f",&x);
    c、scanf("%lf",&x);
    d、scanf("%5.1f",&x);

6、下面程序段运行时从键盘上输入:12345678↙,其输出结果是( )。 int a , b ; scanf("-%*2d=",&a,&b); printf("%d",a b);
    a、46
    b、579
    c、5690
    d、出错

第12讲 编程实现选择分支

课后测验:编程实现选择分支

1、c语言对嵌套if语句的规定是else总是与( )配对。
    a、之前最近的尚未配对的if
    b、第一个if
    c、缩进位置相同的if
    d、最前面的if

2、关于goto语句的说法错误的是()
    a、goto语句的作用是使程序无条件跳转到别的位置。
    b、goto语句的语法形式为:goto 标号;
    c、goto语句可以跳转到程序中的任意位置,不受函数界限限制。
    d、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

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

8、若有定义:float w; int a,b;则合法的switch语句是( )。
    a、switch (w) { case 1.0:printf("*\n"); case 2.0:printf("**\n"); } ‍
    b、switch (a); { case 1:printf("*\n"); case 2:printf("**\n"); }
    c、switch (b) { case 1:printf("*\n"); default:printf("\n"); case 1 2:printf("**\n"); }‍
    d、switch (a b); { case 1:printf("*\n"); case 2:printf("**\n"); default:printf("\n"); }

9、无条件转移语句的一般形式是:goto语句标号;其中的语句标号可以是( )。
    a、整型数
    b、标识符
    c、保留字
    d、实型数

10、关于if语句的说法正确的是()。
    a、作为if语句条件的表达式只能是关系表达式或者逻辑表达f式。
    b、if-else语句的语法格式为 if (表达式1)语句1;else (表达式2) 语句2;
    c、if语句中的子语句可以是简单语句或复合语句,但不能是控制语句。
    d、if语句完全可以实现条件运算符的功能。

11、关于switch语句的说法正确的是()。
    a、switch语句的每个case分支中只能设置一个语句。
    b、switch语句中各个case分支顺序没有规定,但是default分支必须处在所有case分支之后,否则会影响程序执行效果。
    c、switch语句中default分支是可选的。
    d、switch语句后边的圆括号可以省略。

12、switch语句语法中的case分支必须是常量表达式且互不相同,值不能为()类型。
    a、整型
    b、字符型
    c、枚举型
    d、浮点型

13、switch语句可以用if语句完全代替。

14、switch语句的case表达式中可以包括变量。

15、条件表达式可以取代if语句。

16、switch语句中case分支和default分支的个数都是任意的。

17、switch中多个case分支可以执行相同的程序段。

18、内层break语句可以终止嵌套的switch,使最外层的switch结束。

19、switch语句的case分支可以使用复合语句、多个语句序列。

20、switch语句的表达式与case表达式的类型必须一致。

第13讲 编程实现嵌套的选择分支

课后测验:编程实现嵌套的选择分支

1、若a=1,b=3,c=5,d=4,则执行下面程序段后x的值是( )。 if (a    a、1
    b、2
    c、3
    d、4

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

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;

4、下面程序段表示以下( )式子。 if(a    a、
    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

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

第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    a、1,2,0
    b、2,1,0
    c、1,2,1
    d、2,1,1

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

4、下面程序的功能是从键盘输入一组字符,从中统计大写字母和小写字母的个数,选择 ( )填入到【 】中。 #include int main() { int m=0,n=0; char c; while ((【 】)!='\n') { 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)

5、语句while (!e){......}; 中的表达式!e等价于( )。
    a、e==0
    b、e!=1
    c、e!=0
    d、e==1

6、以下程序段( )。 x=-1; do{ x=x*x; }while (!x);
    a、是死循环
    b、循环执行2次
    c、循环执行1次
    d、有语法错误

7、以下叙述正确的是( )。
    a、do-while语句构成的循环不能用其它语句构成的循环来代替
    b、do-while语句构成的循环只能用break语句退出
    c、用do-while语句构成的循环,在while后的表达式为非零时结束循环
    d、用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

9、已知:int i=5,下列do-while循环语句的循环次数为( )。 do{ printf("%d\n",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

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

14、下面程序段的循环次数是( )。 for (i=2; i==0; ) printf("%d",i--);‍
    a、无限次
    b、0次
    c、1次
    d、2次

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

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;

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

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);

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);

20、以下不是死循环的程序段是( )。
    a、int i=100; while (1) { i=i0 1 ; if (i>100) break ; }
    b、for ( ; ; ) ;
    c、int k=0; do { k ; } while (k>=0);
    d、int s=36; while (s) ; --s ;

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--);

22、do-while允许从外部转到循环体内。

23、do-while循环中,根据情况可以省略while。

24、for循环中三个表达式可以任意省略,while、do-while的表达式也是如此。

25、continue语句只能用于三个循环语句中。

26、for循环的循环体语句中,可以包含多条语句,但必须用大括号括起来。

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

28、下面程序运行时从键盘上输入:420↙,写出程序的运行结果。 #include int main() { char c; while ((c=getchar())!='\n') 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; }

29、写出下面程序执行后的运行结果。 #include int main() { int k=1,n=263 ; do { k*=n ; n/=10 ; } while (n) ; printf("%d",k); return 0; }

30、写出下面程序执行后的运行结果。 #include int main() { int i=5 ; do { switch (i) { case 4: i-- ; break ; case 6: i-- ; continue ; } i-- ; i-- ; printf("%d",i); } while (i>0); return 0; }

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

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

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

第15讲 循环的终止、加快和嵌套

课后测验:循环的终止、加快和嵌套

1、下面关于循环语句的描述中,( )是错误的。
    a、循环体内可以包含有循环语句
    b、循环体内必须同时出现break语句和continue语句
    c、循环体内可以出现选择语句
    d、循环体内可以是空语句

2、c语言的跳转语句中,对于break和continue说法正确的是( )
    a、break语句只应用与循环体中
    b、continue语句只应用于循环体中
    c、break是无条件跳转语句,continue不是
    d、break和continue的跳转范围不够明确,容易产生问题

3、下面程序段运行时从键盘上输入:2473↙,其输出结果是( )。 #include int main() { int c; while ((c=getchar())!='\n') 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("\n"); return 0; }‍
    a、668977
    b、668966
    c、66778777
    d、6688766

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

第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、10*t i
    b、t i
    c、10*i t
    d、s*10 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(a*a*a b*b*b c*c*c== 3 ) printf("%d\n",n); } return 0; }
    a、【1】 a=0;a<9 【2】 c*100 b*10 a 【3】 n
    b、【1】 a=1;a<9 【2】 c*100 b*10 a 【3】 n
    c、【1】 a=0;a<9 【2】 a*100 b*10 c 【3】 n
    d、【1】 a=b 1;a<9 【2】 c*100 b*10 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; }

5、写出下面程序执行后的运行结果。 #include int main() { int i=0,a=0; while(i<40) { for(;;) { if((i)==0) break; else i--; } i =11; a =i; } printf("%d",a); return 0; }

第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语言所有函数本质上都是外部函数

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

6、若调用一个函数int f(),且此函数中没有return语句,则正确的说法是( )。
    a、该函数没有返回值
    b、该函数返回一个系统默认值
    c、该函数返回一个确定的值
    d、该函数返回一个不确定的值

7、若定义函数: fun(int a,float b) { return a b; } 则该函数的返回类型是( )。
    a、void
    b、int
    c、float
    d、不确定

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

14、在函数调用时,以下叙述中正确的是( )。
    a、函数调用后必须带回返回值
    b、实际参数和形式参数可以同名
    c、函数间的数据传递不可以使用全局变量
    d、主调函数和被调函数总是在同一个文件里

15、下面程序执行后的输出结果是( )。 #include void f(int x) { return (3*x*x); } 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);

17、c语言函数返回类型的默认定义类型是__________(使用类型标识符描述)。

18、可以将被调函数中获得的值返回给主调函数的语句是__________(使用c语言保留字描述)。

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函数计算: 的调用语句为 ______________________________(注意保持原算式的各操作数和运算符顺序,不添加非必需的运算符)。

20、若函数定义为: int data() { float x=9.9; return(x); } 则函数返回的值是__________。

第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){……}

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);

3、关于函数原型声明,以下叙述中错误的是( )。
    a、如果函数定义出现在函数调用之前,可以不必加函数原型声明
    b、如果在所有函数定义之前,在函数外部已做了声明,则各个主调函数不必再做函数原型声明
    c、函数在调用之前,一定要给出函数原型或函数定义,保证编译系统进行调用检查
    d、标准库函数不需要函数原型声明

4、在c语言中,计算 正确的是( )。
    a、x^y
    b、pow(x,y)
    c、x**y
    d、power(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",n);} 以下叙述中错误的是( )。
    a、若只在主函数中对函数f进行说明,则只能在主函数中正确调用函数f
    b、若在主函数前对函数f进行说明,则在主函数和其后的其它函数中都可以正确调用函数f
    c、对于以上程序,编译时系统会提示出错信息:“提示对f函数重复说明”。
    d、函数f无返回值,所以可用void将其类型定义为无值型

第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

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

6、下面程序执行后的输出结果是( )。 #include void fun(int x, int y, int z) { z=x*x y*y; } int main() { int a=31; fun(5,2,a); printf("%d",a); return 0; }
    a、0
    b、29
    c、31
    d、无定值

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

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

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));

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

第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

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、形参可以使用的存储类型说明符与局部变量完全相同

10、全局变量的存储类型可以定义为( )。
    a、auto或static
    b、extern或register
    c、auto或extern
    d、extern或static

11、以下只有在使用时才为该类型变量分配内存的存储类型是( )。
    a、auto和 static
    b、auto和 register
    c、register和 static
    d、extern和 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

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

14、凡在函数中未指定存储类别的局部变量,其默认的存储类别为( )。
    a、auto
    b、register
    c、static
    d、extern

15、被调用函数执行结束时,此函数中定义的( )类型的变量不被释放。
    a、auto
    b、register
    c、static
    d、所有的存储类型

第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源程序经过编译和连接后,成为二进制形式的可执行文件,称为程序映像。

10、进程即为运行程序时,由操作系统载入到计算机内存中的可执行文件。

第22讲 设计函数-接口与实现分离

课后测验:设计函数-接口与实现分离

1、对象初始化指创建对象时给它提供初始值。

2、c语言规定给对象设置的初始值可以是变量。

3、c语言规定未初始化的全局对象和静态局部对象其初值由0填充。

4、c语言规定未初始化的局部对象其初始值对于数值型来说为0。

5、c语言允许对对象进行多次定义,但需保证多次定义一致。

6、c语言中对一个对象进行多次声明是合法的,但要保证多次声明一致。

7、在一个项目的多个源程序文件中,只需要出现一次对所调用函数的声明即可支持项目全部源程序文件对该函数进行调用。

8、对象的存储空间可以通过对象声明获得。

9、可以在对象声明时对其进行初始化。

10、c语言支持将对象的定义和声明分离,以适应多文件的程序结构。

第23讲 编写规模化程序

课后测验:编写规模化程序

1、c语言支持在一个函数定义前加上( )修饰,将函数设置成内部函数。
    a、auto
    b、static
    c、private
    d、internal

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程序中任意一行上

2、以下叙述中正确的是( )。
    a、在程序的一行上可以出现多个有效的预处理命令行
    b、使用带参数的宏时,参数的类型应与宏定义时的一致
    c、宏替换不占用运行时间,只占用编译时间
    d、c语言的编译预处理就是对源程序进行初步的语法检查

3、以下有关宏替换的叙述中错误的是( )。
    a、宏替换不占用运行时间
    b、宏名无类型
    c、宏替换只是字符替换
    d、宏名必须用大写字母表示

4、设#define l(x) 2*3.14*x,则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

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) x*x
    b、#define power(x) (x)*(x)
    c、#define power(x) (x*x)
    d、#define power(x) ((x)*(x))

8、下面程序执行后的输出结果是( )。 #include #define add(x) x x int 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

9、下面程序执行后的输出结果是( )。 #include #define x 5 #define y x 1 #define z y*x/2 int main() { int a=y; printf("%d ",z); printf("%d",--a); return 0; }
    a、7 6
    b、12 6
    c、12 5
    d、7 5

10、下面程序执行后的输出结果是( )。 #include #define double(r) r*r int main() { int x=1,y=2,t; t = double(x y); printf("%d",t); return 0; }
    a、5
    b、6
    c、7
    d、8

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;

12、若有宏定义: #define n 3 #define y(n) ((n 1)*n) 则表达式2*(n y(5 1))的值是( )。
    a、出错
    b、42
    c、48
    d、54

13、已知宏定义#define p(x,y,z) x=y*z;则宏替换p(a,x 5,y-3.1)应为( )。
    a、a=x 5*y-3.1;
    b、a=(x 5)*(y-3.1);
    c、a=x 5*y-3.1
    d、a=(x 5)*(y-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

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

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

17、下面程序执行后的输出结果是( )。 #include #define r 0.5 #define area(x) r*x*x int 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

18、c语言中的预定义宏__date__指定程序编译的日期格式为( )。
    a、mmm dd yyyy
    b、yyyy mmm dd
    c、yyyy-mmm-dd
    d、d mmm yyyy

19、写出下面程序执行后的运行结果。 #include #define n 2 #define m n 1 #define num 2*m 1 int main() { int i; for(i=1;i<=num;i ) printf("%d",i); return 0; }

20、写出下面程序执行后的运行结果。 #include #define sqr(x) x*x int main() { int a=16, k=2, m=1; a/=sqr(k m)/sqr(k m); printf("%d",a); return 0; }

21、写出下面程序执行后的运行结果。 #include #define f(x,y) (x)*(y) int main() { int a=3, b=4; printf("%d", f(a , b )); return 0; }

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

23、头文件ch09k006.h的内容是: #define n 5 #define m1 n*3 写出下面程序执行后的运行结果。 #include #include "ch09k006.h" #define m2 n*2 int main() { int i; i=m1 m2; printf("%d",i); return 0; }

第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都不能定义为用户标识符

5、以下叙述中正确的是( )。
    a、用#include包含的头文件的后缀必须是“.h”
    b、若一些源程序中包含某个头文件;当该头文件有错时,只需对该头文件进行修改, 包含此头文件所有源程序不必重新进行编译
    c、宏命令行可以看作是一行c语句
    d、c编译中的预处理是在编译后运行前进行的

6、下面叙述中正确的是( )。
    a、宏定义是c语句,所以要在行末加分号
    b、可以使用#undef命令来终止宏定义的作用域
    c、在进行宏定义时,宏定义不能层层嵌套
    d、对程序中用双引号括起来的字符串内的字符,与宏名相同的要进行置换

7、在c语言标准库头文件中,包含了许多系统函数的原型声明,因此只要程序中使用了这些函数,则应包含这些头文件,以便编译系统能对这些函数调用进行检查。

8、#include命令可以包含一个含有函数定义的c语言源程序文件。

9、用#include预处理命令能够提高程序运行效率。

10、#include "c:\\user\\f1.h"是正确的包含命令,表示文件f1.h存放在c盘的user目录下。

11、可以使用条件编译命令来选择某部分程序是否被编译。

12、在软件开发中,常用条件编译命令来形成程序的调试或正式版本。

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

14、写出下面程序执行后的运行结果。 #include #define debug int main() { int a=20 , b=10 , c; c=a/b; #ifdef debug printf("%d/%d=",a,b); #endif printf("%d",c); return 0; }

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

第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";

5、以下能正确定义一维数组a的选项是( )。
    a、int a(10);
    b、int n=10,a[n];
    c、int n; scanf("%d",&n); int a[n];
    d、#define size 10 int a[size];

6、若有定义:int a[10];则正确引用数组a元素的是( )。
    a、a[10]
    b、a[3]
    c、a(5)
    d、a[-10]

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

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

11、若有定义:int a[3][4];则正确引用数组a元素的是( )。
    a、a[2][4]
    b、a[3][3]
    c、a[0][0]
    d、a[3][4]

12、若定义了int b[][3]={1,2,3,4,5,6,7};则b数组第一维的长度是( )。
    a、2
    b、3
    c、4
    d、无确定值

13、若有定义:int a[3][4]=;以下叙述中正确的是( )。
    a、只有元素a[0][0]可得到初值0
    b、此说明语句不正确
    c、数组a中各元素都可得到初值,但其值不一定为0
    d、数组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

15、若二维数组a有m列,则计算元素a[i][j]在数组中相对位置的公式为( )。
    a、i*m j
    b、j*m i
    c、i*m j-1
    d、i*m j 1

16、设char x[]="12345",y[]={'1','2','3','4','5',''};以下叙述中正确的是( )。
    a、x数组的长度等于y数组的长度
    b、x数组的长度大于y数组的长度
    c、x数组的长度少于y数组的长度
    d、x数组与y数组的存储区域相同

17、假定一个int型变量占用4个字节,若有定义:int x[10]={0,2,4}; 则数组x在内存中所占字节数是( )。
    a、3
    b、12
    c、10
    d、40

18、若有定义:int a[3][4]={{1,2},,{4,6,8,10}};则初始化后a[1][2]的值为__________。

19、若有定义:double x[3][5];则x数组中行下标的上限为__________。

第28讲 批量数据的遍历与访问

课后测验:批量数据的遍历与访问

1、以下程序的输出结果是( )。 int main() { int a[4][4]={{1,3,5},{2,4,6},{3,5,7}}; printf("%d%d%d%d\n",a[0][3],a[1][2],a[2][1],a[3][0]); return 0; }
    a、0650
    b、1470
    c、5430
    d、不确定

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、下面程序段执行后的输出结果是( )。 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

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

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\n", flag); return 0; }
    a、x!=a[i]
    b、!(x==a[i])
    c、x==a[i]
    d、!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; }

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

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

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

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("=",a[i][j]); putchar('\n'); } return 0; }

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("m",s); } printf("\n"); } return 0; }

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

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]max) { max=a[i]; k=i;} } a[j]=max , a[k]=min; for (i=0; i<10; i ) printf("%d",a[i]); return 0; }

15、下面程序的功能是向数组输入数据,逆序置换后输出。逆序置换是指数组的首元素和末元素置换,第二个元素和倒数第二个元素置换,………。请填空使程序完整、正确。 #include #define n 8 int main() { int i,j,t,a[n]; for(i=0;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("-",a[i][j]); printf("\n"); } return 0; }

第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])

3、下面程序执行后的输出结果是( )。 #include int f(int b[],int m,int n) { int i,s=0; for(i=m;i    a、10
    b、18
    c、8
    d、15

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

5、下面程序执行后的输出结果是( )。 #include void f(int a[],int i,int j) { int t; if (i    a、54321
    b、52341
    c、12345
    d、12543

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);

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

第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("d",m); return 0; }

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\n", (int)ceil(sum)); return 0; }

3、下面的程序实现计算整数n的_______。 #include int 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("d",fact[i]); printf("\n"); } 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";

2、字符数组s不能作为字符串使用的是( )。
    a、char s[]="happy";
    b、char s[6]={'h','a','p','p','y',''};
    c、char s[]={"happy"};
    d、char s[5]={'h','a','p','p','y'};

3、下面有关字符数组的描述中错误的是( )。
    a、字符数组可以存放字符串
    b、字符串可以整体输入、输出
    c、可以在赋值语句中通过赋值运算对字符数组整体赋值
    d、不可以用关系运算符对字符数组中的字符串进行比较

4、下面程序段执行后的输出结果是( )。 char c[5]={'a','b','','c',''}; printf("%s",c);
    a、'a''b'
    b、ab
    c、ab c
    d、abc

5、有两个字符数组a、b,则以下( )是正确的输入语句。
    a、gets(a,b);
    b、scanf("%s%s",a,b);
    c、scanf("%s%s",&a,&b);
    d、gets("a");gets("b");

6、下面程序段执行后的输出结果是( )。 char a[7]="abcdef"; char b[4]="abc"; strcpy(a,b); printf("%c",a[5]);
    a、空格
    b、\0
    c、e
    d、f

7、下面程序段执行后的输出结果是( )。 char c[]="\t\b\\\0will\n"; printf("%d",strlen(c));
    a、14
    b、3
    c、9
    d、6

8、判断字符串a是否大于b,应当使用( )。
    a、if (a>b)
    b、if (strcmp(a,b))
    c、if (strcmp(b,a)>0)
    d、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数组中都没有字符串结束符,故长度都不能确定

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

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

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、错误

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、sw*a
    d、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

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

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

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

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

20、写出下面程序执行后的运行结果。 #include #include void f(char p[][10],int n) { char t[20]; int i,j; for(i=0;i
21、输入hello↙,写出下面程序的运行结果。 #include #include int main() { char s[80],t[200]; int i,sl ; gets(s); sl = strlen(s); for(i=0 ;i
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; }

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

第32讲 实现排序算法

课后测验:实现排序算法

1、一个排序算法是稳定的,就是当有两个相等记录的关键字r和s,且在原本的列表中r出现在s之前,在排序过的列表中r也将会是在s之前。

2、冒泡排序法是一种稳定的排序算法。

3、选择排序法是一种稳定的排序算法。

4、插入排序的基本思想是每步将一个待排序的记录按其排序码值的大小,插到前面已经排好的文件中的适当位置,直到全部插入完为止。

5、选择排序的基本思想是每步从待排序的记录中选出排序码最小的记录,顺序存放在已排序的记录序列的后面,直到全部排完。

6、冒泡排序和快速排序属于交换类排序算法,其基本思想是:两两比较待排序记录的排序码,并交换不满足顺序要求的那些偶对,直到满足条件为止。

7、插入排序是将两个或两个以上的有序子表合并成一个新的有序表。

8、快速排序用到了分治法的算法思想,将原问题分解为若干个规模更小但结构与原问题相似的子问题,递归地解这些子问题,然后将这些子问题的解组合为原问题的解。

9、选择合适的排序方法应综合考虑下列因素:①待排序的记录数目n;②记录的大小(规模);③关键字的结构及其初始状态;④对稳定性的要求;⑤语言工具的条件;⑥存储结构;⑦时间和辅助空间复杂度等。

10、一般情况下,快速排序算法的时间性能比冒泡排序算法的时间性能要好。

11、写出下面程序执行后的运行结果。 #include void sort(int a[],int s, int n) { int i,j,t; for(i=s;i
12、写出下面程序执行后的运行结果。 #include void reverse(int a[],int n) { int i,t; for(i=0;i
13、运行下面程序,输入10└┘9└┘8└┘7└┘6└┘5└┘4└┘3└┘2└┘1↙写出下面程序执行后的运行结果。 #include void sort(int a[],int low,int high) { if(low=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; }

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

16、运行程序,输入4,写出程序的输出结果。 #include int search(int a[10],int m) { int x1=0,x2=9,mid; while (x1<=x2) { mid=(x1 x2)/2; if (ma[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; }

第33讲 用空间换取时间编程方法

课后测验:用空间换取时间编程方法

1、下面程序尝试使用空间换取时间的策略实现第1至100项中任意菲波那切数列的求解,请填空完善程序。 # include # define n 100 int fab[n]={-1,-1,-1,-1,……};//将数组fab全部初始化为-1 int 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

2、算法复杂度分为时间复杂度和空间复杂度。其作用: 时间复杂度是度量算法执行的时间长短;而空间复杂度是度量算法所需存储空间的大小。

3、对于一个算法,其时间复杂度和空间复杂度往往是相互影响的。当追求一个较好的时间复杂度时,可能会使空间复杂度的性能变差,即可能导致占用较多的存储空间;反之,当追求一个较好的空间复杂度时,可能会使时间复杂度的性能变差,即可能导致占用较长的运行时间。

4、当设计一个算法(特别是大型算法)时,要综合考虑算法的各项性能,算法的使用频率,算法处理的数据量的大小,算法描述语言的特性,算法运行的机器系统环境等各方面因素,才能够设计出比较好的算法。

5、进行a,b两个变量值交换时使用{ a=a b;b=a-b;a=a-b;}比使用{ int c; c=a; a=b;b=a;}获得了更好的空间性能,但是具有比其差的时间性能。

6、有时可以通过使用带参数的宏定义来替换掉相应的函数定义,从而获得更好的时间性能。

第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;

4、假如指针p已经指向整型变量x,则(*p) 相当于( )。
    a、x
    b、p
    c、*(p )
    d、&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';

第35讲 指针运用的风险控制

课后测验:指针运用的风险控制

1、若有int *p,a=4;和p=&a;下面( )均代表地址。
    a、a,p,*&a
    b、&*a,&a,*p
    c、*&p,*p,&a
    d、&a,&*p,p

2、若变量已正确定义并且指针p已经指向变量x,则*&x相当于( )。
    a、x
    b、p
    c、&x
    d、&*p

3、若定义了int m,n=0,*p1=&m;则下列( )表达式与m=n等价。
    a、m=*p1
    b、*p1=&*n
    c、*&p1=&*n
    d、*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\n",a); printf("b=%d\n",b); return 0; }
    a、-1
    b、1
    c、0
    d、4

7、已有定义int k=2;int *ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值是( )。
    a、k=*ptr1 *ptr2
    b、ptr2=k
    c、ptr1=ptr2
    d、k=*ptr1*(*ptr2)

8、有如下函数和变量定义int a=25;执行语句print_value(&a);后的输出结果是( )。 void print_value(int *x) { printf("%d", *x); }
    a、23
    b、24
    c、25
    d、26

9、若有定义int a=3,b,*p=&a;则下列语句中( )使b不为3。
    a、b=*&a;
    b、b=*p;
    c、b=a;
    d、b=*a;

10、若有定义int n=0,*p=&n,**q=&p;则以下选项中,正确的赋值语句是( )。
    a、p=1;
    b、*q=2;
    c、q=p;
    d、*p=5;

11、下面程序执行后的输出结果是( )。 #include int main() { int x[5]={2,4,6,8,10}, *p,**pp; p=x , pp=&p; printf("%d",*(p )); printf("=",**pp); return 0; }
    a、4 4
    b、2 4
    c、2 2
    d、4 6

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

第36讲 数组元素的简洁表示

课后测验:数组元素的简洁表示

1、若有定义 char s[10];则在下面表达式中不表示s[1]的地址的是( )。
    a、s 1
    b、s
    c、&s[0] 1
    d、&s[1]

2、若有定义int a[5],*p=a;则对a数组元素的正确引用是( )。
    a、*&a[5]
    b、a 2
    c、*(p 5)
    d、*(a 2)

3、若有定义int a[5],*p=a;则对a数组元素地址的正确引用是( )。
    a、p 5
    b、*a 1
    c、&a 1
    d、&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;

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

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])

7、设double *p[6];则( )。
    a、p是指向double型变量的指针
    b、p是double型数组
    c、p是指针数组,其元素是指向double型变量的指针
    d、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("-",*(p ));
    b、for(i=0;i<6;i ) printf("-",*(p i));
    c、for(i=0;i<6;i ) printf("-",*p );
    d、for(i=0;i<6;i ) printf("-",(*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

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

11、若有定义int a[2][3];则对a数组的第i行,第j列元素值的正确引用是( )。
    a、*(*(a i) j)
    b、(a i)[j]
    c、*(a i j)
    d、*(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

13、若有定义 int a[4][6]; 则能正确表示a数组中任一元素a[i][j](i、j均在有效范围内)地址的表达式( )。
    a、&a[0][0] 6*i j
    b、&a[0][0] 4*j i
    c、&a[0][0] 4*i j
    d、&a[0][0] 6*j i

14、若有定义int t[3][2];能正确表示t数组元素地址的表达式是( )。
    a、&t[3][2]
    b、t[1][1]
    c、t[2]
    d、t[3]

15、若有定义int a[4][5];下列( )表达式是错误的。
    a、*a
    b、*(*(a 2) 3)
    c、&a[2][3]
    d、 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、随机值

17、定义如下一维数组:int a[5],*p;则下面描述错误的是( )
    a、表达式p=p 1是合法的
    b、表达式a=a 1是合法的
    c、表达式p-a是合法的
    d、表达式a 2是合法的

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])

19、有如下程序段: int *p,a[6]={-1,0,1,2,3,4}; p=a 3; 执行该程序段后,*p的值为 ( )
    a、4
    b、2
    c、1
    d、null

20、若有定义int a[3][4],*p=&a[0][0];则对a数组的第i行,第j列元素值的正确引用是( )。
    a、*(*(p i) j)
    b、(p i)[j]
    c、*(p 4*i j)
    d、*(p i) j

21、在c语言中,数组名是一个地址___________(常量/变量),不能对它进行赋值运算。

22、若有定义int w[10]={23,54,10,33,47,98,72,80,61},*p=w;则不移动指针p,且通过指针p引用值为98的数组元素的表达式是___________。

23、若有定义int a[2][3]={2,4,6,8,10,12};则*(&a[0][0] 2*2 1)的值是___________

24、若有定义int a[2][3]={1,2,3,4,5,6};*(a[1] 2)的值是___________。

第37讲 大批量数据的简洁表示

课后测验:大批量数据的简洁表示

1、下面程序执行后的输出结果是( )。 #include int main() { int a[][4]={1,3,5,7,9,11,13,15,17,19,21,23}; int (*p)[4], i=2, j=1; p=a; printf("%d",*(*(p i) j)); return 0; }
    a、9
    b、11
    c、17
    d、19

2、若有程序段int a[2][3],(*p)[3];p=a;则对a数组元素地址的正确引用是( )。
    a、*(p 2)
    b、p[2]
    c、p[1] 1
    d、(p 1) 2

3、若有程序段int a[2][3],(*p)[3];p=a;则对a数组元素的正确引用是( )。
    a、(p 1)[0]
    b、*(*(p 2) 1)
    c、*(p[1] 1)
    d、p[1] 2

4、若有定义int (*p)[4]; 则标识符p( )。
    a、是一个指向整型变量的指针
    b、是一个指针数组名
    c、是一个指针,它指向一个含有四个整型元素的一维数组
    d、定义不合法

5、以下正确的定义和赋值语句是( )。
    a、int b[3][5],(*p)[5],(*q)[5]; p=b; q=b;
    b、float b[3][5],(*p)[3]; p[0]=b[0] ; p[2]=*b 4 ;
    c、double b[3][5],s[5][3], *q; q=b ; s=q ;
    d、int b[10],*q; char *s ; q=b ; s=b ;

6、若要对a进行合理的自增运算,则a应具有( )说明。
    a、int a[3][2];
    b、char *a[]={"12","ab"};
    c、char (*a)[3];
    d、int b[10],*a=b;

7、下面程序运行时从键盘上输入:1 2 3↙,其输出结果是( )。 #include int main() { int a[3][2]=,(*ptr)[2],i,j; for(i=0;i<2;i ) {ptr=a i; scanf("%d",ptr); ptr ;} for(i=0;i<3;i ) for(j=0;j<2;j ) printf("%d",a[i][j]); return 0; }
    a、编译错误信息
    b、102000
    c、123000
    d、102030

8、以下正确的是( )。
    a、int *b[]={1,3,5,7,9};
    b、int a[5], *num[5]={&a[0],&a[1],&a[2],&a[3],&a[4]};
    c、int a[]={1,3,5,7,9}, *num[5]={a[0],a[1],a[2],a[3],a[4]};
    d、int a[3][4],(*num)[4]; num[1]=&a[1][3];

9、有以下程序段: int a[3][2]={1,2,3,4,5,6,},*p[3]; p[0]=a[1]; 则*(p[0] 1)所代表的数组元素是( )。
    a、a[0][1]
    b、a[1][0]
    c、a[1][1]
    d、a[1][2]

10、下面程序段执行后的输出结果是( )。 int a[]={2,4,6,8,10,12,14,16,18,20,22,24},*q[4],k; for (k=0; k<4; k ) q[k]=&a[k*3]; printf("%d",q[3][0]);
    a、8
    b、16
    c、20
    d、输出不合法

11、若有定义int s[4][5],(*ps)[5]=s;则对s数组元素的正确引用是( )。
    a、ps 1
    b、*(ps 3)
    c、ps[0][2]
    d、*(ps 1) 3

12、有以下程序段: int *p[3],a[6],i; for (i=0; i<3; i ) p[i]=&a[2*i] ; 则*(p[1] 1)引用的是a数组元素___________。

13、若有定义int a[2][4],(*p)[4]=a;用指针变量p(不改变p)表示数组元素a[1][2]为___________。

第38讲 完美实现函数之间的数据交换

课后测验:完美实现函数之间的数据交换

1、下面程序执行后的输出结果是( )。 #include void fun(int a[]) { a[0] = a[-1] a[1]; } int main() { int a[10]={1,2,3,4,5,6,7,8,9,10}; fun(&a[2]); printf("%d", a[2]); return 0; }
    a、6
    b、7
    c、8
    d、9

2、下面程序执行后的输出结果是( )。 #include int b=2; int func(int *a) { b = *a; return(b);} int main() { int a=2, res=2; res = func(&a); printf("%d",res); return 0; }
    a、4
    b、6
    c、8
    d、10

3、函数char* fun(char *p){ return p; }的返回值是( )。
    a、形参p中存放的地址值
    b、无确切的值
    c、一个临时存储单元的地址
    d、形参p自身的地址值

4、以下函数的功能是( )。 fun(char *a,char *b) { while((*a!='\0')&&(*b!='\0')&&(*a==*b)) { a ;b ;} return(*a-*b); }
    a、计算a和b所指字符串的长度之差
    b、将b所指字符串连接到a所指字符串中
    c、将a所指字符串连接到b所指字符串后面
    d、比较a和b所指字符串的大小

5、下面程序执行后的输出结果是( )。 #include void fun(char *c,int d) { *c=*c 1; d=d 1; printf("%c,%c,",*c,d); } int main() { char a='a', b='a'; fun(&b,a); printf("%c,%c",a,b); return 0; }
    a、b,b,a,b
    b、b,a ,b,a
    c、a,b,a,b
    d、a,b,a,b

6、以下叙述中正确的是( )。
    a、c语言允许main函数带形参,且形参个数和形参名均可由用户指定
    b、c语言允许main函数带形参,形参名只能是argc和argv
    c、当main函数带有形参时,传给形参的值只能从命令行中得到
    d、若有说明int main(int argc,char **argv),则argc的值必须大于1

7、关于主函数的形式参数,下列说法正确的是( )。
    a、可以有两个
    b、是在程序编译时获得实际值
    c、不可以由用户自己定义名字
    d、类型可以是实型

8、不合法的main函数形式参数表示是( )。
    a、int main(int a,char *c[])
    b、int main(int arc,char **arv)
    c、int main(int argv,char *argc[])
    d、int main(int argc,char *argv)

9、有以下程序: #include #include int main(int argc,char *argv[]) { int i,len=0; for(i=1;i    a、17
    b、9
    c、16
    d、12

第39讲 字符串查找与匹配

课后测验:字符串查找与匹配

1、设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是( )。
    a、c=*p1 *p2;
    b、p1=p2;
    c、p2=c;
    d、c=*p1*(*p2);

2、下面判断正确的是( )。
    a、char *a="china"; 等价于 char *a; *a="china" ;
    b、char *s="china"; 等价于 char *s; s="china" ;
    c、char str[10]={"china"}; 等价于 char str[10]; str[]={"china";}
    d、char c[4]="abc",d[4]="abc"; 等价于 char c[4]=d[4]="abc" ;

3、下面能正确给字符串s赋值的是( )。
    a、char s[6]="abcde";
    b、char s[5]={'a','b','c','d','e'} ;
    c、char s[6] ; s="abcde";
    d、char *s; scanf("%s",s);

4、若有程序段char s[]="china"; char *p ; p=s ;以下叙述中正确的是( )。
    a、*p与s[0]相等
    b、s和p完全相同
    c、数组s中的内容和指针变量p中的内容相等
    d、s数组长度和p所指向的字符串长度相等

5、若有定义char a[]="itismine", *p="itismine";以下叙述中错误的是( )。
    a、a 1表示的是字符't'的地址
    b、p不能再指向别的字符串常量
    c、a数组所占字节数为9
    d、p变量中存放的地址值可以改变

6、若有定义char s[6],*ps=s;则正确的赋值语句是( )。
    a、ps="12345";
    b、s="12345";
    c、*s="12345";
    d、*ps="12345";

7、若有定义char *cc[2]={"1234","5678"};以下叙述中正确的是( )。
    a、cc数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址
    b、cc数组的两个元素中各自存放了字符串"1234"和"5678"的首地址
    c、cc是指针变量,它指向含有两个数组元素的一维字符数组
    d、cc数组元素的值分别是"1234"和"5678"

8、下面程序段中,for循环的执行次数是( )。 char *s="\ta\018bc" ; for ( ; *s!='\0' ; s ) printf("*");
    a、6
    b、9
    c、7
    d、5

9、下面程序段执行后的输出结果是( )。 char *s="abcde" ; s =2; printf("%d",s);
    a、cde
    b、字符'c'的地址
    c、字符'c'
    d、不确定

10、下面程序段执行后的输出结果是( )。 char a[]="language",*p; p=a ; while (*p!='u') { printf("%c",*p-32); p ;}
    a、lang
    b、language
    c、language
    d、language

11、下面程序执行后的输出结果是( )。 #include char cchar(char ch) { if(ch>='a' && ch<='z') ch=ch-'a' 'a'; return ch; } int main() { char s[]="abc abc=defdef",*p=s; while(*p) { *p=cchar(*p); p ; } printf("%s",s); return 0; }
    a、abc abc=defdef
    b、abc abc=defdef
    c、abcaabcdefdef
    d、abcabcdefdef

12、下面程序执行后的输出结果是( )。 #include int main() { char a[10]={9,8,7,6,5,4,3,2,1,0},*p=a 5; printf("%d",*--p); return 0; }
    a、5
    b、编译错误
    c、a[4]的地址
    d、3

13、下面程序执行后的输出结果是( )。 #include int main() { char s[]="yes\n/no",*ps=s; puts(ps 4); *(ps 4)=0; puts(s); return 0; }
    a、/no yes
    b、n/no yes /no
    c、/no yes /no
    d、/no yes/no

14、下面程序执行后的输出结果是( )。 #include int main() { char str[][10]={"greatwall","beijing"},*p=str[0]; printf("%s",p 13); return 0; }
    a、jing
    b、greatwall
    c、beijing
    d、ing

15、若有定义char *st="how are you";下列程序段中正确的是( )。
    a、char a[11]; strcpy( a, st);
    b、char a[11],*p; strcpy(p=a 1,&st[4]);
    c、char a[11]; strcpy(a, st);
    d、char a[],*p; strcpy(p=&a[1],st 2);

16、下面程序执行后的输出结果是( )。 #include #include int main() { char str[][20]={"hello","beijing"},*p=str[0]; printf("%d",strlen(p 20)); return 0; }
    a、7
    b、0
    c、5
    d、20

17、若有定义char a[10],*b=a;不能给数组a输入字符串的语句是( )。
    a、gets(a[0]);
    b、gets(a);
    c、gets(&a[0]);
    d、gets(b);

18、下面程序执行后的输出结果是( )。 #include #include void fun(char *s,int p,int k) { int i; for(i=p;i    a、abcdefg
    b、abcfg
    c、abc
    d、defg

19、s1和s2已正确定义并分别指向两个字符串。若要求:当s1所指串大于s2所指串时,执行语句s;则以下选项中正确的是( )。
    a、if(strcmp(s1,s2)>0) s;
    b、if(s1>s2) s;
    c、if(strcmp(s1,s2)) s;
    d、if(strcmp(s2,s1)>0) s;

20、以下与库函数strcpy(char *p1,char *p2)功能不相等的程序段是( )。
    a、void strcpy4(char *p1,char *p2) { while (*p2) *p1 =*p2 ; }
    b、void strcpy1(char *p1,char *p2) { while ((*p1 =*p2 )!='\0') ; }
    c、void strcpy2(char *p1,char *p2) { while ((*p1=*p2)!='\0') { p1 ; p2 ; } }
    d、void strcpy3(char *p1,char *p2) { while (*p1 =*p2 ) ; }

21、若有定义char s1[]="string1",s2[8],*s3,*s4="string2";则对库函数strcpy错误调用的是( )。
    a、strcpy(s3,"string1");
    b、strcpy(s1,"string2");
    c、strcpy(s2,s4);
    d、strcpy(s2,s1);

22、以下与库函数strcmp(char *s,char *t)功能相等的程序段是( )。
    a、int strcmp2(char *s,char *t) { for ( ; *s ==*t ; ) if (!*s) return 0 ; return (*s-*t) ; }
    b、int strcmp1(char *s,char *t) { for ( ; *s ==*t ; ) if (*s=='\0') return 0 ; return (*s-*t) ; }
    c、int strcmp3(char *s,char *t) { for ( ; *t==*s; ) { if (!*t) return 0 ; t ; s ; } return (*s-*t) ; }
    d、int strcmp4(char *s,char *t) { for ( ; *s==*t;s ,t ) if (!*s) return 0 ; return (*t-*s) ; }

23、下面程序执行后的输出结果是( )。 #include #include int main() { char b1[8]="abcdefg",b2[8],*pb=b1 3; while (--pb>=b1) strcpy(b2,pb); printf("%d",strlen(b2)); return 0; }
    a、7
    b、8
    c、3
    d、1

24、若有定义char a[]="shanxixian",*p=a; int i;则执行语句for(i=0;*p!='\0'; p ,i );后i的值为___________。

25、若有定义char a[15]="windows-9x";执行语句printf("%s",a 8);后的输出结果是___________。

第40讲 回调函数

课后测验:回调函数

1、若有定义int(*p)();标识符p可以( )。
    a、表示函数的返回值
    b、表示函数的入口地址
    c、表示函数的返回类型
    d、表示函数名

2、若有函数max(a,b),为了让函数指针变量p指向函数max,正确的赋值方法是( )。
    a、p=max;
    b、p=max(a,b);
    c、*p=max;
    d、*p=max(a,b);

3、若有函数max(a,b),并且已使函数指针变量p指向函数max,当调用该函数时,正确的调用方法是( )。
    a、(*p)max(a,b)
    b、*pmax(a,b);
    c、(*p)(a,b);
    d、*p(a,b);

第41讲 使用动态内存

课后测验:使用动态内存

1、若定义了以下函数: void f(……) { …… *p=(double *)malloc(10*sizeof(double)); …… } p是该函数的形参,要求通过p把动态分配存储单元的地址传回主调函数,则形参p 的正确定义应当是( )。
    a、double *p;
    b、float **p;
    c、double **p ;
    d、float *p;

2、有以下程序: #include #include int main() { char *p,*q; p=(char*)malloc(sizeof(char)*20); q=p; scanf("%s%s",p,q); printf("%s %s",p,q); return 0; } 程序执行后若从键盘上输入:abc└┘def↙,则输出结果是( )。
    a、def└┘def
    b、abc└┘def
    c、abc└┘d
    d、d└┘d

3、若指针p已正确定义,要使p指向两个连续的整型动态存储单元,不正确的动态存储分配语句是( )。
    a、p=2*(int*)malloc(sizeof(int));
    b、p=(int*)malloc(2*sizeof(int));
    c、p=(int*)malloc(2*sizeof(unsigned int));
    d、p=(int*)calloc(2,sizeof(int));

第42讲 复杂数据在c程序中的表示

课后测验:复杂数据在c程序中的表示

1、有如下结构体说明,以下叙述中错误的是( )。 struct stu { int a; float b; } stutype;
    a、struct是结构体类型的关键字
    b、struct stu是用户定义的结构体类型
    c、stutype是用户定义的结构体类型名
    d、a和b都是结构体成员名

2、以下( )定义不会分配实际的存储空间。
    a、struct { char name[10] ; int age ; } student ;
    b、struct student { char name[10] ; int age ; } student ;
    c、struct student { char name[10] ; int age ; } ; struct student student;
    d、struct student { char name[10] ; int age ; } ;

3、以下对结构体类型变量td1的定义中,不正确的是( )。
    a、#define aa struct aa aa { int n; float m; } td1;
    b、struct { int n; float m; } td1;
    c、struct aa { int n; float m; }; struct aa td1;
    d、struct { int n; float m; } aa; stuct aa td1

4、当定义一个结构体变量时,系统分配给它的内存量是( )。
    a、各成员所需内存量的总和
    b、结构中第一个成员所需内存量
    c、成员中占内存量最大的容量
    d、结构中最后一个成员所需内存量

5、c语言结构体类型变量在程序执行期间( )。
    a、所有成员驻留在内存中
    b、只有一个成员驻留在内存中
    c、部分成员驻留在内存中
    d、没有成员驻留在内存中

6、已知学生记录描述为: struct student { int no ; char name[20]; char sex; struct { int year; int month ; int day ; } birth; } s; 设结构变量s中的“birth”应是“1985年10月1日”,则下面正确的赋值是( )。
    a、year=1985; month=10; day=1;
    b、birth.year=1985; birth.month=10; birth.day=1;
    c、s.year=1985; s.month=10; s.day=1;
    d、s.birth.year=1985; s.birth.month=10; s.birth.day=1;

第43讲 编程使用复杂数据

课后测验:编程使用复杂数据

1、下面程序执行后的输出结果是( )。 #include int main() { struct complx { int x; int y ; } cnum[2]={1,3,2,7} ; printf("%d",cnum[0].y/cnum[0].x*cnum[1].x); return 0; }
    a、0
    b、1
    c、2
    d、6

2、根据下述定义,能输出字母m的语句是( )。 struct person {char name[9]; int age;}; struct person class[10]={"johu",17,"paul",19,"mary",18,"adam",16};
    a、printf("%c",class[3].name);
    b、printf("%c",class[2].name[0]);
    c、printf("%c",class[3].name[1]);
    d、printf("%c",class[2].name[1]);

3、下面程序执行后的输出结果是( )。 #include struct st { int x; int *y; } *p; int main() { int dt[4]={10,20,30,40}; struct st aa[4]={ 50,&dt[0],60,&dt[0],60,&dt[0],60,&dt[0]}; p=aa; printf("%d", (p->x)); return 0; }
    a、10
    b、11
    c、51
    d、60

4、下面程序执行后的输出结果是( )。 #include struct stu { char name[10]; int num; float totalscore; }; void f(struct stu *p) { struct stu s[2]={{"sundan",20044,550},{"penghua",20045,537}}, *q=s; p ; q; *p=*q; } int main() { struct stu s[3]={{"yangsan",20041,703},{"lisiguo",20042,580}}; f(s); printf("%s %d %3.0f", s[1].name, s[1].num,s[1].totalscore); return 0; }
    a、sundan 20044 550
    b、penghua 20045 537
    c、lisiguo 20042 580
    d、sundan 20041 703

5、以下对结构体变量成员不正确的引用是( )。 struct pupil { char name[20]; int age; int sex; } pup[5], *p=pup;
    a、scanf("%s",pup[0].name);
    b、scanf("%d",&pup[0].age);
    c、scanf("%d",&(p->sex));
    d、scanf("%d",p->age);

6、有以下程序段: int a=1,b=2,c=3; struct dent { int n ; int *m; } s[3] = {{101,&a}, {102,&b},{103,&c}}; struct dent *p=s; 则以下表达式中值为2的是( )。
    a、(p )->m
    b、*(p )->m
    c、(*p).m
    d、*(( p)->m)

7、以下引用形式不正确的是( )。 struct s { int i1; struct s *i2,*i0; }; static struct s a[3]={2,&a[1],0,4,&a[2],&a[0],6,0,&a[1]}, *ptr=a;
    a、ptr->i1
    b、*ptr->i2
    c、 ptr->i0
    d、*ptr->i1

8、设有如下定义: struct sk { int a; float b; } data; int *p; 若要使p指向data中的a,正确的赋值语句是( )。
    a、p=&a;
    b、p=data.a;
    c、p=&data.a;
    d、*p=data.a;

9、若有定义struct{int a; char b;} q,*p=&q;则错误的表达式是( )。
    a、*p.b
    b、(*p).b
    c、q.a
    d、p->a

10、下面程序执行后的输出结果是( )。 #include struct s { int x,y; } data[2]={10,100,20,200}; int main() { struct s *p=data; printf("%d", (p->x)); return 0; }
    a、10
    b、11
    c、20
    d、21

11、有以下说明和定义: struct student { int age; char num[8];} ; struct student stu[3]={{20,"200401"},{21,"200402"},{19,"200403"}}; struct student *p=stu; 以下选项中引用结构体变量成员的表达式错误的是( )。
    a、(p )->num
    b、p->num
    c、(*p).num
    d、stu[3].age

12、有以下程序段: struct st { int x; int *y; } *pt; int a[]={1,2},b[]={3,4}; struct st c[2]={10,a,20,b}; pt=c; 以下选项中表达式的值为11的是( )。
    a、*pt->y
    b、pt->x
    c、 pt->x
    d、(pt )->x

13、以下对c语言中共用体类型数据的叙述中正确的是( )。
    a、可以对共用体变量直接赋值
    b、一个共用体变量中可以同时存放其所有成员
    c、一个共用体变量中不能同时存放其所有成员
    d、共用体类型定义中不能出现结构体类型的成员

14、有以下说明和定义: union dt { int a;char b;double c; } data; 以下叙述中错误的是( )。
    a、data的每个成员起始地址都相同
    b、变量data所占的内存字节数与成员c所占字节数相等
    c、程序段:data.a=5;printf("%f",data.c);输出结果为5.000000
    d、data可以作为函数的实参

15、当定义一个共用体变量时,系统分配给它的内存量是( )。
    a、各成员所需内存量的总和
    b、共用体变量中第一个成员所需内存量
    c、成员中占内存量最大的容量
    d、共用体变量中最后一个成员所需内存量

16、有以下程序段: union data { int i ; char c; float f; } a; int n; 则以下( )是正确的语句。
    a、a=5;
    b、a={2,'a',1.2};
    c、printf("%d",a);
    d、n=a;

17、若有定义union { char a[10]; short b[4][5]; long c[5]; } u;则sizeof(u)的值是( )。
    a、10
    b、20
    c、40
    d、70

18、若有定义union data {char ch;int x;} a;下列语句中( )是不正确的。
    a、a={'x',10}
    b、a.x=10;a.x ;
    c、a.ch='x';a.ch ;
    d、a.x=10;a.ch='x';

19、下面程序执行后的输出结果是( )。 #include int main() { union { char ch[2]; short d; } s; s.d=0x4321; printf("%x,%x",s.ch[0],s.ch[1]); return 0; }
    a、21,43
    b、43,21
    c、43,00
    d、21,00

20、若有定义: struct num { int a ; int b ; float f ; } n = {1,3,5.0} ; struct num *pn = &n ; 则表达式pn->b/n.a*pn->b的值是__________。

21、若有定义: struct student { int no; char name[12]; float score[3]; } s1,*p=&s1; 用指针变量p给s1的成员no赋值1234的语句是 ____________________。

22、写出下面程序执行后的运行结果。 #include #include struct worker { char name[15]; int age; float pay; }; int main( ) { struct worker x; char *t="lilei"; int d=20; float f=100; strcpy(x.name,t); x.age=d*2; x.pay=f*d; printf("%s %d %.0f",x.name, x.age, x.pay); return 0; }

23、写出下面程序执行后的运行结果。 #include struct stu { int num; float totalscore; }; void f(struct stu p) { struct stu s[2]={{20044,550},{20045,537}}; p.num = s[1].num; p.totalscore = s[1].totalscore; } int main() { struct stu s[2]={{20041,703},{20042,580}}; f(s[0]); printf("%d %3.0f", s[0].num, s[0].totalscore); return 0; }

24、#include #define n (sizeof(s)/sizeof(s[0])) struct porb { char *name; int age; } s[]={"lihua",18,"wangxin",25,"liuguo",21}; void f(struct porb a[], int n) { int i; for (i=0;i
25、写出下面程序执行后的运行结果。 #include struct stu { char name[10]; int num; int score; }; int main() { struct stu s[5]={{"yangsan",20041,703},{"lisiguo",20042, 580},{"wangyin",20043,680},{"sundan",20044,550}, {"penghua",20045,537}},*p[5],*t; int i,j; for(i=0;i<5;i ) p[i]=&s[i]; for(i=0;i<4;i ) for(j=i 1;j<5;j ) if(p[i]->score>p[j]->score) { t=p[i]; p[i]=p[j]; p[j]=t;} printf("%d %d",s[1].score,p[1]->score); return 0; }

26、写出下面程序执行后的运行结果。 #include struct stu { char name[10]; int num; }; void f1(struct stu c) { struct stu b={"lisiguo",2042}; c=b; } void f2(struct stu *c) { struct stu b={"sundan",2044}; *c=b; } int main( ) { struct stu a={"yangsan",2041},b={"wangyin",2043}; f1(a); f2(&b) ; printf("%d %d",a.num,b.num); return 0; }

27、写出下面程序执行后的运行结果。 #include struct { int a,b; union {int m,n;char ch[10];} in; } q,*p=&q; int main() { q.a=3;q.b=6; q.in.m=(*p).a (*p).b;q.in.n=p->a*p->b; printf("%d,%d,%d",sizeof(q.in),q.in.m,q.in.n); return 0; }

第44讲 构建数据类型体系

课后测验:构建数据类型体系

1、设位段的空间分配由右到左,下面程序执行后的输出结果是( )。 #include struct packed { unsigned a:2; unsigned b:2; unsigned c:3; int i; } data ; int main() { data.a=2; data.b=3; printf("%d",data.a data.b); return 0; }
    a、语法错
    b、2
    c、5
    d、3

2、设有以下说明 struct packed { unsigned one:1; unsigned two:2; unsigned three:3; unsigned four:4; } data; 则以下位段数据的引用中不能得到正确数值的是( )。
    a、data.one=4
    b、data.two=3
    c、data.three=2
    d、data.four=1

3、若有定义enum color {red,yellow=2,blue,white,black} r=white;执行printf("%d",r);后的输出结果是( )。
    a、0
    b、4
    c、1
    d、3

4、若有定义enum week {sun, mon, tue, wed, thu, fri, sat} day;以下正确的赋值语句是( )。
    a、sun=0;
    b、sun=day;
    c、mon=sun 1;
    d、day=sun;

5、下面对typedef的叙述中错误的是( )。
    a、用typedef可以定义各种类型名,但不能用来定义变量
    b、用typedef可以增加新类型
    c、用typedef只是将已存在的类型用一个新的标识符来代表
    d、使用typedef有利于程序的通用和移植

6、以下叙述中错误的是( )。
    a、共用体类型数据中所有成员的首地址都是同一地址
    b、可以用已定义的共用体类型来定义数组或指针变量的类型
    c、共用体类型数据中的成员可以是结构体类型,但不可以是共用体类型
    d、用typedef定义新类型取代原有类型后,原类型仍可有效使用

7、若有定义typedef char *point; point p,q[3],*r;则p、q和r分别是字符型的( )。
    a、变量、一维数组和指针变量
    b、指针变量、一维数组指针和二级指针变量
    c、变量、二维数组和指针变量
    d、指针变量、一维指针数组和二级指针变量

8、若有定义typedef struct {int n;char ch[8];} per;以下叙述中正确的是( )。
    a、per是结构体变量名
    b、per是结构体类型名
    c、typedef struct 是结构体类型
    d、struct 是结构体类型名

9、有以下定义,则在codeblocks 13.12环境下sizeof(cs)的值是( )。 struct { short a; char b; float c; } cs;
    a、8
    b、7
    c、12
    d、9

10、有以下定义,则在codeblocks 13.12环境下sizeof(cs)的值是( )。 #pragma pack(1) struct { short a; char b; float c; } cs;
    a、8
    b、7
    c、12
    d、9

11、有以下定义,则在codeblocks 13.12环境下sizeof(a)的值是( )。 (提示:参考 “成员字节对齐”) union u { char st[4]; short i; long l; }; struct a { short c; union u u; } a;
    a、6
    b、7
    c、8
    d、9

12、有以下定义,则在codeblocks 13.12环境下sizeof(a)的值是( )。 #pragma pack(1) union u { char st[4]; short i; long l; }; struct a { short c; union u u; } a;
    a、6
    b、7
    c、8
    d、9

13、若有定义enum en{a, b=3,c=4};则a的序值是__________。

14、写出下面程序执行后的运行结果。 #include #include typedef struct student { char name[10]; long sno; float score; } stu; int main() { stu a={"zhangsan",2001,95},b={"shangxian",2002,90},c={"anhua",2003,95},d,*p=&d; d=a; if(strcmp(a.name,b.name)>0) d=b; if(strcmp(c.name,d.name)>0) d=c; printf("%ld%s",d.sno,p->name); return 0; }

第45讲 链表的运算

课后测验:用链表表示动态的复杂数据

1、链表不具有的特点是( )。
    a、可随机访问任一元素
    b、插入、删除不需要移动元素
    c、不必事先估计存储空间
    d、所需空间与线性表长度成正比

2、链接存储的存储结构所占存储空间( )。
    a、分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针
    b、只有一部分,存放结点值
    c、只有一部分,存储表示结点间关系的指针
    d、分两部分,一部分存放结点值,另一部分存放结点所占单元数

3、链表是一种采用( )存储结构存储的线性表。
    a、顺序
    b、链式
    c、星式
    d、网状

4、有以下结构体说明和变量的定义,且指针p指向变量a,指针q指向变量b,则不能把结点b连接到结点a之后的语句是( )。 struct node { char data; struct node *next; } a,b,*p=&a,*q=&b;
    a、a.next=q;
    b、p.next=&b;
    c、p->next=&b;
    d、(*p).next=q;

5、下面程序执行后的输出结果是( )。 #include #include struct node { int num; struct node *next; }; int main() { struct node *p,*q,*r; p=(struct node*)malloc(sizeof(struct node)); q=(struct node*)malloc(sizeof(struct node)); r=(struct node*)malloc(sizeof(struct node)); p->num=10; q->num=20; r->num=30; p->next=q;q->next=r; printf("%d",p->num q->next->num); return 0; }
    a、10
    b、20
    c、30
    d、40

6、下面程序执行后的输出结果是( )。 #include struct node { int num; struct node *next; } ; int main() { struct node s[3]={{1, ''},{2, ''},{3, ''}},*p,*q,*r; int sum=0; s[0].next=s 1; s[1].next=s 2; s[2].next=s; p=s; q=p->next; r=q->next; sum =q->next->num; sum =r->next->next->num; printf("%d", sum); return 0; }
    a、3
    b、4
    c、5
    d、6

7、在单向链表中,存储每个结点需有两个域,一个是数据域,另一个是指针域,它指向该结点的( )。
    a、直接前趋
    b、直接后继
    c、开始结点
    d、终端结点

8、对于一个头指针为head的带头结点的单向链表,判定该表为空表的条件是( )。
    a、head==null
    b、head→next==null
    c、head→next==head
    d、head!=null

9、以下程序的功能是建立一个带有头结点的单向链表,并将存储在数组中的字符依次转储到链表的各个结点中,请选择合适的选项填入( )。 #include #include struct node { char data; struct node *next; }; struct node* creatlist(char *s) { struct node *h,*p,*q; h=(struct node *)malloc(sizeof(struct node)); p=q=h; while(*s!='\0') { p=(struct node *) malloc(sizeof(struct node)); p->data=*s; q->next=p; q=______ ; s ; } p->next=null; return h; } int main() { char str[]="link list"; struct node *head; head=creatlist(str); return 0; }
    a、p->next
    b、p
    c、s
    d、s->next

10、有以下结构体说明和变量定义,指针p、q、r分别指向一个链表中的三个连续结点。 struct node { int data; struct node *next; } *p, *q, *r; 现要将q和r所指结点的先后位置交换,同时要保持链表的连续,以下错误的程序段 是( )。
    a、r->next=q; q->next=r->next; p->next=r;
    b、q->next=r->next; p->next=r; r->next=q;
    c、p->next=r; q->next=r->next; r->next=q;
    d、q->next=r->next; r->next=q; p->next=r;

11、有以下结构体说明和变量定义,如图所示: struct node { int data; struct node *next; } *p, *q, *r; 现要将q所指结点从链表中删除,同时要保持链表的连续,以下不能完成指定操作的 语句是( )。
    a、p=q->next;
    b、p->next=q->next;
    c、p->next=p->next->next;
    d、p->next=r;

12、有以下定义: struct link { int data; struct link *next; } a,b,c,*p,*q; 且变量a和b之间已有如下图所示的链表结构: 指针p指向变量a,q指向变量c。则能够把c插入到a和b 之间并形成新的链表的语 句组是( )。
    a、(*p).next=q; (*q).next=&b;
    b、a.next=c; c.next=b;
    c、p.next=q; q.next=p.next;
    d、p->next=&c; q->next=p->next;

13、有关双向链表的说法正确的是( )。
    a、双向链表的结点含有两个指针域,分别存放指向其直接前趋和直接后继结点的指针
    b、双向链表实现了对结点的随机访问,是一种随机存储结构。
    c、双向链表所需空间与单向链表相同。
    d、在双向链表中插入或删除结点时,需要移动结点。

14、在双向链表存储结构中,删除p所指的结点时须修改指针( )。
    a、p->next->prior=p->prior;p->prior->next=p->next;
    b、p->next=p->next->next;p->next->prior=p;
    c、p->prior->next=p;p->prior=p->prior->prior;
    d、p->prior=p->next->next;p->next=p->prior->prior;

15、对链表进行插入和删除操作时,不必移动结点。

16、链表的每个结点中都恰好包含一个指针。

17、链表的物理存储结构具有同链表一样的顺序。

18、链表的删除算法很简单,因为当删除链中某个结点后,计算机会自动地将后续的各个单元向前移动。

19、在单向链表中,要访问某个结点,只要知道该结点的指针即可;因此,单向链表是一种随机存储结构。

20、如果单向链表带有头结点,则插入操作永远不会改变头结点指针的值。

21、写出下面程序执行后的运行结果。 #include struct node { int k; struct node *link; }; int main() { struct node m[5],*p=m,*q=m 4; int i=0; while(p!=q) { p->k= i; p ; q->k=i ; q--; } q->k=i; for(i=0;i<5;i ) printf("%d",m[i].k); return 0; }

22、写出下面程序执行后的运行结果。 #include #include struct node { int num; struct node *next; }; int main( ) { struct node *p,*q,*r; int sum=0; p=(struct node *)malloc(sizeof(struct node)); q=(struct node *)malloc(sizeof(struct node)); r=(struct node *)malloc(sizeof(struct node)); p->num=1;q->num=2;r->num=3; p->next=q;q->next=r;r->next=null; sum =q->next->num;sum =p->num; printf("%d",sum); return 0; }

第47讲 编程操作永久性数据

课后测验:编程操作永久性数据

1、下列关于c语言数据文件的叙述中正确的是( )。
    a、文件由ascii码字符序列组成,c语言只能读写文本文件
    b、文件由二进制数据序列组成,c语言只能读写二进制文件
    c、文件由记录序列组成,可按数据的存放形式分为二进制文件和文本文件
    d、文件由数据流形式组成,可按数据的存放形式分为二进制文件和文本文件

2、系统的标准输入文件是指( )。
    a、键盘
    b、显示器
    c、软盘
    d、硬盘

3、系统的标准输出文件是指( )。
    a、键盘
    b、显示器
    c、软盘
    d、硬盘

4、以下叙述中错误的是( )。
    a、c语言中对二进制文件的访问速度比文本文件快
    b、c语言中,随机文件以二进制代码形式存储数据
    c、file fp; 定义了一个名为fp的文件指针
    d、c语言中的文本文件以ascii码形式存储数据

5、以下叙述中错误的是( )。
    a、二进制文件打开后可以先读文件的末尾,而顺序文件不可以
    b、在程序结束时,应当用fclose函数关闭已打开的文件
    c、利用fread函数从二进制文件中读数据时,可以用数组名给数组中所有元素读入数据
    d、不可以用file定义指向二进制文件的文件指针

6、fopen函数中正确的文件名参数写法是( )。
    a、c:\user\text.txt
    b、c:\\user\\text.txt
    c、"c:\user\text.txt"
    d、"c:\\user\\text.txt"

7、若有定义char fname[]="infile.dat";则为读而打开文本文件infile.dat的正确写法是( )。
    a、fopen(infile,"r")
    b、fopen("infile","r")
    c、fopen(fname,"r")
    d、fopen("fname","r")

8、若要用fopen函数创建一个新的二进制文件,该文件既要能读也能写,则文件打开方式应是( )。
    a、"ab "
    b、"wb "
    c、"rb "
    d、"ab"

9、若执行fopen函数时发生错误,则函数的返回值是( )。
    a、地址值
    b、null
    c、1
    d、eof

10、若以"a "方式打开一个已存在的文件,以下叙述中正确的是( )。
    a、文件打开时,原有文件内容不被删除,位置指针移到文件末尾,可作添加和读操作
    b、文件打开时,原有文件内容不被删除,位置指针移到文件开头,可作重写和读操作
    c、文件打开时,原有文件内容被删除,只可作写操作
    d、以上说法都不正确

11、在文件打开方式中,字符串"rb"表示( )。
    a、打开一个已存在的二进制文件,只能读取数据
    b、打开一个文本文件,只能写入数据
    c、打开一个已存在的文本文件,只能读取数据
    d、打开一个二进制文件,只能写入数据

12、以“w”方式打开文本文件a:\aa.dat,若该文件已存在,则( )。
    a、新写入数据被追加到文件末尾
    b、文件被清空,从文件头开始存放新写入数据
    c、显示出错信息
    d、新写入数据被插入到文件首部

第48讲 编程读写文件

课后测验:编程读写文件

1、写字符到磁盘文件的fputc函数,其函数原型正确的是( )。
    a、file* fputc(char)
    b、int fputc(file *)
    c、int fpuc(char,file *)
    d、int fputc(file *,char)

2、在c程序中,可把整型数据以二进制形式存放到文件中的函数( )。
    a、fprint
    b、fputs
    c、fwrite
    d、fputc

3、fgetc函数的作用是从指定文件读入一个字符,该文件的打开方式必须是( )。
    a、只写
    b、追加
    c、读或读写
    d、b和c都正确

4、利用fseek函数可实现的操作是( )。
    a、改变文件的位置指针
    b、文件的顺序读写
    c、文件的随机读写
    d、以上答案均正确

5、函数调用语句fseek(fp,-20l,2)的含义是( )。
    a、将文件位置指针移到距离文件头20个字节处
    b、将文件位置指针从当前位置向后移动20个字节
    c、将文件位置指针从文件末尾向后退20个字节
    d、将文件位置指针移到当前位置20个字节处

6、以下与函数fseek(fp,0l,seek_set)有相同作用的是( )。
    a、feof(fp)
    b、ftell(fp)
    c、fgetc(fp)
    d、rewind(fp)

7、函数rewind的作用是( )。
    a、使位置指针重新返回文件的开头
    b、将位置指针指向文件中所要求的特定位置
    c、使位置指针指向文件的末尾
    d、使位置指针自动移至下一个字符位置

8、函数ftell(fp)的作用是( )。
    a、得到流式文件中的当前位置
    b、移动流式文件的位置指针
    c、初始化流式文件的位置
    d、以上答案均正确

9、若有定义file* fp;且fp指向的文件未结束,则函数feof(fp)的返回值为( )。
    a、0
    b、true
    c、非0
    d、false

10、下面程序执行后的输出结果是( )。 #include void writestr(char *fn,char *str) { file *fp; fp=fopen(fn,"w"); fputs(str,fp); fclose(fp); } int main() { writestr("t1.dat","start"); writestr("t1.dat","end"); return 0; }
    a、start
    b、end
    c、startend
    d、endstart

11、下面程序执行后的输出结果是( )。 #include int main() { file *fp; int i, k, n; fp=fopen("data.dat", "w "); for(i=1; i<6; i ) { fprintf(fp,"%d ",i); if (i%3==0) fprintf(fp,"\n"); } rewind(fp); fscanf(fp,"%d%d",&k,&n); printf("%d %d", k, n); fclose(fp); return 0; }
    a、0 0
    b、5 6
    c、3 4
    d、1 2

12、下面程序执行后的输出结果是( )。 #include int main() { file *fp; int i=20,j=30,k,n; fp=fopen("d1.dat","w"); fprintf(fp,"%d\n",i); fprintf(fp,"%d\n",j); fclose(fp); fp=fopen("d1.dat","r"); fscanf(fp,"%d%d",&k,&n); printf("%d %d\n",k,n); fclose(fp); return 0; }
    a、20 30
    b、20 50
    c、30 50
    d、30 20

13、c语言中,系统自动打开的文件是( )。
    a、二进制文件
    b、随机文件
    c、非缓冲文件
    d、设备文件

14、下面程序段执行后的输出结果是( )。 #include printf("%d",null);
    a、-1
    b、0
    c、1
    d、2

15、有以下程序: #include int main() { file *fp1; fp1=fopen("f1.txt","w"); fprintf(fp1,"abc"); fclose(fp1); return 0; } 若文本文件f1.txt中原有内容为good,则运行程序后文件f1.txt中的内容为 _________。

16、设文件file1.c的内容为computer。写出下面程序执行后的运行结果。 #include int main() { char ch; file *fp; if((fp=fopen("file1.c","r")) ==null) { printf("不能打开文件\n"); return -1; } while(!feof(fp)) { ch=fgetc(fp); if(ch>='a'&&ch<='z') fputc(ch 32,stdout); } fclose(fp); return 0; }

期末考试

期末考试

1、三点共线问题

2、生日礼物

3、特殊的数对

4、字符串链接

5、走梅花桩

6、大数乘幂

下一篇 >>

相关文章

  • 2022-11-05 00:22
  • 2022-11-04 23:50
  • 2022-11-04 23:48
  • 2022-11-04 23:20
  • 2022-11-04 22:27

备案号: 买球平台网址的版权所有 买球平台网址 copyright © 2012-2022 青果答案 all rights reserved. sitemap