C 程序的输出 |第 41 集
QUE.1 如果编译并执行以下c 代码,将输出什么?
#include
int main()
{
int a = 5;
float b;
printf("%d ", sizeof(++a + b));
printf("%d ", a);
return 0;
}
(a)2 6
(b)4 6
(c)2 5
(d)4 5
Answer : d
解释:
++a +b = 6 + Garbage floating point number
= Garbage floating point number
// From the rule of automatic type conversion
因此 sizeof运算符将返回 4,因为 c 中浮点数据类型的大小为 4 个字节。任何变量的值都不会在 sizeof 运算符内修改。因此变量 a 的值将保持为 5。
QUE.2 如果编译并执行以下c 代码,将输出什么?
#include
int main()
{
int array[3] = { 5 };
int i;
for (i = 0; i <= 2; i++)
printf("%d ", array[i]);
return 0;
}
(a)5垃圾垃圾
(b)5 0 0
(c)5 null null
(d) 编译错误
(e) 以上都不是
Answer : b
说明:在声明时初始化数组元素的数组的存储类是静态的。静态整数的默认初始值为零。
QUE.3 如果编译并执行以下c 代码,将输出什么?
#include
int main()
{
register int i, x;
scanf("%d", &i);
x = ++i + ++i + ++i;
printf("%d", x);
return 0;
}
(一)17
(b)18
(c)21
(d)22
(e) 编译器错误
Answer : e
解释:在 C 中,寄存器变量存储在 CPU 中,而不存储在 RAM 中。所以寄存器变量没有任何内存地址。所以写&a是非法的。
QUE.4 如果编译并执行以下c 代码,将输出什么?
#include
int main()
{
int a = 5;
int b = 10;
{
int a = 2;
a++;
b++;
}
printf("%d %d", a, b);
return 0;
}
选项
(一)5 10
(b)6 11
(c)5 11
(d)6 10
(e) 编译器错误
Answer : c
说明:局部变量的默认存储类是auto。 auto 变量的范围和可见性在它声明的块内。在C中,如果有两个同名的变量,那么
我们只能访问局部变量。因此,内部块变量a 是在该块内声明和定义的局部变量。
当控制来自内部块局部变量时,a 变得死了。
QUE.5 如果编译并执行以下 C 代码,将输出什么?
#include
int main()
{
float f = 3.4e39;
printf("%f", f);
return 0;
}
选项
(a)3.4e39
(b)3.40000…
(c)信息
(d) 编译错误
(e) 运行时错误
Answer: c
说明:如果您将超出浮点数据类型范围的值分配给浮点变量,则不会显示任何编译器错误。它将存储无穷大。