SEx2p参考代码

选择题

2-5 定义带参数的宏“#define JH(a,b,t) t = a; a = b; b = t”,对两个参数a、b的值进行交换,下列表述中正确的是()。

  • A. 不定义参数a和b将导致编译错误
  • B. 不定义参数a、b、t将导致编译错误
    解析:编译器不会检查宏参有没有定义,因此无论是否定义a、b、t都不导致编译错误
  • C. 不定义参数t将导致运行错误
    解析:无论是否定义a、b、t都不导致编译错误。但是,不定义参数t将导致运行错误,因为交换两个数值需要一个变量来过度
  • D. 不需要定义参数a、b、t类型
  • 解析:宏里的参数不是变量,只是简单的替换,不需要定义类型。但是宏参只是达到替换的作用,不能定义它的类型,如果不定义,虽然不会导致编译错误,但是会出现运行错误

2-7 下面说法中正确的()

  • A. 若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度
    解析:变量分为全局变量和局部变量。局部变量和形参的作用域是函数内部,全局变量的作用域是整个文件。但可以通过声明一个extern的全局变量拓展全局变量的作用域,也可以通过定义一个static的全局变量限制这种拓展。
  • B. 若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度
    解析:如果全局变量仅仅由单个函数访问,不存在耦合度的问题
  • C. 设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑变量生命周期问题
    解析:动态全局变量、静态全局变量、静态局部变量的生命周期都为程序运行期间,其中静态局部变量的生存周期虽然为整个源程序,但是其作用域仍然与局部变量相同,当退出函数是,该变量还存在,但是不能使用。
  • D. 静态全局变量使用过多,可那会导致动态存储区(堆栈)溢出
    解析:局变量和静态变量都是存储在静态存储区,所以在递归调用是不会压栈,也不会造成堆栈溢出。

函数题

6-1 数组指针与二维数组的关系

利用数组指针p将main函数中输入的二维数组a的所有元素输出, 要求先按行的顺序输出,然后再以列的顺序输出, 其中输出整型格式用 “%3d”, (测试用数据大小不要超过2位数)。

参考代码:

void reOut(int (*p)[3]) {
  int i, j;
  for (i = 0; i < 2; i++) {
    for (j = 0; j < 3; j++)
		printf("%3d", p[i][j]);
	printf("\n");
  }
  for (i = 0; i < 3; i++) {
    for (j = 0; j < 2; j++)
		printf("%3d", p[j][i]);
	printf("\n");
  }
}

6-2 利用函数指针实现递增或递减排序

本题要求实现一个函数,根据主程序运行提示完成一组整数的递增或递减排序。

参考代码:

static void sortAorD(int *array, int n, int  (*compare)(int a, int b)) {
  int i, j, t;
  for (j = 0; j < n-1; j++) { 
    for (i = 0; i < n-1-j; i++) {
        if ((*compare)(array[i],array[i+1])) {
            t = array[i];
            array[i] = array[i+1];
            array[i+1] = t;
        }
    }
  }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值