问题1
main()将被调用多少次?
main()
{
printf("\n main Called Again");
main();
}
答案:无限循环
描述: main()中没有条件可以停止对main()的递归调用,因此它将无限次被调用。
问题2
猜猜以下程序的输出:
#include
int main()
{
int x = 10;
float y = 10.0;
if (x == y)
printf("x and y are equal");
else
printf("x and y are not equal");
}
答案: x和y相等
描述:如果(x == y)在这里,我们正在比较if(10 == 10.0)因此满足此条件。因为我们无法比较int
和float,因此将int转换为float并进行比较。因此,它打印“ x和y相等”。
问题3
以下代码的输出是什么?
#include
main()
{
char *str1 = "abcd";
char str2[] = "abcd";
printf("%d %d %d", sizeof(str1),
sizeof(str2), sizeof("abcd"));
}
回答: 8 5 5
描述 :
在运行该程序的机器上,将打印字符指针的第一个大小为8的字符。然后打印大小为5的字符串str2的大小(包括’/ 0’终止字符)。第三个类似于第二个。
问题4
以下c程序的输出是什么?
#include "stdio.h"
int main()
{
int _ = 18;
int __ = 38;
int ___;
___ = _ + __;
printf ("%i", ___);
return 0;
}
回答: 56
说明:变量名称只能带有下划线。
问题5
通过以下操作将打印出什么:
main()
{
int x = 41, y = 43;
x = y++ + x++;
y = ++y + ++x;
printf ("%d %d", x , y);
}
回答: 86130
描述:其实际取决于编译器。在x = y ++ + x ++之后,x的值变为85,y变为44,并且y = ++ y + ++ x将被计算为y =(44)+(86)。经过计算,y变为130。
问题6
通过以下操作将打印什么:
main()
{
int x = 7;
printf ("%d, %d, %d", x,
x<<5, x>>5);
}
回答: 7,224,0
说明:由于x = 7,所以第一个%d给出7,第二个%d将x左移五次后取x的值,并且在将值转换为二进制后进行移位,二进制值7(000111)将左移两次使它成为二进制224(11100000),所以x << 5是224,并且由于向左移位不会影响x的原始值,它仍然是5,因此第三个%d也将显示0。
问题7
输出是什么?
main()
{
if (1, 0)
printf ("True");
else
printf ("False");
}
答:错
说明:逗号(,)运算符返回的值,该值位于的右侧,因此if语句变为if(0)。
问题8
输出是什么?
#include
int main()
{
printf ("%d", printf("%d", 12345678));
return 0;
}
回答: 123456788
描述:注意最后的额外8个。 printf()返回成功在屏幕上打印的字符数。
问题9
输出是什么?
void main()
{
printf ("2 + 3 = %d", 2+3);
}
答案: 2 + 3 = 5
说明:由于格式说明符为%d且均为整数(2,3),因此它将添加并打印整数值。
问题10
输出是什么?
#include
main()
{
int i = 0;
if (i = 55, 0, 10, 0)
printf ("Test Skills %d", i);
else
printf ("C Programing %d", i);
}
答案: C编程55
说明:首先评估i = 55并舍弃其值。然后评估0并丢弃。然后评估10个并丢弃。之后,最右边的0被求值,它将成为if条件中整个表达式的值(而不是子表达式的值),并将条件设为false。
问题11
输出是什么?
#include
int main()
{
char arr[5] = "World is beautiful";
printf ("%s", arr);
return 0;
}
答案:世界
还会显示一条警告消息:“ 4:19:警告:字符数组的初始化字符串太长[默认启用]”
描述:任何字符数组的大小不能小于其已分配的任何字符串的字符数。数组的大小可以等于(不包括null字符)或大于或小于等于。
问题12
以下程序的输出是什么?
#include
void main()
{
int a = 2;
switch (a)
{
case 4: printf ("A");
break;
case 3: printf ("B");
default : printf("C");
case 1 : printf ("D");
break;
case 5 : printf ("E");
}
}
答案: CD
描述:在switch语句中,所有switch情况后均应提及default。在这种情况下,它将在两次之间执行,并且默认情况下的所有情况都在break语句之前执行。
问题13
输出是什么?
#include
int main()
{
int x = 100, y = 200;
if ( ++x || ++y)
printf ("x = %d, y = %d", x, y);
else
printf ("condition failed");
return 0;
}
答案: x = 101,y = 200
说明:如果先执行if条件的第一部分(即++ x),则x值变为101。
问题14
考虑以下程序:
#include
main()
{
int i, j;
for( i = 0, j = 5; j>0, i<10 ; i++, j--)
printf ("\GeeksforGeeks.org");
}
“ GeeksforGeeks.org”将被打印多少次?
答: 10
描述: for循环的条件部分(j> 0,i <10)用逗号分隔,这意味着编译器将使用逗号右边的值,即i <10,因此循环将执行
直到i的值小于10。
问题15
输出是什么?
#include
#define SQR( x ) ( x * x )
int main()
{
int b = 5;
int a = SQR(b+2);
printf("%d\n", a);
return 0;
}
答: 17
描述:众所周知,宏将盲目替换,而不进行计算。它将首先替换该值,然后再计算。因此,替换后,宏将变为SQR(x + 2)=(x + 2 * x + 2)在这种情况下x值为5。因此,最终替换将为SQR(5 + 2)=(5 + 2 * 5 + 2)。由于“ *”比“ +”具有更高的优先级,因此它将变为(5 + 10 + 2)。在这种情况下,a的值为17