2011.9.27到某公司的Android面试(C/java/Android)题目总结
9.27 面试
1.写一个C语言的宏,求两个传入的数的绝对值的和。
①#define add(a,b) (((a) < 0? -(a) : (a)) + ((b) < 0? -(b) : (b)))
②
#define abs(a) ( (a) < 0? -(a) : (a) )
#define add(a,b) (abs(a) + abs(b))
2.用java或者C倒置字符串"abcd" -> "dcba"
①
//把第一个放到最后
/*void firstToLast(char str[],int len){
if(len <= 1) return;
char temp = str[0];
int i;
for(i = 1; i < len; i++){
str[i - 1] = str[i];
}
str[len - 1] = temp;
}
void reverseString(char str[],int len){
int i = 0;
for(;i < len -1; i++){
firstToLast(str,len - i);
}
}*/
②
void reverseString(char str[],int len){
int i,j;
char temp;
for(i = 0;i < len; i++){
temp = str[0];
for(j = 1; j < len - i;j ++){
str[j - 1] = str[j];
}
str[len - i - 1] = temp;
}
}
3. C语言中 a++ 与 ++a 的区别(很多相关的填空题)
4. C语言的逗号表达式的求值顺序问题(在a++,与++a问题中有多个逗号表达式)
---->区别:a++先使用a原来的值,使用后在让a的值自加一, ++a先将a的值加一,然后使用改变后的a的值。
例如:
int inc(int a)
{
printf("intc : %d\n",a);
return a++;
}
main函数中:
int a = 1;
printf("%d\n",a++); //1
printf("%d\n",++a); // 3
printf("%d,%d\n",a,inc(a++)); //4,3
printf("%d\n",a); //4
printf("%d\n",inc(++a));//5
//printf("%d\n",++3); //语法错误