1、国家二级( C语言)笔试模拟试卷 116及答案与解析 1 按照 “先进后出 ”原则组织数据的数据结构是 ( )。 ( A)队列 ( B)栈 ( C)双向链表 ( D)二叉树 2 常采用的两种存储结构是 ( )。 ( A)顺序存储结构和链式存储结构 ( B)散列方法和索引方式 ( C)链表存储结构和数组 ( D)线性存储结构和非线性存储结构 3 树是结点的集合,它的根结点的数目是 ( )。 ( A)有且只有 1个 ( B) 1或多于 1 ( C) 0或 1 ( D)至少有 2个 4 己知一个有序线性表 为 (13, 18, 24, 35, 47, 50, 62, 83, 96, 115, 134
2、),当用二分法查找值为 90的元素时,查找成功的比较次数为 ( )。 ( A) 1 ( B) 2 ( C) 3 ( D) 9 5 结构化程序设计主要强调的是 ( )。 ( A)程序的规模 ( B)程序的效率 ( C)程序设计语言的先进性 ( D)程序的易读性 6 结构化程序设计的核心和基础是 ( )。 ( A)结构化分析方法 ( B)结构化设计方法 ( C)结构化设计理论 ( D)结构化编程方法 7 在面向对象方法中, ( )描述的是具有相似属性与操作的一组对象。 ( A)属性 ( B)事件 ( C)方法 ( D)类 8 需求分析阶段的任务是 ( )。 ( A)软件开发方法 ( B)软件开发工
3、具 ( C)软件开发费用 ( D)软件系统功能 9 有下列二叉树,对此二叉树前序遍历的结果为 ( )。( A) ACFXDBEYZ ( B) ABEFXYZCD ( C) ABCDEFXYZ ( D) ABDYECFXZ 10 设只是一个二元关系, S是一个三元关系,则下列运算中正确的是 ( )。 ( A) R-S ( B) RXS ( C) RS ( D) R S 11 C语言可执行程序的开始执行点是 ( )。 ( A)包含文件中的第一个函数 ( B)程序中第一个函数 ( C)程序中的 main()函数 ( D)程序中第一条语句 12 可以在 C语言程序中用做用户标识符的一组标识符是 ( )
4、。 ( A) void ( B) aa 123 _abc BBN cas ( C) as+b3 ( D) 6f -123 Do If SIG 13 下列正确的实型常量是 ( )。 ( A) E3.4 ( B) -12345 ( C) 2.2e0.8 ( D) 4 14 下列表达式中,可以正确表示 x0或 x1的关系是 ( )。 ( A) (x =1)(x =0) ( B) x 1x=0 ( C) x =1 OR x =0 ( D) x =1 ,则表达式 a%=(b%2)运算后, a的值为 ( )。 ( A) 0 ( B) 1 ( C) 11 ( D) 3 16 已知 i、 j、 k为 int型
5、变量,若要从键盘输入 2、 3、 4 CR,使 i、 j、 k的值分别为 2、 3、 4,下列正确的输入语句是 ( )。 ( A) scanf(“%3d,%3d,%3d“, ( B) scanf(“%d,%d,%d“, ( C) scanf(“%d%d%d“, ( D) scanf(“i=%d,j=%d,k=%d“, 17 下列程序的输出结果是 ( )。 main() int p8=11,12,13,14,15,16,17,18,i=0,j=0; while(i+ + 7) if(pi%2)j+ =pi; printf(“%dn“,j); ( A) 42 ( B) 45 ( C) 56 ( D
6、) 60 18 若有下列定义 (设 int类型变量占 2个字节 ): int i=8,j=9; 则下列语句: printf(“i=%u,j=%xn“,i,j); 输出的结果是 ( )。 ( A) i=8,j=9 ( B) 8.9 ( C) 8 9 ( D) i=8,j=8 19 设有定义: int k=1,m=2;float f=7;则下列选项中错误的表达式是 ( )。 ( A) k=k =k ( B) -k+ ( C) k%int(f) ( D) k =f =m 20 若执行下列程序时从键盘上输入 2,则输出结果是 ( )。 #include stdio.h main() int a; sc
7、anf(“%d“, if(a+ 3) printf(“%dn“,a); else printf(“%dn“,a-); ( A) 1 ( B) 3 ( C) 2 ( D) 4 21 下列程序的输出结果是 ( )。 main() int i=1,j=2, k=3; if(i+=1 ( A) 19 ( B) 18 ( C) 6 ( D) 8 23 在 C语言中, while和 dowhile 循环的主要区别是 ( )。 ( A) dowhile 的循环体不能是复合语句 ( B) dowhile 允许从循环体外转到循环体内 ( C) while的循环体至少被执行一次 ( D) dowhile 的循环体
8、至少被执行一次 24 若各选项中所用变量已正确定义, fun()函数中通过 return语句返回一个函数值,下列选项中错误的程序是 ( )。 ( A) main( ) x=fun(2, 10); float fun(int a,int b) ( B) float fun(int a,int b) main( ) x fun(i,j); ( C) float fun(int, int); main( ) x=fun(2,10); float fun(int a, int b) ( D) main( ) float fun(int i,int j); x=fun(i,j); f loat fun(
9、int a, int b) 25 判断 char型变量 c1是否为小写字母的正确表达式为 ( ) ( A) a =c 1 =z ( B) (c1 =a)|(c1 =z) ( C) (a= c1|(z =c1) ( D) (c1 =a) while(-k) printf(“%d“, k-=3); printf(“n“); 执行后的输出结果是 ( )。 ( A) 1 ( B) 2 ( C) 4 ( D)死循环 27 若函数调用时,参数为基本数据类型的变量,下列叙述中正确的是 ( )。 ( A)实参与其对应的形参共占存储单元 ( B)只有当实参与其对应的形参同名时才共占存储单元 ( C)实参与其对应
10、的形参分别占用不同的存储单元 ( D)实参将数据传递给形参后,立即释放原先占用的存储单元 28 在 C语言程序中,下列说法正确的是 ( )。 ( A)函数的定义和函数的调用均可以嵌套 ( B) 函数的定义不可以嵌套,但函数的调用可以嵌套 ( C)函数的定义可以嵌套,但函数的调用不可以嵌套 ( D)函数的定义和函数的调用均不可以嵌套 29 下列说法中不正确的是 ( )。 ( A)指针是一个变量 ( B)指针中存放的是数值 ( C)指针可以进行加、减等算术运算 ( D)指针变量占用存储空间 30 若有定义和语句: int*pp,*p, a=20,b=1O; pp= p= p= printf (“%
11、d, %dn“, *p, *pp); 则输出结果是 ( )。 ( A) 20, 10 ( B) 20,20 ( C) 10,20 ( D) 10,10 31 下列二维数组的说明中,不正确的是 ( )。 ( A) float a4=0,1,8,5,9; ( B) int a34 ( C) #define N 5 float aN3 ( D) int a29.5; 32 若有定义: “int a23; “则对 a数组的第 i行第 j列元素的正确引用为 ( )。 ( A) *(*(a+i) j) ( B) (a+i)j ( C) *(a+i+j) ( D) * (a+i) +j 33 下列能正确进行
12、字符串赋值的是 ( )。 ( A) char s5=“ABCDE“; ( B) char s5=A, B, C, D, E; ( C) char*s; s=“ABCDE“; ( D) char*s; printf(“%s“, s); 34 若有说明 char s130=“abc“,s2=“defghi“;,则在使用函数 strcat(s1,s2)后,结果是 ( )。 ( A) s1的内容更新为 abcdefgi ( B) s1的内容更新为 defghi0 ( C) s1的内容更新为 defghiabc0 ( D) s1的内容更新为 abcdefghi0 35 设有变量说明 int(*p)m,其
13、中的标识符 p是 ( )。 ( A) m个指向整型变量的指针 ( B)指向 m个整型变量的指针 ( C)一个指向具有 m个整型元素的一维数组的指针 ( D)具有 m个指针元素的一维指针数组,每个元素都指向整型变量 36 下列描述中正确的是 ( )。 ( A)在 C语言程序中预处理是指完 成宏替换和文件包含指定的文件的调用 ( B)预处理指令只能位于 C源程序文件的首部 ( C)预处理命令可以放在程序中的任何位置 ( D)预处理命令结尾需要加分号 37 若有结构体定义: struct stuint num; char sex; int age; a1,a2; 则下列语句中错误的是 ( )。 (
14、A) printf(“%d, %c, %d“, a1); ( B) a2.age=a1.age; ( C) a1.age+; ( D) a1.num=5; 38 C语言结构体类型变量在程序执行期间 ( )。 ( A)所有成员一直驻留在内存中 ( B)没有成员驻留在内存中 ( C)部分成员驻留在内存中 ( D)只有一个成员驻留在内存中 39 在位运算中,操作数每右移两位,其结果相当于 ( )。 ( A)操作数乘以 2 ( B)操作数除以 2 ( C)操作数除以 4 ( D)操作数乘以 4 40 在 “文件包含 ”预处理语句的使用形式中,当 #include后面的文件名用 “(双撇号 )括起时,寻
15、找被包含文件的方式是 ( )。 ( A)直接按系统设定的标准方式搜索目录 ( B)先在源程序所在的目录搜索,如没找到,再按系统设定的标准方式搜索 ( C)仅仅搜索源程序所在目录 ( D)仅仅搜索当前目录 41 数据结构分为逻辑结构和存储结构,循环队列属于 _结构。 42 队列是限定在表的一端进行插入和在另一端进行删除操作的线性表。允许插入的一端称作。 43 在一个容量为 32的循环队列中,若头指针 front=3,尾指针 rear=2,则该循环队列中共有 _个元素。 44 一棵二叉树第 6层 (根结点为 第一层 )的结点最多为 _个。 45 度为 10的线性表进行冒泡排序,最坏情况下需要比较的
16、次数为 _。 46 若 x和 y都是 double型变量,且 x的初值为 3.0, y的初值为 2.0,则表达式pow(y,fabs(x)的值为【 】。 47 设有 chara.b;,若要通过 a main() int a=7, b=5; printf(“%dn“,fun(a,B) /m); 49 下列程序执行后输出的结果是【 】。 main() int arr10, i, k=0; for(i=0; i 10; i+)arri=i; for(i=1; i 4; i+) k+=arri+i; printf(“%dn“,k); 50 下面程序有两个 printf语句,如果第一个 printf语句
17、输出的是 194,则第二个printf语句的输出结果是【 】。 main() int a10=1,2,3,4, 5,6,7,8, 9, 0, *p; p=a; printf(“%xn“,p); printf(“%x“,p+9); 51 函数 delete(s,i,n)的作用是从字符串 s中删除从第 i个字符开始的 n个字符,请填空。 void delete(char s, int i, int n) int j,k,length=0; while(slength) 【 】; -i; j=i; If(【 】 ) k=i+n; if(i+n =length) while(k length) sj+
18、=sk+; sj=0; 52 下述函数统计 个字符串中的单词个数,单词是指处在空格之间的字符序列,请填空。 int word(char*s) int num=0,flag=0; while(*s) if(【 】 =) flag=0; else if(【 】 )flag=1; num+ return 【 】 ; 国家二级( C语言)笔试模拟试卷 116答案与解析 1 【正确答案】 B 【试题解析】 栈是一种特殊的线性表,其插入和删除运算都只在线性表的一端进行,而另 端是封闭的。进行插入、删除的 端称为栈顶,封闭的一端称为栈底。栈顶元素是最后被插入的元素,也是最后被删除的,是按先进后出的原则组织数
19、据的。 2 【正确答案】 A 【试题解析】 线性表的存储通常要用两种存储结构:顺序存储结构和链式存储结构。 3 【正确答案】 C 【试题解析】 树具有明显的层次关系,即树是一种层次结构。在树结构中,根结点在第一层上。当树为非空时,树中有且只有一个根结点,当树为空时,树中根结点的数目为 0。 4 【正确答案】 B 【试题解析】 根据二分法查找需要两次: 首先将 90与表中间的元素 50进行比较,由于 90大于 50,所以在线性表的后半部分查找。 第二次比较的元素是后半部分的中间元素,即 90,这时两者相等,即查找成功。 5 【正确答案】 D 【试题解析】 程序不光是编写完就结束了,为了测试和维护
20、程序,往往还有其他人阅读和 跟踪程序,因此程序设计的风格应该强调简单和清晰,即程序的易读性, “清晰第一,效率第二 ”。 6 【正确答案】 C 【试题解析】 结构化程序设计的核心和基础是结构化设计理论,其中包括:结构化分析方法、结构化设计方法和结构化编程方法。 7 【正确答案】 D 【试题解析】 类 (class)描述的是具有相似属性与操作的一组对象,而一个具体对象则是其对应类的一个实例。 8 【正确答案】 D 【试题解析】 需求分析是软件定义时期的最后一个阶段,它的基本任务就是详细调查现实世界要处理的对 象,充分了解原系统的工作概况,明确用户的各种需求,然后在这些基础上确定新系统的功能。 9
21、 【正确答案】 D 【试题解析】 对二叉树的前序遍历是指:先访问根结点,然后访问左子树,最后访问右子树,并且,在访问左、右子树时,先访问根结点,再依次访问其左、右子树。记住 3种遍历的顺序: 前序,访问根一按前序遍历左子树一按前序遍历右子树; 中序,按中序遍历左子树一访问根一按中序遍历右子树; 后序,按后序遍历左子树 按后序遍历右子树 访问根 10 【正确答案】 B 【试题解析】 关系的交 ()、并 ( )和差 (-)运算要求两个关系是同元的,显然作为二元的 R和三元 S只能做笛卡尔积运算。 11 【正确答案】 C 【试题解析】 每个 C程序有且只有一个主函数 main(),且程序必须从 ma
22、in函数开始执行,并在 main()函数中结束。 12 【正确答案】 B 【试题解析】 C语言规定,标识符是由字母、数字或下画线组成,并且它的第一个字符必须是字母或者下画线。 13 【正确答案】 B 【试题解析】 实型常量有两种书写形式。 小数形式,它由符号、整数部分、小数点及小数部分组成: 指数形式,由十进制小数形式加上指数部分组成,其形式为:十进制小数 e指数或十进制小数 E指数。 注: e或 E后面的指数必须是整数,并且在 e或 E的前面必须有数字。本题中,选项 A)中 E的前面没有数字,因此错误。选项 C)中 0.8不是整数,因此错误。选项 D)中 4是整型常量而不是实型常量。 14
23、【正确答案】 A 【试题解析】 题中要求 x的取值是小于等于 0或者大于等于 1,这说明表达式是或的关系,所以在写成 C语言表达式应是逻辑或的关系,逻辑或运算符是 “”。 15 【正确答案】 A 【试题解析】 本题考查 “%”运算符的使用。运算符 “%”要求两个运算对象都为整型,其结果是整数除法的余数。本题中表达式 a%=(b%2)等价于a=a%(b%2)=5%(7%2)=5%1=0。 16 【正确答案】 B 【试题解析】 函数 scanf()的调用形式是: scanf(格式字符串,输入项地址表 )。其中, “格式字符串 ”是要输入的变量的格式符: “输入项地址表 ”是要输入的变量的地址。若在
24、格式符中插入了其他字符,则在输入时要求按一一对应的位置原样输入这些字符,其中的逗号也必须输入。 17 【正确答案】 B 【试题解析】 在 C语言中,数组的下标默认为 0,因此数组 p的下标范围为:0 7。程序循环过程为:第 1次循环 i=0,执行循环,并且 i自加,得 i=1,因此pi为 p1=12,12%2=0,不执行后面的语句;接着进行第 2次循环,此时 i=1,小于 7执行循环,并且 i自加,得 i=2,因此 pi为 p2=13,13%2=1,执行后面的语句;这样一直到退出循环。最后 j的值为 j=13+15+17=45。 18 【正确答案】 A 【试题解析】 本题考查函数 printf
25、()的格式。 “%x”表示以十六进制输出 整型数据; “%u”表示以十进制无符号型输出整型数据。 printf函数中格式说明符之前插入的任何字符都原样输出。 19 【正确答案】 C 【试题解析】 在 C语言中,求余运算符 “%”两边的运算对象都应为整型数据,所以需要对变量 f进行强制类型转换,正确的写法为 k%(int)f。在 C语言中,逻辑运算符与赋值运算符、算术运算符、关系运算符之间从高到低的运算优先次序是: !(逻辑 “非 ”)、算术运算符、关系运算符、 &(逻辑 “与 ”)、 (逻辑 “或 ”)、赋值运算符。根据运算符的优先级与结合性,对于选项 A),先计 算 k =k的值 (为真,即
26、 1),再用 1对 k进行赋值。对于选取项 B),先计算 k+的值,再对其取负数。对于选项 D),先计算 k =f的值 (为假,即 0),再用 0与 m进行比较,故最终结果为 0。 20 【正确答案】 B 【试题解析】 本题考查 if else语句。程序中首先使用函数 scanf()通过键盘读入 a的值,并通过第 1个 if语句,先判断条件,取 a的值 2和 3比较,然后将 a的值加 1,发现条件成立,执行下列的 printf语句,输出 a的值 3。 21 【正确答案】 D 【试题解析】 本题考查自增运算符 “+”,逻辑与运算符 “&”和逻辑或运算符“|”。自增运算符 “+”,出现在变量之前
27、(如题中的 +n),表示先使变量的值加 1,再使用变量的值进行运算:出现在变量之后 (如题中的 n+),表示先使用变量的值进行运算,再使变量的值加 1。当逻辑与运算符 “&”两边的运算对象都为真时,逻辑表达式的值才为真;当逻辑或运算符 “|”左边的运算对象为真时,其值就为真,不用计算其右边的运算对象的值。所以根据运算符的优先级,题中应先计算内层括号中的值。 +j是先自加后运算,因此运算时 j的值等于 3,所以表达式+j=3成立 ,即表达式的值为 1;由于 1与任何数都为进行或 (|)运算,结果都为1,因此 k=3;最后计算 “&”之前的表达式, i+是先运算后自加,因此运算时 i为 1,所以
28、i+=1成立,自加 1后 i=2。 if语句的条件为真即 “1”,所以输出 i、j、 k的值分别是 2, 3, 3。 22 【正确答案】 A 【试题解析】 本题考查 switch语句。当 i=1时,执行 case 1,因为没有遇到break语句,所以依次往下运行, a=a+2=2, a=a+3=5;当 i=2时,执行 case 2,因为没有遇到 break语句, 所以依次柱下运行, a=a+2=7, a=a+3=10:当 i=3时,执行 case 3, a=a+1=11,因为没有遇到 break语句,所以依次往下运行,a=a+2=13, a=a+3=16;当 i=4时,执行 default,
29、a=a+3=19,结束循环。 23 【正确答案】 D 【试题解析】 本题考查 while和 dowhile 循环的区别。 while循环的控制出现在循环体之前,只有当 while后面的表达式的值为非零时,才可能执行循环体;在dowhile 构成的循环体中,总是先执行一次循环体,然后再求表 达式的值,因此无论表达式的值是否为零,循环体至少要被执行一次。 24 【正确答案】 A 【试题解析】 C语言规定,函数必须先定义,后调用 (函数的返回值类型为 int或char时除外 )。在选项 A)中,调用的子函数在调用后面定义,所以不正确。在选项B)、 C)中,被调用函数在主调函数之前定义,再在主函数中调
30、用,所以是正确的;在选项 D)中,在主调函数中先对子函数 float fun(int i,int j)进行了定义,然后进行调用。 25 【正确答案】 D 【试题解析】 C语言规定,字符常量在程序 中要用单引号括起来。判断 c1是否为小写字母的充要条件 c1 =a,和 c1 =z,用逻辑与 (&)来表示。 A选项的这种形式在 C语言中没有,所以选项 D)正确。 26 【正确答案】 A 【试题解析】 在程序语句中, k的初始值为 5,进行第 1次 while循环后, k自减1为 4,非 0,执行循环体里的 printf语句,输出 1,此时 k的值变为 1。程序执行第 2次循环时, k自减 1变为
31、0,为假,退出 while循环语句。所以程序的最后结果为 1。 27 【正确答案】 C 【试题解析】 本题考查函数调用时的 参数传递。函数的形参是函数定义时由用户定义的形式上的变量,实参是函数调用时,主调函数为被调函数提供的原始数据。在函数调用时,实参和其所对应的形参分别占用不同的存储单元,彼此之间不影响。 28 【正确答案】 B 【试题解析】 本题考查函数调用的基本概念。因为函数的结果是个未知量,而函数定义时不能使用未知量,所以函数定义不可以嵌套,但函数的调用可以嵌套。 29 【正确答案】 B 【试题解析】 指针中存放的是变量的地址,指针也可以进行增减运算,这时指针移动的最小单位是一个存储单
32、元,而不是一 个字节。 30 【正确答案】 D 【试题解析】 本题考查指针变量的赋值。 *pp是定义了一个指向指针的指针变量,语句 pp=&p的意思是将 pp指向指针 p, *p和 *pp都足指针 p所指的内存空间的内容,即 b的值。 31 【正确答案】 D 【试题解析】 C语言规定,对于二维数组,只可以省略第一个方括号中的常量表达式,而不能省略第二个方括号中的常量表达式:二维数组的一般定义格式是:类型说明符数组名 常量表达式 常量表达式 。 32 【正确答案】 A 【试题解析】 本题考查如何通 过地址来引用数组元素。通过地址来引用数组元素的方法有下列 5种: aij; *(ai+j); *(
33、*(a+i)+j); *(aij; *(&a00+3*i+j)。 33 【正确答案】 C 【试题解析】 字符串存储要有结束符 “0”且要占用一个空间,选项 A)、 B的空间不够; printf用来输出字符,不能输入字符串。 34 【正确答案】 D 【试题解析】 streat(s1, s2)是把 s2字符串连接到 s1字符串的末尾,要保证 s1能容纳下连接后的字符串。 35 【正确答案】 C 【试题解析】 本题考查指向数组的指针变量的声明。这里的 p表示一个指向数组的指针: *p表示指针 p指向地址的内容。 36 【正确答案】 C 【试题解析】 本题考查预处理命令的特点,编译预处理命令的特点:
34、为了区别一般的语句,预处理命令行都必须以 “#”号开始,结尾不加分号; 预处理命令可以放在程序中的任何位置; 在程序中凡是以 “#”号开始的语句行都是预处理命令行。 37 【正确答案】 A 【试题解析】 题中 a1和 a2两个结构体变量名所对应的成员相同,可以与运算“+”相结合。结构体变量的输出格式为: printf(“要输出变量名: %dt”,结构变量名要输出的成员变量名 )。 38 【正确答案】 A 【试题解析】 c语言结构体类型变量在程序执行期间所有成员一直驻留在内存中。 39 【正确答案】 C 【试题解析】 在位运算中,操作数每右移两位,相当于在操作数的左侧添 0,最右面的两位被移出,
35、即操作数除以 4。 40 【正确答案】 B 【试题解析】 本题考查库函数调用的知识点。格式 1: #include (文件名 ),预处理程序在标准目录下 查找指定的文件;格式 2; #include“文件名 ”,预处理程序首先在引用被包含文件的源文件所在的目录下搜索指定的文件,如没找到,再按系统指定的标准目录搜索。 41 【正确答案】 逻辑 【试题解析】 数据的逻辑结构主要是反映数据之间的逻辑关系,而存储结构是用来反映数据的逻辑结构在计算机存储空间中的存放形式。循环队列主要是强调数据之间的关系,因此属于逻辑结构。 42 【正确答案】 队尾 【试题解析】 在队列中,允许插入的一端叫做 “队尾 ”
36、,允许删除的一端叫做 “队头 ”。 43 【正确答 案】 31 【试题解析】 设队列容量为 m,如果: rear front,则队列中元素个数为 rear-front:如果 rear front,则队列中元素个数为 m+(rear-front)。本题 rearfront,则 m=32+(2-3)=31。 44 【正确答案】 32 【试题解析】 二叉树第 k层上,最多有 2k-1(k1)个结点。第 6层的结点数最多是 26-1=32。注意区别 “二叉树的结点最多数 ”和 “某一层的结点最多数 ”。前者的计算是深度为 m的二叉树最多有 2m-1个结点。 45 【正确答 案】 45 【试题解析】 对
37、于长度为 N的线性表,在最坏情况下 (即线性表中元素现在的顺序与目标顺序正好相反 ),冒泡排序需要经过 N/2遍的从前往后的扫描和 N/2遍的从后往前的扫描,需要的比较次数为 N(N-1)/2。 46 【正确答案】 8 【试题解析】 fabs函数功能是求 x的绝对值,计算结果为 double型。 pow功能是计算 x的 y次方的值,计算结果同样为 double型。所以本题表达式相当于 2.0的 3.0次方,结果为 8.000000。 47 【正确答案】 10000010 【试题解 析】 运算 “&”的规则只有当两个相应的二进制位都为 1时,该位的结果才为 1。要保留第 2、 8位,只要将其与二
38、进制数 10000010相与。 48 【正确答案】 2 【试题解析】 本题变量 m既是外部变量 (值是 13),又是 fun函数的局部变量 (值为 3)。函数 fun(x*y-m)的值为 7*5-3=32,在 main函数中, fun(a,b)/m中的 m应取外部变量的值 13,因此输出 2。 49 【正确答案】 12 【试题解析】 本题的第一个 for循环用于给数组 arr赋初值,第二个 for循环用于求和运算。 由于第二个 for循环初始值为 1,而循环条件为 i 4,所以求的是arr1到 arr3及 i的和,所以输出结果为 12。 50 【正确答案】 1a6 【试题解析】 对于指针变量的
39、运算,就是对地址的运算。本题中由于指针指向的是整型变量,所以,使指针变量移动 9个位置也就是移动 18个字节。注意,本题是以十六进制输出的。 51 【正确答案】 length+ i length 【试题解析】 第一个循环权有可能是计算串的长度,在 i =length时字符才被删除,被删除的是从第 i个到第 i+n或最后 一个问的所有字符。删除前,应判断 i=length。由于已经进行了 -i运算,故实际应填入 i length。 52 【正确答案】 *s+ flag=0或 *(s-1)= num 【试题解析】 在统计字符串单词个数的算法中,本题的 flag是为了记录一个单词是否结束。第 13空应填 *s+;如果某个字符不是空格,则必须判断它是否是单词,如是,则使得 flag的标志为 1, num的值加 1。本题判断方法是:先判断 s所指向的字符是否为空格,如果是则使得 flag=0,否则判断前一个字符是否是空格,如果是则说明 这个串符是一个单词的开始,将 flag标志为 1, num的值加 1,如果不是,则不必记录。故第 14空应填 flag=0或 *(s-1)=;最后 个空格需填写的是返回的单词的个数,即 num。