移动应用开发实验面试精选题解析
-
1. 字符串长度与数组大小
代码示例:#include <stdio.h> #include <string.h> int main() { char greeting[] = "Hello, 3G!"; char shortStr[20] = "Hello"; char testStr[20] = {'H', 'e', 'l', 'l', 'o'}; printf("strlen(greeting) = %zu\n", strlen(greeting)); printf("sizeof(greeting) = %zu\n", sizeof(greeting)); printf("strlen(shortStr) = %zu\n", strlen(shortStr)); printf("sizeof(shortStr) = %zu\n", sizeof(shortStr)); printf("strlen(testStr) = %zu\n", strlen(testStr)); printf("sizeof(testStr) = %zu\n", sizeof(testStr)); return 0; }测试重点:区分字符串长度与数组字节大小
-
2. 无限制循环
代码示例:#include <stdio.h> int main() { unsigned int counter = 5; while (counter >= 0) { printf("%u ", counter); counter--; } return 0; }测试重点:无符号变量的下溢行为
-
3. 宏定义与函数
代码示例:#include <stdio.h> #define MSG1 "欢迎加入3G!\n" #define MSG2 "您好!" #define CALC(x) (x + 4) #define SIZE 4 #define PRODUCT(n) (SIZE + 2) * n int main() { int result = 2 * (SIZE + PRODUCT(5)); printf("%d\n", result); printf("%s %d%d", MSG2, CALC(strlen(MSG1)), CALC(strlen(MSG1))); }测试重点:宏定义的展开与执行顺序
-
4. 变量作用域
代码示例:#include <stdio.h> int var = 10; void func() { int local = 20, temp = 40; static int staticVar = 30; staticVar++; temp++; printf("var = %d, staticVar = %d, temp = %d\n", var, staticVar, temp); } int main() { func(); func(); printf("var = %d\n", var); }测试重点:局部变量与静态变量的作用域
-
5. 位运算与控制流
代码示例:#include <stdio.h> int count = -1; int compute(int num) { while (1) { switch(num) { case 0: num = (num ^ 0x0A) + 0x0A; case 31: num = num | 0; break; case 9: num += 6; break; case 20: num = num >> 1; num -= 7; break; case 3: count += num; num = (num ^ 7) + 5; break; case 15: num += count++; count = count << 3; break; case 10: return (1 << ++num) - count; default: num = (num & 1) ? num + 1 : num - 4; break; } } } int main() { int start = 0; int result = compute(start); printf("result == %d\n", result); printf("%d\n", count); }测试重点:位运算与多分支控制流
-
6. 指针与数组
代码示例:#include <stdio.h> int main() { int array[] = {10, 20, 30, 40, 50}; int *ptrArray[5]; int (*arrPtr)[5] = &array; for(int i=0; i<5; i++) { ptrArray[i] = &array[i]; } for(int i=0; i<5; i++) { printf("%d ", *ptrArray[i]); } printf("\n"); for(int i=0; i<5; i++) { printf("%d ", (*arrPtr)[i]); } }测试重点:指针数组与数组指针的区别
-
7. 指针运算
代码示例:#include <stdio.h> int main(){ int matrix[3][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12} }; int* ptr1 = (int*)(matrix + 1); int* ptr2 = (int*)(*(matrix + 1)); printf("*(ptr1 - 1) = %d\n", *(ptr1 - 1)); printf("*(ptr2 + 7) = %d\n", *(ptr2 + 7)); printf("*(matrix[0] + sizeof(int) * 11) = %d\n", *(matrix[0] + 11)); printf("*(matrix[2] + 3) = %d\n", *(matrix[2] + 3)); printf(" *(*(matrix+2) + 3) = %d\n", *(*(matrix+2) + 3)); printf("*(*(&matrix[1] + 1) + 3) = %d\n", *(*(&matrix[1] + 1) + 3)); }测试重点:二维数组的指针运算
-
8. 结构体与联合体
代码示例:#include <stdio.h> #define INT_PTR int* #define CHAR_PTR char* typedef int* int_ptr; typedef char* char_ptr; struct MyData { int i; char c; INT_PTR p1, p2; int_ptr p3, p4; double d; }; union MyUnion { int i; char c; CHAR_PTR p1, p2; char_ptr p3, p4; float f; }; int main() { printf("Size of MyData: %zu\n", sizeof(struct MyData)); printf("Size of MyUnion: %zu\n", sizeof(union MyUnion)); }测试重点:结构体与联合体的内存对齐规则
-
9. 递归算法
代码示例:#include <stdio.h> int recursive(int n){ if (n < 5) { return n; }else { return recursive(n-1) + recursive(n-3); } } int main(){ int n=10; printf("%d\n", recursive(n)); }测试重点:递归终止条件与计算逻辑
-
10. 小球称重问题
测试重点:最小化称重次数的策略
-
11. 排序算法实现
代码示例:#include <stdio.h> void swap(int* a, int* b) { int temp = *a; *a = *b; *b = temp; } void quicksort(int array[], int left, int right) { if (left >= right) return; int l = left, r = right, pivot = array[right]; while (array[l] < pivot) l++; while (array[r] > pivot) r--; swap(&array[l], &array[r]); quicksort(array, left, r - 1); quicksort(array, l + 1, right); } int main() { char chars[] = {'F', 'A', 'G', 'W', 'Y', 'U', 'L'}; int n = sizeof(chars)/sizeof(chars[0]); printf("Original: "); for(int i=0; i<n; i++) printf("%c", chars[i]); quicksort(chars, 0, n-1); printf("\nSorted: "); for(int i=0; i<n; i++) printf("%c", chars[i]); }测试重点:快速排序算法的实现原理