参考答案:
【问题1】
(1)条件编译:C语言中提供控制编译器流程的语句。
或C源程序中希望对其中一部分内容只是在满足一定条件时才进行编译,形成目标代码,这种对一部分内容指定编译的条件称为条件编译。
(2)#ifndef的作用:如果后面的“宏名”未定义,则编译其体内的程序段;否则就编译#else部分的程序段,如果没有#else部分,则当“宏名”已定义时直接跳过 #endif。
(3)x=2
【问题2】
(1)x=3
(2)x=l
(3)x=2
【问题3】
(4)&aa[i]
(5)N-i-1
(6)!swap 或 swap==0
详细解析:
本题考查C语言编程方面的基础知识。
【问题1】考查条件编译的概念;【问题2】考查考生对switch语句的理解;【问题3】考查考生对排序算法程序的理解。
【问题1】
条件编译是指预处理器根据条件编译指令,有条件地选择源程序代码中的一部分代码作为输出,送给编译器进行编译。主要是为了有选择性地执行相应操作,防止宏替换内容(如文件等)的重复包含。
比如以下ifdef语句的功能就是:如果#ifdef后的宏名在此前已用#define语句定义,则编译程序段1;否则编译程序段2,则程序段 1 被选中,否则程序段 2 被选中。Ifndef跟ifdef刚好相反。另外就是#else是可以没有的。
#ifdef 宏名
程序段1
#else
程序段2
#endif
【问题2】
C语言中,switch语句是一种多分支选择语句,在实际应用中,要在多种情况中选择一种情况,执行某一部分语句。
switch语句的一般形式:
switch(整形表达式)
{
case 常量表达式1: 语句1;
case 常量表达式2: 语句2;
…
case 常量表达式n: 语句n;
default: 语句n+1;
}
使用说明如下:
(1)程序执行时,首先计算表达式的值,与case后面的常量表达式值比较,若相等就执行对应部分的语句块,执行完后利用break语句跳出switch分支语句。若表达式的值与所有的case后的常量表达式均不匹配,则执行default项对应的语句n+1,执行后跳出switch分支语句。
(2)case后面的常量表达式只能是整型、字符型或枚举型常量的一种;各case语句表达式的值各不相同,只起到一个标号作用,用于引导程序找到对应入口。
(3)这里的语句块可以是一条语句,或其他复合语句。语句块可以不用花括号“{}”。
(4)各个case语句并不是程序执行的终点,通常需要执行break语句来跳出switch分支语句;若某case语句的语句块被执行后,若其后没有break语句,则顺序执行其他case语句,直到遇到break语句或后面所有case语句全部执行完,再跳出switch分支语句。
(5)多个case可以共用一组执行语句块。
(6)各个case和default出现的先后次序,并不影响执行结果。
(7)default语句不是必须的,但建议加上作为默认情况处理项。
(8)switch语句仅做相等性检测,不能像if语句那样做关系表达式或逻辑表达式计算,进行逻辑真假判断。
【问题3】
所谓冒泡排序法,就是对一组数字进行从大到小或者从小到大排序的一种算法。具体方法是,相邻数值两两交换。从第一个数值开始,如果相邻两个数的排列顺序与我们的期望不同,则将两个数的位置进行交换(对调);如果其与我们的期望一致,则不用交换。重复这样的过程,一直到最后没有数值需要交换,则排序完成。一般地,如果有N个数需要排序,则需要进行(N-1)趟起泡。