用十进制数表示正则表达式 二进制"19 15>13"的运算结果是多少

you have been blocked当前位置: >>
软考程序员考前练习试题及答案解析(1)
软考程序员考前练习试题及答案解析(1)一、选题题 1.二进制语言是属于( ) A.面向机器语言 B.面向问题语言 C.面向过程语言 D.面向汇编语言 【解析】人们研制了许许多多计算机程序设计语言,其中二进制语言直接来自计算机的指令系统,与 具体计算机紧密相关,所以是一种面向机器语言。面向问题语言是为了易于描述和求解某类特定领域的问 题而专门设计的一种非过程
语言。面向过程语言是一种能方便描述算法过程的计算机程序设计语言。有汇 编语言,但没有面向汇编语言。汇编语言也是一种面向机器的语言,与机器语言比较,汇编语言用有助于 记忆的符号来代表二进制代码。所以解答是 A。 【参考答案】A 2.下列语言中不属于面向过程的语言是( ) A.高级语言 B.低级语言 C.C 语言 D.PASCAL 语言 【解析】 C 语言和 PASCAL 等程序设计语言都是高级语言,它们用于描述复杂加工的处理过程,所 以也称它们是面向过程语言。低级语言是指机器语言和汇编语言,低级语言是面向机器的语言,而不是面向问题的语言。所以解答是 B。【参考答案】B 3.下列字符中属于键盘符号的是( ) A.\ B.\n C. \t D. \b 【解析】键盘符号是指键盘上有标记,并能在显示器上直接以其标记字样显示的字符。有许多键盘上 有标记的符号,它们不是用于直接显示的,键入这种字符用于表示特定的意义,如常用的回车符。为了能 让 C 程序标记这种符号,程序采用转义字符的方式书写这种字符。如'\n'、'\t' 、'\b'都不是键盘字符,在 C 语言中,它们都得用转义字符来表达。只有字符\才是键盘字符。所以解答是 A。但在 C 程序中,反斜杠字 符\已特别用作转义字符的引导符,它也得用转义字符的表达形式书写,将它写成?\\?。 【参考答案】A 4.下列字符列中,不是用来表达转义字符是( ) A.\\ B.\' C.074 D. \0 【解析】转义字符有三种书写形式:反斜社字符后接上某个规定的字符;反斜杠字符后接上 13 个八进 制数字符;反斜社字符和字符 X 之后接上 1 至 2 个十六进制数字符。 后两种分别八进制数和十六进制数直接 给出字符的 ASCll 代码值。而 074 是八进制整数,不是转义字.所以解答是 C。 【参考答案】C 5.不是 C 语言提供的合法关键字是() A.switch B.begin C.case D.default【解析】因 所以解答是 B。C 语言的关键字表中没有 begin, 它不是 C 语言的关键字。【参考答案】B 6.下列字符列中,能作为单个标识符是()l A.? a B. a=2 C.a.3 D. a___3 【解析】在 C 语言中,规定标识符是这样一种字符序列,由英文字母或下线字符开始,后接任 1 个英 文字母、下线字符和数字符组成。所以问题所列的字符列只有 a_3 是标识符,其余都 l 是标识符,一个是 由字符???开头、一个中间有字符?=?,另一个有字符?.?。所以解答是 D。 【参考答案】D 7.在 C 语言中,下列说法中错误的是() A.函数定义可以分为两个部分:函数说明部分和函数体 B.主函数可以调用任何非主函数 C.任何非主函数可以调用其它任何非主函数 D.程序可以从任何函数开始执行 【解析】每个 C 函数的定义分两部分,函数说明部分和函数体,所以叙述 A.是正确的叙述。C 语言中, 函数可以递归调用,主函数可以调用程序中的任何函数,当然可以调用任何非主教的其它函数,所以叙述 B.是一个正确的叙述。同样理由,叙述 C.也是正确的。C 语言规,C 程序只有一个主函数,并总是从主函 数开始执行,不能从非主函数开始执行。所以,说程可以从任何函数开始执行是错误的。所以解答是 D。 【参考答案】D 8.下列字符列中,可以作为“字符串常量”的是( ) A. ABC B. ABC” C.?abc? D.?a? 【解析】C 程序中,一个字符率常量是表示一个字符序列,书写时,用双引号字符前后括住这个字符 序列。所以只有”ABC”是一个正确的字符率常量,其余都不是。其中,ABC 可作为标识符,字符列?abc?不 能出现在 C 程序中,?a?是一个字符常量。所以解答是 B。 【参考答案】B 9.在以字节存储字符的系统中,?\n ?在内存占用的字节数是( ) A.1 B.2 C.3 D.4 【解析】一般来说,一个字符在内存中只占 1 个字节,?\n?是转义字符,其意义是换行符,它作为一个 字符存储,在内存也只占五个字节。所以解答是 A。 【参考答案】A 10.字符串”XyZ”在内存占用的字节数是( ) A.3 B.4 C.6 D.8【解析】 字符串中的每个字符占1 个字节, C 程序在存储字符串时, 但要在最后一个有效字符后面接上 1 个字符串结束的标记符'\0'。 这样,存储字符串常量”xyZ”需要 4 个字节。所以解答是 B。 【参考答案】B 11.在以下字符列中,合法的长整型常数是( ) A. OL B. 4962710 C. 0. D. 2.1869el0 【解析】为表示不同范围的整数,整型数据分短整型、基本型和长整型,并对三种整型内部表示的最 高位的不同理解,又分别分成无符号和带符号两种。若要明确指明一个整数是长整型的,必须在整数之后 接上字符?L?。所以 OL 是一个长整型的整型常量,而 4962710 是基本整型数据,而对于用 2 个字节表示一 个基本整型数据的系统来说,该整数将因超出范围而是一个错误的整数;0. 和 2.1869el0 都是 double 型的实数。所以解答是 A。 【参考答案】A 12.一个 char 型数据,它的值在内存中存放的是() A.ASCll 代码值 B.BCD 代码值 C.内码值 D.十进制代码值 【解析】 计算机存储字符, 通常是存储字符的某种代码值。 有许多种字符编码的方法, 最流行的是 ASCII 代码。在 C 语言中,Char 型数据也用 ASCII 代码表示。所以解答是 A。 【参考答案】A 13.设变量 m,n,a,b,c,d 均为以执行(m=a==)||(n=c==d)后,m,n 的值是( ) A.0,0 B.0,1 C.l,0 D.1,1 【解析】计算(m=a==b)||(n=c==d)的过程是先计算逻辑或的左运算分量(m=a==b)的值,由于赋位运算符 的优先级比关系运算符==的优先级低,又先计算 a==b。因 a,b 均为 0 后,所以比较结果值为 1。将 1 赋 给变量 m,使变量 m 的值变为 1 。同时这个赋值运算的结果也是 1,这样逻辑运算的左运算分量的值为 1。 由于逻辑或运算的左运算分量值为 1,按照 C 语言对逻辑或运算优化计算的规定,不再计算逻辑或的右运 算分量,而直接得到逻辑或运算的结果为 1 。由于逻辑或的右运算分量不曾计算过,所以变量 n 的值也不 为变化。这样,上述表达式计算后,变量 m 的情为 1,变量 n 的值为 0。所以解答是 C。 【参考答案】C 14.设 a 为 5,执行下列计算后,b 的值不为 2 的是( ) A. b=a/2 B. b=6-(--a) C. b=a%2 D. b=a&3?3:2 【解析】因两个整型数据相除,结果是整数,当 a 的值为 5 时,计算表达式 b=a/2 后,使 b 的值为 2。 计算表达式 b=6-(--a)是先计算子表达式(--a)的, 先让 a 的值减 1 变成 4, 并以减 1 后的 a 为子表达式的结果, 所以子表达式的结果为 4,最后使 b 的值为 2。在计算表达式 b= a%2 时,求余运算 a%2 的结果为 1,最后 使变量 b 的值为 1。计算表达式 b=a&3?3:2 时,先计算条件表达式 a&3?3:2,以 2 为结果,最后也使变量 b 的值为人所以解答是 C。 【参考答案】C 15.执行语句“x=(a=3,b=a--);”后,X,a,b 的值依次为( ) A.3,3,2 B.2,3,2 C.3,2,3 D.2,3,3 【解析】计算表达式 x=(a=3,b=a--)时,先计算赋值号右端圆括号内的逗号表达式。远号表达式要求 各子表达式顺序计算,并以最后予表达式的值为整个逗号表达式的结果。所以该表达式计算时,先让变量 a 的值为 3,a--的值是 a 当时的值,以该值为结果赋给变量 b,并以该值为远号表达式的值赋给变量 x,然 后 a 的值被减少 1。所以计算该表达式后,使变量 x,a,b 的值依次为 3,2,3。所以解答是 C。 【参考答案】C软考程序员考前练习试题及答案解析(2)16.设整型变量 m,n,a,b,c,d 均为 1,执行“( m=a&b)&&(n=a&b)&后 m,n 的值是( ) A.0,0 B.0,l C.1,0 D.1,l 【解析】 表达式(m=a &b)&&(n=a &b)是一个逻辑表达式, 它的计算过程是先计算逻辑与的左分量(m=a&b, 其中又是先计算 a&b。因 a&b 不成立,结果为 0,将 0 赋给变量 m,最后逻辑与的左分量结果为 0。由于逻 辑运算采用特别的优化计算规则,当逻辑与的左分量结果为 0 时,不再计算逻辑与的右分量,而直接以 0 为逻辑与的结果。所以,上述表达式计算使 m 的值变为 0,而 n 的值没有变,依旧为 l。所以解答是 B。 【参考答案】B 17. 设有代码“int a=3;”,则执行了语句“a+=a-= a*a;”后,变量 a 的值是( ) A.3 B. 0 C. 9 D. -12 【解析】由于赋值运算符的结合性自右至左,语句“a+=a-=a*a;”的执行是先计算 a*a,得到值 9,再计 算 a-=a*a,使 a 的值为-6,接着计算 a+=a,使 a 的值为-12。所以解答是 D。 【参考答案】D 18.在以下一组运算符中,优先级最高的运算符是( ) A.&= B.= C.% D.&& 【解析】常规运算符的优先级自高到低的排列顺序是算术运算符、移位运算符、关系运算符。按位运 算符、逻辑运算符、条件运算符、赋值运算符、逗号运算符。所以问题所给的四个运算符按优先级自高到 低的排列顺序是%,&=,&&,=。所以解答是 C。 19.设整型变量 i 的值为 3,则计算表达式 i---i 后表达式的值为( ) A.0 B.l C.2 D.表达式出错 【解析】有些运算符只有一个字符,也有许多运算符由两个字符组成。特别是有些字符既可是单个字 符的运算符,又能组成双字符的运算符。编译系统在识别源程序时,通常是尽量多地读八字符,能组成多 字符单词的先尽量组成多字符单词。所以表达式 i---i,被编译器理解为(i--)-i。另外,当表达式中某变量有 后缀自增和自减运算时,先按变量的原值计算表达式,然后再对变量进行自增和自减运算。同样地,当表 达式中某变量有前缀自增和自减运算时,先对变量进行自增和自减运算,然后再按变量的新值计算表达式。 按这个约定,求表达式(i--)-i 是计算 i-i 的值为 0,然后再对 i 作自减运算。这样,表达式(i--)-i 的值为 0。所 以解答是 A。 【参考答案】A 20.设整型变量 a、b、c 均为 2,表达式 a+++b+++c++ 的结果是( ) A.6 B.9 C.8 D.表达式出错 【解析】与上一小题解答的理由相同,表达式 a+++b+++c++被系统理解成:((a++)+(b++))+c++)。表达 式“变量++”的值是变量的原来值,所以在变量 a、b.c 均为 2 的前题下,执行上述表达式,得到结果为 6。 所以解答是 A。 【参考答案】A 21.若已定义 x 和 y 为 double 类型,则表达式: x=l, y=x+3/2 结果是( ) A.l B.2 C.2.0 D.2.5 【解析】由于变量 x 和 y 都是 double 类型,表达式 x=l, y=x+3/2 是先计算 x=1,由于 1 是整型的, x 是 double 类型的,该计算先将整数 1 转换成 double 类型的 1.0,并将 1.0 赋给变量 x。计算 y=X+3/2 是先 求 3/2 的值, 因是两整数相除, 结果是整型值 1, 然后在计算 X+1 时, 也先将 1 转换成 1.0, 然后求得 X+l 的值为 2.0,最后将该值赋给变量 y,并得到整个表达式的值为 2.0.所以解答是 C。【参考答案】C22.设 a 为整型变量,下列 C 表达式中,不能表达数学关系式:10&A& p& A.10&A&15& p& B.a==11||a==12|| a==13|| a==14 C.a&10&&a&15 D.!(a&=10)&&!(a&=15) 【解析】数学关系式 10&A& 15 表示。只能是 11, 12, 13, 14 四个值之 l。用 C 表达式表示这个 条件,可写成 a&10&& a&15,或!(a&=10)&&!(a&=15),或 a==11||a==12 || a==13||a==14 等。若写成 10&A&15, 该算式的计算顺序是先求出 10&A 的结果 0 或 1,然后以这个结果与 15 比较,是否小于 15,显然这与数学 式子的意义是不一致的。所以解答是 A。& p& 【参考答案】A 23.下列表达式中,正确的 C 赋值表达式是( ) A.a=7+b+C=a+7 B. C=7+b++=a+7 C.a=(7+b, b++, a+7) D. a= 7+b, c=a+7 【解析】赋值运算符是运算符之一,赋值运算也可以出现在一般表达式中。赋值运算时,出现在赋值 运算符左边的表达式应该是引用一个存储对象,例如变量。不可以是一个数值计算表达式。如表达式 a=7+b+c=a+7 因算术运算符比赋值运算符的优先级高,要把 a+7 的结果赋给 7+b+c,这是错误的。同样理 由,表达式 a= 7+b++=a+7 也是错误的。而表达式 a=(7+b,b++,a+7)就是正确的赋值表达式,它是先计算 赋值号左边的括号内的表达式,括号表达式内是一个逗号表达式,远号表达式要求顺序逐一计算各子表达 式, 并以最后一个子表达式的值作为远号表达式的结果, 最后将该结果赋给变量 a。 而表达式 a=7+b, c=a+7 则不是一个赋值表达式,而是一个逗号表达式,它由两个赋值子表达式组成。所以解答是 C。 【参考答案】C 24.若有以下定义:则表达式 a*b+d-c 值的类型为( ) A.float B. int C. char D. double 【解析】基本类型的数据可以混合运算,但运算时,对要求运算分量类型相同的运算来说,如运算分 量的类型不是全相同,则会有自动类型转换发生。类型自动转换规则规定类型低(简单)的向类型高(复杂) 的转换。各类型由高到低的排列顺序是:long double、float、unsigned long、long、unsigned int、int 这样, 若有定义:则表达式 a*b+d-c 的值的类型是 double 的。首先计算 a*b,得到 int 类型的值,接着计算 a*b+d,得到 double 类型的值,最后计算 a*b+d-c,得到 double 类型的值。所以解答 是 D。 【参考答案】D 25.表达式“9!=7”的值是( ) A.true B.非 0 值 C.0 D.1 【解析】关系运算的结果只有 0 和 1,若关系成立,则结果为 1;若关系不成立,则结果为 0。因关系式 9!=7 成立,所以表达式的结果为 1。虽然 1 也是非 0 值,在供选择的答案中有 1,所以最确切的解答是 D。 【参考答案】D 26.用十进制数表示表达式“12|012”的运算结果是( ) A.1 B.0 C. 14 D. 16 【解析】按位运算将运算分量视作二进位的位申信息,对两运算分量的对应位进行运算,产生 H 进位 的位串信息结果。整数 12 最低 8 位二进位是 ,整数 012 是八进制数,它的最低 8 位二进位是 。这两个二进位位串信息按位或运算,得到结果是 ,对应十进制数 14,八进制数是 016。 所以解答是 C。 【参考答案】C 27.设字符型变量 a=3,b=6,计算表达式 C=(a^b)&& 2 后 C 的二进制值是( ) A.
【解析】 的值为 3, a 写成 8 位二进制数形式是 ,b 的值为 6, 写成 8 位二进制数形式是 。 表达式 c=(a^b)&&2,先计算 a 与 b 的按位加,得到结果 ,将这结果向左移 2 位,得到二进位的位 串信息是 。所以解答是 D。 【参考答案】D 28.设 a,b 和 c 都是 int 型变量,且 a=3,b=4,c=5,则下面的表达式中值为 0 的是( ) A.?a?&&b? B.a<=b C.a||b+c&&b-c D. !((a<b)&&!c||1) 【解析】对于表达式?a?&&?b,两个非 O 运算分量的逻辑与结果为 1。对于表达式 a<=b,由于关系 式成立,结果也为此又由于变量 a 为非 0,表达式 a||b+c&&b-c 的结果也为 1。对于表达式!((a<b)& &!c||1),先是计算(a<b)得到结果 1;计算!C 得到结果为 0;再计算它们的逻辑与,结果为 0。继续与 1 求逻辑或,得到结果为 1。最后,对 1 求逻辑非,得到结果为 0。所以解答是 A。 【参考答案】A 29.设 Ch 是 Char 型变量,其值为?A?,则下面表达式的值是( ) ch=(ch>=?A?&&ch<=?Z?)?(ch+32):ch A.?A? B.?a? C.?Z? D.?z? 【解析】由于字符型变量 ch 的值为? A?,计算表达式 ch=h>=? A?&&ch<=? Z?)?(ch+32):ch, 先计算其中条件表达式,由于条件(ch>=?A&&h<=?Z?)成立,该条件表达式以 ch+32=97 为结果, 将该值赋给变量 ch,以字符表达这个值为?a?。所以解答是 B。 【参考答案】B 30. 设有无符号短整型变量 i、j、k,i 值为 013,j 值为 OX13。计算表达式“k=~i|j>> 3”后,k 的 值是( ) A. 06 B. 0177776 C. 066 D. 0177766 【解析】将变量 i 的八进制数值 013 写成二进制形式为 ,将变量 j 的十六进制值 oxl3 写成 二进制数形式为 。 表达式 k=~i|j>>3 的计算过程是先求~i, 结果用八进制代码表示为 0177764; 接着计算 j>>3,结果为 02。对它们进行按位或运算结果为 0177766。所以解答是 D。 【参考答案】D软考程序员考前练习试题及答案解析(3)31.设 a=3,b=4 执厅?printf(”%d,%d?,(a,b)(b,a));”的输出是( ) A.3,4 B.4,3 C.3, 3 D.4,4 【解析】在调用格式输出函数的语句中,其中每个格式符对应一个输出项,格式符 d 要求输出项内容 以十进制整数形式输出。第一个输出项(a,b)是一个逗号表达式,该表达式的值是 b 的值,输出 4。接着输 出字符逗号。第二个输出项(b,a)的值是 a 的值,输出 3。所以语句执行将输出 4,3。 【参考答案】C 32.使用“Scanf(&X=%f,y=%f&,&x,&y)”,要使 X,y 均为 1.25,正确的输入是( ) A.1.25,1.25 B.1.25 1.25 C.x=1.25,y=1.25 D.X=1.25 y=1.25 【解析】格式输入函数的格式字符串中的字符可以分成三类:空格类字符、其它普通字符和格式转换 说明。其中空格类字符用来跳过一个空格类字符序列,直至下一个非空格类字符。普通字符要求输入字符 与其完全相同。格式转换说明对输入字符列按格式转换说明进行转换,得到内部值存储到对应输入项所指 定的存储位置中。函数调用 scanf(“x=%f,y=%f,&x,&y)以普通字符 X=开头,输入时也要先输入 X=。接 着是一个浮点数输入格式,所有能构成一个浮点数 1.25 的字符序列都能满足要求。接着是普通字符列“, y=”,在输入的浮点数之后也要有字符列“,y=”。最后又是浮点数输入格式,同样所有能构成一个浮点数 1.25 的字符序列都能满足要求。问题给出的供选择答案中只有 x=1.25,y=1.25 是能满足上述要求的。所以 正确选择是 C。 【参考答案】C 33.设有 int i=010,j=10;则执行“printf(&%d,%d\n&,++i,j--);”的输出是( ) A.ll, 10 B. 9,10 C. 010,9 D. 10, 9 【解析】变量 i 和 j 的初值分别为八进制数 010 和十进制数 10,函数调用 Printf(“%d,%d\n”,++i,j--) 中,++i 的值是变量 i 增 1 后的值,原来值是八进制数 010,等于十进制数 8,输出 9。j--的值是变量 j 减 1 之前的值,输出 10。格式字符申中的逗号是普通字符照原样输出。所以问题给出的格式输出函数调用将 输出 9,10。正确的解答是 B。 【参考答案】B 34.设 a,b 为字符型变量,执行&scanf(&a=%c,b=%c&,&a,&b)&后使 a 为'A',b 为'B',从键盘上的正 确输入是( ) A.?A”B? B.?A?,?B? C.A=A,B=B D.a=A b=B 【解析】函数调用 scanf(&c=%c,b=%c&,&c,&b)中,普通字符必须按格式字符串要求照原样输入,c 格式对紧接的任何字符都输入。所以实现问题的要求,输入字符列应为“a=A,b=B”。另外要特别指出,在 程序中,为表示字符常量,字符前后需加单引号。但用字符格式输入字符时,在要输入字符前后不必另键 人单引号。若键人单引号,则这个单引号也将作为字符被输入。正确的解答是 D。 【参考答案】D 35.设 X、y、Z、t 均为 int 型变量,则执行以下语句后,t 的值为( ) x=y=z=1;t=++x||++y&&++z; A.不定值 B.2 C.l D.0 【解析】语句序列“x=y=z=l;t=++x||++y&&++z;”使变量 x 的值为 1,变量 t 是赋一个逻辑表达式的值。 在 C 语言中,由逻辑与和逻辑或构成的逻辑表达式有特别的计算规则,顺序计算各逻辑子表达式,并当一 旦能得到逻辑表达式的结果时,就立即结束逻辑表达式的计算,不再计算后继逻辑子表达式。本题的逻辑 表达式是两个运算分量的逻辑或,而且左运算分量++X 的值为非 0,立即得到逻辑或运算的结果为 1,并将 1 赋给变量 t,所以变量 t 的值为 1。正确解答为 C。 【参考答案】C 36. 设 x、y、z 均为 int 型变量,则执行以下语句后,x、y, z 的值为( ) X=1; y=0; Z=2; y++&&++Z ||++ X; A.2、l、3 B.2、0、3 C.2、l、3 D.2、1、2 【解析】语句序列“x=l;y=0;z=2; y++&&++z||++x;”先使变量 x 的值为 1,变量 y 的值为 0,变量 Z 的值 为 2。由逻辑与和逻辑或构成的逻辑表达式的特别计算规则,顺序计算各逻辑子表达式,并当一旦能得到 逻辑子表达式的结果时,就立即结束逻辑子表达式的计算,不再计算该逻辑子表达式。计算 y++因 y 的值 为 0,使 y++&&++z 的结果为 0,立即去计算++X,这次计算使变量 y 的值变成 1,而变量 Z 的值本改变。 接着计算++X,使 X 的值变为 2。所以经上述语句执行后,X、y、Z 的值依次为 2、1、Z。 确解答为 D。 【参考答案】D 37.假定所有变量均已正确定义,下列程序段运行后 X 的值是( ) a=b=c=0; x=35; if(!a)x--; else if(b);if(c)x=3;else x=4; A.34 B. 4 C. 35 D. 3 【解析】以变量 a,b,c 的值均为 0,变量 x 的值为 35,语句: if(!a)x--;else if(b);if(c)x=3;else x=4; 由两个证语句组成。首先执行前一个 if 语句“if(!a)x--;else if(b);”,因变量 a 的值为 0,条件!a 成立,执 行 x--使 x 的值变为 34。接着执行后继的 if 语句“if(c)x=3; else X=4;”,因变量 c 的值为 0,条件不成立而执 行 X=4,最终使变量 X 的值为 4。正确解答是 B。 注意前一个 if 语句的 else 部分的成分语句只有“if(b);”,这是一个单分支 if 语句,且其成分语句为空语 句。 【参考答案】B 38.下面的程序段所表示的数学函数关系是( ) y=-l; if( x!= 0)if(x&0)y=l; else y=0 ; 1(x&0) 1(x&0) A. y= { 0(x= 0) B. y={-l(X=0) 1(X&0) 0(X&0) o(X& 0) -l(X& 0) C. y= {-1(x= 0) D. y={ 1(X= 0) 1(X& 0) 0(X& 0) 【解析】程序段首先置变量 y 的值为一 l,接着按变量 x 值的不同情况重置变量 y 的值。重置的首要条 件是 x!=0,若变量 x 的值为 0,则不再重置变量 y 的值,所以在 X 值为 0 情况下,y 的值是-l。在变量 X 的值不等于 0 的条件下,若 X 的值大于 0,重置变量 y 的值为 1;若变量 X 的值小于 0,重置变量 y 的值为 0。所以程序段实现当变量 x 的值为 0 时,变量 y 的值为-1;当变量 X 的值大于 0 时,置变量 y 的值为 1;当 变量 X 的值小于 0 时,置变量 y 的值为 0。正确解答为 C。 【参考答案】C 39.下列语句中,句法错误的是(不考虑语义)( ) A. while(x=y)5 ; B. do x++ while(x==10) ; C.while(0); D.do 2;while(a==b); 【解析】 while 语句的一般形式是: while(表达式) 语句 这里的表达式可以是任何合理的表达式,语句可以是任何语句,包括空语句,或表达式语句。可能书 写的 while 语句没有任何意义,如供选择的 A.while(x=y)5;和 C.while(0);,但这两个语句的句法没有任何错 误。do-While 语句的一般形式是: do 语句 while(表达式); 其中的成分语句也可以是任何语句, 但供选择答案 B.do x++while(x==10) ;中的代码 x++是一个表达式, 不是语句,所以是错误的。正确解答是 B。 【参考答案】B 40.若 i、j 已定义为 int 类型,则以下程序段中的内循环体的执行次数是( ) for( i=5; i--) for(j= 0; j&4;j++){……} A.20 B. 24 C. 25 D. 30 【解析】问题所给的程序段的外循环是一个阶循环语句,它的初始化部分置变量 i 的初值为 5,循环条 件简写成 i,即 i!=0,每次循环后变量 i 的值减 1。所以外循环共控制 5 次循环。内循环也是一个 for 循环 语句,它的初始化部分置变量 j 的初值为 0,循环条件是 j&4,每次循环后变量 j 的值增 1。所以内循环共 控制 4 次循环。这样,如内循环的体内未曾对变量 i 和 j 有修改,在内、外循环一起控制下,内循环的体共 被重复执行 20 次。正确解答是 A。 【参考答案】A 41.假定 a 和 b 为 int 型变量,则执行以下语句后 b 的值为( ) a=1; b=10; do b-=a; a++; }while&(b--&0); A.9 B.-2 C.-1 D.8 【解析】在这个程序段中,循环开始前变量 a 的值为 1,b 的值为 10,每次循环从变量 b 减去 a,并让 a 增 1,并在循环条件判定时,又让 b 减去 1。第一次循环后,变量 b 的值变成 9,变量 a 的值变为 2,循环 判断时,因 b 的值大于 0,循环条件不成立,结束循环。但在循环判断时,让 b 减去了 1,所以循环结束时, 变量 b 的值为 8。正确的解答是 D。 【参考答案】D 42.设 x 和 y 为 int 型变量,则执行下面的循环后,y 的值为( ) for(y=l, x=l; y&=50; y++){ if(x&=10) if(x%2==1){ x+=5;} X -= 3; } A.2 B.4 C.6 D.8 【解析】 for 循环语句的初始化部分置变量 x 和 y 的初值为 1,循环条件是(y&=50),每次循环后变量 y 的值增 1,控制循环最多执行 50 次。循环体有三个语句:首先在发现变量 X 的值大于等于 10 时,结束 循环;接着是当变量 X 除 2 的余数为 1(即变量 X 是奇数)时,让变量 X 值增 5,让 X 变成偶数,并直接进入 下一轮循环;如变量 X 是偶数,则从变量 X 减去 3,让变量 X 变成奇数。由上述分析知,每两次循环使变 量 X 的值增加 2.第一次循环后,变量 X 的值变成 6。第二次循环后,变量 X 的值变成 3。第三次循环后, 变量 X 的位变成 8。第四次循环后,变量 X 的值变成 5。第五次循环后,变量 X 的值变成 10。第六次循 环时,因变量 X 的位大于等于 10,直接跳出循环,这次循环是非正常结束,对变量 y 的修正只执行了 5 次。所以循环结束后,变量 y 的值增至 6。正确的解答是 C。 【参考答案】C 43.在 C 语言中,下列说法中正确的是( ) A.不能使用“do 语句 while(条件)”的循环 B.“do 语句 While(条件)”的循环中必须使用“break”语句退出循环 C.“do 语句 while(条件)”的循环中,当条件非 0 时将结束循环 D.“do 语句 while(条件)”的循环中,当条件为 0 时将结束循环 【解析】 do-while 语句的一般形式是: do 语句 while(表达式); 其语义是重复执行其成分语句,直至表示条件的表达式值为 0 时结束。do-while 语句是正常使用的一 种循环结构之一。do-while 语句的循环结束条件由 while 后的表达式值为 0 所控制,并不一定要有 break 语 句跳出循环来结束循环。do-while 语句在条件值非 0 时,将继续循环,而不是结束循环。条件值为 0 时, 才结束循环。所以正确的选择是 D。 【参考答案】D 44.若有以下程序段,W 和 k 都是整型变量,则不能与该程序段等价的循环语句是( ) W= LB: if(w==0) gotO LE; w - -; printf(&*&); goto LB; LE: A. for(w=k;w!=0;W--)printf(&*&); B. w= While(W--!=0) Prinif(”* ”); C. w= do{w--; prinif(“*”); } while( W!= 0); D. for(w=k;W;--W) printf(&*&); 【解析】问题所给出的程序段用 goto 语句构造一个循环控制结构,该循环结构的初值是让变量 W 的 值为 k 的值,循环结束条件是 W 的情等于 0,循环体是让变量 W 的值减 1,并输出一个字符* 。上述循环 控制过程用 for 循环可描述如下: for=(w=k;W!=0; W--) printh(&*&); 或写成: for(w=w;--w) printf(&*&); 若用 while 语句,可描述如下: W=k; while(w--!=0)printf(&*&); w++;/*在 w 等于 0 时,也执行了一次 w--,这里是对 w 最后减 1 的补尝*/ 或更直观地写成: W=k; while(w!=0){ w--;Printf(&*&);} 若用 do-while 语句,可描述如下: W=k; if(W) do{ w--; prinif(&*&); } while(w); 若写成: W=k; do{ W--; printf(&*&); } while(w!=0); 是不正确的,因为原代码当 k 的值为 0 时,不输出字符*,而上面的改写,当 k 的值为 0 时,将输出许 许多多的字符*。所以解答应是 C。 【参考答案】C 45. 若有下列说明,则数值为 4 的表达式是( ) int a[12]={ l,2,3,4,5,6,7,8,9,10,11,12 }; char c='a',d, A.a[g-c] B.a[4] C.a['d'-'c'] D.a['d'-c] 【解析】数组元素的下标自 0 开始顺序编号,值为 4 的元素是 a[3]。所以只有下标表达式的值为 3 的 才是正确的。下标表达式 g-C 中的的变量 g 和 c 的值是还未被设定的,其值不确定。a[4]的值为 5,下标为 4 是不对的。'd'-'c'的值为 1,a[l]的值是 2,所以也是不对的。变量 c 的值为'a' ,'d'-c=3,所以正确解答是 D。 【参考答案】D软考程序员考前练习试题及答案解析(4)46.设有定义:&char s[12]={&string&};& 则 printf(&%d\n&,strlen(s));的输出是( ) A. 6 B. 7 C.11 D.12 【解析】在 C 语言中,字符串是指在有效字符之后有字符率结束标记符的字符列,并 约定字符串的长度是指字符率中有效字符个数, 不包括字符串的结束标记符。 存放于字符数 组 s 中的字符串是“string”,该字符串的长度为6,所以输出该字符串的长度应是6。正确的 解答是 A。 【参考答案】A 47.下列语句中,正确的是( ) A.char a[3][]={'abc&,'1'}; B.char a[][3]={'abc','l'}; C.char a[3][]={'a',&1&}; D.char a[][3]={&a&,&1&}; 【解析】如定义数组时有初始化,其最高维的长度可以省缺,由系统根据初始化时的初 值个数确定,而其它维的长度是不可以缺省的。对二维字符数组的初始化,可以按行用字符 串对其初始化, 也可以按二维数组元素的存储顺序逐一用字符对其元素初始化。 在供选择解 答 A.和 C.中,有不是最高维的长度被缺省,所以是错误的。在供选择解答 A.和 B.中,还将 字符串常量写作'abc',这也是错误的。只有 D.,用字符率按行给二维字符数组初始化,这 才是正确的。正确构解答是 D。 【参考答案】D 48.合法的数组定义是( ) A.int a[]={&string&} B.int a[5]={0,1,2,3,4,5}; C.char a={&string&} D.char a[]={0,1,2,3,4,5}; 【解析】A.错误的原因是整数数组不可以用字符串对其初始化。B.错误的原因是,数组 初始化时,初始化指定的值的个数多于数组的元素个数。C.错误的原因是,能用字符串初始 化的只;有字符指针变量,或字符数组。字符率不能对其它类型的变量初始化,包括字符变 量。D 是正确的,因为字符数组可以用小整数(作为字符的 ASCII 代码值)对其元素初始化。 【参考答案】D 49.语句&printf(&%d\n&strlen(&ats\nol2\1\\&));&的输出结果是( ) A.11 B.10 C. 9 D. 8 【解析】字符串中的字符可以是一般的普通字符,也可以是由反斜杠字符开头的转义字 符。在字符串&abs\no12\11\\& 中,有三个转义字符,它们是\n、\1、\\,所以该字符串的有 效字符个数是9。所以正确的回答是 C。 【参考答案】C 50.函数调用“strcat(strcpy(strl,str2),str3)”的功能是( ) A.将字符串 strl 复制到字符串 str2中后再连接到字符串 str3之后 B.将字符串 strl 连接到字符串 str2中后再复制到字符率 str3之后 C.将字符串 str2复制到字符串 strl 中后再将字符串 str3连接到字符串 strl 之后 D.将字符串 str2连接到字符率 strl 之后再将字符串 strl 复制到字符串 str3中 【解析】函数调用 strcat(s1,s2)是将 s2字符串复制连接到 s1字符串之后,使 s1字符 串变得更长。函数调用 strcpy(s1,s2)是将 s2字符串复制到 s1,使 s1字符串的内容与 s2 字符串的内容相同。函数调用 strcat(strcpy(strl,str2) ,str3) 是先执行 strcpy(strl,str2), 然后再执行 strcat(strl,str3),所以其功能是将字符串 str2复制到字符串 strl 中,然后再将字 符串 str3复制连接到字符串 strl 之后。正确的选择是 C。 【参考答案】C 51.设有如下定义,则正确的叙述为( ) char x[]={&abcdefg&}; char y[]={'a','b','c','d','e','f','g'}; A.数组 x 和数组 y 等价 B.数组 x 和数组 y 长度相同 C.数组 X 的长度大于数组 y 的长度 D.数组 X 的长度小于数组 y 的长度 【解析】不指定数组长度的字符数组定义,其所需要的字节数可由初始化中给出的值的 个数确定。字符数组可以用字符串初始化,也可用字符逐个给字符数组的元素初始化。但用 字符初始化时,尽管给出了字符串中的全部字符,还是不会自动有字符率结束字符。但字符 串初始化自动会含有字符串的结束标记符, 字符串初始化所需要的字节个数会比用同样多的 字符初始化多1个字节。所以只有 C 才是正确的。 【参考答案】C 52. 循环语句“for(x=0, y=0;(y!=123)||( x&4);x++);”的循环执行( ) A.无限次 B.不确定次 C.4次 D.3次 【解析】 循环语句的初始化部分置变量 x 和 y 的初值为0, for 循环条件是(y!=123)||(x&4), 每次循环后变量 X 的值增1。由于循环过程中变量 y 的值本被修改过,循环条件又是一个逻 辑或,其左分量(y!=123)永远成立,也就是循环条件永远成立。所以该循环语句将循环执行 无限次。正确解答是 A。 【参考答案】A 53.在计算机上可以直接运行的程序是写( ) A.高级语言程序 B.汇编语言程序 C.机器语言程序 D.C 语言源程序 【解析】C 语言源程序就是高级语言程序,都需要通过编译程序翻译成二进制目标程序 才能执行;汇编语言源程序也需要通过汇编程序翻译成二进制目标程序才能执行。二进制目 程序就是机器语言程序,可以在计算机上直接运行。 【参考答案】C 54.下列符号串中,合法的 C 语言标识将是( ) A._121 B.121_ C.a.121 D.#121 【解析】分析备选答案 A:是下划线开头的数字串,符合 C 语言关于标识符的构成规则 “字母、下划线开头的字母、数字、下划线组成的一串符号”,所以该答案是正确的,符合题 意至于备选答案 B:是以数字开头的,不是标识符;备选答案 C:含有非法符号“.”;备选答赛 D: 含有非法符号“#”,这三个答案都是错误的,不符合题意。 【参考答案】 A 55.下列符号串中,合法的十进制整型常量是( ) A.09876 B.0x9876 C.9.876*e4 D.-9876 【解析】分析备选答案 A:是数字“0”开头的数字率,是人进制整型常量,而且其中出现 了数字“8”和“9”,是错误的八进制常量,不符合题意。备选答案 B:是“0x”开头的数字率,是 十六进制整型常量,不符合题意。备选答案 C:出现了小数点“.”。运算符“*”及“e”符号,是 错误的常量,不符合题意。至于备选答案 D:是正确的整型十进制常量,所以本题应选答案 D。 【参考答案】D 56.设有关变量已经正确定义并赋值,则下列表达式中符合 C 语言语法规则的是( ) A.a_=\12 B.a_1=a_2+=12 C.int13.5%2 D.a=b+7=C-2 【解析】分析备选答案 A:这个表达式中出现了两个运算符“=”和“\”,后一个运算符是 双目中缀,但是其前面没有运算对象,所以语法上是错误的。分析备选答案 B:这个表达式 中出现了两个运算符“=”和“+=”.从结合性来说,是自右向左的,所以该表达式相当于 “a_1=(a_2+= 12)”,先计算“a_2+=12”,相当于“a_2=a_2+12”,再计算“a_1=(a_2+=12)”, 所以该表达式的语法是正确的,符合题意。至于备选答案 C,加在表达式前面的 int 需要有 圆括号, 表示对表达式值的强制转换, 此外“%”运算符的一个运算对象是实型, 也是错误的。 备选答案 D 类似于备选答案 B,但是第2个赋值运算符的左边是表达式“b+7”,不是变量, 不符合赋值运算符的语法要求,是错误的。 【参考答案】B 57.若整型变量 x 的值为8,则下列表达式中值为1的表达式是( ) A.x+=x-=x=x B.x%=x-1 C.x%=x%=3 D.x/=x+x 【解析】计算备选答案 A:先做“x=x*x”,结果 x 为64,该表达式值为64;再做“x=x-64” 结果 x 为 0,该表达式值为0;最后计算“x=x+0”,结果 x 为 0,整个表达式值为 0,不符 合题意。计算备选答案 B:相当于计算“x=x%(x-1)”,结果为 x=8%7=1,整个表达式值为1, 所以该答案符合题意,本题答案应选 B。至于备选答案 C:先算“x=x%3”,结果 x=2,该表达 式值为2,再计算“x=x%2”,结果 x 为0,整个表达式值为0。备选答案 D:相当于计算 “x=x/(x+x)”,结果为 x=8/(8+8),结果 x 为0,整个表达式值为0。 【参考答案】B 58.字符串&m\x43\\\np\102q&的长度是( ) A.7 B.9 C.15 D.16 【解析】字符串的长度等于其中有效字符(不含字符率结束标记符)的数目。本题给出的 字符串中含有转义字符,一个转义字符相当于单个字符。按照这个规则,本题中给出的字符 串中含有的字符如下: 'm''\x43''\\''\n''p''\102''q'字符串中含有7个有效字符,所以本题答案应选 A。 【参考答案】A 59.设有定义语句“int a=10,*p=&a;”,则表达式“a 十*p”的值是( ) A.10 B.20 C.100 D.语法出错 【解析】在数据定义语句中的“*p=&a”,表示指针变量 p 已经指向变量 a,所以表达式 中的“*p”就是变量 a,“a+*p”就是“a+a”,所以该表达式的值为20。本题答案应选 B。 【参考答案】 B 60.若有定义语句“int x,*p=&x,**ppx=&”,则下列表达式中错误的是( ) A.x=*px B.x=**ppx C.px=&ppx D.*ppx=&x 【解析】分析备选答案 A:“*px”,就是 x,所以该表达式为“x=x”,是正确的,不符合题 意分析备选答案 B:&**ppx&,就是&*(*ppx)=*px=x&,所以该表达式为&X=X&,是正确的,不符合题 意.分析备选答案 C:px 是一级指针变量,其中只能存放变量或数组元素的地址,不能存放其 他一级指针变量或二级指针变量的地址,而&&ppx&是二级指针变量 ppx 的地址,所以该表 达式是错误的,本题答案应选 C.至于备选答案 D:&*ppx&就是 px,将变量 x 的地址赋予 px, 当然是正确的。 【参考答案】 C 软考程序员考前练习试题及答案解析(5) 61.如果某个函数在定义时,省略了存储类型,则默认的存储类型是( ) A.auto B.void C.extern D.static 【解析】C 语言规定,函数的存储类型只能选取 static 或 extern。前者表示本函数只能 在本编。译单位中被调用;后者表示本函数可以被其他编译单位调用。如果省略了存储类型 符,则系统默认为是“extern”型,所以本题答案应选 C。 【参考答案】C 62.能正确定义一个用来指向打开文件的文件型指针变量 fp 的语句是( ) A. B.file * C.FILE D.FILE * 【解析】&file”是在头函数“stdio.h&冲定义的文件结构型的用户自定义数据类型符,这个 用户自定义的数据类型符是大写字母组成的,所以备选答案 A 山是错误的。文件型指针变 量在定义时,变量名的前面必须有“*”,所以备选答案 C 也是错误的,本题应选答案 D。 【参考答案】D 63.存储整型数据-7856时,在二进制文件和文本文件中占用的字节数分别是( ) A.2和2 B.2和5 C.5和5 D.5和2 【解析】二进制文件中存放的数据是二进制形式的,对于“-7856”来说,是一个带符号 的短整型数据,C 语言规定短整型数据占用的字节数是2,所以在二进制文件中该数据占用 2个字节;对文本文件来说, 存放的数据是按照每位数字对应的 ASCII 代码值存放的, 对于“-7 856”来说,其中的“-”号要占 1个字节;4位整数要占4个字节,共计占用5个字节。所以本题 的答案应选 B。 【参考答案】B 61.如果某个函数在定义时,省略了存储类型,则默认的存储类型是( ) A.auto B.void C.extern D.static 【解析】C 语言规定,函数的存储类型只能选取 static 或 extern。前者表示本函数只能 在本编。译单位中被调用;后者表示本函数可以被其他编译单位调用。如果省略了存储类型 符,则系统默认为是“extern”型,所以本题答案应选 C。 【参考答案】C 62.能正确定义一个用来指向打开文件的文件型指针变量 fp 的语句是( ) A. B.file * C.FILE D.FILE * 【解析】&file”是在头函数“stdio.h&冲定义的文件结构型的用户自定义数据类型符,这个 用户自定义的数据类型符是大写字母组成的,所以备选答案 A 山是错误的。文件型指针变 量在定义时,变量名的前面必须有“*”,所以备选答案 C 也是错误的,本题应选答案 D。 【参考答案】D 63.存储整型数据-7856时,在二进制文件和文本文件中占用的字节数分别是( ) A.2和2 B.2和5 C.5和5 D.5和2 【解析】二进制文件中存放的数据是二进制形式的,对于“-7856”来说,是一个带符号 的短整型数据,C 语言规定短整型数据占用的字节数是2,所以在二进制文件中该数据占用 2个字节;对文本文件来说, 存放的数据是按照每位数字对应的 ASCII 代码值存放的, 对于“-7 856”来说,其中的“-”号要占 1个字节;4位整数要占4个字节,共计占用5个字节。所以本题 的答案应选 B。 【参考答案】B 67.对于输入语句 scanf(&%f,%f&,&a,&b);要使变量 a、b 上的值分别为 1.78和2.48, 则正确的输入是( ) A. 1.78,2.48后跟回车 B. 1.78 2.48后跟回车 C. 1.782.48后跟回车 D. 1.78;2.48后跟回车 【解析】按照 scanf()函数的语法要求,第1个形参是一个字符串常量,是由格式控制符 和非格式控制符组成的, 其中的非格式控制符必须原样输入。 显然本题中的非格式控制符是 在两个实数之间的“逗号”。从4个备选答案中可以看出,只有备选答案 A 中是用逗号分隔两 个实数的,所以本题答案应选 A 【参考答案】 A 68.执行下列程序段后的输出结果是( ) x=9; while( x&7) { printf(&*&);x--;} A.**** B.*** C.** D.* 【解析】注意执行 while 循环前,变量 x 的初值为9.第1次执行 while 循环,控制循环的 条件为“x&7”,这时 x 为9,条件成立,执行循环体:输出单个“*”,x 再减1,x 为8。继续循 环,控制循环的条件是“x&7',现在 x 为8,条件成立,输出“*”后 x 减1,现在 x 为7。继续 循环时,控制循环的条件不满足,退出循环。所以本段程序执行后,输出结果为两个“*”, 本题答案应选 C。 【参考答案】C 69.关于带参数的主函数,下列说法中错误的是( ) A.带参数的主函数中,形式参数名称是系统规定的,用户不能自己选择 B.带参数的主函数中,第1个形式参数是 int 型的 C.带参数的主函数中,第2个形式参数是字符型数组 D.带参数的主函数中,实际参数值只能在执行程序的命令行中获得 【解析】带参数的主函数定义格式是系统规定的,具体如下: main(argc,argv); char *argv[]; {... } 由此看出, 第2个形式参数 argv 是指向字符型数据的指针型数组, 不是字符型数组所以 备选答案 C 是错误的,本题应选答案 C。 【参考答案】C 70.执行下列程序后的输出结果是( ) #define M(a,b)(a)&(b)?(a):(b) main() { int i=10,i=15; printf(&%d\n&,10*M(i,j)); } A.10 B.15 C.100 D .150 【解析】本题要输出的表达式是“10*M(i,j)”,其中的“M(i,j)”是带参数的宏调用,宏 替换后,表达式的结果是“10*(i)&(j)?(i):(j)”,而变量 i 值为10、变量 j 值为15,带入整个要输 出的表达式后结果是“10*(10)&(15)?(10):(15)”, ,其中的条件“10*10&15”是成立的,结果等 于10。所以本题答案应选 A 【参考答案】A 71.执行下列程序后的输出结果是( ) int fun(int x1,int x2) {x1&x2?(x=3):(x=4);return(x+x1); } main() { printf(&%d\n&,fun( 7,8));} A.9 B.10 C.11 D.12 【解析】本程序的输出是函数调用“fun(7,8)”的返回值。分析函数调用“fun(7,8)”的 过程如下:将实参7传给形参 x1,实参8传给形参 x2,然后执行函数体。由于 x1&x2的条件不 成立,所以执行“:”号后的赋值表达式:x=4。返回语句中的表达式是“x+x1”,返回值 是:4+7=11。所以本题答案应选 C. 【参考答案】C 72.下列程序段的输出是( ) typedef union{ long x[2]; short y[4][5]; char z[10]; }TYPE1; TYPE1 u1; printf(&%d\n&, sizeof(u1)); A.8 B.10 C.40 D.58 【解析】程序的开始用“typedef&定义了用户自定义数据类型符“TYPE1”,这个用户自 定义的数据类型符对应的是一个共用型。然后使用&TYPE1&,定义了共用型变量 u1,本段程 序的输出就是这个共用型变量所占用的字书数。 共用型变量占用的字节数就是其成员中占用 字节数最多的成员占用的字节数。分析这个共用型的成员有3个:第1个成员是长整型数组, 占用字节数为4*2=8;第2个成员是短整型数组,占用字节数为2*4*5=40;第3个成员是字符型 数组,占用的字节数为1*10=10。其中占用字节数最多的成员是第2个成员,其占用的字节 数等于40。所以本题答案应选 C。 【参考答案】C 73.不属于 C 语言保留字的是( ) A.for B.goto C.if D.loop 【解析】关于保留字教材中有明确规定。显然 for、goto、if 都是组成语句的专用语句 成份,都 是保留字。本题答案应选 D。 【参考答案】 D 74.正确的 C 语言标识符是( ) A.num(10) B.file bak C.continue D.class+2 【解析】标识符是字母、下划线开头的字母、数字、下划线组成的一串字符,而且不能 是保留字。本题的4个备选答案中,只有答案 B 符合这个规定。本题答案应选 B。 【参考答案】 B 75.设有定义语句“double d1,d2;”,则表达式“d1=1,d2=d1+5/2”的值是( ) A.1 B.3 C.3.0 D.3.5 【解析】C 语言规定,逗号表达式的计算是自左向右进行的,表达式的值等于右边表达 式的值,因此,本题的答案应为表达式&d2=d1+5/2&的值。该表达式是赋值表达式,所以其 值是赋予变量 d2的值,也就是表达式&d1+5/2&的结果。计算时,需要先算&5/2&,结果为整 数2,再和 double 型的 d1相加,结果是实数3.0。所以本题答案应选 C 【参考答案】 C 软考程序员考前练习试题及答案解析(6) 76.设有定义“int x=8,y,z;”,则执行“y=z=x++,x=y==z;”后,变量 x 值是( ) A.0 B.1 C.8 D.9 【解析】这是逗号表达式组成的语句,要先计算“y=z=x++”,结果变量 y 和 z 的值均为 8。注意++是后缀运算符,同时 x 等于9。再计算“x=y==z”,由于“==”优先于“=”,所以 x 的值等于“y==z”,而 y 和 z 值相等,所以运算结果为1,即 x 值为1。本题答案应选 B。 【参考答案】 B 77.设有“int a=1,b=1;”,“printf(&%d,%d&,(a++,--b),b-1);”的输出是( ) A.1,-1 B.1,0 C.0,-1 D.0,0 【解析】printf()函数的功能是自右向左依次计算表达式的值,然后再按照自左向右的顺 序输出各个表达式的值,所以题目中输出语句执行时,是依次计算下列两个表达式的值: b-1 结果为0,注意变量 b 值不变; (a++,--b)这是逗号表达式,先计算 a++,结果变量 a 值为2; 再计算--b,结果变量 b 值为0; 整个逗号表达式的值就是--b 的值,为0。 按照自左向右的顺序输出(a++,--b)和 b-1的值,依次为0,0。本题答案应选 D。 【参考答案】D 78.设有定义语句“char s[]=&123&;”,则表达式“s[3]”的值是 ( ) A.?1? B.?3? C.0 D.语法出错 【解析】字符数组 s 在定义时省略了数组长度,表示给每个数组元素均赋了初值。对本 题来说,数组的长度为4;数组元素的值依次为:S[0]为'1'。S[1」为'2'。S[2]为'3'、S[3]为字 符率结束标记符'\0',所以“s[3]”的值是'\0'。注意,这个字符的 ASCII 代码值是整数 0,所 以本题答案应选 C。 【参考答案】 C 79.定义一个具有10个元素的整型数组,应当使用语句( ) A.int a[10]; B.int a[2,5]; C.int a[]; D.int *a[10]; 【解析】分析备选答案 A:显然是正确的,本题答案应选 A。至于备选答案 B:其中 的“[2,5]”在语法上是错误的;备选答案 C:数组没有给初值而省略了数组长度,语法上也是 错误的;备选答案 D:定义的是具有10个元素的。指向整型数据的指针型数组。 【参考答案】A 80.设指针变量 p1、 p2已经指向同一个数组的元素,则下列表达式中错误的是( ) A.p1=p2 B.p1==p2 C.p1-p2 D.p1+p2 【解析】 教材中关于指向同一个数组的元素的指针变量之间可以进行的运算有如下的规 定:可以进行关系运算、赋值运算、减法运算,所以本题答案应选 D。 【参考答案】D 81.设有定义语句“int a[]={2, 4,6,8,10} ,*p=s;”,则值为8的表达式是( ) A.*p+3 B.*p+4 C.*(p+4) D.*(s+3) 【解析】分析四个备选答案,可以看出是用指针法来引用数组 a 的元素。当指针变量 p 已经指向数组。的首地址后(正如本题那样),*(p+i)和*(s+i)都是数组元素 a[i]。对于备选答案 A:*p 就是数组元素。a[0],其值为2,再加3结果为5,不符合题意。同样道理,备选答案 B 中的*p 十4的值为6, 也不符合题意。 对于备选答案 C: *(p+4)代表数组元素 a[4], 其值为10, 也不符合题意。显然本题答案应选 D。因为*(s+3)就是数组元素 s[3],其值为8。 【参考答案】 D 82.下列数据类型中不属于构造类型的是 ( ) A.数组型 B.结构型 C.共用型 D.枚举型 【解析】教材中明确指出:构造类型只包括:数组型、结构型。共用型三种,所以本题 答案应选 D。 【参考答案】D 83.函数 fopen()的返回值不能是( ) A.NULL B.0 C.1 D.某个内存地址 【解析】函数 fope()的返回值有两种可能:一是正确打开了文件,将返回某个地址,程 序中一般是用文件型指针变量来接受的;二是打开文件时出现错误,此时返回值是符号常量 “NULL”,其值为0。所以本题答案应选 C。 【参考答案】C 84.以只写方式打开一个二进制文件,应选择的文件操作方式是( ) A.&a+& B.&w+& C.&rb& D.&Wb& 【解析】打开文件时,如果是“只写方式”,则只能选用字符“ w”;如果要打开的文件是 二进制文件,则需要选用字符“b”,所以本题答案应选 D。 【参考答案】 D 85.设有定义语句“char ch='\77';”,则下列说法中正确的是( ) A.ch 中含有1个字符 B.ch 中含有2个字符 C.ch 中含有3个字符 D.语法出错 【解析】从定义语句中可以看出,变量 ch 是字符型变量,显然只能存放单个字符,所 以备选答案 B 和 C 是错误的说法。再分析赋予的初值,'\77'是在“\”符号的后面跟有2位的人 进制数,所以'\77'是转义字符,转义字符是单个字符,所以本题答案应选 A。 【参考答案】 A 86.设有函数调用语句“f(x1,x1+x2,(x1,x2));”,正确的说法是( ) A.调用的实际参数是2个 B.调用的实际参数是3个 C.调用的实际参数是4个 D.调用时会出现语法错误。 【解析】对函数调用来说,实际参数一般都是表达式,而表达式之间必须用逗号来分隔, 所以只要区分调用时的表达式数目, 即是实妹参数的数目。 对本题来说, 第1个表达式是“x1”、 第2个表达式是“x1+x2”、 第3个表达式是一个逗号表达式“x1, x2”, 所以本题的函数调用时, 表达式的数目为3,当然实际参数的数目就是3,所以本题答案应选 B。 【参考答案】B 87.计算平方数时不可能引起二义性的宏定义是( ) A.#define SOR(x)x*x B.#define SQR(x)(x)*(x) C.# define SQR(x)(x*x) D.# define SQR(x)((x)*(x)) 【解析】 分析备选答案 A: 如果宏引用是“SQR(2+3)”, 则宏替换后的结果是“2+3*2+3”, 结果是错误的,因此这个答案可能引起二义性。分析备选答案 B:如果宏引用是 “ 3/SQR(2+3)”,则宏替换后的结果是“3/(2+3)*(2+3)”,结果也是错误的,因此这个答案可 能引起二义性。分析备选答案 C:如果宏引用是“SQR(2+3)”,则宏替换后的结果是 “(2+3*2+3)”,结果也是错误的,因此这个答案可能引起二义性。只有备选答案 D 不会引起 二义性。所以本题答案应选 D。 【参考答案】D 88.执行下列程序段后,x 的位是( ) int a=8,b=7,c=6,x=1; if(a&6)if(b&7)if(c&8)x=2;else x=3; A.0 B.1 C.2 D.3 【解析】按照&else&只和前面最近的&if&配对的原则,上述程序段可以写成下列更为清晰 的程序清单: int a=8,b=7,c=6,x=1; if(a&6) if(b&7) if(c&8) x= 2: else x=3: 依据 a、 c 的值, b、 很容易看出第1个“if 语句”的条件“a&6”是成立的, 接着执行第2个“if 语句”,该语句的条件“b&7”,是不成立的,所以下面的“if-esle”语句不执行,因此 x 的值不 变,仍为1。所以本题答案应选 B。 【参考答案】B 89.执行下列程序段后,变量 y 的值为( ) int x[]={1,2,3,4} ,y,*p=&x[1]; y=(*--P)++; A.1 B.2 C.3 D.4 【解析】从数据定义语句中可以得出下列结论:指针变量 P 指向的数组元素是 x[1]。再 来分析赋值句的右边表达式“(*--p)++”,其中的“--”优先于“*”先计算“--p”,使得 p 指向数组 元素 x[0];所以“(*--p)”就是数组元素 a[0],再计算其后的“++”,由于“++”是后缀,所以表达 式的值就是数组元素 x[0]的值,为1,然后再对数组元素 x[0]加1。因此变量 y 的值是1。本 题答案应选 A。 【参考答案】A 90.能正确表达逻辑关系“-1&& A.(-1& p& B.(-1& p& C.((-1&1))&&((-1&1))&& D.(-1&1)&&(-1&1)& p& 【解析】注意数学中的“-1&1”,搞清楚这一点后,再来分析给出的备选答案。对于答案 A:其中的-1&1”,例如,当 X 为0时,“-1&1”显然为真,所以备选答案 A 是错误的。对于备 选答案 B 出于同样的理由,也是错误的。对于备选答案 C:“-1&1”是不能表示成“((-1&1))”, 其中的或“: :”应该改成与“&&”,显然该答案也是错误的。本题应该选择 D。& p& 【参考答案】 D 91.函数调用时,下列说法中不正确的是 ( ) A.若用值传递方式,则形式参数不予分配内存 B.实际参数和形式参数可以同名 C.主调函数和被调用函数可以不在同一个文件中 D.函数间传送数据可以使用外部全局变量 【解析】分析备选答案 A:值传递时,先给形参分配内存,然后把实参值传给形参分配 的内存,所以该说法是错误的,本题答案应选 A。至于备选答案 B:形参和实参是可以同名 的, 因为它们的作用域不重复。备选答案 C: 只要被调函数定义时的存储类型选取“extern”, 就可以被其他文件中的函数调用。备选答案 D:函数间传递数据的方法有4种,其中的一种 就是利用外部全局变量来传递的。 【参考答案】 A 92.下列关于结构型变量的定义语句中,错误的是( ) A. typedef struct CCC B. #define GGG struct { char name[20];GGG CCC { char name[20]; }GGG; GGG GGG CCC C.struct D.struct { char name[20]; { char name[20]; } CCC 【解析】分析备选答案 A:利用“typedef”定义了用户自定义的数据类型符“GGG”,这 个用户自定义的数据类型符是含有两个成员的结构型 CCC,所以语句“GGG abc”是定义结 构型 CCC 的变量 abc, 语法没有错误。 分析备选答案 B: 利用“#define”定义了宏名“GGG”, 这个宏名第一次出现是定义结构型 CCC,第二次是定义了结构型 CCC 的变量 allc,所以语 法上没有错误。分析备选答案 C:这是定义一个没有名称的结构型,同时定义了这种结构型 } }; 的变量 CCC,接着的语句“CCC”显然是错误的,因为 CCC 是变量名,不是数据类型 符,该答案符合题意。至于备选答案 D:这是标准的通过定义没有名称的结构型来定义该结 构型的变量 abc,语法上没有错误。 【参考答案】C
软考程序员资讯 /rk/cxy/index.html 软考程序员考试练习题及答案(六)下面是希赛小编为大家整理的软考程序员考试练习题及答案,希望能帮助...程序员考试:/rk/cxy/index.html 2016 年软考程序员试题及答案解析一、选题题 1.二进制语言是属于() A.面向机器语言 B.面向问题语言 ...软考程序员资讯 /rk/cxy/index.html 软考程序员考试练习题及答案(二)下面是希赛小编为大家整理的软考程序员考试练习题及答案,希望能帮助...软考程序员考试练习题及答案(三)_从业资格考试_资格考试/认证_教育专区。软考...给出下面的不完整的方法 {success=connect(); If(success==-1){ Throw new...软考程序员考前练习试题及答案解析 一、选题题 1.二进制语言是属于( ) A.面向机器语言。B.面向问题语言 C.面向过程语言 D.面向汇编语言【解析】人们研制了许 ...软考程序员历年真题重点题及答案_IT认证_资格考试/认证_教育专区。2016年程序员考试必备 软考程序员历年真题重点题及答案(1) 9.微机中 1K 字节表示的二进制位数...软考程序员选择题及答案解析_从业资格考试_资格考试/认证_教育专区。软考程序员...(1) A.选中光标所在的文本行 B.选中光标后的文本行 C.选中一个段落 D....2016年软考程序员精选练习题及答案分享_IT认证_资格考试/认证_教育专区。2016年...d1.doc 的窗口,单击该窗口的&最小化&按扭后(A) A)不显示 d1.doc 文档...软考程序员 /rk/cxy/index.html 历年软考程序员考试真题及答案(一) 2017 年软考程序员考试即将来临,为了提高考试通过率 ,希赛小编为大家...2016年软考程序员真题练习及答案(二)_IT认证_资格考试/认证_教育专区。2016年...1.在 Word 的编辑状态,选择了一个段落并设置段落的“首行缩进”设置为 1 ...
All rights reserved Powered by
copyright &copyright 。文档资料库内容来自网络,如有侵犯请联系客服。

我要回帖

更多关于 正则表达式 二进制 的文章

 

随机推荐