1、国家二级( C语言)笔试模拟试卷 97及答案与解析 1 下列叙述中,不正确的是 ( A)算法的执行效率与数据的存储结构有关 ( B)算法的空间复杂度是指执行这个算法所需要的内存空间 ( C)算法的有穷性是指算法必须能在执行有限个步骤之后终止 ( D)算法的时间复杂度是指执行这个算法所需要的时间 2 数据的存储结构是指 ( A)数据所占的存储空间量 ( B)数据的逻辑结构在计算机中表示 ( C)数据在计算机中的顺序存储方式 ( D)存储在外存中的数据 3 在深度为 5的满二叉树中,结点的个数为 ( A) 32 ( B) 31 ( C) 16 ( D) 15 4 结构化程序设计的主要任务是确定每个
2、模块的 ( A)程序的规模 ( B)程序的易读性 ( C)程序的执行效率 ( D)程序的可移植性 5 信息隐蔽的概念与下述哪一种概念直接相关 ? ( A)软件结构定义 ( B)模块独立性 ( C)模块类型的划分 ( D)模块耦合度 6 软件详细设计的主要任务是确定每个模块的 ( A)算法和使用的数据结构 ( B)外部接口 ( C)功能 ( D)编程 7 在结构化方法中,软件功能分解属于下列软件开发中 ( A) 详细设计阶段 ( B)需求分析阶段 ( C)总体设计阶段 ( D)编程调试阶段 8 在数据库管理系统提供的数据语言中,负责数据的模式定义与数据的物理存取构建的是 ( A)数据定义语言 (
3、 B)数据转换语言 ( C)数据操纵语言 ( D)数据控制语言 9 关系数据库的概念模型是 ()的集合。 ( A)关系模型 ( B)关系模式 ( C)关系子模式 ( D)存储模式 10 概要设计是软件系统结构的总体设计,不属于概要设计的是 ( A)把软件划分成模块 ( B)确定模块之间的调用关系 ( C)确定各个模 块的功能 ( D)设计每个模块的伪代码 11 以下叙述中正确的是 ( A) C程序中注释部分可以出现在程序中任意合适的地方 ( B)花括号 “”和 “”只能作为函数体的定界符 ( C)构成 C程序的基本单位是函数,所有函数名都可以由用户命名 ( D)分号是 C语句之间的分隔符,不是
4、语句的一部分 12 以下选项中可作为 C语言合法整数的是 ( A) 10110B ( B) 386 ( C) 0Xffa ( D) x2a2 13 以下不能定义为用户标识符的是 ( A) scanf ( B) Void ( C) _3com_ ( D) int 14 有以下程序 main() int a; char c=10; float f=100.0; double x; a=f/=c*(x=6.5); printf(“%d %d %3.1f %3.1fn“,a,c,f,x); 程序运行后的输出结果是 ( A) 1 65 1 6.5 ( B) 1 65 1.5 6.5 ( C) 1 65
5、1.0 6.5 ( D) 2 65 1.5 6.5 15 以下选项中非 法的表达式是 ( A) 0 x 100 ( B) i=j= =0 ( C) (char)(65+3) ( D) x+1=x+1 16 有以下程序 main() int a=1,b=2,m=0,n=0,k; k=(n=b a)(m=a b) ; printf(“%d,%dn“,k,m); 程序运行后的输出结果是 ( A) 0, 0 ( B) 0, 1 ( C) 1, 0 ( D) 1, 1 17 有定义语句: int x, y;若要通过 scanf(“%d,%do, ( C) if(a 3)x=3; if(a 2)x=2;
6、if(a 1)x=1; ( D) if(a b) x=b; if(b c) x=c; if(c a) x=a; 21 已有定义: int x=3, y=4, z=5,则表达式 !(x+y)+z-1 60 设有如下程序: main() int n1,n2; scanf(“%d“, f=f*n; return f; main() int i; for (i=1; i =5; i+)printf(“%dn“, ff(i); 62 以下函数的功能是求 x的 y次方,请填空 double fun(double x,int y) int i; double z; for(i=1,z=x; i y; i+)
7、z=z*【 】 ; return z; 63 下列程序的输出结果是【 】。 main() int a=2, 4, 6, *ptr=y ;y+) z=(*(ptr+y) x?*(ptr+y);x; printf(“%dn“,z); 64 以下程序运行后的输出结果是【 】。 main() char s=“9876“, *p for(p=s; p s+2; p+)printf(“%sn“, p); 65 若有定义语句 char s 100, d100; int j=0, i=0;且 s中已赋字符串,请填空以实现拷贝。 (注:不使用逗号表达式 ) white(si)dj= 【 】 ;j+; dj=0;
8、 66 若有如下结构体说明: structSIRU int a,b; char c: double d; struct STRU *p1, *p2; ; 请填空,以完成对 t数组的定义, t数组的每个元素为该结构体类型。 【 】 t20 67 以下程序段打开文件后,先利用 fseek函数将文件位置指针定位在文件末尾,然后调用 ftell函数返回当前文件的具体位置,从而确定文件长度,请填空。 FILE*myf;long fl; myf=【 】 (“test.t“,“rb”); fseek(myf,() SEEK_END) ; fl+ftell(myf); fclose(myf); printf(
9、“%ldn“,fl); 68 下面的程序可对指定字符串中的字符串进行从大到小排序、请将程序填完整。 (注:程序采用了冒泡排序算法 ) #include stdio.h #include string.h main() char*str=“ABCDabcd“,temp; int n,i; n=strlen(str); while(n- 1) for(i=0; i n;i+ if(stri stri+1) temp=【 】 ; stri=stri+1; 【 】 =temp; printf(【 】 ); 国家二级( C语言)笔试模拟试卷 97答案与解析 1 【正确答案】 D 【试题解析】 算法的时间
10、复杂度是指执行算法所需要的计算工作量。 2 【正确答案】 B 【试题解析】 数据的存储结构是数据元素在计算机存储器内的表示。数据的存储结构是逻辑结构用计算机语言的实现,即建立数据的机内表示 。 3 【正确答案】 B 【试题解析】 二叉树有如下性质:深度为 m的二叉树最多有 2的 m次方再减 1个结点。 4 【正确答案】 B 【试题解析】 按结构化程序设计方法设计出的程序具有明显的优点,即程序易于理解、使用和维护,便于控制、降低程序的复杂性,便于验证程序的正确性,程序清晰易读,可理解性好。 5 【正确答案】 B 【试题解析】 采用信息隐蔽的目的就是为了确保每个模块的独立性。 6 【正确答案】 A
11、 【试题解析】 从软件开发的工程化观点来看,在使用程序设计语言编制程序 以前,需要对所采用算法的逻辑关系进行分析,设计出全部必要的过程细节,并给予清晰的表达。详细设计的任务就是要决定各个模块的实现算法,并精确表达出这些算法。 7 【正确答案】 C 【试题解析】 详细设计的任务是:在使用程序设计语言编程以前,对所采用算法的逻辑关系进行分析,并给予清晰的表达。需求分析是指用户对目标软件系统在功能、行为、性能、设计约束等方面的希望。编程调试任务是诊断和改正程序中潜在的错误。软件功能分解只能发生在总体设计阶段。 8 【正确答案】 A 【试题解析】 在数据库管理系统提供的数据语言中,数据定义语言负责数据
12、的模式定义与数据的物理存取构建。 9 【正确答案】 B 【试题解析】 数据库的概念模型体现了数据之间的关系,它是各种数据之间相互关系的集合。 10 【正确答案】 D 【试题解析】 概要设计是数据库的总体设计,其目的就是要按照需求规格说明书把软件按照功能划分为多个模块,然后确定每个模块要实现的功能,最后确定模块之间的调用关系,而设计每个模块的伪代码则属于详细设计。 11 【正确答案】 A 【试题解析】 C语言 函数、语句的概念、注释以及 C程序的基本结构, “/*”与“*/”之间的信息称为注释信息,在 C语言中,允许在任何能够插入空格符的位置插入注释,但 C语言的注释不能进行嵌套;在 C语言中,
13、函数体是从花括号 “”开始,到花括号 “”结束。但没有规定花括号 “”和 “”只能作为函数体定界符;选项C中前半句是正确的,在 C程序中由有一个或多个函数所组成,但不是所有的函数都由用户自己命名,有些函数比如库函数,主函数 main()就不能由用户来命名;在 C语言中明确规定每条语句以分号 “; ”结束,分号是语句不可缺少的一部分。 12 【正确答案】 C 【试题解析】 在 C语言中,整数常量可以用十进制、八进制和十六进制来表示,选项 A为二进制表示;选项 B是八进制表示法,但在八进制数中,各个位数只能为数字 0到 7中的一个,而在选项 B中,有一个数字 8;选项 C为十六进制表示法正确;选项
14、 D中也为十六进制表示法,但十六进制数以 0x开头。 13 【正确答案】 D 【试题解析】 在 C语言中,合法的标识符由字母、数字和下划线组成,并且第 1个字符必须为字母或下划线。选项 D中 int为 C语言中的保留字,不能作为用户的标识符。 14 【正确答案 】 B 【试题解析】 主函数中先定义了一个整型变量 a,一个字符变量 c并赋初值 10,一个浮点型变量 f并赋初值 100.00和一个 double型 x,接着执行“a=f/=c*=(x=6.5)”,该语句从右向左计算,先把 6.5赋值给 x(该括号表达式的值也为 6.5),此时 x的值的变为 6.5,然后执行 “c*=(x=6.5)”
15、相当于执行 “c=c*(x=6.5)”,此时 c的值为 65,接着向左执行 “f/=c*=(x=6.5)”,语句相当于执行 “f=f/c”接着向最右边执行 “a=f,由于 a是整型变量,所以 a最后取 f的整数部 分为 1。程序最后输出的 a、 c、 f和 x的值分别为 1、 65、 1.5、 6.5。 15 【正确答案】 D 【试题解析】 选项 D中将表达式的值赋给表达式,在 c语言中是不允许给表达式赋值的。 16 【正确答案】 C 【试题解析】 在 “|”运算中当其左边的表达式为真,右边的表达式将不再执行。主函数中, “|”左边的表达式 k=(n=b A) , “2 1”为真,所以 n被赋
16、值为 1,接着 k被赋值 1,即 “|”运算符左边表达式为真,此时不再计算 “|”右边的表达式,因此 m的值没有被改变仍为 0,最后的输出结果 1, 0。 17 【正确答案】 A 【试题解析】 scanf()函数有两个参数,第一个参数为输入格式字符申;第二个参数为输入变量地址列表,在 scanf()语句中非格式字符可以作为输入时数据的间隔,输入时必须原样输入,在本题中输入格式串为 %d, %d其中 “, ”为非格式字符,所以输入时必须原样输入。 18 【正确答案】 D 【试题解析】 逗号运算符的结合性为从左到右,其一般形式为 “表达式 1,表达式 2”,整个表达式的值为表达式 2的值。 19
17、【正确答案】 C 【试题解析】 实型变量中 小数点的位数,选项 A中 0.5/100.0将保留小数点后六位,不满足题目要求;选项 B和选项 D也将保留小数点后六位,不满足题目要求。 20 【正确答案】 C 【试题解析】 选项 A首先判断 if语句条件中表达式的值 “3 1”为假,然后执行最近的 else后面的语句,该 else后面又为 if-else语句,在这个 if-else语句中首先判断该 if语句条件中表达式的值 “2 1”为假,程序执行其最近的 else后面的语句,将 3赋值给 x。 选项 B中首先判断 if语句条件中表达式的值 “1 3”为真,然后执行最近的 else后面的语句 “x
18、=3”,后面的 else不再执行,最后 x的值为 3。 选项 C中,首先执行第一条 if语句,由于 “1 3”为真,执行此 if后面的语句“x=3”,接着执行第二条 if语句,由于 “1 2”为真,执行此 if后面的语句 “x=2”,接着执行第三条 if语句,由于 “1 1为假,后面的语句不执行,所以最后的 x值为2不为 3。 选项 D中;首先执行第一条 if语句,由于 “a b”为真,执行此 if后面的语句“x=b”;接着执行第二条 if语句,由于 “b c”,为真,执行此 if后面的语句“x=c”,接着执行第三条 if语句,由于 “c a”为假,后面的语句不执行,所以最后的 x值为 c即为
19、 3。 21 【正确答案】 D 【试题解析】 本题中, &左边的表达式 !(x+y)为 !(3+7),结果为假,即为 0。再加上 z,然后减 1,相当于 0+5-1。左边等于 4, &右边的表达式 y+z/2相当于4+5/2为 6,所以整个表达式相当于 4&6为真,即为 1。 22 【正确答案】 C 【试题解析】 首先检查 if与 else的配对,然后再分析各分支实现的功能。选项 A描述的意思是:在 x =0情况下,则 y为 1,否则,在 x=0时, y为 0,剩下的 x 0时, y为 -1,满足本题中函数的要求;选项 B描述的意思时:初始化 y的值为0,在 x 0时,给 y重新赋值为 1,否
20、则,在 x 0时,给 y重新赋值为 -1,满足本题中函数的要求;选项 C描述的意思是:在 x =0情况下,如果 x 0,则 y为1,否则即 “x=0”时, y为 -1;剩下的 x 0时, y为 0。可见答案 C实现的结果不是给定的表达式。选项 D中描述的意思是:在 x = 0的情况下,如果 x =0,就给 y赋值为 1,否则就给 y赋值为 0,在不是 x =0的其他情况下,就给 y赋值为 -1,满足本题中函数的要求。 23 【 正确答案】 A 【试题解析】 在本题中 k=n+,为后缀运算。根据其运算规则,首先 n的值赋给 k值,然后 n的值再加 1,即 k的值没有改变。选项 A中先给 k赋值为
21、 n,然后 n再加 1, k值没有变化,所以这个表达式和本题中表达式等价;选项 B中先 n加1,然后将 n加 1后的值赋给 k, k变化了比原来的值大 1,所以这个表达式和本题中表达式不等价;选项 C中先计算表达式左边的表达式 +n的值,执行 4+n后,左边的表达式的值为 n的值加 1,然后将 n+1后的值赋给 k,所以这个表达式和本题中的表达式不等价;选项 D中表达式展开为 k=k+(n+1)”, k的值发生了变化,所以这个表达式和本题中的表达式不等价。 24 【正确答案】 A 【试题解析】 本程序中用了两层 for循环,外层循环是控制人数,循环一次是求一个人的成绩和,然后除以 4得到平均成
22、绩。每个人的成绩总和一开始时都必须清 0,否则就会出现后面人的总成绩越来越大。 “sum=0.0”;应在外层循环中。 25 【正确答案】 D 【试题解析】 do-while循环结构中循环执行条件的判断,使用 do-while语句必须注意以下几点: 1)先执行语句,后判断表达式。所以 ,无论一开始表达式的值为 “真 ”还是 “假 ”,循环体中的语句至少执行一次,这一点与 while不同。 2)如果 do-while语句循环体部分是由多个语句组成,则必须用花括号括起来,使其形成复合语句。 3)C语言中的 do-while语句是在表达式 “真 ”时重复执行循环体。在本题中,循环执行判断条件为 whi
23、le后面括号里的表达式即 p!=12345&n 3(意思为 P不等于12345且 n小于 3)是否为 “真 ”,由此可得循环结束的条件为: p大于 12345或者 P小于 12345又或者 n大于等于 3。选项 A的意思是: p的值不等于 12345并且 n小于 3和 while后面括号里的表达式等价是循环执行的条件而不是循环结束的条件;选项 B的意思是: p的值等于 12345并且 n的值大于 3,不是循环结束的条件一个子集;选项 C的意思是: p的值不等于 12345或者 n的值小于 3前一半是结束条件的子集,后一部分不是结束条件;选项 D描述的意思是: p的值等于 12345或者 n的值
24、大于等于 3是结束条件的子集。 26 【正确答案】 A 【试题解析】 在 switch语句中 break语句的作用是退出分支语句,若没有 break语句则一直向下执行。 本题中首先计算 switch后面括号里的表达式 a%3,即15%3为 0;执行 case0;后面的语句 m+; m自加 1,即 m为 1;遇到 break语句;然后跳出 switch语句,所以最后输出的 m的值为 1。 27 【正确答案】 B 【试题解析】 C语言规定,在定义函数时,若其返回值类型为 int,则可以缺省。 28 【正确答案】 D 【试题解析】 首先定义了一整型变量 n并赋初值为 2,接着定义了一个整型指针变量
25、p并让它指向 n,接着又定义了指向指针的指针变量 q。选项 A中给指针变量p赋值 q,故这个赋值语句 正确;选项 B中 *p=*q就是将 *q的值赋给指引变量 p所指向的变量 n,故这个赋值语句不是非法的赋值语句;选项 C中是将 *q的值赋给变量 n,故这个表达式不是非法的赋值语句;选项 D中 p为一指针变量,应该将一地址赋给它,而在此选项的表达式中将变量 n而不是 n的地址赋给它,故这个表达式不合法。 29 【正确答案】 B 【试题解析】 fun()函数是将传进来的两个整型参数相加,把和作为函数值返回,注意返回值为 float型。在主函数调用了两次 fun()函数,第一次调用时把表达式“a+
26、c”和变量 “b”的值求和,得到 15转换为 15.0作为函数的返回值。第二次调用把第一次调用的返回值通过强制类型转换成 int型 15,再和表达式 “a-c”相加,得到结果 9,转换成 float型作为函数值返回。由于输出格式符为 “%3.of输出时没有小数位,故输出为 9。 30 【正确答案】 D 【试题解析】 用地址作为参数与值作为参数传递之间的不同。在 C语言中,数据传递是单向传递的。 “值传递 ”就是实参把对应的值传给相应的形参变量,然后形参和实参不再有任何联系,在被调用函数中,对形参的修改并不影响对应的实参。 “地址传递 ”就是实参把相应的地址传 给相应的形参变量,在被调用函数中对
27、形参的修改将修改对应的实参地址对应的值。程序中定义了两个字符型变量 a和b,并分别赋初值为 A和 a,然后调用函数 fun(),将 b的地址和:值作为实参。在函数 fun()中第一个参数是传递地址,故在调用函数 fun()中对参数做的修改 (即将 b值加 1)将影响字符型变量的值 (变为 b),函数 fun()第二个参数是传值的,故在调用函数 fun()对第二个参数做的修改不影响字符型变量 a(即 a的值仍为 A),所以在 fun()函数中输出的是 d为 b, B,接着在主函数中,输出 a, b,然后退出fun()函数,接着执行后面的语句,输出 A, b。所以最后输出为 b, B, A, b。
28、 31 【正确答案】 C 【试题解析】 本题中首先定义一个长度为 10的一个整型数组,并初始化为 “l,2, 3, 4, 5, 6, 7, 8, 9, 10”,然后调用排序函数 sort(),通过分析不难看出,sort()函数是对具有 n个元素的 a数组进行从大到小排序。由于函数的第一个参数是数组名,其对应的实参可以是函数名或地址。本题在调用该函数时,实参是&aa3的地址,即把 aa3的地址传给了形参数组名 a,函数也就是对 aa3开始的5个元素进行从大到小的排序, aa0、 aa 1、 aa2、 aa8、 aa9并没有变化。sort()执行完毕后,接着执行后面的 for语句输出数组 aa中各
29、个元素的值,由于函数 sort()只是对 aa3开始的 5个元素进行从大到小的排序, aa0、 aa1、 aa2、aa8、 aa9并没有变化,所以输出为 “1, 2, 3, 8, 7, 6, 5, 4, 9, 10”。 32 【正确答案】 B 【试题解析】 本题考查的知识点是递归函数。通过分析不难写出, f()函数的数学表达式为: f(n)=1 n=1; f(n)=f(n-1)+1 n不等于 1; 在主函数中 for循环执行了两次函数调用 f(i)。第一次: i为 1,调用 f(1)得到返回值 1,并把它加到 i中, i的值为 1。第二次 i为 2,调用 f(n),根据递归公式可知 “f(2)
30、=f(1) +1”,得到返回值 2并把它加到 j中, j的值为 3。所以最后输出的 j的值为 3。 33 【正确答案】 D 【试题解析】 本题中首先定义了字符数组 a,由于它的长度省略,所以其长度由初值个数确定,为 9。接着将 sizeof()函数 返回的值赋给 i(sizeof()函数的作用是返回运算对象占用的字符数 ),所以 i值为 9;然后将 strlen()函数的返回值赋给j(strlen()函数的作用是返回字符串的长度,不包括字符串的结束标记 0),所以 j值为 8,所以最后输出的 i, j的值为 9, 8。 34 【正确答案】 A 【试题解析】 reverse()函数的功能是将具有
31、 n个元素的数组 a反序存放。在主函数中调用语句是 “reverse(b, 8); ”,实现的功能是把 b数组的前八个元素逆置,所以 b数组中依次存放的值为 “8, 7, 6, 5, 4, 3, 2, 1, 9, 10”。 for循环了 4次,分别把 b6、 b7、 b8和 b9的值 (分别是 2、 1、 9、 10)加到了 s中, s的结果是 22,所以最后输出的 s值为 22。 35 【正确答案】 B 【试题解析】 C语言规定,数组元素的下标是从零开始的。本题首先定义了一个二维数组 aa并按行赋初值,定义了一个变量 s用于求和。 for循环执行了 4次分别把数组元素 aa01、 aa11、
32、 aa21和 aa31的值 (2, 6, 9, 2)加到变量 s中, s的值为 19,所以最后输出的 s的值为 19。 36 【正确答案】 D 【试题解析】 本题首先定义了一个字符型指针变量 p,并用一个字符串给它赋值,然后调用 printf()函数输出 p所指向的字符串的长度。字符串的结束标记为“0”,其长度为 “0”前的字符个数,故长度为 5。 37 【正确答案】 C 【试题解析】 编译预处理时,用 “typel.h”中的内容替代命令#include“typel h”。表达式 “i=M1+M2”经过宏替换为 “i=5*3+5*2”即 i=25,所以最后输出的 i的值为 25。 38 【正确
33、答案】 A 【试题解 析】 本题首先以创建方式打开文件 “d1 dar”,两次调用 fprintf()把 i和j的值写到文件 “d1 dat”中,文件 “d1 dar的内容为 20回车 30回车后把该文件关闭再以读的方式打开,文件位置指针指向文件头,在通过 fscard()函数从中读取两个整数到 k和 n中,由于格式符无间隔,因此输入数据可以用回车隔开,故输入的 k值为 20, n的值为 30。 39 【正确答案】 D 【试题解析】 顺序文件只能从头读写;二进制文件可以随机读写;文件在使用后应关闭,当程序结束时,应当把打开的文件关闭;用 fread()函数可以一次性地读取同类型的很多数据;在
34、C语言中指向各种文件的文件指针都是通过 FILE来定义的。 40 【正确答案】 D 【试题解析】 main()函数可以带参数,并且参数只能有两个,第一个参数 (arge)类型为整型用来记下命令行的参数个数,第二个参数 (argv)为一个字符型指针数组,其各个元素用来记下命令行各参数字符串的首地址。本题执行时, arge的值为 4,在循环中依次求出 algvl、 argv2和 argv3指向的字符串 (“abcd”、 “efg”和“10”)的长度,并把它 们加到变量 len中,得到 len的值 9。所以最后输出的 len值为 9。 41 【正确答案】 C 【试题解析】 函数 f()有 3个形式参
35、数 f1、 f2和 x,其中 f1、 f2是指向函数的指针变量。在 main()函数中执行了函数调用 “f(fa, fb, 2)”,从而使 f()的形式参数 f1指向了 fa,形式参数 f2指向了 fb,把实参 2传给了形参变量 x。函数 f()中的return语句相当于 “fb (2)-fa(2)”(fb(2)的返回值为 2*2*2=8, fa(2)返回值为 2*2=4)即 (8-4),值为 4。函数 f()执行后把 返回值 4赋给了 i,输出 i的值是 4。 42 【正确答案】 A 【试题解析】 本题中定义一个全局变量 a和一个局部变量 a。局部变量和全局变量的不同在于,局部变量的存储单元
36、都是在进入这些局部变量所在的函数体 (或复合语句 )时生成,退出其所在的函数体 (或复合语句 )时消失,而全局变量是在函数外部任意位置上定义的变量,它的作用域从变量定义的位置开始,到整个源文件结束为止。若全局变量和某一函数中的局部变量同名,则在该函数中,此全局变量被屏蔽,在该函数内,起作用的将是局部变量,与同名的全局变量不发生任何关系。 在程序 中首先定义了变量 s并赋值为 0,接着在嵌套的复合语句 中定义了变量 a并赋初值为 5,接着执行语句 s+=a+;在这条语句中 a加 1,但表达式 a+还是原来的值,故 s=s+5, s为 5,程序执行到外层,此时 内定义的变量 a不再有效,此时的变量
37、 a为 之前定义的且初值为 3,接着执行 后面的语句 s+=a+;相当于执行语句 s=s+(a+ +);即 s=5+3,最后值为 8,所以最后输出的 s值为 8。 43 【正确答案】 B 【试题解析】 本题中的函数 ss()有两个参数,一个是字符型指针变量 s;另一个是字符型变量 t。在函数中通过一个 while循环,在循环中一次取出 e指向的字符串并判断它是否和 t中存放的字符相同,若相等,则执行 “*s=t-a+A; ”(若是小写字母,则把它转换成大写字母 )语句。在主函数中执行函数调用 ss(strl, c),很显然是把 stfl数组中所有字符 “d”变成大写字母,其他字符不变。 44
38、【正确答案】 B 【试题解析】 程序中首先定义了一个结构体,其成员为一字符数组和一浮点型数组。在 main()首先定义了一个结构体数组并初始化。接下来在 for循环中遍历了结构体数组中的第一个元素中数 组成员即 20021“, 90, 95, 85”循环结果为90+95+85=270最后 sum为 270,又输出格式为 “%6.2fn”要求保留两位小数故最后输出为 270.00。 45 【正确答案】 C 【试题解析】 data是一结构体变量, a是它的成员,因此引用 a域的正确方法是: data a,取它的地址赋值给指针变量 P的语句应该是: p=&data a。选项A,将 a的地址直接赋给了
39、 p,而忽略了 a为结构体内部的一个成员,而不是一单独的变量;选项 B在 p=da- ta a表达式中右边为一个结构体变量的成员不是 地址,而左边为一指针应该将一地址赋给它;选项 D表达式 *p=data a是将结构体变量中的成员 a的值赋给指针 p所指向的变量值,而不是使指针 p指向 data中的a域。 46 【正确答案】 D 【试题解析】 主函数中首先定义了三个结构体指针变量 p, q, r。然后调用内存分配函数分别为其分配地址空间,程序中变量 q- num的值为 20,指针变量 q-next指向指针变量 r, r- num的值为 30,所以变量 q- next- num的值为 30,因此
40、,表达式 q- num+q- next- num的值为 20+30=50。 47 【正确答案】 B 【试题解析】 INTEGER是类型名,由它来间接定义 P和 *q的类型,因此, p是基类型为 int的指针变量, q是二级指针变量,它指向基类型是 int的指针变量。 48 【正确答案】 D 【试题解析】 将 a的值转换为二进制位: 00000011,再与 Ox8的二进制“00001000”位与,得到结果 “00001011”赋值给 b, b的值为 11,再将 b左移一位得到: 0001 0110,赋值给 c, c的值为 22,所以最后输出的 b, c的值位 11, 22。 49 【正确答案】
41、A 【试题解析】 本题首先定义两个字符型指针变量 p和 q,通过 malloc()函数申请 20个字符的存储空间,并把它的首地址赋给 p,再把 p的值赋给 q, p和 q指向同一个存储区。在 scanf()语句中读取字符串到 p和 q指向的字符串,先把 “abc”读取到 P指向的存储区中,第一个空格是结束标记,第二个空格是分隔符,再把 “def”存放到 q指向的存储区,把原先的内容覆盖。所以 p和 q指向的存储区中内容是“def”,所以最后输出为 def,def。 50 【正确答案】 C 【试题解析】 函数 stremp(字符串 1,字符串 2)作用是将 “字符串 1”和 “字符串 2”进行比较,如果 “字符串 1” “字符串 2”,返回一个大于 0的整数值;如果 “字符串 1” “字符串 2”,返回一个小于 0的整数值;如果 “字符串 1”=“字符串 2”,返