1、下面两段代码中for循环分别执行了多少次?
- unsigned short i,j;
- for(i=0, j=2; i!=j; i+=5, j+=7)
- {}
- unsigned short i,j;
- for(i=3,j=7;i!=j;i+=3,j+=7)
对于这类问题可以利用相对运动的思想:
根据数据类型可以知道环形轨道的长度是65536,对于第一个for循环假设i原地不动,则j在局里起点为2的位置以步长2向前运动,则j需要走(65536 - 2) / 2 = 32767步才能回到起点与i重合,此时循环退出,因此第一个for循环执行了32767次。
对于第二个for循环轨道的长度依然是65536,我们以i的起始位置3为原点,假设i原地不动,则j在距离原点为4的位置以步长4向前远动,则j需走(65536 - 4) / 4 = 16383步才能回到起点与i重合退出循环,故第二个循环执行了16383次。
2、下面程序应该输出多少?
- char *c[] = { "ENTER", "NEW", "POINT", "FIRST" };
- char **cp[] = { c+3, c+2, c+1, c };
- char ***cpp = cp;
- int main(void)
- {
- printf("%s", **++cpp);
- printf("%s", *--*++cpp+3);
- printf("%s", *cpp[-2]+3);
- printf("%s\n", cpp[-1][-1]+1);
- return 0;
- }
画个图分析一下结果就会出来:
打印结果:POINTERSTEW。
3、下列代码的输出为多少?
- int main(void)
- {
- enum {a, b=5, c, d=4, e};
- enum {h,x, y, z, v=120, w, r=99,s,t};
- return 0;
- }
a、c、e、h、x、y、z、w、s、t的值分别是多少?
枚举类型默认起始值为0,若里面元素初始化时没有赋值则取默认值,赋过值则取给定的值,元素的默认值总是它前面的那一个元素的值加1。
结果:a = 0, c = 6, e = 5, h = 0, x = 1, y = 2, z = 3, w = 121, s = 100, t = 101