#include <stdio.h> #define T(c) (c == c == c) double f1() { int x; return x = 7%4; } void f2(int n) { for(; n >= 1; n--){ printf("%2d", n%3); } printf("\n"); } double f3(int n) { if(n == 1) return 1.0; else return n + f3(n-1); } int main(void) { printf("%d,%d\n", T(5), T(1)); printf("%.1f\n", f1()); f2(4); printf("%.1f\n", f3(3)); return 0; }
时间: 2024-04-24 07:21:57 浏览: 119
蓝桥官网习题答案汇总
这段代码的输出是:
1,1
3.000000
1 2 0
6.0
这是因为:
1. 宏定义 T(c) 定义了一个宏,其展开后的形式为 (c == c == c),这是一个非常奇怪的表达式,其含义不明确,因此在 main 函数中使用 T(5) 和 T(1) 作为参数调用 printf 函数时,结果并不可预测。实际上,这样的宏定义是不太合理的,应该避免使用。
2. 函数 f1() 返回的是 7 除以 4 的余数,即 3.0。因为 x 被声明为 int 类型,因此返回值会被自动转换为 double 类型。
3. 函数 f2(int n) 输出 n 的各个位上的数字模 3 的结果,例如 f2(4) 的输出为 "1 2 0"。注意,输出的数字左对齐,并且每个数字之间用空格隔开。
4. 函数 f3(int n) 返回 1 到 n 的整数之和。例如,f3(3) 的返回值为 1 + 2 + 3 = 6. 返回值类型为 double,因为函数内部使用了递归调用,可能会有浮点数的运算。
阅读全文