嵌入式筆試刷題(第5天)
1. 試寫一個函數檢查表達式中的括號是否匹配。
檢查的括號包括:
()
、[]
、{}
、<>
。例如:表達式中前面有?
(
?但后面沒有?)
,則認為不匹配。
? 答案:
#include <stdbool.h> #define MAX_STACK 100 bool is_match(char* s) { char stack[MAX_STACK]; int top = -1; while (*s) { if (*s == '(' || *s == '[' || *s == '{' || *s == '<') { stack[++top] = *s; } else if (*s == ')' || *s == ']' || *s == '}' || *s == '>') { if (top < 0) return false; char left = stack[top--]; if ((*s == ')' && left != '(') || (*s == ']' && left != '[') || (*s == '}' && left != '{') || (*s == '>' && left != '<')) { return false; } } s++; } return top == -1; }
2. 編寫函數,根據公式計算表達式:
s = 1 + 1/(1+2) + 1/(1+2+3) + ... + 1/(1+2+3+...+n)
n
?作為參數傳入。例如:
n = 11
?時,s = 1.833333
? 答案:
double calc_s(int n) { double s = 0.0; int sum = 0; for (int i = 1; i <= n; i++) { sum += i; s += 1.0 / sum; } return s; }
3. 寫一個宏定義:輸入兩個參數,返回較小的一個。
? 答案:
#define MIN(a, b) ((a) < (b) ? (a) : (b))
4. 分析下面這段代碼的輸出,并說明原因:
union { int i; struct { char first; char second; } half; } number; number.i = 0x4241; printf("%x%x\n", number.half.first, number.half.second); number.half.first = 97; number.half.second = 98; printf("%x\n", number.i);
? 答案:
假設是?小端字節(jié)序(常見于 x86 平臺):
number.i = 0x4241
,低位字節(jié)為?0x41
,高位為?0x42
- 所以?
first = 0x41
,second = 0x42
,輸出為: - 修改?
first = 97
(0x61)、second = 98
(0x62) 合并為低位?0x61
、高位?0x62
?? 輸出為:
5. 寫出單精度浮點數?-12.75
?在內存中的十六進制表示
? 答案:
IEEE 754 單精度格式:
-12.75 = -1100.11? = -1.10011 × 23
- 符號位:1
- 階碼:3 + 127 = 130 =?
10000010
- 尾數(去掉最高的1):
10011000000000000000000
二進制組合:
1 10000010 10011000000000000000000
換算為十六進制:
C1500000
更多內容全在下方專欄
全網最受歡迎的嵌入式筆試專欄
筆試專欄包含全部最新的筆試必考考點,非常適合在找工作面經薄弱的同學
3000+訂閱還會漲價,提前訂閱提前享受,持續(xù)更新中。
專欄鏈接:http://www.fangfengwang8.cn/creation/manager/columnDetail/mPZ4kk
#嵌入式筆面經分享##嵌入式測試,嵌入式開發(fā)##你的秋招第一場筆試是哪家#