1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
| int main() { int a,b,c,d; a=10; b=a++; c=++a; d=10*a++; printf("b,c,d:%d,%d,%d",b,c,d); return 0; } 【标准答案】10,12,120 unsigned char *p1; unsigned long *p2; p1=(unsigned char *)0x801000; p2=(unsigned long *)0x810000;
【标准答案】0x801005、0x810020 void main() { int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1); printf(“%d,%d”,*(a+1),*(ptr-1)); }
【标准答案】2,5
int a=5; int b; b=SQUARE(a++); 【标准答案】宏在预编译时会以替换的形式展开,仅仅会替换。涉及到宏的地方,不要用++ --,标准中对此没有规定,因此最终结果将会依赖于不同的编译器。执行程序的答案可能是25、也有可能是36。 #define Max_CB 500 void LmiQueryCSmd(Struct MSgCB * pmsg) { unsigned char ucCmdNum; ...... for(ucCmdNum=0;ucCmdNum<Max_CB;ucCmdN um++) { ......; } }
【标准答案】死循环 unsigned char
int modifyvalue() { return(x+=10); } int changevalue(int x) { return(x+=1); } void main() { int x=10; x++; changevalue(x); x++; modifyvalue(); printf("First output:%dn",x); x++; changevalue(x); printf("Second output:%dn",x); modifyvalue(); printf("Third output:%dn",x); }
【 标准答案】12、13、13
#include<stdio.h> main() { int a,b,c,d; a=10; b=a++; c=++a; d=10*a++; printf("b,c,d:%d,%d,%d",b,c,d); return 0; } 【标准答案】10,12,120
void foo(void) { unsigned int a = 6; int b = -20; (a+b > 6)? puts("> 6") : puts("<= 6"); } 【参考答案】这个问题测试你是否懂得C语言中的整数自动转换原则, 我发现有些开发者懂得极少这些东西。不管如何,这无符号整型问题的答案是输出是“>6”。原因是当表达式中存在有符号类型和无符号类型时所有的数都自动转换为无符号类型。因此-20变成了一个非常大的正整数,所以该表达式计算出的结果大于6。这一点对于应当频繁用到无符号数据类型的嵌入式系统来说是丰常重要的。如果你答错了这个问题,你也就到了得不到这份工作的边缘。 void main() { int a; scanf(“%d”,&a); printf(“%c”,(a)&(a-1)?’n’:’y’); }
interrupt double compute_area (double radius) { double area = PI * radius * radius; printf(" Area = %f", area); return area; } 【参考答案】这个函数有太多的错误了,以至让人不知从何说起了: 1). ISR 不能返回一个值。如果你不懂这个,那么你不会被雇用的。 2). ISR 不能传递参数。如果你没有看到这一点,你被雇用的机会等同第一项。 3). 在许多的处理器/编译器中,浮点一般都是不可重入的。有些处理器/编译器需要让额处的寄存器入栈,有些处理器/编译器就是不允许在ISR中做浮点运算。此外,ISR应该是短而有效率的,在ISR中做浮点运算是不明智的。 4). 与第三点一脉相承,printf()经常有重入和性能上的问题。如果你丢掉 了第三和第四点,我不会太为难你的。不用说,如果你能得到后两点,那么你的被雇用前景越来越光明了
提示:这里“零值”可以是 0, 0.0 , FALSE 或者“空指针”。例如 int 变量 n 与“零值”比较的 if 语句为: if ( n == 0 ) if ( n != 0 ) 以此类推。 (1) 请写出 bool flag 与“零值”比较的 if 语句: 【标准答案】if ( flag ) if ( !flag ) 如下写法不得分 if(flag == TRUE) || if(flag == 1) || if(flag == FLASE) || if(flag == 0) (2)请写出 float x 与“零值”比较的 if 语句: 【标准答案】 const float EPSINON = 0.00001; if ((x >= - EPSINON) && (x <= EPSINON) 不可将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”此类形式。 如下写法不得分 if( x == 0.0) || if(x != 0.0) (3) 请写出 char *p 与“零值”比较的 if 语句 【标准答案】 if (p == NULL) if (p != NULL) 如下写法不得分 if(p == 0) || if(p)
char str[] = “Hello” ; char *p = str ; int n = 10; 请计算 (1)sizeof (str ) = (2)sizeof ( p ) = (3)sizeof ( n ) =
【标准答案】(1)6、(2)4、(3)4
(4) void Func ( char str[100]){} 请计算 sizeof( str ) = 【标准答案】(4)4 (5) void *p = malloc( 100 ); 请计算sizeof ( p ) = 【标准答案】(5)4
|