列表

详情


【说明】
【程序1】是关于条件编译的一段程序示例;
【程序2】是一段switch语句应用示例。C语言要求switch之后圆括弧内的“表达式”
类型必须是整型或字符型。该程序代码中a与x的对应关系如表5-1所示。


【程序3】是冒泡排序算法的实现。假设有N个数据存放在数组aa中,用冒泡排序将这N个数从小到大排序。首先,在aa[0]到aa[N-1]的范围内,依次比较两个相邻元素的值,若aa[j]>aa[j+l],则交换aa[j]与aa[j+l],j的值取0,1,2,…,N-2;经过这样一趟冒泡,就把这N个数中最大的数放到aa[N-l]中。接下来对aa[0]到aa[N-2]中的数再进行一趟冒泡,这样就将该范围内的最大值换到aa[N-2]中。依次进行下去,最多只要进行N-1趟冒泡,就可完成排序。如果在某趟冒泡过程中没有交换相邻的值,则说明排序已完成,可以提前结束处理。




【问题1】
(1)什么是C语言的条件编译?
(2)请解释#ifndef的作用。
(3)分析【C程序代码1】,写出该段执行后的输出结果。
【问题2】
完成【C程序代码2】中的(1)~(3)空,将答案写到答题纸相应的位置。
【问题3】
完成【C程序代码3】中的(4)~(6)空,将答案写到答题纸相应的位置。

参考答案:

【问题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)趟起泡。

上一题