问答题
阅读以下说明和C程序代码,回答问题1至问题3,将答案填入答题纸的对应栏内。
【说明】
【程序1】是关于条件编译的一段程序示例;
【程序2】是一段switch语句应用示例。C语言要求switch之后圆括弧内的“表达式” 类型必须是整型或字符型。该程序代码中a与x的对应关系如表5-1所示。
问答题
(1)什么是C语言的条件编译? (2)请解释#ifndef的作用。 (3)分析【C程序代码1】,写出该段执行后的输出结果。
【正确答案】正确答案:(1)条件编译:C语言中提供控制编译器流程的语句。 或C源程序中希望对其中一部分内容只是在满足一定条件时才进行编译,形成目标代码,这种对一部分内容指定编译的条件称为条件编译。 (2)#ifndef的作用:如果#ifndef后面的“宏名”未定义,则编译其体内的程序段;否则编译#else部分的程序段,如果没有#else部分,则当“宏名”已定义时直接跳过#endif。 (3)x=2
【答案解析】解析:C语言中提供控制编译器流程的语句为条件编译语句,在一般情况下,C源程序中所有的行都参加编译过程,但有时出于对程序代码优化的考虑,希望对其中一部分内容只是在满足一定条件时才进行编译,形成目标代码,这种对一部分内容指定编译的条件称为条件编译。 下面是关于#ifdef语句的使用规则: #ifdef 宏名 程序段1; #else 程序段2; #endif 或者 #ifdef 宏名 程序段: #endif 该语句的作用是,如果#ifdef后面的“宏名”在此前已用#define语句定义,则编译“程序段1”或“程序段”;否则编译“程序段2”。如果没有#else部分,则当“宏名”未定义时直接跳过#endif。 下面是关于#ifndef语句的使用规则: #ifndef 宏名 程序段1; #else 程序段2; #endif 或者 #ifndef 宏名 程序段; #endif #ifndef语句的功能与#ifdef语句的功能正好相反,如果#ifndef后面的“宏名”未定义,则编译“程序段1”或“程序段”;否则编译“程序段2”。如果没有#else部分,则当“宏名”已定义时直接跳过#endif。 在【C程序代码1】中,由于在执行条件编译语句时,x已定义,所以,执行x=2;语句。最终程序执行结果为:x=2。
问答题
完成【C程序代码2】中的(1)~(3)空,将答案写到答题纸相应的位置。
【正确答案】正确答案:(1)x=3 (2)x=1 (3)x=2
【答案解析】解析:在C语言中,选择结构的作用是根据所给的条件是否满足,决定从给定的两个或多个分支中,选择其中的一个分支来执行。C语言中有两种选择结构语句,if语句和switch语句。使用if语句的嵌套结构实现多分支选择功能时,程序的结构显得不够清晰。因此,C语言专门提供了switch语句。 switch语句的一般形式如下: switch(表达式) { case常量表达式1;语句1;break; case常量表达式2;语句2; break; case常量表达式n;语句n;break; Default: 语句n+1; break; } 在使用switch语句时有以下要求: 1.switch语句后面圆括号内的“表达式”的值和case后面的“常量表达式”的值,都必须是整型或字符型的,不允许是实数。 2.在case后的各常量表达式的值不能相同,否则会出现错误。 在本题中变量a是实数,所以在switch语句要进行转换:switch((int)a)。根据题意,a取整后的值为0、1、2时,0≤a<3。按照表5-1,当a>2时,x=1;当a<2,x=3:所以,第一问为x=3; a取整后的值为3时,3≤a<4。所以,第二问为x=1; a取整后的值为4时,4≤a<5。所以,第三问为x=2。
问答题
完成【C程序代码3】中的(4)~(6)空,将答案写到答题纸相应的位置。
【正确答案】正确答案:(4)&aa[i] (5)N-i-1 (6)!swap或swap=0
【答案解析】解析:本题为冒泡排序算法的一种程序实现,其算法的实现方法在【程序3】已经讲的很清楚。程序是对规模为8的一组数进行用冒泡排序从小到大排序,首先要求输入这8个数,存入数组aa中,使用“scanf("%d",&aa[i]);”在冒泡排序算法开始执行后,用for循环语句来控制排序趟数和每一趟的结束位置,语句应为“for([j=0;j