独家首发:名师解析2008二级C之填空题

技术与开发

选择题已经解析完了,本期我们开始解析填空题。下面孙顾天老师挑选出难易不同的五道填空题进行解析,这些题你都做对了吗?如果你想知道所有的填空题答案,请到http://www.cpcw.com/bzsoft下载。

第2题:深度为5的满二叉树有【 】个叶子结点。

本题难度:简单

涉及知识点:满二叉树性质运算

名师解析:本题考核的内容是历年必考的二叉树运算,在满二叉树中第k层上有2k-1个结点。题中,深度为5即表示树一共有5层,叶子结点所在层就是第5层。

第7题:设变量已正确定义为整型,则表达式n=i=2,++i,i++的值为【 】 。

本题难度:中等

涉及知识点:表达式运算

名师解析:题中表达式为赋值、逗号、自增运算的组合,在解题中要注意执行的顺序:逗号表达式优先级最低,从左至右依次执行,表达式的值即为最后一个表达式的值;赋值表达式是由右至左运算。

故本题的表达式为(n=i=2),++i,i++;,整个表达式的值为i++表达式的值。第一个表达式得出n与i的值均为2,第二个表达式得出i的值为3,第三个表达式得出i的值为4,但i++的值为3。

第8题:若有定义:int k;,以下程序段的输出结果是【 】 。

for(k=2;k<6;k++,k++) printf("##%d",k);

本题难度:中等

涉及知识点:for循环控制语句执行、printf函数

名师解析:本题的关键在于for语句中表达式3为逗号表达式(k++,k++),其功能为k=k+2。所以,此循环执行次数为2次(k=2,k=4时执行)。printf("##%d",k)输出格式为"##数值"。

第10题:以下程序的输出结果是【 】。

#include <stdio.h>

void swap(int *a,int *b)

{

int *t;

t=a;a=b;b=t;

}

main( )

{

int i=3,j=5,*p=&i,*q=&j;

swap(p,q); printf("%d %d\n",*p,*q);

}

本题难度:难

涉及知识点:指针、交换算法

名师解析:本题以指针的概念来考核基本算法——交换,这里需要指出的是指针变量在交换时有二种状态:物理交换(所指向变量中的值进行交换)、逻辑交换(只对指向进行改变)。

题中代码(t=a;a=b;b=t;)所进行的是逻辑交换,在swap函数调用结束后,交换就没有意义了。i,j的值没有改变,甚至p,q的指向也没有改变。swap函数所使用的参数只是指针变量,而并非指向变量的指针变量,所以不会影响main()中的p,q的值。

第13题:以下程序中函数fun的功能是:统计person所指结构体数组中所有性别(sex)为M的记录的个数,存入变量n中,并作为函数值返回。

#include <stdio.h>

#define N 3

typedef struct

{ int num; char nam[10]; char sex;}SS;

int fun(SS person[ ])

{

int i,n=0;

for(i=0;i

if(【】=='M') n++;

return n;

}

main( )

{SS W[N]={{1,"AA",'F'},{2,"BB",'M'},{3,"CC",'M'}};

int n;

n=fun(W); printf("n=%d\n",n);

}

本题难度:较难

涉及知识点:结构体

名师解析:本题主要考核结构体数组中元素变量成员的引用。结构体类型变量的成员是分别进行指定操作的,即结构体变量.成员名。试题代码中,main()中对W数组进行初始化(出现三个元素,每个元素的各成员赋予不同的值)。

fun()的功能是统计数组中sex成员变量值为M的个数,代码中的for语句实现对SS结构体类型数组person所对应的W数组的元素遍历,内层的if语句是对每个元素的sex成员变量值的判断。

第2题答案:32

第7题答案:3

第8题答案:##2##4

第10题答案:3 5

第13题答案:person[i].sex