C语言答案解析%2B公共基础总结--全
C语言习题答案第一章C语言基础知识一,选择题1答案是AA正确课本第2页11行B{}可以作为复合语句的标志Cmain函数不是用户命名的D分号是语句结束的标志,肯定是语句的一部分做这个题目需要对书上的概念透彻的理解2答案是AA错误课本第4页关于用户标识符是这样介绍的---命名时,标识符的选择由用户自定,但是不能与关键字相同,所以A选项错误。这个题目考察用户标识符3答案是B用户标识符是标识符,所以可以是有下划线,但是中划线不属于字母,数字,下划线其中一种。这个题目考察用户标识符的概念。4答案是Bdefine是预定义标识符,而预定义标识符可以是用户标识符,所以define可以是用户标识,if是关键字,而关键字不能是用户标识符,所以if不可以是用户标识符5答案是Dsizeof是关键字,参照附录二注:6--13考察用户标识符概念6答案是DD答案以数字2开头了,不符合标识符定义7答案是CC答案以数字开头了8答案是Dint是关键字9答案是B答案A是关键字,答案C是以数字开头了,不符合概念,答案D出现了小数点10答案是A答案A出现了小数点11答案是C答案C以数字开头了12答案是AB答案中float是关键字,C答案中3c以数字3开头了,D答案中-5d中-不属于字母,数字,下划线中一种13答案是AB答案中-max中-错误,C答案中3COM以字母3开头了,D答案中int是关键字,不是用户标识符14答案是BA答案中15.后面不应该有点,C答案中出现了逗号,D中字母B有问题15答案是B课本第8页倒数8行16答案是BB中出现了8,而八进制只能有0到7组成17答案是D答案D中开头是0不是o18答案是C答案A中E后面是整数,0.5是小数答案B中E后面不能为空答案D中E前面不能为空本题目考察指数的表示形式19答案是C答案A中2.0有问题,不能为小数形式答案B中E前面不能为空答案D中E后面不能为空本题目考察指数的表示形式20答案是AB中八进制中不能出现数字8,C中e后面不能是小数,D中e后面不能为空21答案是BB中0.4是小数,不正确22答案是CC中0.5是小数,不正确23答案是D3.6-5/2+1.2+5%2=3.6-2+1.2+1=3.8本题目考察算术运算符,需要注意整数除以整数结果只能是整数24答案是D%不能用于实型的计算25答案是DD答案中$不属于字母,数字,下划线26答案是AA答案是逗号表达式,B答案中x+1=y是赋值表达式,左边只能是变量,而这里是x=1,同理答案C中x+10也是错误的,在D答案中,考察的是强制类型转换,正确的是(double)x/1027答案是A本题考察的是注释需要注意的地方,具体解答见课本第2页中间部分28答案是B答案A中n2没有定义,答案C中在定义f之前不能使用它,答案D中E后面必须是整数29答案是C考察的是强制类型转换,正确的是k%(int)f30答案是D本题目类似与课本第16页的例15,解题方法是要抓住++m,--n,--m,表达式的值是变量变化之后的值,而n--表达式的值是变量n变化之前的值31答案是B本题目是课本第10页的例9,具体解答见课本,本题目考察的是负整数与无符号正整数在计算机中存放的格式的一样的,但表示的不同的两个数32答案是CA答案中%运算对象不能为实型,26.8错误,B答案中考察的赋值运算符,赋值运算符左边必须是变量,所以赋值运算符左边1+2错误,同理答案D错误33答案是C本题目考察的是课本第15页的关于自加与自减运算符的第一点说明,即增量运算符的运算对象只能是变量,而在C答案中++(i+1)中,i+1是表达式34答案是B本题目考察的是整数除以整数结果是整数,在B答案中1/2结果是0,导致整个表达式的值是0,明显是错误的35答案是D36答案是A本题目见课本第13页倒数第10行本题目主要考察n++表达式的值是n变化之前的值,然后使n的值增加137答案是Bc=a/b+0.4c=8/5+0.4c=1+0.4c=1.4因为c是int型的,所以n的值是1,做此题目需要仔细阅读题目38答案是D(int)a+b/b=(int)5.5+2.5/2.5=5+1.000000=b=6.000000同样a,b的类型是double型的39答案是D见课本第9页例8二,填空题1课本第9页倒数第7行2课本第3页倒数第5行3课本第9页倒数第6行4课本第7页倒数第5行5课本第8页整型变量和第11页实型变量的介绍65+3.6/2=5+1.8=6.87a++表达式的值是a变化之前的值,当然a本身增加了18把10赋给变量B第二章顺序结构一选择题1,答案是C随意使用空语句会导致逻辑上出现错误,不要随便使用。2,答案是B语句必须以分号结尾,A,C,D表达式后面均没有分号。3,答案是Cintx=13,y=4;说明x,y均为整型,所以x/y只取整数部分(舍去法),值为3,把3赋值给x,整个x=x/y表达式的值为左边变量x的值,所以输出为3。4,答案是Aa,b均为整型,a/b是取a÷b所得商的整数部分,所以是0,再把0赋值给c,所以是c的值是0。5,答案是DA注释语句可以放在代码的任何位置B将r定义为整型不会在编译时出错,会自动进行类型转换C变量s为浮点型,格式描述符%f时正确的Dπ是非法的变量6,答案是D16n(x,y)是逗号表达式,它的值只有一个,所以格式说明符的个数和输出项的个数是相等的。并且逗号表达式的值为最后一个表达式的值,最后一个表达式是y=2003,所以整个表达式的值是2003,因此输出值为2003。5,答案是Am是十进制整数以十进制有符号的形式输出,即照原样输32767,n=032767,032767是八进制的整数以八进制无符号形式输出,去掉前面的0。见教材P208,答案是Cm,n的值都是十六进制数0xabc,m-=n即是m=m-n,把m-n的值赋给m,即把0赋给m,再把m值以十六进制无符号的形式输出,输出的十六进制数不用在前面0x或者0X。见教材P219,答案是B表达式i--的值是在变量自减之前的值,i的初值为10,所以该表达式的值也为10;表达式j++的值是变量自加之后的值,j初值为1,所以该表达式在值是2。10,答案是Cm=0256,即m是八进制的数0256,要以八进制无符号的形式输出,即输出256;n=256,即n是十进制的数256,也要以八进制无符号的形式输出,首先要把十进制数转化为八进制数,256转化为八进制为0400,以无符号形式输出,即输出400。11,答案是B在printf语句中,格式控制的个数只有一个,即%d,而输出项有两项,即a和b。而得到的结果应该只有一个,所以应该输出第一个变量的值,即变量a的值。12,答案是C第一个数据的输出控制宽度是2位,但是x的值是102,占3位,要输出的数据宽度大于规定的输出宽度,所以按数据的实际宽度输出,输出102。第二个数据要求以十进制形式输出,输出控制宽度是2,y的值为012,是八进制数,所以要转换成十进制数10后再输出。13,答案是B表达式a=f/=c*=(x=6.5),按从右到左结合,先把6.5赋值给x,再执行c=c*6.5,c的值变为65,再执行f=f/65,为浮点数的除法,f的值为1.53……,再把f的值赋给a,a为整型数据,执行强制类型转换,a的值为1。a对应的输出格式为%d,即输出1;c对应的输出格式为%d,输出65,f对应的输出格式%3.1f,即输出控制宽度为3位,保留小数点后一位小数,即输出1.5,x对应的输出格式也为%3.1f,输出6.5。14,答案是Blongx=-123456L;说明x为长整型的数据,长整型数据对应的输出格式应该为%ld。15,答案是Cm=(k+=i*=k);按从右到左结合,先执行i=i*k;即i被赋值为4,再执行k=k+4;k被赋值为6,最后把6赋给m,输出m和i的值。16,答案是C略(参考12题)17,答案是D-m++遵循从右向左结合的原则;m++的值为m自增之前的值,所以执行完x=-m++以后,x被赋值为-3;表达式x=x+8/++n中有加号除号,先算8/++n,++n的值为自增之后的值为5,8/5取整为1,即x=x+8/++n转化为x=x+1,即把x+1的值赋给x,x的值变为-2。18,答案是DA输入函数应为scanf();B,C输入数据列表必须是地址表达式;19,答案是A从键盘输入数据的格式必须与输入控制要求的格式一样B答案三个之间不要有空格;C答案用逗号分开是多余的;D答案格式不匹配。20,答案是A格式控制要求输入的两个数据之间要用逗号隔开,A没有逗号所以错误,D两个输入数之间的回车换行可以忽略。21,答案是Cx乘以100是为了把x小数点后的两位小数变为整数,再加上0.5,如果小数点后一位大于等于5则会进一位,如果小数点后一位小于5则不会出现进位的情况,再对其进行强制类型转换,采用舍去法丢掉小数部分,即对x乘上100后的数实现了小数位到整数位的四舍五入。最后再除以100.0,把数字变回原来的大小,整数与浮点数相除结果为浮点数,即实现了要求。22,答案是C从键盘输入数据的格式必须与输入控制要求的格式一样。23,答案是B输入控制中第一个数要求以“%2d”形式输入,即要求输入一个两位的数,而从键盘输入的数为876,所以从左到右取两位数字87,即把87赋值给整型变量a,余下的6再赋值给浮点型变量b,自动进行类型转换,b的值为6.000000,后面输入的543则没有赋值给变量。24,答案是D“%%”会输出一个“%”,“d”会照原样输出,因为没有格式说明,m,n无法输出到屏幕。二填空题1,一条语句分号参见教材P182,88首先将八进制数0210转化为十六进制的数0X88,输出格式说明要以十六进制无符号的形式输出,所以省略0X,直接输出88。3,11把十进制数转化为八进制数,以无符号的形式输出4,252137b为八进制数025,c为十六进制数0X25,首先把b、c都转化为十进制的整数,分别为21、37,按照输出格式要求a、b、c以十进制整数形式输出,中间以空格分开,所以输出为252137。5,n1=%dnn2=%d除了n1,n2的值之外,还必须加入“n1=”“n2=”照原样输出的字符,很明显在两个数据之间还加了换行符。6,i=10,j=20<回车>格式控制中加入了格式说明以外的其他字符,则在输入数据时这些字符也要同样输入。输入格式控制为i=%d,j=%d,所以则应该从键盘输入i=10,j=207,261a为十进制数177转化为八进制的数为0261,以无符号的形式输出为2616,16a的初值为0,在表达式a+=(a=8)中,a首先被赋值为8,再执行操作a=a+a,所以a最后被赋值为16,即输出a的值为16第三章选择结构一、选择题1、D此题主要是考语句的特征。一条语句只包含一个分号,D项有两个分号,应该是两条语句,所以选D。2、C此题主要是考真假条件的等价。题目中的E为非0时条件为真,为0事为假。那么把非0和0带到选项中可知,C项正好是E为0时表达式为真,非0时为假,所以选C。3、D任意合法的表达式都可以作为逻辑运算符的运算对象4、D此题主要是考逻辑运算和关系运算的优先级别.只要掌握!、算术运算和&&的优先级别便可选对.这几种运算符的具体优先级关系见P26第7行。5、A此题主要是考逻辑运算符!、&&和||之间的优先级别。!最高,&&次之,||最低。先求得!a为0,所以不必计算!b的值,即!a&&!b的值为0,由c=0,!c=1,而0||1=1,所以选D。6、A此题主要是考了逻辑、关系和算术运算,熟练掌握逻辑运算、关系运算和算术运算的优先级别后,就不难了。A选项中!a为0,所以!a==1为假,那么就不用计算&&后面的表达式了,因为0与任何数均为假;B项中先计算出a
a为真,所以(n=b>a)为1,那么将不会去计算m=ab>c的值为0,所以不执行第一条语句;在判断第二个条件,c-1>=d表达式的结果为真,所以执行其下面的语句,那么将输出d+1的值为3,所以选答案B。注意:本题中有一个错误,就是最后一条语句掉了个“;”,请大家补上分号,再做此题,否则本题将选答案D(这是打印错误,出题者的本意不是要选D)17、C此题主要是考查条件表达式和条件运算符。首先要注意条件表达式的结合方向,它是从右至左的(可参照附录三)第一个条件表达式的值为a,第二个条件表达式的值为c,而c=6,所以答案选C。18、A此题主要是考查if-else语句和条件表达式的转化。只要理解了if-else语句和条件表达式的运算规则的话,就很容易选出A19、D此题主要是考查在switch语句中break和default的作用及break的适用范围。详细说明可参看教材第一册第三章P33对switch的说明部分和第四章P45关于break语句的注意事项。20、B此题考查的是条件表达式求解问题。先看第一个条件表达式语句,ac为假,所以k=k=2选B21、A此题考查的是条件表达式的求解顺序。参照附录三可知,它的结合方向是自右至左,所以先求得右边一个条件表达式的值为2,再求得左边一个的值为1,即选A22、C此题考查的是真假条件的等价问题。x-y为真表示x-y是非0的,也即x-y<0或x-y>0即选C二、填空题1、答案是:10200分析:多数同学得到的答案是10201,显然是没有弄清楚第三条赋值语句:c=(a%b<1)||(a/b>1).这是将后面一个逻辑表达式的值给c,那么关于逻辑表达式的考题,无非就是考察运算符的优先级,也就上说先算哪个,后算哪个的问题。在这个题里面,先计算第一个圆括号里面的内容,a%b的值是10,所以10<1为假;a/b的值为0,0>1为假。在逻辑或运算的时候,两个运算对象都为假,则结果为假。所以c的值为0.答案是:102002、答案是:1分析:程序中是一个if—else结构。这个题最容易出错的地方在于if的条件,注意,里面的是c=a是一个赋值表达式,不是将c与a的值进行比较。所以条件为真,输出赋值以后c的值,为1。3、答案是:4,5,99分析:题中的重点在于两个if结构,大家要注意两点:第一,如果if后面没有花括号,则它后面的第一条语句是它的结构题,并且只有一条语句。(如果后面是一个结构,则整个结构都属于if结构的结构体)。第二,变量在不断的被重新赋值,所以其值在不断的变化。4、答案是:yes分析:该题与第二题是同一回事。5、答案是:1分析:这个题还上一个if—else结构,考查点仍然是考察考生是否能够正确识别if后面括号里的表达式p=a!=0,根据运算符的优先级知道,这里应该先算a!=0,这是一个逻辑运算,a的值为5,所以a!=0为真,其逻辑值为1,将1赋值给p,所以条件为真,输出p的值,为1。6、答案是:20,0分析:见第3题分析。7、答案是:585858分析:题中有三个if结构,注意,这三个if结构是相互独立的,是互不相关的,只要他们的条件成立,就要执行其结构体(后面的输出语句)。通过键盘输入,得a的值为58,所以a>50为真,输出58;然后判断a>40,仍然为真,再输出58,最后判断a>30,肯定为真,所以再输出58,连续三次输出58。8、答案是:0分析:本题的关键在于关系运算符的运算次序,a=5,b=4,c=3.a>b>c看起来是真的,但是这这是数学里面是这样的,这里我们要一步一步的计算,先算a>b,a确实大于b,所以为真,逻辑值为1,后面的计算就变成了1>c,显然为假,逻辑值为0,并将它赋值给d,所以最后输出d的值为0。9、答案是:3分析:这个题主要考察条件运算符。程序要输出(P/3>0?p/10:p%3)这个条件表达式的值。P为30,所以p/3=10,10>0显然为真,所以整个表达式的值应该是p/10的值,p/10得3。10、答案是:21分析:题中是一个switch嵌套结构。里面的switch是case1的语句,题的关键点在于这个语句(即里面的这个switch结构)的后面并没有跳出整个结构的break语句。所以,当x=1,与case相配以后,执行完后面的语句(即里面的这个switch结构),然后没有遇到break语句,所以并不跳出结构体,而是继续执行case2后面的语句。所以最后得到的结果应该是21,而不是10。第四章循环结构选择题:(1)答案:B①N的值为10,n>7为真,执行循环体,n的值减1后为9,输出n的值9②N的值为9,n>7为真,执行循环体,n的值减1后为8,输出n的值8③N的值为8,n>7为真,执行循环体,n的值减1后为7,输出n的值7④N的值为7,n>7为假,结束循环。(2)答案:A①k的值为5,进入循环,(--k)表达式的值为4(真),同时k的值改变为4,输出表达式k-=3的值1,同时k的值为1。②k为1,表达式(—k)的值为0,结束循环。(3)答案:A1.X=0,y=5,z=3,(z>0&&x<4)值为真,进入循环体,y值为4,z值为2,x值为12.(z>0&&x<4)值为真,进入循环体,y值为3,z值为1,x值为23.(z>0&&x<4)值为真,进入循环体,y值为2,z值为0,x值为34.(z>0&&x<4)值为假,结束循环。5.输出x,y,z的值3,2,0(4)答案:D分析:①当K的值为3时,只执行case3后面的语句n+=k,n的值为3; ②当k的值为2时,先执行case2后面的语句,但没有,继续执行case3后面的语句n+=k,n的值为5;③当k的值为1时,先执行case1后面的语句n+=k,n的值为6,先执行case2后面的语句(没有),继续执行case3后面的语句n+=k,n的值为7。输出n的值7。(5)答案:B(6)答案:A分析:t值为1,s的值为0。从键盘中输入-3后,n的值为-3.先执行循环体。①执行s=s+t;s的值为1,执行t=t-2;t的值为-1.再判断表达式的值②t!=n为真,再次执行循环体。执行s=s+t;s的值为0,执行t=t-2;t的值为-3.再判断表达式的值③t!=n为假,结束do..while循环。最后输出s的值0。(7)答案:A分析:x=3;先执行循环体,输出表达式x-=2的值1,同时x的值也改变成1,再判断表达式的值(!x),x的值为1(真),(!x)为假,循环结束。(8)答案:B 分析:B选项每次进入循环体,都要先执行p=1;即1赋值给p.所以不能求出5!的值(9)答案:D分析:变量i每次增量为2,变化过程为:1->3->5->7->9,语句s+=1每次执行使s增加的数为:2,4,6,8,10,所以s的值为自然数1~10中偶数的值。(10)答案:C 分析:C项s=s+1/n,1/n首先运算,n为整型变量,1也是整型变量,当n=2…10时,1/n的值为整数0,故C不正确(11)答案:A(12)答案:C(13)答案:C16n分析:x的值为15。执行while循环,(x>10)为真,执行循环体。执行x++;x的值为16。再执行if语句。(x%3)为真,执行x++,x的值为17,再执行break;语句,退出循环体,结束while语句的执行。最后输出x的值17。(14)答案:D(15)答案:D分析:continue语句会提前结束此次循环体的执行,不会结束整个for语句的执行。 (16)答案:D(17)答案:B 2*i-1(18)答案:A(19)答案:D分析:变量i的值为0,执行while循环,表达式(i<10)为真,进入循环体,执行if(i<1)continue;表达式(i<1)为真,执行continue;提前结束此轮循环体的执行(后面两语句不执行),再判断表达式(i<10)的值,为真,进入循环体,执行if(i<1)continue;因为i的值为1,没改变,表达式(i<1)仍为真,执行continue;提前结束此轮循环体的执行(后面两语句不执行),再判断表达式(i<10)的值,为真,进入循环体。。。。。。填空题:(1)答案:-1分析:此题的循环体是省略了大括号的空语句;,x的初值是2;执行while语句,先判断表达式的值,(x--)的值为1(真),同时x的值减1变为0,再执行循环体(空语句;),再判断表达式(x--)的值,表达式的值为0,同时x值减1,变为-1,因为表达式的值为0(假),循环结束。最后输出x的值-1。(2)答案:11(分析略)(3)答案:n=n/10(4)答案:0分析:i的值从5变化到0时,for语句中的第二个表达式都为真。t=5*4*3*2*1*0=0。最后输出i的值为0。(5)答案:5分析:for循环语句的循环体是空语句;(6)答案:6分析:此题属于循环的嵌套。当i=1时,输出0个#号,当i=2时,输出1个#号,当i=3时,输出2个#号,当i=,4时,输出3个#号,共输出6个#号。(7)答案:sum=120分析:i的值是1,sum的值是1,执行while循环。①i<=5为真,sum的值为1,i自加1,值为2。②i<=5为真,sum的值为2,i自加1,值为3。③i<=5为真,sum的值为6,i自加1,值为4。④i<=5为真,sum的值为24,i自加1,值为5。⑤i<=5为真,sum的值为120,i自加1,值为6。⑥i<=5为假,结束循环。输出sum=120.(8)答案:23分析:a的值为1,i的值为1。①i<4为真,执行switch体,i值为1,执行a+=5,a的值改变为5。执行i++,i的值为2。②i<4为真,执行switch体,i值为2,分别执行a+=3;a+=5,a的值改变为13。执行i++, i的值为.3。③i<4为真,执行switch体,i值为3,分别执行a+=2;a+=3;a+=5,a的值改变为23。执行i++, i的值为4。④i<4为假,结束for循环。输出a的值23(9)答案:132分析:m=0,n=0,k=0,i=9①当i值为9时,i<=11为真,执行switch语句,(i/10)的值为0,匹配case0,执行m++,n++,再执行break语句,跳出switch体,再执行i++,i值为10;此时m值为1,n的值为1,k的值为0.②当i值为10时,i<=11为真,执行switch语句,(i/10)的值为1,匹配default,执行k++,n++,结束switch体,执行i++,i值为11.此时m值为1,n的值为2,k的值为1.③当i值为11时,i<=11为真,执行switch语句,(i/10)的值为1,匹配default,执行k++,n++,结束switch体,执行i++,i值为12.此时m值为1,n的值为3,k的值为2.④当i值为12时,i<=11为假,结束for循环。最后输出m,n,k的值132.(10)答案:i<10j%3(或j%3!=0)第五章字符型数据位运算(1)选择题1.答案:C2.答案:D分析:表示转义字符中的单引号字符3.答案:B分析:B)’179’中的9中超出了八进制数值的范畴4.答案:D分析:大小写字母的ASCII码的编码值相差32,100-32=68.5.答案:A分析:A)字符变量要保存字符常量,字符常量要用单引号引起来,同时,这应是一个转义字符,正确的应为:ch=’\’B)等价于ch=’A’C)’ ’为转义字符,赋值正确D)十六进制表示的转义字符6.答案:B分析:条件表达式x=(x>=’A’&&x<=’Z’)?(x+32):x的第一个式子(x>=’A’&&x<=’Z’)为真,因此执行x+32这个操作,所以x=’C’+32,因此打印输出的是c。7.答案:A分析:(1)x=’B’-’A’+’a’=66-65+97=98(2)y=x+2=98+2=100,ASCII值为100的是字符’d’所以最后输出的98,d8.答案:A分析:整型数据和字符型数据交替输入的时候输入形式只有两种:(1)40*50#<回车>(2)40*50#<回车>其他情况下,都会降空格符号作为字符读入,导致结果错误,所以选A)9.答案:A分析:A)两个相同的值进行位异或操作,结果为010.答案:A分析:(1)a=4|3:00000100|00000011________________00000111所以a=7(2)b=4&3:00000100&00000011________________00000000所以b=011.答案:D分析:(1)~z=~1=0(2)x/y=3/2=1(3)x/y&~z=1&0=012.答案:D分析:(1)2+x:00000010+10100111________________10101001(2)~3:~00000011___________________11111100(3)(2+x)^(~3):10101001^11111100________________0101010113.答案:D分析:(1)0x3对应的二进制为:000000110x8对应的二进制为:00001000b=a|0x8:00000011|00001000_______________00001011所以b的值被赋为11。(2)b:00001011c=b<<1:00010110所以c被赋值为22。14.答案:A15.答案:D分析:1,2,3依次赋给了c1,c2,c3,回车符也作为字符赋给了c4,所以c5,c6依次读入的是4,5。(2)填空题1.答案:1分析:(1)输入字符a后,表达式getchar()==’a’成立,表达式的值为真,(2)将表示式的值赋给x(注意:=是赋值语句),所以x的值为1。2.答案:11110111分析:(1)~x:~00000010______________11111101(2)y:00000101y<<1:00001010(3)z=~x^y<<1:11111101^00001010_________________111101113.答案:3分析:只有'\','b','xf'16n三个是正确的转义字符。第六章函数一、选择题:1.答案:B分析:在C语言中,函数可以在任何地方出现,而main函数作为函数中的一类,没有特殊的限制和要求,故也可以在任何地方出现。2.答案:B分析:C语言默认规定3.答案:D分析:对应每个形参的类型结构。4.答案:A分析:sin(1/2)会当作sin(0)处理。实参的类型决定了重载函数的选择。5.答案:D分析:函数的调用不可以作为一个函数的形参。6.答案:D分析:fun(a,b)的作用是返回a、b中较大的。fun(x,y)=fun(3,8)=8,r=fun(fun(x,y),2*z)=fun(8,12)=127.答案:C分析:f1(x,y)的作用是返回x、y中较大的,f2(x,y)的作用是返回x、y中较小的。d=f1(a,b)=f1(4,3)=4d=f1(d,c)=f1(4,5)=5e=f2(a,b)=f2(4,3)=3e=f2(e,c)=f2(3,5)=3此时各值为a=4,b=3,c=5,d=5,e=3,f=a+b+c-d-e=4。所以答案d,f,e为5,4,38.答案:A分析:c程序的基本单位是函数。函数中不可以嵌套定义函数。main()函数可以放在任意位置。被调用的函数只要在调用之前说明了即可。9.答案:B分析:fun(x,y)的作用是求x、y的和。fun(a+c,b)=a+c+b=15,(int)fun(a+c,b)=(int)15=15。fun((int)fun(a+c,b),a-c)=fun(15,-6)=9。10.答案:D分析:fun(x,y)的作用是选择x,y里面较小的一个。fun(9,8)=8,fun(8,7)=7;fun(fun(a,b),fun(b,c))=fun(8,7)=711.答案:C分析:fun1(a)=a2,fun2(x,y)=(int)(fun1(x)+fun1(y))=(int)(x2+y2),所以fun1(1.1,2.0)=(int)(1.21+4.0)=(int)5.21=5由于w是double型的,所以w的值为5.0。12.答案:A分析:函数的说明有其自己的格式,应该包括函数类型、函数名、以及形参类型,形参名可有可无,但是一定要统一,形参名随便取。13.答案:C分析:允许这种函数说明的方式存在。如果只在主函数中说明,则只能在主函数中调用f;如果在主函数以前说明,则包括主函数的所有函数都可以调用,如果同时主函数又说明了,则不影响。14.答案:D分析:函数的形参不可以传给对应的实参。15.答案:D分析:形式参数的改变不影响实参。所以本题是一个迷惑题,不需要看函数体的内容。二、填空题:1.答案:a=1.0,b=1.0,s=1.0;分析:分别求出变量的初始值。a=a*x为的是求xn,所以其初始值为1,b=b*i位的是求n!,所以其初始值为1,当n=0时,s=1,所以s的初始值为1。由于定义的是double型的数据,所以答案为a=1.0,b=1.0,s=1.0;2.答案:m=fun(a,4)+fun(b,4)-fun(a+b,3);分析:由程序可以看出fun(x,n)=xn。fun(a,4)=a4,fun(b,4)=b4,fun(a+b,3)=(a+b)3,当要计算m=a4+b4+(a+b)3时,函数调用语句为m=fun(a,4)+fun(b,4)+fun(a+b,3);3.答案:xx*x+1分析:1)求f(x)的累加和,即为求f(0)+f(1)+f(2)+f(3)+f(4)+……,函数SunFun来实现此功能。括号中应该填入累加的序号值,即为x。2)f(x)=x2+1,F(intx)函数来实现这个功能,所以填写x*x+1。4.答案:-ffun(10)分析:1)函数的作用为计算m=1-2+3-4+5-6+7-8+9-10,实际上为计算m=1*1+(-1)*2+1*3+(-1)*4+……+1*9+(-1)*10,在循环体中,i为1,2,3…..,f为1的符号。每循环一次,f的符号应该变换一下,所以变换的语句为f=-f。2)当n=1时,计算的是m=1;当n=2时,计算的是m=1-2……因为计算的是m=1-2+3-4+5-6+7-8+9-10,所以答案为n=10,即fun(10)。5.答案:9分析:1)函数的意思为f(x,y)=(y-x)*xf(3,4)=(4-3)*3=3f(3,5)=(5-3)*3=62)d=f(3,6)=(6-3)*3=9.6.答案:doublemax分析:通过程序可以看出,main函数中使用了max函数,而其他地方没有对max函数进行说明。所以程序中应该对max函数进行说明。说明的格式为doublemax(double,double)。7.答案:3,2,2,3分析:1)x=2,y=3,当调用fun(x,y)时,相当于执行fun(2,3)。x=x+y;x=2+3=5;y=x-y;y=5-3=2;x=x-y;x=5-2=3;此时x,y的值为3,2,所以输出的结果为3,2。2)在main函数中,实参不会因为形参的改变而改变,x,y的值仍为2,3,所以所以输出的结果为2,3.第七章指针一、选择题1A本题主要考指针赋值,n2=n1;是把n2的值赋给n1,故根据指针赋值的定义可知选A,即把q所指对象的值赋给p所指对象。2B本题主要考指针定义,因为p指向变量x,故输出其值的时候应该是x的值。3C本题主要考指针的定义和赋值,C前面是定义一个量a并赋值为10,后面定义一个指针,并把a的值赋给这个指针。4C本题主要考指针的定义及赋值,开始时使p指向a,q指向b,把它们的值交换,然后再显示。故得正确答案C。5C本题主要考函数指针的定义,函数前面的*号表求返回值是指针类型,void表示返回无值弄的。故选C。6A本题主要考的是指针的变量的赋值,在使用scanf()函数的时候,后面跟的是一个地址,由于pa本身保存的是地址,故选A7D本题主要考的指针的赋值及指向指针的指针的赋值,根据定义知选D。B的正确形式是**q=2;C的正确形式应该是q=&p;8C本题主要考的是全局变量和局部变量,以及指针的用法,第一个f(&a)的返回值是5,第二个返回值是2.9B本题主要考的是变量自加,指针传值,以及指针的赋值。通过第二行a=b可知p1,p2指向的变量的值相同,都指向了b所指的对象,也是p2所指的对象’a’,由于(*a)++;是实现a所指对象的自加,故由’a’变成’b’,故最终选A。10A本题主考NULL,一般来说当我们把一个空值以整数的形式输出出来的时候,默认的情况是0.11C本题考的是指针变量的赋值,虽然p没有赋值,表示没有指向某个具体的对象,但事实上系统会让它随机的指向存储单元里的一个对象,那么它的返回值应该是所指存储单元中的值。12B本题主要考函数中参数变量的定义,在B中连续定义两个变量,这在函数中是不可以的。13C本题主要考指针的指针,c先指向b,b是一个指针,它指向a,故c最终是指向a的,故其值是a中的值14A本题主要考指针的赋值,我们不能把一个具体的值赋给一个指针变量。B选项是w,p指向同一对象。C是p指向a。D是把w所指对象的值赋给p所指对象。15B本题主要考指针传值,p,q分别指向a,b,然而r会指向它们的较小值。16D在D中把一个整形变量的值赋给一个指针的地址,故而是错的。应该写成p=&a;17D本题主要考调用函数时指针传值和一般的变量的传值区别。指针通过地址传值,而变量是直接传值。c指针指向b,故对c指针里面的值的修改等于直接修改b中的值。18D本题主要考指针的定义及指针变量的值的输出方式,指针b指向a,故输出其值是51119C本题主要考指针标识符*和乘号*的区别,*p=*p1*(*p2)中第1,2,4个*号是指针标识符,而第三个是乘号,故其运算的结果是320C16n本题也是考指针标识符*和乘号*的区别,第一个函数中的*号是乘号,此时指针p中保存的是指针p1和指针p2指向对象的乘积。21A本题主考函数的嵌套调用,总的看来,函数fun()实现的功能是从1加到n,然后返回给主函数。二、填空题(1)84voidf()函数里的x,y分别是一个指针变量和整型变量,指针x指向一个整型的变量,即指向主函数里的x,故在函数voidf()里修改指针x的值,会影响到主函数里的x的值,但修改voidf()里的y的值却不会影响到主函数里的y的值。因为主函数x传的是地址,y传的是值。(2)k*k由于k是一个指针,故第一个空应该填k。由于第二个空要输出指针k所指对象的值,故应该填*k表示该指针所指对象的值(3)35p,q分别指向x,y,然后调用函数swap();它的功能是把两个指针所指向的对象交换,原来a,b分别指向x,y,但交换后分别指向y,x,所以并不把指向的对象的值交换。函数返回后,p,q仍然分别指向x,y。故其值不变。(4)n=n/10把n除以10,每执行一次就可以把数的阳未位去掉,因为两个整数相除,不会保留小数,故最低位会丢掉,并且把数缩小到十分之一。然后依次从个位到最高位把数字输出。第八章数组一、选择题1B此题考察一维数组的定义,在第八章第一节(70页)一维数组的说明中,下标必须为正的整型常量,不能为变量,在一维数组的初始化中,指出在单纯的定义时不能省略数组的长度。2B首先i=0时,判断i++〈7成立,进入循环体,但此时i=1,p[1]=12不满足if语句,不执行j+=p[i]。按照此方法,得到j=p[2]+p[4]+p[6]=45,即B正确。3D首先i=0<7&&p[0]%2!=0,满足循环条件,执行k=k+p[0],即k=11,然后执行i++,再进行判断,满足循环条件,k=11+p[1],所以k=24,执行i++,i=2,,再进行判断,此时不满足循环条件,循环结束,输出k值,为24。4A此题主要考察循环嵌套,第一个循环体执行完是将x[0],x[1],x[2],x[3],x[4]进行从大到小排序,第二个循环体执行完是将x[5],x[6],x[7]进行从小到大排序。5B此题考察二维数组的定义,在第八章第二节中(76页),指出单纯定义时,行和列都不能缺省。在初始化过程中,列不能缺省,赋值的行数和列数不能超过数组的行数和列数。6D同上题分析一样。7D同上。8C此题分别输出m[2][0],m[2][1],m[2][2]。9A此题考察在for循环后,i=0,i=1时,执行if语句,使得a[1][0],a[1][1]的值分别减1,而当i=2时,执行else语句,a[1][2]=1。因此输出a[0][1]+a[1][1]+a[1][2]=2+4+1=7;10B此题考察for循环,计算aa[0][1],aa[1][1],aa[2][2],aa[3][1]的和,即为19。11B此题是嵌套循环,外层循环一次,内层计算到结束。本题内层循环为j=i,,j<=i故每次内存循环只需要计算一次。也当i=0时,此时由于j<=i,因此只计算j=0,b[j][j]=b[0][0]=0,t=1+b[0][0]=1,依次类推,可以得到t=1+b[0][0]+b[1][1]+b[2][2]=4。12B嵌套循环,外层循环控制行,内层循环控制列,在此题中,i=0时,第一行需要输出4个数,因此只有j=0,j<4才能输出4个数,故很简单地可以知道只有B满足。13A此题是求出整个二维数组的最小值,并输出最小值所在的行和列。因此,很容易得到答案。二、填空题⒈24此题分析过程同选择题3。⒉1111⒊30计算s=a[0][0]+a[0][2]+a[1][1]+a[1][1]+a[2][2]+a[2][0]=30⒋012(换行)056(换行)009在第一个for循环中,使得a[1][0],a[2][0],a[2][1]全部等于0,因此输出即得。⒌92i=0时,首先判断i++<4成立,执行循环体,此时i=1,在do-while内层循环中,得到s=a[1][0]+a[1][1]+a[1][2]+a[1][3]=26;然后再进行条件判断i++<4,进入循环体,此时i=2,执行continue,再一次进行条件判断,进入循环体,此时i=3,因此计算s=a[3][0]+a[3][1]+a[3][2]+a[3][3]得到s=92。⒍58i=0时,s=a[0][0]+a[0][1]=3;i=1时,由于a[1][0]==0。因此跳出内层循环;i=2时,得到s=s+a[2][1]=3+23=26;i=3时,得到s=s+a[3][1]=26+32=58。第九章数组和指针一、选择题1、C.&和++的优先级是一样的,但是它们的结合方式是从右至左的,先执行aa[0]++,得到的结果是aa[0]的值加1,然后&(aa[0]++)&取的是前面所得结果的地址,不是aa[1]的地址,并且获得的地址是不确定的。A、+的优先级比&的优先级高D、aa数组名代表数组的首地址2、D.*(a+i)已经实现了对数组元素a[i]的引用指针P指向数组的首地址,p-a=0,A答案实现了对数组元素a[0]的引用,B答案*(&a[i])中*代表取值,&代表取址,整个表达式相当于a[i]3、A.指针P指向数组的首地址,p+2即p[2]的地址,*(p+2)即取p[2]的值,由于数组元素下标是从零开始的,故p[2]=34、B.指针p指向数组元素a[3]的地址,即p指向元素4的地址,q指向的地址即为p指向的地址下移四个字节,指向的为a[5]的地址,故答案为a[3]+a[5]=4+6=105、C.第二条语句表示p指向数组元素a[1]的地址,即p[0]=4,第三条for循环语句实现的是y=p[1]+p[2]=6+8=14。6、A.p指向数组首地址,for循环实现的是从p指向首地址开始取元素输出,依次指针p下移,指向数组元素a[1],输出a[1],指向数组元素a[2]输出a[2],直至a[9]。7.(D)解析:这四个选项,不同的地方是printf的输出数据列表,对于A,C选项,*和++的优先级相同,而结合方式是自右向左,故表达式*p++跟*(p++)是等价的,是对的。对于D选项,(*p)++等价于x[0]++,而不再是p指针自加,所以输出的结果是234567,故D是错误的。8.(A)解析:int*q=NULL,表示q指针没有指向任何变量,它里面存放的内容是NULL值,所以不能将*(p+5)的值赋给q所指向的变量,因为q指针没有指向任何变量,所以答案是报错。9.(D)解析:(A)不能给指针用整型常数来赋值。(B)a[5]是数组的元素,不是数组元素的地址,所以不能赋值给指针p。(C)错误的地方与B选项相同。(D)是正确的,a是数组的首地址,a+2表示数组元素a[2]存放的地址,可以将它赋值给指针p。10.(D)解析:int*p=&a[3]表示指针p指向数组元素a[3],可以使用p[0]来表示p指针指向的内存单元,所以p[0]可以表示a[3]。则p[5]可以表示a[8],故b的值为9.11.(B)解析:s=x+3表示指针s指向数组元素x[3]。可以用s[0]来表示x[3],则s[2]表示x[5],故输出结果是0.12.(C)解析:*(t+i)等价于t[i],故s+=*(t+i)等价于s=s+t[i],在FOR循环语句中,每次执行i=i+2,s=s+t[i],实现的功能是将i为偶数的数组元素t[i]相加的结果给s,s计算出的值为25,答案是C。13.(B)解析:二维数组在内存中是连续顺序存放的,故p[0]=0+1等价于a[0][0]=1,p[1]=1+1等价于a[0][1]=2,依次类推,故for循环语句执行后,二维数组a[3][3]={1,2,3,4,5,6,7,8,9},所以a[1][2]的值为6.14.(D)解析:第一个for循环语句执行后,二维数组a[3][3]={0,1,2,3,4,5,6,7,8}。第二个for语句的功能是输出数组元素a[1][0],a[1][1],a[1][2]的值,结果是345,故选D。15.(B)13592153138解析:int16n(*ptr)[2]表示定义了一个指针变量p,p只能存放含有两个整型元素的一维数组的首地址。在第一个for语句中,ptr=a+i,当i=0时,ptr=a,则a[0][0]被赋值为1,当i=1时,ptr=a+1,此时指针ptr将移动两个整型大小,故a[1][0]被赋值为2。此时当i=时不满足循环条件,退出循环,故键盘上输入的第三个数3,没有被计算机接受。所以二维数组a[3][2]={1,0,10,0,0},答案为B.16.(B)解析:int*p[3]表示定义了一个指针数组p,数组中包含三个指向整型数据的指针,故答案是B17.(D)解析:(A)p是一个指针,所以p+1是指针移动,所以还是指针。(B)(C)p是数组指针,可以看做是指针的指针。所以*P是指针,**P才是值。所以*(p+3),*(p+1)+3都是指针。故答案选D,*(P[0]+2)等价于C[0][2]。18.(D)解析:*(a+1)和a[1]是等价的,故*(a+1)代表了a[1][0]的地址,*(*(a+1)+2)就表示数组元素a[1][2],答案为D。19.(C)解析:由于p[0]=a[1];*(p(0)+1)等价于*(a[1]+1),*(a[1]+1)又等价于a[1][1],故答案为C。20.(C)解析:同17题。21.(A)解析:由于pa=a,所以pa[1][i]等价于a[1][i],在第一个for循环中,当i=0时,执行pa[1][0]=pa[1][0]-1,a[1][0]=3.当i=1时,执行pa[1][1]=pa[1][1]-1,a[1][1]=4。当i=2时,执行pa[1][2]=1,a[1][2]=1.第一个for循环结束后,二维数组a[2][3]={{1,2,3},{3,4,1}},最后输出的结果是7。二、填空题1、第一个语句:声明一个有三个元素的数组a,让指针p指向数组a的第一个元素,初始化x,声明了两个整型变量y,z。for循环的执行语句是一个条件表达式,即如果?前面括号内的表达式如果成立,则z的值是:前面表达式的值,若不成立,则是后面x的值。第一次循环和第二次循环的结果并没有输出,因为输出语句不属于for循环体语句,输出语句输出的只是最后一次循环的出的结果,即当y=2时,*(p+y)=6*s)通过指针来传递数据,A.错误,p>s比较的是两个指针地址的大小,所以选B12、A程序分析题函数f(a,3,7)的功能是:x=a[3]+a[5]=3+5=8,所以选A13、C排序题注意函数sort(&aa[3],5)参数表中是从aa[3]开始的5个元素的排列,即aa[3]~aa[7]中元素的从大到小的排列,故选C14、C排序题偶数项按从大到小的顺序排列,关键注意:i=i+2和j=j+2,实际排列的数组成元是:aa[0],aa[2],aa[4],aa[6],aa[8],故选C15、D元素交换题while()循环实现的是将数组a[8]中的成员逆序重放,故选D16、A程序分析题函数reverse()实现的是逆序重置,执行reverse(b,8)的结果是将b[0]与b[7]、b[1]与b[6]的值交换,故求和的结果s=b[6]+b[7]+b[8]+b[9]=2+1+9+10=22,选A17、D程序分析题函数执行的结果是:s=b[0][0]+b[1][1]+b[2][2]+b[0][3]=1+2+9+4=16,故选D二填空题(1)18(2)11(3)br[i](4)a[k][i]*sumx,&s(5)jmax(8)rowa[row][colum](9)j+1i%2==1第十一章字符串1D解析:在C语言中,字符串常量是由双引号括起来的,由若干个字符所组成的序列。所以A选项中的字符是由一对单引号括起来,C选项中只有一个双引号,皆错。对于B选项,定义了一个字符变量,却给它赋了字符串常量,错误。若该改为charstr[]=”x43”,则也正确。2A解析:A选项中ss[1]可以看作是一个地址常量,其值不能改变,所以不可以对其赋值。但是在定义二维数组的时候,对其进行初始化是允许的,如选项B。选项C和D定义的是字符指针变量,可以对其进行赋值。3A解析:Str是地址常量,P是指针变量,两者类型不一致,选项B错误。Str数组的长度是20,而P所指的字符串遇到’ ’就结束,本题中其长度应该为7,选项C错误。同理,既然Str数组的长度与P所指字符串长度不同,所以存放的内容肯定不同,选项D错误。4C解析:对于数组P,只有三个元素,分别是’a’,’b’,’c’,所以sizeof(P)的输出结果应该是3,对于数组q,存储了四个元素,分别是’a’,’b’,’c以及’ ’。所以sizeof(q)的输出结果是4。5C解析:本题的分析同第4题。6C解析:数组a中存储了7个字符,分别是’a’,’0’,’ ’,’0’,’a’,’0’,’ ’,当使用sizeof(a)统计计数的时候,会统计计算这7个字符,但是当用strlen(a)统计数组元素个数的时候,遇到’ ’的时候就会结束,所以最终的输出结果是72。7B解析:ps=s语句使ps指向数组s的首地址,即指向元素a,对于表达式*p+4,由于*的优先级高于+,所以进行间接访问运算,得到a,再+4,根据ascii码的顺序,最后的输出结果应该是e,答案为B。8B16n解析:选项A的getc()函数完成的是从文件中读入一个字符,而不是题目所要求的从键盘读入一个字符,错误。选项C的getchar()函数每次读入的是一个字符变量,而不是字符串变量,错误。选项D的scanf()函数,通过格式控制符%s可以读入字符串变量,但是遇到空格会作为输入数据的分隔符,不会被作为数据读入。选项Bgets()函数可以完成题目要求的功能,参见课本P92例16。1D解析:选项A中的参数2的数据类型不匹配,应改为&x[4],选项B中的y是指针常量,不能进行++运算,错误。选项C中参数1对应的数组长度小于参数2的数组长度,错误。2B解析:strlen()函数统计字符串长度的时候,是在遇到’ ’的时候结束统计。所以对于数组q来说,定义了数组的长度为10,并给前三个字符赋了初值,则从第4个字符开始,系统将数组元素的值置为’ ’,所以strlen(q)的结果是3。而对于数组p来说,数组长度为3,但是何时遇到’ ’无法确定,所以strlen(p)的值也无法确认。3D解析:函数f(char*p[],intn)完成的功能就是对字符串进行字典排序,根据题目,最后将排在第2位的字符串是“abbd”,所以strlen(p[1])的输出结果应该是4。4A解析:*运算符和++运算符的优先级相同,且结合方向都是自右向左,所以结果是15,答案为A。5D解析:根据函数代码,若返回的是正数,则表示a字符串的字典排序在b字符串之后,若返回0,表示a和b中存储的字符串一样,若返回负数,表示a字符串的字典排序在b字符串之前。6A解析:point()函数传递的是指针变量的值,而不是指针变量本身的地址,仍然是一个传值而不是传地址的过程,实参的值没有改变,所以指针p仍然指向字符串的首地址,输出结果为a。7D解析:比较字符串大小的时候,应该调用函数strcmp(),而不是直接进行比较,选项A错误。对于选项B,只要s1和s2不相等,无论s1所指串是大于或是小于s2所指串,其结果非0,都会执行语句S,与题意不符,错误。选项C的函数实参顺序错误。8B解析:对于二维数组,第二行的首元素是接着第一行的最后一个元素的。所以p+10是指向字符串“Beijing”的首地址,所以正确答案是B。9D解析:对于格式控制符%s,在输出的时候遇到’ ’才结束输出。所以答案为D18B解析:gets()函数需要的参数是指针类型的。所以ACD都满足条件,答案B中的a[0]是字符,不是指针类型,错误。19A解析:P[4]指向的应该是第5个字符串的首地址,即字符串“cd”,所以strlen(p[4])的结果是2。20C解析:数组名是指针常量,不能对其进行赋值,所以选项C错误,需要注意一点:在定义字符数组的时候可以初始化,如选项A。21C解析:swap函数实现了交换字符串首地址中对应的元素,所以输出结果为1bc,a23。22B解析:fun函数统计首字符是’T’的字符串的个数,所以符合条件的有”Tue”和”Thu”,输出结果为2.23A解析:fun1函数中的(*q)++将指针q所指向的字符进行一次自加运算,所以输出结果为A.24C解析:注意字符串“3697”和存储了一个’ ’,所以j+=2,在字符’9’之后指向的数据是’2’,’8’,’4’,都不满足条件(p[i][j]-‘0’)%2,所以结果为C。25A解析:二维数组str的第二维数是20,所以p+20保存的是字符串”Beijing”的首地址.strlen(p+20)输出的就是字符串”Beijing”的长度.结果为7。26A解析:while中的语句是*p2=*p1,注意,这是赋值语句,不是比较语句,正确答案为A27C解析:p=s[1]语句使得指针p指向字符串“two”的首地址,所以*(p+1)的输出结果是“two”的第二个字符‘w’,正确答案为C。28B解析:puts()函数实现的功能是输出字符串,for循环中,ps的值首先保存最后一个字符地址,逐一递减,输出的结果为B。29D解析:strlen(p)遇到‘ ’结束执行。所以只统计了指针p指向的前5个字符“abcde”,结果为5。30A解析:字符串s中的存储字符有下面9个:’\’,’1’,’4’,’1’,’141’,’a’,’b’,’c’,’t’,所以strlen(s)的结果为9。31B解析:ch[1]可以看作是二维数组的行指针,指向第二个字符串的首地址,注意输出中的转义字符”,输出的结果是显示一个”.32A解析:字符串常量“good!”赋给字符串变量时,再结尾自动加上字符’ ’,这样就一共需要6个存储单元,但是选项A中的数组str的长度只有5,所以错误。33D解析:程序执行while循环,最后一次执行中,pb指向b1的首地址,所以将b1全部拷贝给b2,所以程序的输出结果为7。34D解析:s是数组名,为指针常量,不能进行s+=2这样的操作,所以程序出错。填空:1gae解析:main函数实现的功能是输出两个字符串中相等的字符。2*2*4*6*8解析:while循环实现的是将字符串的奇数位赋值为*,并输出,偶数位原样输出。3*t++解析:注意变量t需要自加。4efgh解析:strlen(s)的值为4,所以指针变量p的起始地址是从字符‘e’的地址开始,格式控制符%s输出遇到‘ ’结束。所以输出efgh。5cdeab解析:move函数实现的功能是将字符串循环左移。6s[i]>=‘0’&&s[i]<=’9’7p+n8s-1*s++9*t解析:注意,由于后面的循环体语句有t++,所以这里是*t而不是*t++。10bcdefgha解析:ss函数实现的是实现字符串循环左移的功能。11abcfg12strlen(str)+str-1t==0huiwen(str)第十二章对C语言的进一步讨论一、选择题1:CMain()函数的参数通常是两个,第一个必须是int型,第二个必须是字符串的指针。2:D程序的含义表明将输入的参数命令行看作字符串,将第1,3个字符串即(abcdh3)的字符个数相加,存放到len中,输出6。3:DInt*f()表示返回值是指针的函数4 :CC选项返回的是指针,所以A,B,D选项正确,C错误。5:B函数的递归调用分为直接地归调用和间接递归调用两种,其中间接递归调用自己的称为间接递归调用6:C这是函数递归调用:Fun(7)调用后等价于7-fun(5),又去调用fun(5),fun(5)又相当于5-fun(3)这时程序相当于计算7-(5-fun(3)),即7-5+fun(3),又去调用fun(3),fun(3)又相当于3-fun(1),程序相当于计算7-5+3-fun(1),结果为2。7:A这是函数递归调用:x的输入值为10,调用fun(10),相当于以下过程:fun(10)=10+fun(9);10+fun(9)=10+9+fun(8)10+9+fun(8)=10+9+8+fun(7)10+9+8+fun(7)=10+9+8+7+fun(6)10+9+8+7+fun(6)=10+9+8+7+6+fun(5)..........10+9+8+7+6+5+4+3+2+fun(1)=10+9+8+7+6+5+4+3+2+1;结果为558:D16nA项:预处理命令不一定要放在程序开头,B:一行只能有一条预处理命令。C宏名可以小写,但一般用大写进行区别,D正骨俄9:f(x)为代参数的宏,f(8)相当于8*8,f(4)相当于4*4,同样f(4+4)相当于4+4*4+4,f(2+2)相当于2+2*2+2所以结果是4,3。C选项正确。10:AF(X,Y)为代参数的宏,F(a++,b++)相当于(a++)*(b**),结果为1211:M1+M2相当于(N*3)+(N*2),而N相当于5所以结果为25。12:AA正确,B作用域没有发生变化。C:不一定。比如数组,D:不像同。13:A形参缺省是auto型14:A主函数中的printf(“%c%c”,a,b);中a,b用的是全局变量,而fun(‘E’,’F’)传递给的是函数fun2()的局部变量。所以答案是A。15:D注意到:f()中的i是static类型,所以在每次调用f()函数时,i值会保留为上一次计算的结果。16:AA选项只得到了一个整型存储单元。17:A指针p和q指向同意存储区域,因此,scanf(“%s%s”,p,q);实际是给一块内存区域进行了两次付值,值为def,因此输出为defdef.18:Atypedef只是对原有类型的重新命名,而不会增加新的类型。19:DSTP表示基类型为字符型的指针类型,所以选D20:B略21:C略22:A略23:D非执行语句不一定会转换成二进制代码,例如程序的注释部分。24:D略25:C略26:D略一、填空1:c解释:c作为实参用作宏定义的参数,起到临时存放变量值的作用。2:findbig解释:这是利用函数指针调用函数的题目,函数名相当于函数的入口地址,函数指针应该存放被调用函数的函数名。3:/n解释:fac初始值为1在循环中,利用/n相当于依次求取1、1/2,1/(3*2)…….1/(1*2*3*4*4*6*7*8*9*10),利用s把每一次fac的值进行累加,完成题目要求。4:3*sizeof(double)解释:mallo()函数是用来动态划分内存空间的,传递的参数是空间所占的内存大小,即字节数,按照题目要求分配3个double型的内存单元,应该填入3*sizeof(double)。第十三章结构体与共用体答案与解析一、选择题1、C解析:在本题中TT为结构体名,用关键字typedef对结构体进行说明,CIN一个具体的结构体类型名等价于structTT,可以用CIN来直接定义结构体变量,而不用再写struct。A:答案不能用TT直接定义结构体变量,一般格式为(structTT结构体变量名);B:答案概念错误,D:答案CIN不是结构体变量,是一个具体的结构体类型名。2、D解析:这是一个给结构体赋值的简单实例,A:答案是给结构体数组中的成员s[0]中的字符数组name赋初值,s[0].name表示该结构体中字符数组的首地址,B:选项中表示给结构体数组s中的结构体s[0]中的age变量赋初值,C:答案中&(ps->sex)等价于将结构体指针变量指向的结构体s[0]中的成员sex并进行取址运算,等价于&s[0].sex;D:答案明显错误,不能给变量直接赋值,用scanf函数必须用取址运算,ps->age,在这里等价于s[0].age.3、C解析:第三题的结构我们可以用以下关系表示:ptC[0]C[1](10,a)(20,b)(20)[1,2][3,4]答案A:实际上是将y指针变量所指向的数组a中的数组的第一个数字拿出来,所以a答案应该为1,答案B:是将pt结构体指针变量所指向的结构体数组c中c[0]的成员x的值取出来,所以我们可以知道答案B的结果为10;答案C由于指向运算符的优先级别高于自加运算,所以是pt结构体指针变量所指向的结构体数组c中c[0]的成员x的值自加之后的值结构为11;D答案结构体指针变量pt++表示将pt所指向的变量由c[0]改为c[1]的首地址,再将x的值取出来,由于x的值为20,所以答案D也可以排除。4、D解析:第三题的结构我们可以用以下关系表示:p20“200401”21“200402”22“200403stu[0]stu[1]stu[2]A:答案实际上是将p所指向的变量由stu[0]改为stu[1]的首地址,并将stu[1]中的成员num取出所以A答案的结果为字符串常量“200402”;答案B将p所指向的stu[0]中的成员num取出所以结果为字符串常量“200401”;答案C是将p所指向的首地址为stu[0]中的成员num取出所以结果为字符串常量“200401”,C答案中的括号不能省略;答案D中不存在结构体变量stu[3],所以不存在stu[3].age成员。5、B解析:表达式++(p->x)是将结构体指针p所指向的结构体变量date[0]中的成员x进行自加运算后的值,所以也就等价于stu[0].x++。6、A解析:选项B中不能将字符串常量赋值给字符变量,选项C、D错误十分明显。7、D解析:第七题主要是对链表的考察,答案A是将变量q->next的值赋值给p->next变量,q->next在这里指的是图中结构体指针变量r所指向的那个结构体变量存储空间的首地址,这时q->next变量中存储的是指针变量r所指向的那个结构体变量存储空间的首地址,所以能够完成具体操作;答案B中p->next->next等价于变量q->next所以答案A、B是等价的;答案C直接将r所指向的那个结构体变量存储空间的首地址赋值给p->next变量,所以也能够完成具体操作,答案DP=q->next实际上不是删除节点的操作,不能将结点删除,只是改变结构体变量p所指向节点的首地址,实际上完成D答案的操作后将使结构体指正p、r指向同一个节点。8、CAB16n解析:第一空是函数CreatList返回值得类型,我们可以从程序中得到返回值h为结构体指针变量,我们可以从程序中找到答案;第二空是给结构体指针p所指向的成员中的date变量赋值,这个值来自函数形参的传递值,所以我们选择答案A,结构体指针在这里只起一个传递的作用,具体结构如下图:第三空是在将新开辟的节点与链表联接后,将指针变量p所指向的首地址传递给结构体指针变量q,使结构体指针变量同时指向新开辟的单元的首地址,所以选B答案。lnextinextpqht 9、C解析:对于占用两个字节的共用体,第一次赋值,高位编译系统已经给其赋值为0,所以在输出的时候,高位已经有内容,而不是没有初始化。10、B解析:共用体和结构体一样,对于单个元素的引用(包括初始化以及数据输出)一定要用成员运算符‘.’。不能对共用体进行整体运算。二、填空题1、2002Shangxian解析:对字符串的操作strcmp(s1,s2)是比较两个字符串第一个不相同字母并返回首个不相同字母的ascall码的差值,若第i个字母不同则上述字符串的返回值为(s1[i-1]-s2[i-1]),结果为一个整数,题目先将结构体变量a赋值给d将,然后将结构体变量b赋值给d,由于程序第11行中if后面的表达式不成立所以没有将结构体变量c的值给结构体变量d,题目前面又将结构体变量d的首地址赋值给结构体指针变量p所以此时,结构体指针p指向结构体变量d,那么题目最后输出的结果实际是结构体变量b中的内容。2、structnode*解析:自身结构体指针变量的类型必须和定义的结构体相同,由于是指针变量所以我们在后面加一个*号3、sizeof(structnode)解析:注意mallco函数的基本格式,后面表示在内存中动态分配一个长度为sizeof(structnode)的连续空间,在链表中非常常见。4、p!=NULLp->next或者(p++)解析:NULL表示空地址,一般是链表结束的标志。第二空实际上是一个改变链表中节点的首地址的操作、p=p->next的作用在这里实际上是输出结构体指针所指下的结点中相应的值,再将结构体指针指向下一个节点的首地址执行下一个节点中内容的输出操作。5、->next->data解析:p->next->date等价于图中q->date;由于链表时循环的r->next实际上是图中结构体指针p所指向的那个节点的首地址,要取出结构体指针r所指向的结点的值只需(r->next->next->next->date)或者p->next->next->date第十四章文件知识点概要:学习本章内容首先要弄清楚文件的概念,尤其是读文件和写文件的概念。这里对其中几个概念稍加解释一下:1、顺序读写文件:进行读或写操作时总是从文件开头开始,从头到尾的读写,不能任意读写。2、随机读写文件:可以不从开头读写,可从任意位置开始读写文件。3、ASCII文件(也称为文本文件):这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。例如,整数5678的存储形式为:ASC码:00110101001101100011011100111000↓↓↓↓十进制码:5678共占用4个字节。ASCII码文件可在屏幕上按字符显示,例如源程序文件就是ASCII文件,用DOS命令TYPE可显示文件的内容。由于是按字符显示,因此能读懂文件内容。4、二进制文件:是按二进制的编码方式来存放文件的。例如,整数5678在计算机中的存储形式为:0001011000101110只占二个字节。如将其存放到二进制文件中,其存放的内容就是0001011000101110。二进制文件虽然也可在屏幕上显示,但其内容无法读懂。C系统在处理这些文件时,并不区分类型,都看成是字符流,按字节进行处理。输入输出字符流的开始和结束只由程序控制而不受物理符号(如回车符)的控制。因此也把这种文件称作“流式文件”。一、选择题1)定义fp的文件指针应为:FILE*fp,所以C选项不正确2)打开文件data.dat,并且使得文件指针fp指向该文件,I的值为1,2,3,4,5时,满足条件2,依次将1,2,3,4,5输入到文件中,并且在I为3时满足(I%3==0),所以输入3之后换行,再输入的4,5.rewind(fp)使得文件指针fp指到文件的开头,然后将指针的当前位置开始,取两个数到变量k,n中,使得k=123,n=45,因为数据是以间隔符分开的.所以结果是12345,选B.3)fseek(fp,n,SEEK_SET)的作用是使得文件指针移动到文件开始后的的n个字节位置上,此处的n为0,所以就是移动的文件的开始处,这与rewind(fp)作用相同,所以选D.4)fprintf(fp1,”abc”)是使得abc依次写到指针fp1指向的位置,所以abc覆盖good,所以f1.txt中的内容变为abcd,选C.5)通过第一个for语句,依次将1,2,3写入到文件中,并且1,2,3之间无间隔符,所以通过fscanf(fp,”%d%d”,&k,&n);将123赋给了k,n为赋值,仍为初始化的值,所以最后的结果为1230,选B6)通过第一个for循环使得数组中的值依次写入文件中,fseek(fp,-2L*sizeof(int),SEEK_END),使得指针移到3所在的字节的首位置,fread(&b,sizeof(int),1,fp);把指针fp所指的值放到变量b中,所以结果是3,选D7)因为feof(文件指针)的作用是判断文件是否结束,是则返回1否则返回0,本题中未遇到文件结束,所以应返回0,选A.8)选D.略.9)选D.略10)选A,fopen中的文件名和打开方式都应该用双引号引起.11、答案:A解析:考察fprintf函数和fscanf函数。程序首先以写文本文件的形式向文件写入整数20,换行符号’n’,然后再写入整数30,换行符号’n’然后调用fscanf函数读出两个整数,分别赋给k,n。这里要注意的是在文件中存放的是2和0的ASCII值,换行符’n’的ASCII码值,3和0的ASCII值,换行符’n’的ASCII码值。所以读取整数时是先取出2和0的ASCII码值,当读到换行符’n’时,发现其不是数字,不是整数的一部分,于是就将2和0作为整数,于是的到20。同样再读下一个整数时,先找到3和0,遇到换行符是停止,得到30。注意此题与第五题的区别。12、答案:D解析:概念的理解,参考课本。FILE可以指向二进制和文本文件。13、答案:B解析:考察文件路径的书写格式和fopen函数的写法。参看课本P127页打开文件部分。14、答案:A解析:此题查几种打开文件方式区别,读者参考课本P127页,弄清楚这几张方式的不同。程序开头用”wb”方式打开文件,即以写的方式打开二进制文件,注意这里不是追加,所以打开时文件指针指向文件头,通过fwrite写入“Fortran”后,通过fseek函数重新将文件指针移到了开头,所以后面的操作将会覆盖掉前面的。由于写入”Basic”为5个字节,所以原先的最后两个字符没有覆盖掉。故选“Basican”。15、答案:C解析:考查fseek函数,这个函数中预定义表示SEEK_END是指最后一个字符的后面。所以此题首先写入”abcd”16n,再从最后开始向前移动两个,即从字符“d”的后头开始向前移动2个,这是指向字符“c”。故选C。填空题1、答案:Hell解析:靠查函数fgets参考课本P132页,这里实际输入的字符个数比给定的要少一个。题目给定的是5,所以实际输入的应该是5-1=4,即Hell。2、答案:“d1.dat”,”rb”解析:此题考查函数fopen的用法,注意文件的打开方式,以读打开二进制文件的方式为”rb”。3、答案:!feof(fp)解析:考察函数feof的使用。参考课本P128页。如果文件结束返回1,否则返回0。所以这里如果还没有到文件结尾的时候就继续读入字符。4、答案:“rb”解析:考察文件的打开方式。题目首先是以写的方式打开二进制文件。然后关闭文件。重新打开文件时只要读取数据,所以以只读的方式打开就可。由此文件是二进制文件。所以用二进制方式打开。故答案为“rb”。公共基础答案解析第一章数据结构与算法一、选择题1、答案:B注:算法的基本特征:确定性、有穷性、可行性、拥有足够的情报,见教材:P12、答案:C注:见教材P13、答案:C注:算法的时间复杂度是指算法执行过程中所需要的基本运算次数。执行算法所需要的时间的很难计算的,它的执行时间还依赖于计算机硬件等,所以A错误。4、答案:D注:见教材P2,第13行5、答案:D注:时间复杂度和空间复杂度是从两个不同的方面对算法的效率进行度量,两者之间没有必然的联系。6、答案:B注:见教材P2,第15行7、答案:D注:见教材P3,到数第4行8、答案:B注:教材P3最后一行,不同的存储结构,其数据处理的效率是不同的。所以选B9、答案:D注:见教材P3最后一段10、答案:C注:教材P8,栈的定义11、答案:B注:栈的存储结构有顺序存储结构和链式存储结构,所以选B12、答案:D13、答案:B14、答案:B15、答案:C注:10-15理解栈的概念及性质,在栈中,允许插入与删除的一端称为栈底。栈是按照“先进后出”或“后进先出”的原则组织数据的,因此,栈也被称为“先进后出”或“后进先出”的线性表。因此栈具有记忆功能。栈是线性表,也可采用链式存储结构,见教材P816、答案:C注:对列是只允许在一段插入,在另一段删除的特殊线性表,也称为“先进先出”或“后进后出”的线性表。17、答案:D注:同上18、答案:A注:线性链表中的各元素在存储空间中的位置不一定是连续的,而且各元素的存储顺序也是任意的。见教材P519、答案:D注:同上20、答案:A注:线性结构的特征:(1)有且仅有一个根结点,(2)每个结点最多有一个前件,也最多有一个后件。线性表、栈、对列都是线性结构,二叉树是非线性结构。21、答案:A注:增加度为1的结点不会影响二叉树的叶子结点数,每增加一个度为2的结点便会增加一个叶子结点,没有度为2的结点时叶子结点数为1,所以,当有N个度为2的结点时,该二叉树的叶子结点为N+122、答案:C注:深度为N的满二叉树的叶子结点数为23、答案:B注:有3个叶子结点则说明此二叉树中有2个度为2的结点(21题中有述),则总结点数即为度为1的结点数、度为2的结点数与叶子结点数之和,即8+2+3=1324、答案:A注:见20题注解25、答案:D注:同上26、答案:C注:同上27、答案:B注:首先看到A是根结点,遍历左子树T.T又可看成“根结点”,T没有左子树,则遍历右子树B.再把B作为根结点,遍历左子树在,此时A的右边已遍历完。回到A的左子树X.同理……,所以最终遍历结果是ATBZXCYP28、答案:A注:中序遍历,最左边的结点最先遍历,最右边的结点最后遍历,29、答案:D注:后序遍历,根结点总是最后一个遍历注意:28至30搞清楚前序,中序,后序遍历的概念30、答案:C注:对长度为n的线性表进行顺序查找,在最坏情况下所需要的比较的次数为n.故选C。31、答案:A注:二分法查找只能应用于顺序存储的有序表。见教材P16,二分查找32、答案:A注:对于长度为N的有序线性表,在最坏的情况下,折半查找只需要比较log2n次,而顺序查找则需要比较N次。33、答案:B注:对于长度为N的有序线性表,在最坏的情况下,而顺序查找则需要比较N次。34、答案:D注:在最坏情况下冒泡排序、快速排序、插入排序的时间复杂度是n(n-1)/2,堆排序的时间复杂度为,所以答案是D35、答案:D注:同上二、填空体1、算法2、空间复杂度3、线性结构4、存储5、存储结构6、栈7、队列8、329、1510、1911、n12、13、45第二章程序设计基础一选择题1.答案:A在第二章第一节(19页)中指出:清晰第一、效率第二已成为当今主导的程序设计风格。2.答案:D3.答案:D略4.答案:D第二章第二节(一)(20页)中指出:结构化程序设计的原则:自顶向下、逐步求精、模块化、限制使用goto语句。5.答案:B第二章第二节(二)(20页)第一段说明:程序具有结构清晰、容易阅读、容易理解、容易验证、容易维护等特点。6.答案:D教材第二章第二节(21页)第二段:结构化程序设计的特点:只有一个入口和出口7.答案:C8.答案:D此题考察消息的定义。在第二章第三节(二)(23页)有说明。9.答案:B第二章三节(二)(23页)指出:模块独立性与信息隐蔽性直接相关。10.答案:A此题考察对继承的理解。第二章第三节(二)<4>(24页)11.答案:A第二章第二节(一)(20页)<8>指出:语句结构尽量做到模块功能单一化。16n12.答案:A13.答案A同11题二1.注释一般分为序言性和功能性注释。2.一个对象是对应类的一个实例。3.重复(循环)4.封装5.实例同第二题6.对象同第二题7.类8消息9继承第三章软件工程基础选择题1答案:D;本题考查软件的概念。计算机软件是包括程序、数据及相关文挡的完整集合。(P21)2答案:D;考查软件的概念和软件的主要特点中的两个特点;软件的主要特点有:(1)软件是一种逻辑实体,而不是物理实体,具有抽象性。(2)软件的生产与硬件不同,它没有明显的制作过程。(3)软件的开发、运行对计算机系统具有依赖性,受计算机系统的限制。(4)软件在运行、使用期间不存在磨损、老化问题。(5)软件复杂性高,成本昂贵。(6)软件开发涉及诸多社会因素。3答案:D;考查软件工程的3个要素:(1)方法;(2)工具;(3)过程。4答案:C;考查软件工程的概念;软件工程,简单的说就是使软件走向工程化;软件工程的核心思想是把软件产品(像其它工业产品一样)看作是一个工程产品来处理。注意:像A、D答案如此绝对化,一般是错。5答案:C;考查软件生命周期的开发阶段任务:(1)概要设计;(2)详细设计;(3)软件实现;(4)软件测试。P23图16答案:D;考查软件定义阶段中:可行性研究与计划的制定,是确定待开发目标和总的要求,给出它的功能、性能、可靠性以及接口等方面的可能方案,制定完成开发的实施计划。需求分析:对待开发软件提出的需求分析并给出详细的定义。软件设计:包括概要设计和详细设计。系统设计人员和程序设计人员应该在反复理解软件需求的基础上,给出软件结构、模块的划分、功能的分配以及处理流程。P237答案:C8答案:B;参见6题9答案:A;参见6题10答案:A;(1)加工(转换),输入数据经加工变换产生的输出。(2)数据流,沿箭头方向传递数据的通道,一般在旁边标注数据流名。(3)存储文件(数据源),表示处理过程中存放各种数据的文件。(4)源、潭,表示系统和环境的接口,属系统之外的实体。P2511.答案:D;参见10中的数据流。12.答案:D;N-S图、PAD图、PFD图(程序流程图)都是详细设计中的图形工具;P32DFD图(数据流图)是需求分析中的结构化分析方法的常用工具。P2513.答案:C;软件设计的基本原理是:(1)抽象;(2)模块化;(3)信息隐蔽;(4)模块独立性。P2814.答案:A;耦合性:是模块见相互连接的紧密程度的度量。当然耦合程度也就是耦合度。P2815.答案:B;高质量的软件设计,应尽量做到高内聚,低耦合,有利于提高模块的独立性。P2916.答案:C;耦合程度取决于各个模块之间接口的复杂程度、调用方式以及哪些信息通过接口。P28耦合性与内聚性是模块独立性的两个定性的标准,耦合与内聚性是相互关联的。在程序结构中,各模块的内聚性越强,则耦合性越弱。P2917.答案D;参见12题18.答案:B;箭头表示控制流。P32图1019.答案:A;箭头表示模块间的调用关系,用带实心的箭头表示传递的是控制信息,用带空心圆的箭心表示传递的数据。显然带有箭头的连线表示数据的流向。P2920.答案:A;软件测试的目的是要找到软件的错误(发现错误),而不是演示软件的正确性,因而要设计一个好的测试用例,尽可能地发现尚未发现的错误,从而验证软件是否达到设计目标,是否能交付用户使用。P3321.答案:C;参见21题。22.答案:A;黑盒测试完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求和功能规格说明,检查程序的功能是否符合它的设计要求。P34(注意:区分“内部结构”和“内部的逻辑结构”);白盒测试的方法也称结构测试或逻辑测试。P34,所以显然白盒测试主要考虑内部的逻辑结构是对的。23.答案:A;确认测试的任务是验证软件的功能和性能及其他特性是否满足了需求规格说明中的各项需求以及软件配置是否完全正确。P3624.答案:A;软件调试的任务是诊断和修改程序中的错误。P3725.答案:D;软件调试的目的就是修改程序中的错误;而修正一个错误的同时可能会引入心的错误,因此在修改了错误之后,必须回到测试。P37软件维护是在软件运行使用过程中部断地维护,根据新的提出的需求进行必要而且可能的扩充和删改(P23)。所以软件维护不只是对程序代码的维护。软件测试不一定要程序开发者或是设计者来完成。26.答案:D;软件调试的目的就是修改程序中的错误;而修正一个错误的同时可能会引入心的错误,因此在修改了错误之后,必须回到测试。P37软件测试和软件调试的用例并没规定要一致。27.答案:C;修改错误的过程将迫使人们暂时回到程序设计阶段,修改错误也是程序设计的一种形式。注意修正一个错误的同时可能会引入心的错误,因此在修改了错误之后,必须回到测试。P37中修改错误的原则中的3、4点。28.答案:C;软件维护是在软件运行使用过程中部断地维护,根据新的提出的需求进行必要而且可能的扩充和删改(P23)。软件的生命周期包括从可行性研究到软件退役。P23图-1二、填空题1.计算机软件是包括程序、数据及文挡的完整集合。P212.软件工程的理论和技术研究的内容主要包括软件开发技术和软件工程管理两个方面。P233.软件开发环境或软件工程环境是指全面支持软件开发全过程的软件工具的集合。P244.开发阶段5.需求分析方法:(1)结构化分析方法包括:①面向数据结构的Jackson方法(ISD);②面向数据流的结构化分析方法(SA);③面向数据结构的结构化数据系统开发方法(DSSD);(2)面向对象的分析方法(OOA)。6.数据字典7图形的方式8.内聚性是一个模块内部各个元素间彼此结合的紧密程度的度量。P289.典型的数据类型有两种:变换型和事物型。P3010.把图形看作是“长沙的五一大道”,那么要同时通过几辆车道路就要求有多宽。所以宽度就是3。11.记住:测试的目的发现(暴露)是否有错误,而的目的是改正错误。12.黑箱测试13.静态测试主要是由人工进行(部执行程序);动态测试是基于计算机的测试,是为了发现错误而执行程序的过程(执行程序)。P3414.静态测试主要是由人工进行(不执行程序);动态测试是基于计算机的测试,是为了发现错误而执行程序的过程(执行程序)。P3415.驱动测试相当于被测模块的主程序,它接收测试数据,并传给被测模块,输出实际测试结果。P3516.程序调试的任务是诊断和修改程序中的错误。第四章数据库技术基础1答案:B概念题.见教材<公共基础知识>第四章P5016n2答案:A数据库系统只是减少了冗余而非避免了一切冗余.3.答案:B4.答案:B概念题.见教材第四章P55第4行.5.答案:C概念题.见教材第四章P51第7行.6.答案:D7.答案:A独立性最高的是数据库系统.8.答案:C关系模型是数学化的模型.要用到集合论.离散数学等理论知识.9.答案:A概念题.见教材第四章P58倒数第10行.10.答案:D一个顾客可以买多种商品.任何一种商品可以被多个顾客购买.所以商品和顾客之间的联系是多对多.11.答案:AE-R模型用来表实体间的联系有:一对一.一对多.多对多.12.答案:B参照教材第四章P60.四网状模型理解.13.答案:D概念题.见教材第四章P60倒数第2行.14.答案:A概念题.见教材第四章P61第2行.15.答案:C16.答案:C17.答案:B概念题P61页18答案:B概念题.关系数据库管理系统能实现的专门关系运算包括:选择.投影.连接.具体见教材第四章P64.19.答案:B在关系运算中.连接运算后得到的新表的属性是运算前表中属性相加.即多于原来关系中属性的个数.20.答案:DA中把一一对应与一对一概念混淆.B中关系模型能处理实体集间一对一.一对多.多对多的联系.C.关系模型属于非格式化模型而模型和网状模型属于格式化模型.21.答案:B此题考关系代数的并运算.22.答案:C23.答案:D24.答案:A数据库是一种共享资源.所以数据库设计的根本目标是解决数据共享问题.25.答案:A数据库设计分为四个阶段:需求分析阶段.概念设计阶段.逻辑设计阶段.物理设计阶段.而B.C.D显然不符号.故选A.26.答案:B对A.数据库系统需要操作系统的支持.27.答案C概念题.数据库是指在已有数据库管理系统的基础上建立数据库二1.数据库系统中实现各种数据管理功能的核心软件称为数据库管理系统。概念理解.见第四章P50倒数第1段.2.物理独立性:用户的应用程序与存储在磁盘在磁盘等介质上的数据库是相互独立的。概念题.3.数据库系统阶段参考选择题第7题.4.关系模型属于非格式化模型而层次模型和网状模型属于格式化模型5.一个主管管理多个项目.故一对多联系.6.一个学校有多个老师.故学校和老师之间的联系属于一对多联系7.关系允许三类数据约束,他们是实体完整性约束、参照完整性约束以及用户定义的完整性约束。8.关系模型采用二维表来表示一个关系对应通常说的一张表9.表中的一行即为一个元组概念题.见教材第四章P61二级公共基础知识总结第一章数据结构与算法1.1算法算法:是指解题方案的准确而完整的描述。算法不等于程序,也不等计算机方法,程序的编制不可能优于算法的设计。算法的基本特征:是一组严谨地定义运算顺序的规则,每一个规则都是有效的,是明确的,此顺序将在有限的次数下终止。特征包括:(1)可行性;(2)确定性,算法中每一步骤都必须有明确定义,不充许有模棱两可的解释,不允许有多义性;(3)有穷性,算法必须能在有限的时间内做完,即能在执行有限个步骤后终止,包括合理的执行时间的含义;(4)拥有足够的情报。算法的基本要素:一是对数据对象的运算和操作;二是算法的控制结构。指令系统:一个计算机系统能执行的所有指令的集合。基本运算包括:算术运算、逻辑运算、关系运算、数据传输。算法的控制结构:顺序结构、选择结构、循环结构。算法基本设计方法:列举法、归纳法、递推、递归、减斗递推技术、回溯法。算法复杂度:算法时间复杂度和算法空间复杂度。算法时间复杂度是指执行算法所需要的计算工作量。算法空间复杂度是指执行这个算法所需要的内存空间。1.2数据结构的基本基本概念数据结构研究的三个方面:(1)数据集合中各数据元素之间所固有的逻辑关系,即数据的逻辑结构;(2)在对数据进行处理时,各数据元素在计算机中的存储关系,即数据的存储结构;(3)对各种数据结构进行的运算。数据结构是指相互有关联的数据元素的集合。数据的逻辑结构包含:(1)表示数据元素的信息;(2)表示各数据元素之间的前后件关系。数据的存储结构有顺序、链接、索引等。线性结构条件:(1)有且只有一个根结点;(2)每一个结点最多有一个前件,也最多有一个后件。非线性结构:不满足线性结构条件的数据结构。1.3线性表及其顺序存储结构线性表是由一组数据元素构成,数据元素的位置只取决于自己的序号,元素之间的相对位置是线性的。在复杂线性表中,由若干项数据元素组成的数据元素称为记录,而由多个记录构成的线性表又称为文件。非空线性表的结构特征:(1)且只有一个根结点a1,它无前件;(2)有且只有一个终端结点an,它无后件;(3)除根结点与终端结点外,其他所有结点有且只有一个前件,也有且只有一个后件。结点个数n称为线性表的长度,当n=0时,称为空表。线性表的顺序存储结构具有以下两个基本特点:(1)线性表中所有元素的所占的存储空间是连续的;(2)线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。ai的存储地址为:ADR(ai)=ADR(a1)+(i-1)k,,ADR(a1)为第一个元素的地址,k代表每个元素占的字节数。顺序表的运算:插入、删除。(详见14--16页)1.4栈和队列栈是限定在一端进行插入与删除的线性表,允许插入与删除的一端称为栈顶,不允许插入与删除的另一端称为栈底。栈按照“先进后出”(FILO)或“后进先出”(LIFO)组织数据,栈具有记忆作用。用top表示栈顶位置,用bottom表示栈底。栈的基本运算:(1)插入元素称为入栈运算;(2)删除元素称为退栈运算;(3)读栈顶元素是将栈顶元素赋给一个指定的变量,此时指针无变化。队列是指允许在一端(队尾)进入插入,而在另一端(队头)进行删除的线性表。Rear指针指向队尾,front指针指向队头。队列是“先进行出”(FIFO)或“后进后出”(LILO)的线性表。队列运算包括(1)入队运算:从队尾插入一个元素;(2)退队运算:从队头删除一个元素。循环队列:s=0表示队列空,s=1且front=rear表示队列满1.5线性链表数据结构中的每一个结点对应于一个存储单元,这种存储单元称为存储结点,简称结点。结点由两部分组成:(1)用于存储数据元素值,称为数据域;(2)用于存放指针,称为指针域,用于指向前一个或后一个结点。在链式存储结构中,存储数据结构的存储空间可以不连续,各数据结点的存储顺序与数据元素之间的逻辑关系可以不一致,而数据元素之间的逻辑关系是由指针域来确定的。链式存储方式即可用于表示线性结构,也可用于表示非线性结构。16n线性链表,HEAD称为头指针,HEAD=NULL(或0)称为空表,如果是两指针:左指针(Llink)指向前件结点,右指针(Rlink)指向后件结点。线性链表的基本运算:查找、插入、删除。1.6树与二叉树树是一种简单的非线性结构,所有元素之间具有明显的层次特性。在树结构中,每一个结点只有一个前件,称为父结点,没有前件的结点只有一个,称为树的根结点,简称树的根。每一个结点可以有多个后件,称为该结点的子结点。没有后件的结点称为叶子结点。在树结构中,一个结点所拥有的后件的个数称为该结点的度,所有结点中最大的度称为树的度。树的最大层次称为树的深度。二叉树的特点:(1)非空二叉树只有一个根结点;(2)每一个结点最多有两棵子树,且分别称为该结点的左子树与右子树。二叉树的基本性质:(1)在二叉树的第k层上,最多有(k≥1)个结点;(2)深度为m的二叉树最多有个结点;(3)度为0的结点(即叶子结点)总是比度为2的结点多一个;(4)具有n个结点的二叉树,其深度至少为[log2n]+1,其中[log2n]表示取log2n的整数部分;(5)具有n个结点的完全二叉树的深度为[log2n]+1;(6)设完全二叉树共有n个结点。如果从根结点开始,按层序(每一层从左到右)用自然数1,2,….n给结点进行编号(k=1,2….n),有以下结论:①若k=1,则该结点为根结点,它没有父结点;若k>1,则该结点的父结点编号为INT(k/2);②若2k≤n,则编号为k的结点的左子结点编号为2k;否则该结点无左子结点(也无右子结点);③若2k+1≤n,则编号为k的结点的右子结点编号为2k+1;否则该结点无右子结点。满二叉树是指除最后一层外,每一层上的所有结点有两个子结点,则k层上有2k-1个结点深度为m的满二叉树有2m-1个结点。完全二叉树是指除最后一层外,每一层上的结点数均达到最大值,在最后一层上只缺少右边的若干结点。二叉树存储结构采用链式存储结构,对于满二叉树与完全二叉树可以按层序进行顺序存储。二叉树的遍历:(1)前序遍历(DLR),首先访问根结点,然后遍历左子树,最后遍历右子树;(2)中序遍历(LDR),首先遍历左子树,然后访问根结点,最后遍历右子树;(3)后序遍历(LRD)首先遍历左子树,然后访问遍历右子树,最后访问根结点。1.7查找技术顺序查找的使用情况:(1)线性表为无序表;(2)表采用链式存储结构。二分法查找只适用于顺序存储的有序表,对于长度为n的有序线性表,最坏情况只需比较log2n次。1.8排序技术排序是指将一个无序序列整理成按值非递减顺序排列的有序序列。交换类排序法:(1)冒泡排序法,需要比较的次数为n(n-1)/2;(2)快速排序法。插入类排序法:(1)简单插入排序法,最坏情况需要n(n-1)/2次比较;(2)希尔排序法,最坏情况需要O(n1.5)次比较。选择类排序法:(1)简单选择排序法,最坏情况需要n(n-1)/2次比较;(2)堆排序法,最坏情况需要O(nlog2n)次比较。第二章程序设计基础2.1程序设计设计方法和风格如何形成良好的程序设计风格1、源程序文档化;2、数据说明的方法;3、语句的结构;4、输入和输出。注释分序言性注释和功能性注释,语句结构清晰第一、效率第二。2.2结构化程序设计结构化程序设计方法的四条原则是:1.自顶向下;2.逐步求精;3.模块化;4.限制使用goto语句。结构化程序的基本结构和特点:(1)顺序结构:一种简单的程序设计,最基本、最常用的结构;(2)选择结构:又称分支结构,包括简单选择和多分支选择结构,可根据条件,判断应该选择哪一条分支来执行相应的语句序列;(3)循环结构:可根据给定条件,判断是否需要重复执行某一相同程序段。2.3面向对象的程序设计面向对象的程序设计:以60年代末挪威奥斯陆大学和挪威计算机中心研制的SIMULA语言为标志。面向对象方法的优点:(1)与人类习惯的思维方法一致;(2)稳定性好;(3)可重用性好;(4)易于开发大型软件产品;(5)可维护性好。对象是面向对象方法中最基本的概念,可以用来表示客观世界中的任何实体,对象是实体的抽象。面向对象的程序设计方法中的对象是系统中用来描述客观事物的一个实体,是构成系统的一个基本单位,由一组表示其静态特征的属性和它可执行的一组操作组成。属性即对象所包含的信息,操作描述了对象执行的功能,操作也称为方法或服务。对象的基本特点:(1)标识惟一性;(2)分类性;(3)多态性;(4)封装性;(5)模块独立性好。类是指具有共同属性、共同方法的对象的集合。所以类是对象的抽象,对象是对应类的一个实例。消息是一个实例与另一个实例之间传递的信息。消息的组成包括(1)接收消息的对象的名称;(2)消息标识符,也称消息名;(3)零个或多个参数。继承是指能够直接获得已有的性质和特征,而不必重复定义他们。继承分单继承和多重继承。单继承指一个类只允许有一个父类,多重继承指一个类允许有多个父类。多态性是指同样的消息被不同的对象接受时可导致完全不同的行动的现象第三章软件工程基础3.1软件工程基本概念计算机软件是包括程序、数据及相关文档的完整集合。软件的特点包括:(1)软件是一种逻辑实体;(2)软件的生产与硬件不同,它没有明显的制作过程;(3)软件在运行、使用期间不存在磨损、老化问题;(4)软件的开发、运行对计算机系统具有依赖性,受计算机系统的限制,这导致了软件移植的问题;(5)软件复杂性高,成本昂贵;(6)软件开发涉及诸多的社会因素。软件按功能分为应用软件、系统软件、支撑软件(或工具软件)。软件危机主要表现在成本、质量、生产率等问题。软件工程是应用于计算机软件的定义、开发和维护的一整套方法、工具、文档、实践标准和工序。软件工程包括3个要素:方法、工具和过程。软件工程过程是把软件转化为输出的一组彼此相关的资源和活动,包含4种基本活动:(1)P——软件规格说明;(2)D——软件开发;(3)C——软件确认;(4)A——软件演进。软件周期:软件产品从提出、实现、使用维护到停止使用退役的过程。软件生命周期三个阶段:软件定义、软件开发、运行维护,主要活动阶段是:(1)可行性研究与计划制定;(2)需求分析;(3)软件设计;(4)软件实现;(5)软件测试;(6)运行和维护。软件工程的目标和与原则:目标:在给定成本、进度的前提下,开发出具有有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性和可互操作性且满足用户需求的产品。基本目标:付出较低的开发成本;达到要求的软件功能;取得较好的软件性能;开发软件易于移植;需要较低的费用;能按时完成开发,及时交付使用。基本原则:抽象、信息隐蔽、模块化、局部化、确定性、一致性、完备性和可验证性。软件工程的理论和技术性研究的内容主要包括:软件开发技术和软件工程管理。软件开发技术包括:软件开发方法学、开发过程、开发工具和软件工程环境。软件工程管理包括:软件管理学、软件工程经济学、软件心理学等内容。软件管理学包括人员组织、进度安排、质量保证、配置管理、项目计划等。16n软件工程原则包括抽象、信息隐蔽、模块化、局部化、确定性、一致性、完备性和可验证性。3.2结构化分析方法结构化方法的核心和基础是结构化程序设计理论。需求分析方法有(1)结构化需求分析方法;(2)面向对象的分析的方法。从需求分析建立的模型的特性来分:静态分析和动态分析。结构化分析方法的实质:着眼于数据流,自顶向下,逐层分解,建立系统的处理流程,以数据流图和数据字典为主要工具,建立系统的逻辑模型。结构化分析的常用工具(1)数据流图;(2)数据字典;(3)判定树;(4)判定表。数据流图:描述数据处理过程的工具,是需求理解的逻辑模型的图形表示,它直接支持系统功能建模。数据字典:对所有与系统相关的数据元素的一个有组织的列表,以及精确的、严格的定义,使得用户和系统分析员对于输入、输出、存储成分和中间计算结果有共同的理解。判定树:从问题定义的文字描述中分清哪些是判定的条件,哪些是判定的结论,根据描述材料中的连接词找出判定条件之间的从属关系、并列关系、选择关系,根据它们构造判定树。判定表:与判定树相似,当数据流图中的加工要依赖于多个逻辑条件的取值,即完成该加工的一组动作是由于某一组条件取值的组合而引发的,使用判定表描述比较适宜。数据字典是结构化分析的核心。软件需求规格说明书的特点:(1)正确性;(2)无岐义性;(3)完整性;(4)可验证性;(5)一致性;(6)可理解性;(7)可追踪性。3.3结构化设计方法软件设计的基本目标是用比较抽象概括的方式确定目标系统如何完成预定的任务,软件设计是确定系统的物理模型。软件设计是开发阶段最重要的步骤,是将需求准确地转化为完整的软件产品或系统的唯一途径。从技术观点来看,软件设计包括软件结构设计、数据设计、接口设计、过程设计。结构设计:定义软件系统各主要部件之间的关系。数据设计:将分析时创建的模型转化为数据结构的定义。接口设计:描述软件内部、软件和协作系统之间以及软件与人之间如何通信。过程设计:把系统结构部件转换成软件的过程描述。从工程管理角度来看:概要设计和详细设计。软件设计的一般过程:软件设计是一个迭代的过程;先进行高层次的结构设计;后进行低层次的过程设计;穿插进行数据设计和接口设计。衡量软件模块独立性使用耦合性和内聚性两个定性的度量标准。在程序结构中各模块的内聚性越强,则耦合性越弱。优秀软件应高内聚,低耦合。软件概要设计的基本任务是:(1)设计软件系统结构;(2)数据结构及数据库设计;(3)编写概要设计文档;(4)概要设计文档评审。模块用一个矩形表示,箭头表示模块间的调用关系。在结构图中还可以用带注释的箭头表示模块调用过程中来回传递的信息。还可用带实心圆的箭头表示传递的是控制信息,空心圆箭心表示传递的是数据。结构图的基本形式:基本形式、顺序形式、重复形式、选择形式。结构图有四种模块类型:传入模块、传出模块、变换模块和协调模块。典型的数据流类型有两种:变换型和事务型。变换型系统结构图由输入、中心变换、输出三部分组成。事务型数据流的特点是:接受一项事务,根据事务处理的特点和性质,选择分派一个适当的处理单元,然后给出结果。详细设计:是为软件结构图中的每一个模块确定实现算法和局部数据结构,用某种选定的表达工具表示算法和数据结构的细节。常见的过程设计工具有:图形工具(程序流程图)、表格工具(判定表)、语言工具(PDL)。3.4软件测试软件测试定义:使用人工或自动手段来运行或测定某个系统的过程,其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别。软件测试的目的:发现错误而执行程序的过程。软件测试方法:静态测试和动态测试。静态测试包括代码检查、静态结构分析、代码质量度量。不实际运行软件,主要通过人工进行。动态测试:是基本计算机的测试,主要包括白盒测试方法和黑盒测试方法。白盒测试:在程序内部进行,主要用于完成软件内部CAO作的验证。主要方法有逻辑覆盖、基本基路径测试。黑盒测试:主要诊断功能不对或遗漏、界面错误、数据结构或外部数据库访问错误、性能错误、初始化和终止条件错,用于软件确认。主要方法有等价类划分法、边界值分析法、错误推测法、因果图等。软件测试过程一般按4个步骤进行:单元测试、集成测试、验收测试(确认测试)和系统测试。3.5程序的调试程序调试的任务是诊断和改正程序中的错误,主要在开发阶段进行。程序调试的基本步骤:(1)错误定位;(2)修改设计和代码,以排除错误;(3)进行回归测试,防止引进新的错误。软件调试可分表静态调试和动态调试。静态调试主要是指通过人的思维来分析源程序代码和排错,是主要的设计手段,而动态调试是辅助静态调试。主要调试方法有:(1)强行排错法;(2)回溯法;(3)原因排除法。第四章数据库设计基础4.1数据库系统的基本概念数据:实际上就是描述事物的符号记录。数据的特点:有一定的结构,有型与值之分,如整型、实型、字符型等。而数据的值给出了符合定型的值,如整型值15。数据库:是数据的集合,具有统一的结构形式并存放于统一的存储介质内,是多种应用数据的集成,并可被各个应用程序共享。数据库存放数据是按数据所提供的数据模式存放的,具有集成与共享的特点。数据库管理系统:一种系统软件,负责数据库中的数据组织、数据操纵、数据维护、控制及保护和数据服务等,是数据库的核心。数据库管理系统功能:(1)数据模式定义:即为数据库构建其数据框架;(2)数据存取的物理构建:为数据模式的物理存取与构建提供有效的存取方法与手段;(3)数据操纵:为用户使用数据库的数据提供方便,如查询、插入、修改、删除等以及简单的算术运算及统计;(4)数据的完整性、安生性定义与检查;(5)数据库的并发控制与故障恢复;(6)数据的服务:如拷贝、转存、重组、性能监测、分析等。为完成以上六个功能,数据库管理系统提供以下的数据语言:(1)数据定义语言:负责数据的模式定义与数据的物理存取构建;(2)数据操纵语言:负责数据的操纵,如查询与增、删、改等;(3)数据控制语言:负责数据完整性、安全性的定义与检查以及并发控制、故障恢复等。数据语言按其使用方式具有两种结构形式:交互式命令(又称自含型或自主型语言)宿主型语言(一般可嵌入某些宿主语言中)。数据库管理员:对数据库进行规划、设计、维护、监视等的专业管理人员。数据库系统:由数据库(数据)、数据库管理系统(软件)、数据库管理员(人员)、硬件平台(硬件)、软件平台(软件)五个部分构成的运行实体。数据库应用系统:由数据库系统、应用软件及应用界面三者组成。文件系统阶段:提供了简单的数据共享与数据管理能力,但是它无法提供完整的、统一的、管理和数据共享的能力。层次数据库与网状数据库系统阶段:为统一与共享数据提供了有力支撑。关系数据库系统阶段数据库系统的基本特点:数据的集成性、数据的高共享性与低冗余性、数据独立性(物理独立性与逻辑独立性)、数据统一管理与控制。数据库系统的三级模式:(1)概念模式:数据库系统中全局数据逻辑结构的描述,全体用户公共数据视图;(2)外模式:也称子模式与用户模式。是用户的数据视图,也就是用户所见到的数据模式;(3)内模式:又称物理模式,它给出了数据库物理存储结构与物理存取方法。16n数据库系统的两级映射:(1)概念模式到内模式的映射;(2)外模式到概念模式的映射。4.2数据模型数据模型的概念:是数据特征的抽象,从抽象层次上描述了系统的静态特征、动态行为和约束条件,为数据库系统的信息表与操作提供一个抽象的框架。描述了数据结构、数据操作及数据约束。E-R模型的基本概念(1)实体:现实世界中的事物;(2)属性:事物的特性;(3)联系:现实世界中事物间的关系。实体集的关系有一对一、一对多、多对多的联系。E-R模型三个基本概念之间的联接关系:实体是概念世界中的基本单位,属性有属性域,每个实体可取属性域内的值。一个实体的所有属性值叫元组。E-R模型的图示法:(1)实体集表示法;(2)属性表法;(3)联系表示法。层次模型的基本结构是树形结构,具有以下特点:(1)每棵树有且仅有一个无双亲结点,称为根;(2)树中除根外所有结点有且仅有一个双亲。从图论上看,网状模型是一个不加任何条件限制的无向图。关系模型采用二维表来表示,简称表,由表框架及表的元组组成。一个二维表就是一个关系。在二维表中凡能唯一标识元组的最小属性称为键或码。从所有侯选健中选取一个作为用户使用的键称主键。表A中的某属性是某表B的键,则称该属性集为A的外键或外码。关系中的数据约束:(1)实体完整性约束:约束关系的主键中属性值不能为空值;(2)参照完全性约束:是关系之间的基本约束;(3)用户定义的完整性约束:它反映了具体应用中数据的语义要求。4.3关系代数关系数据库系统的特点之一是它建立在数据理论的基础之上,有很多数据理论可以表示关系模型的数据操作,其中最为著名的是关系代数与关系演算。关系模型的基本运算:(1)插入(2)删除(3)修改(4)查询(包括投影、选择、笛卡尔积运算)4.4数据库设计与管理数据库设计是数据应用的核心。数据库设计的两种方法:(1)面向数据:以信息需求为主,兼顾处理需求;(2)面向过程:以处理需求为主,兼顾信息需求。数据库的生命周期:需求分析阶段、概念设计阶段、逻辑设计阶段、物理设计阶段、编码阶段、测试阶段、运行阶段、进一步修改阶段。需求分析常用结构析方法和面向对象的方法。结构化分析(简称SA)方法用自顶向下、逐层分解的方式分析系统。用数据流图表达数据和处理过程的关系。对数据库设计来讲,数据字典是进行详细的数据收集和数据分析所获得的主要结果。数据字典是各类数据描述的集合,包括5个部分:数据项、数据结构、数据流(可以是数据项,也可以是数据结构)、数据存储、处理过程。数据库概念设计的目的是分析数据内在语义关系。设计的方法有两种(1)集中式模式设计法(适用于小型或并不复杂的单位或部门);(2)视图集成设计法。设计方法:E-R模型与视图集成。视图设计一般有三种设计次序:自顶向下、由底向上、由内向外。视图集成的几种冲突:命名冲突、概念冲突、域冲突、约束冲突。关系视图设计:关系视图的设计又称外模式设计。关系视图的主要作用:(1)提供数据逻辑独立性;(2)能适应用户对数据的不同需求;(3)有一定数据保密功能。数据库的物理设计主要目标是对数据内部物理结构作调整并选择合理的存取路径,以提高数据库访问速度有效利用存储空间。一般RDBMS中留给用户参与物理设计的内容大致有索引设计、集成簇设计和分区设计。数据库管理的内容:(1)数据库的建立;(2)数据库的调整;(3)数据库的重组;(4)数据库安全性与完整性控制;(5)数据库的故障恢复;(6)数据库监控。本手册使用说明:本手册为我近期对二级C语言考试公共基础知识的总结。我亲自做过十几套真题,并且把书认真研读过,写出这本小手册。红色(即划线)字体是至关重要的部分,框起来的字体为填空题的常考词汇,考试之前可以将本总结全部打印出来,这个里面有100分里30分的原题。我的辛勤总结,资料一律不许外传!!!另外,三级和四级仍然没有超出这个大框架,只是进一步针对具体的知识点进行细化,希望在以后它能够对大家继续有帮助。附录:2007年9月及2008年4月公共基础考试真题16