欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    课后习题浓缩版.docx

    • 资源ID:515123       资源大小:72.04KB        全文页数:82页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    课后习题浓缩版.docx

    1、课后习题浓缩版课后习题第1章 计算机组成与程序设计语言一、单选题1“程序存储思想”是 提出来的。A 丹尼尔里奇 B冯诺依曼 C贝尔 D马丁理查德【参考答案】B【解析】根据教材1.1节的知识,正确答案为B。2若计算机有24根地址总线,则其存储器必定有 个字节的存储空间。A224 B216 C232. D不能确定【参考答案】A【解析】根据教材1.1节的知识,地址总线的多少决定了地址的多少,也就是字节的多少。如果有16根地址总线,则存储器最多有216个字节;因此按照同样的计算方法,有24根地址总线,则存储器最多有224个字节,因此答案为A。3第一个体现结构化程序设计思想的高级程序设计语言是 。AFo

    2、rtran语言 BC语言 CPascal语言 DJava语言 【参考答案】C【解析】根据教材1.4节的知识:1970年,第一个结构化程序设计语言Pascal语言出现,标志着结构化程序设计时期的开始,因此答案为C。5以下关于源程序与目标程序的关系,不正确的是 。A用机器语言编写的源程序就是目标程序 B用汇编语言编写的源程序需要经过汇编程序汇编为目标程序C用C语言编写 的源程序需要经过编译程序编译为目标程序 D不同高级语言的编译器应该是一样的,都负责将源程序编译为目标程序【参考答案】D【解析】根据教材1.3节的知识,可知答案A和B是正确的说法;根据教材1.4节的知识,用高级语言编写的源程序不是计算

    3、机最终能识别并运行的目标程序,需要一种机制,可以把每一条指令转化为一组低级的机器语言指令,编译器提供了这种转化机制。不同的高级语言所需要的编译程序也是不同的。因此答案C的说法是正确的。答案D说法不正确,为所选答案。第2章 基本数据类型一、单选题1以下哪一个可以作为正确的变量名 。A 3X Bfile_1 Cint DX+Y;【参考答案】B【解析】此题考查的是合法的用户自定义标识符的概念,因为变量名就是一个用户自定义标识符。根据标识符的定义,必须以字母或下划线开头,后接字母、数字、下划线的任意序列,因此答案A的开头不符合要求,答案D中出现了加号不符合要求;而对于用户自定义标识符还要求不选用关键字

    4、,故答案C也是错的,只有答案B正确。2下列哪一个是合法的实型字面常量 。A8E3.1 BE5 C 234. D234【参考答案】C【解析】 实型的字面值常量有两种表示方法:小数形式和指数形式。小数形式要求必须有小数点,左右两边是数字序列,最前面可以有正负号,而且左或右的数字也可以缺省;指数形式中必须有E(或e),并且E的左右两边都不能缺省。E左边为一个小数形式的实数或整数,E右边只能是整数。根据这些知识,答案A的错误在于E右边写成了小数;答案B的错误在于E左边缺少内容;答案D的错误在于没有小数点,是一个整数;故答案C正确,是缺省了右边数字的小数形式的实数。3下列哪一个整数值最大 。A012 B

    5、0x12 C12 D120 【参考答案】D【解析】此题实际考查的是整型字面值常量的表示,可以用八进制、十进制、十六进制表示。将这4个答案所表示的数字统一到十进制来理解就可以了。答案A以0开头,是八进制表示,012就是十进制的10;答案B以0x开头,是十六进制表示,0x12就是十进制的18;答案C和D本来就是十进制表示了,因此比较后,答案D正确。4下列哪一个字符与其他3个字符不相等 。Aa BA Cx41 D101【参考答案】A【解析】 此题实际考查的字符字面常量的几种表示:以一对单引号为定界符,里面可以直接是一个字符,也可以是以反斜杠开头的转义字符,而反斜杠后又有3种形式:直接跟一个字符表示某

    6、种用处,如n表示换行;3位八进制数;以x开头后面跟两位十六进制数。本题中,字符A的ASCII码为65,八进制的101和十六进制的41都是65,这三者是相等的,表示同一个字符A,只有答案A表达的是字符a,为所选项。5假设已有定义:typedef int INTEGER; int a=1; INTEGET b=2;下面4条赋值语句中错误的是 。A. a=b*20; .b=b+1;C. INTEGER=a+b; . a=a;【参考答案】C【解析】 此题主要考查typedef的作用以及变量的相关知识。typedef的作用是给已有类型起个别名,本题中的INTEGER就是类型名int的别名,实质上是一个类

    7、型名而不是变量名,根据这一理解,再加上赋值语句要求赋值号的左边只能是变量,因此,答案C即为所选答案。答案A、B是正确的赋值语句不必多解释,答案D也是正确的赋值,因为右边的a在这条赋值语句中取其ASCII码值97,相当于a=97。6一个C程序的执行总是 。 A从main()函数开始 B从任意一条语句开始C从任何一个函数开始 D从第一个函数开始,直到最后一个函数结束。【参考答案】A【解析】main()函数是系统调用程序的入口,因此程序的执行总是从main函数开始,正常情况下也是结束于main( )函数,当然,可能会因异常提前终止,也可能因调用类似exit函数而在main函数结束之前结束程序的运行。

    8、二、编程题1编写程序,测试以下类型在内存中所占空间大小: char、int 、short 、long、unsigned int 、float 、double 、long double,输出时给出较清晰的提示信息。【参考答案】#include int main() printf(sizeof(char)=%dn,sizeof(char); printf(sizeof(int)=%dn,sizeof(int); printf(sizeof(short)=%dn,sizeof(short); printf(sizeof(long)=%dn,sizeof(long); printf(sizeof(un

    9、signed int)=%dn,sizeof(unsigned int ); printf(sizeof(float)=%dn,sizeof(float); printf(sizeof(double)=%dn,sizeof(double); printf(sizeof(long double)=%dn,sizeof(long double); return 0;【解析】此题考查的是通过sizeof运算符求各种类型的数据在内存中所占空间的大小,同时,会用printf输出想要输出的提示信息及运算结果,对C语言源程序的结构有个大致的了解,会完整地定义main函数。2编写程序,定义一个int型变量a,

    10、一个float型变量b,一个double型变量c,a变量初始化,b变量赋值,c变量的值从键盘输入,调用printf函数输出三个变量的值及它们在内存中的首地址,输出时给出较清晰的提示信息。【参考答案】#include int main() int a=20; float b; double c; b=12.345f; scanf(%lf,&c); printf(address of a is: %x, value of a is: %dn,&a,a); printf(address of b is: %x, value of b is: %fn,&b,b); printf(address of

    11、c is: %x, value of c is: %fn,&c,c); return 0;【解析】此题考查的是常量与变量的基本使用,会定义各种基本类型的变量,对变量获得值用字面值常量进行初始化或赋值,从键盘读入变量的值,注意scanf的正确使用,正确使用格式串并对相应的变量取地址。通过printf中格式串的设置及对应输出项的不同,输出变量的地址及变量的值,从而理解二者的区别。第3章 表达式与运算符一、单选题1关系运算符对两侧的运算对象的要求是 。A只能是0或1 B两个运算对象必须属于同一种数据类型C只能是0或非0值 D可以是任意合法的表达式,两者类型不一定相同 【参考答案】D 【解析】在C语言

    12、中,关系运算符两侧的运算对象为任意合法的表达式,类型上也可以不同,任何类型的值,总能解释为0和非0两种值,0为假,非0为真,但关系表达式最终的计算结果只有两种,如果是假,结果为0;如果是真,结果为1。2数学公式5+b4/(2d-1)-|c| 的C语言表达形式是 。A5*sqrt(a)+pow(b,4)/(2*d-1)-fabs(c) B5*sqrt(a)+pow(4,b)/(2*d-1)-fabs(c)C5*a/2+pow(b,4) /(2*d-1)-fabs(c) D5*sqrt(a)+b4/(2*d-1)-c【参考答案】A【解析】该题的数学式中有根号、平方、绝对值符号,在C语言中它们分别用

    13、库函数sqrt、pow和fabs来表示,所以答案C、D首先被排除,答案A和B的差别只有一点,就是pow函数内的参数次序正好相反,查pow函数的原型:double pow(double x,double y),其功能是计算xy的值,因此,b4的正确表示是pow(b,4),故答案A正确。3为表示关系x大于等于y,y大于等于z,正确的C语言表达式是 。Ax=y=z B(x=y) AND (y=z)Cx=y&y=z D(x=y) & (y=z)【参考答案】C【解析】此题对于初学者非常容易选择答案A,但是A答案的这种表达虽然语法上正确,但是逻辑上是错误的,当y不在z和x之间的时候也能得到1,例如:x=1

    14、0,z=1,y= -9,x=y即10= -9得到真值为1,第二步计算就变成1=1,结果仍为1,因此切忌用答案A的形式来表达某值在一段范围内。答案B的错误在于出现了C语言中没有的运算符AND,答案D的错误在于混淆了位与运算符&和逻辑与运算符&,所以,答案C正确。4假设下面所有的变量均已定义为double型,下列赋值表达式不正确的是 。 Az*=2.8/4 Bx=-x Cx=y=z Dx=3.5%2【参考答案】D【解析】该题考查赋值运算符及相关的算术运算符的使用,答案A是复合赋值运算符,先计算右边的除法,当两个数据的类型不同的时候,先将4转化为4.0再进行运算得结果0.7,再执行z=z*0.7的赋

    15、值运算,正确;答案B先对右边的部分进行运算,变量x先执行自减,将表达式的结果赋值给x,实际上直接写成- -x能达到同样的效果,这种用法不常见,但是语法上是正确的;答案C是连续赋值,按从右到左的顺序执行,最终效果是x、y和z三个变量的值相等,也是正确的;答案D的错误在赋值号右边,运算符“%”要求两个运算对象都必须为整数,3.5不是整数,故答案D为所选。5若执行语句:int b,a = 12, n = 5; 表达式 a % = ( b=2 , n %=b ) + 4结果是 。A 16 B 2 C1 D4【参考答案】B【解析】本题主要考查复合赋值运算符及逗号运算符的优先级及运算方法。此题先计算圆括号

    16、内的逗号表达式,结果为1,接着表达式就成为:a % =1+ 4,根据计算方法,先对复合赋值运算符右边部分进行计算,得到5,最后一步:a % =5,结果为2,所以选择答案B。二、填空题1已知int a=5,b=4,c=6,d;,执行语句d=ab?(ac?a:c):b后,d的值为_。【参考答案】6【解析】 条件运算符是C语言里唯一的三目运算符,允许发生嵌套。此题中,最后一步是赋值运算,赋值运算符的优先级低于条件运算符。括号部分先计算,因此,第一步计算(ac?a:c),即(56?5:6)得到结果6,第二步计算ab?6:b,即:54?6:4,得到结果6,第三步计算d=6,因此变量d的值为6。2已知fl

    17、oat x=2.5,y=4.7; int a=7;,则表达式x+a%3*(int)(x+y)%2/4的值为_。【参考答案】2.5【解析】此题考查的是算术运算符的运用,双目算术运算符中,有两个比较特殊:“%”要求两个运算对象均为int型,“/”当两个运算对象均为整型时结果一定是商的整数部分。“+”、“-”、“*”、“/”四个运算符当运算对象的类型不一致时,将进行自动类型转化低类型自动转为高类型,最后高类型的两个值进行运算。此题第一步计算(x+y)得到7.2,第二步用(int)进行强制类型转化,得到7,第三步计算a%3得到结果1,第四步计算1*7得到7,第五步计算7%2得到结果1,第六步计算1/4

    18、得到0,最后一步计算2.5+0,先类型自动转化变为2.5+0.0,再求两个同类型值的和得到最终结果2.5。3设有语句:int a = 5, b = 7;执行语句:a += a+ | b+ 后, a=_,b =_。【参考答案】7,7【解析】此题比较综合,由于复合赋值运算符优先级最低,因此先计算赋值号右边表达式a+ | b+,这里对a和b都进行后缀+运算,因此,本题的第一步取a的原值5,此为非0值即代表逻辑真,根据“|”运算符的断路功能,“|”右边的b+将不作运算,变量b将保持原值7,整个逻辑表达式的结果为1。注意,变量a在逻辑表达式计算结束以后将按后“+”的要求进行自增1的运算,在赋值之前,变量

    19、a的值为6,最后的复合赋值表达式就是:a+=1,即:a=a+1,因此变量a的最终结果为7。4已知x、a为int型变量,表达式x = (a = 3, a*2, a+6)的值为_。【参考答案】9【解析】此题比较简单,但容易出错。逗号运算符原本优先级低于赋值运算符,但是通过括号提升了优先级,故此题最终的表达式是一个赋值表达式。第一步,先计算逗号表达式的值,即求3,6,9的值为9,这里有人容易将结果算成12,要注意,a*2这一步只是访问了原来a的值3,并没有改变a,所以最后一步a+6的时候应该是3+6而不是6+6;最后将9赋值给变量x,因此整个表达式的结果就是9,同时变量x的值为9,变量a的值为3。此

    20、题如果去掉括号,结果仍为9,但那时应该理解成最后一步是逗号表达式的结果为9。第4章 程序流程控制一、单选题1若变量已正确定义,语句“if(ab) k=0; else k=1;”和_等价。 Ak=(ab)?1:0; Bk=ab;Ck=a=b; Dk=ab时k=0而当ab时k=1而当ab时关系表达式的结果为真,得到值1,否则为0,这与答案A、D的结论是一样的。只有答案C,当a=b 时关系表达式的结果为1,赋值给变量k,否则将0赋值给k,与题干中的一致。2已知:int a = 0 , b = 2;对于下列if语句正确的是_。 if (a = b) printf(“A is equal to Bn”)

    21、;A输出:A is equal to B,a等于b; B无输出C输出:A is equal to B,但a不等于b; D 编译出错【参考答案】A【解析】此题是初学者在编程使用if语句的条件是最容易犯的一个逻辑错误,本意应该是判断a是不是等于b,如果相等则输出对应的提示信息。此处误将判相等的运算符“= =”写成了赋值运算符“=”,而C语言中的条件是以0表示假非0表示真,因此即使写错了,语法上是正确的,故此处先进行赋值,使a的值等于b的值,同时2就是赋值表达式的结果,if(a=b)实质上就是if(2),这里的2是非0值,因此条件为真,执行输出语句,故选择答案A。3下列程序段执行后,变量w的值为_。

    22、int x=0,y=10,z=20,w=100;if(x) w=x;else if(y) w=y;else if(z) w=z;A0 B10 C20 D100【参考答案】B【解析】此题主要考查嵌套if语句的使用,以及对C语言中逻辑真和假的正确理解。首先,if (x)相当于if(x!=0),而x变量的值为0,因此这个条件为假,进入第一个else分支,if (y)相当于if (y!=0),而y变量的值为10,因此条件为真,故执行w=y;语句,使w重新获得了值10覆盖了初始化得到的100,下一个else分支自然是不会执行的,因此w的最终结果是10。4下面程序段的运行结果是_。int n,s=0; f

    23、or(n=0;n+=2; ) ; s+=n; printf(n=%d, s=%dn,n,s);An=3, s=6 Bn=3, s=3 Cn=4, s=4 D有语法错误【参考答案】C【解析】此题考查的是for语句的灵活性。for语句中的表达式1为初始化语句,只执行一次,表达式2用于控制循环的条件,条件为真则执行循环体;表达式3 是在循环体执行结束后自动执行的语句。此题有两处容易出错:第一处,循环体为空,而不是s+=n; ;第二处,for语句中的表达2为n+=2,这里用到了后缀+,因此,在判断n=2结束后,该条件的真与假将决定循环体是否执行,循环是否结束,但是+运算是一定要执行的。当n为3的时候,

    24、n=2的条件为假,循环将结束,但是+运算还是会执行的,因此最终n的值为4。下面的s+=n;语句是循环结束后的第一条赋值语句只执行一次,因此,s的值为4。5假设i已定义为整型变量,以下程序段中,while循环的循环次数是_。i=0;while(i10) if (i%2) continue; if(i= =5) break; i+; A1 B10 C6 D死循环,不能确定次数【参考答案】D【解析】此题考查的是循环语句中break与 continue语句的使用。continue是提前结束本次循环,直接进行下一次的判断以决定是否执行下一次循环;break是从循环体内直接结束循环。本题,第一次判断whi

    25、le的条件010值为真,进入循环体后不满足i%2!=0的条件,因此不执行continue,直接进入i=5的判断,结果为假,不执行break;i+为无条件语句被执行,i值变为1,再回到while条件去判断,再次进入循环体,此时,i%2=1为真,执行continue直接跳过循环体内后面的语句,所以下次回到循环条件判断的时候,i的值仍然为1,很显然为死循环,因此选答案D。6下面有关switch语句的不正确描述是_。Aswitch后面的圆括号内的表达式可以是整型或字符型Bswitch结构中每个case必须以break结束Cswitch结构可能执行多个分支中的语句Dswitch中每个case后的常量的值

    26、必须唯一【参考答案】B【解析】此题考查的是switch语句的语法及执行过程。switch后面圆括号内的表达式要求值为离散的类型,像double、float这类值连续的类型就不可以了,除了可以是int、char类型以外,还可以是自定义类型枚举类型,因此答案A的说法是正确的;答案B错误,因为在switch语句中,为实现多分支的效果,一般情况下在case语句块的最后一条语句用 break,但是有时也需要多个常量控制执行同样的语句,这时某些case语句块的最后就不必用break;答案C说法正确,在某些case语句块的最后就不用break时,就达到了可能执行多个case分支的效果;答案D正确,每个cas

    27、e后的常量值一定要唯一,如果重复,则会引起歧义。二、读程序写结果1写出下面程序的输出结果。 #include int main( ) int i,j=0,s=0,n=4; for (i=1;i=n;i+) j=j+i; s=s+j; printf(s=%dn,s); return 0;【参考答案】s=20【解析】 此题的关键是循环体中变量j和变量s的作用。每一次循环结束时,j=1+2+i,因此循环4次,每次结束时j的值分别是:1、3、6、10,而变量s是将j的值求和,因此,前面4个值相加得到20,因此本题的执行效果实际上是:s=1+(1+2)+(1+2+3)+(1+2+3+4)。2说出下面程序

    28、的功能,并写出输出结果中的前5个数。#includeint main(void) int year; for (year=2004;year2500;year+=4) if (year%100!=0|year%400=0) printf(%6d,year); return 0;【参考答案】本程序的功能是:输出2001年至2500年之间所有的闰年年号。输出结果中的前5个数为: 2004 2008 2012 2016 2020【解析】 此题的关键是首先理解for语句,year的初值为2004,year自增的步长为4,这就说明year都是能被4整除的数,这是循环执行的大前提,再看for的循环体为一条

    29、if语句,输出语句执行的条件是year%100!=0或者year%400=0,这正是闰年判断的条件,因此此题的功能就非常清楚了。3写出下面程序的输出结果。 #include int main() int x=1,y=2; for(;x7 ) break; if ( x=6 ) continue; y *= x; printf(%d %dn,x,y);return 0; 【参考答案】9 6【解析】此题主要考查在循环体中使用break和continue语句。第一次进入循环体,x自增2后结果为3,两个if条件均不满足,故执行y *= x;得到y=6;回到for语句自动执行x+,使x的值为4,由于410,第二次进入循环体,执行x+=2;后,x的值为6,这时符合第二个if条件,因此跳过y *= x;语句直接回到for语句自动执行x+,使x的值为7,第三次进入循环体,执行x+=2;后,x的值为9,这时符合第一个if条件,执行break从循环中退出,因此循环结束时x的值为9,而y的值为6。4写出下面程序的输出结果。 #include int main() int a=1,b=1,c=1; switch(a) case 1: switch(b)


    注意事项

    本文(课后习题浓缩版.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开