阅读以下说明和C程序代码,回答问题1至问题3,将答案填入答题纸的对应栏内。 【说明】 【程序1】是关于条件编译的一段程序示例; 【程序2】是一段switch语句应用示例。C语言要求switch之后圆括弧内的“表达式” 类型必须是整型或字符型

admin2017-11-27  55

问题 阅读以下说明和C程序代码,回答问题1至问题3,将答案填入答题纸的对应栏内。
【说明】
    【程序1】是关于条件编译的一段程序示例;
    【程序2】是一段switch语句应用示例。C语言要求switch之后圆括弧内的“表达式” 类型必须是整型或字符型。该程序代码中a与x的对应关系如表5-1所示。

    【程序3】是冒泡排序算法的实现。假设有N个数据存放在数组aa中,用冒泡排序将这N个数从小到大排序。首先,在aa[0]到aa[N-1]的范围内,依次比较两个相邻元素的值,若aa[j]>aa[j+1],则交换aa[j]与aa[j+1],j的值取0,1,2,…,N一2;经过这样一趟冒泡,就把这N个数中最大的数放到aa[N—1]中。接下来对aa[0]到aa[N一2]中的数再进行一趟冒泡,这样就将该范围内的最大值换到aa[N-2]中。依次进行下去,最多只要进行N-1趟冒泡,就可完成排序。如果在某趟冒泡过程中没有交换相邻的值,则说明排序已完成,可以提前结束处理。
【C程序代码l】
    #include
    #define_DEF_X
    main()
    {
       int x;
    #ifndef_DEF_X
       x=1;
    #else
       x=2;
    #endif
       printf(”x=%d\n”,  x);
   }
【C程序代码2】
    float a;
    int x;
    Scanf(”%d”,&a);
switch(  (int)a)
    {
      case 0:
      case 1:
      case 2:
        if(a>2)X=1;
        else  (1)  ;
        break;
    case 3:
       (2)
       break;
    case 4:
      (3)
      break;
    default:
       prinf(”a is error\r\n”);
    }
【C程序代码3】
    #include
    #define N 8
    main()
    {
      int I,j,aa[N],temp,swap;
      clrscr();
      for(i=0;i            scanf("%d”,(4));
    for(i=0;i    {
    swap=0;
    for(j=0;j<(5);j++)
    {
       if(aa[j]>aa[j+1])
       {
    swap=1;.
      temp=aa[j];
      aa[j]=aa[j+1];
      aa[j+1]=temp;
     }
  }
    if(  (6)  )  break;
    }
    for(i=0;  i        printf(”%d  ”,  aa);
    printf(”\n”);
    }
(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。
转载请注明原文地址:https://jikaoti.com/ti/h6I7FFFM
0

相关试题推荐
最新回复(0)