• 正文
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

嵌入式開發(fā)工程師面試題2

2024/11/25
1612
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

程序運行后的輸出結(jié)果是()

int main() {int a[3][3], *p, i;    p = &a[0][0];for(i = 0; i < 9; i++) p[i] = i;for(i = 0; i < 3; i++) printf("%d ", a[1][i]);}

解析:

程序運行后的輸出結(jié)果將是數(shù)組?a?的第二行元素的值。讓我們逐步分析這個程序:

聲明了一個 3x3 的整型數(shù)組?a,一個整型指針?p,和一個整型變量?i。

將指針?p?指向數(shù)組?a?的第一個元素,即?a[0][0]。

使用一個循環(huán),通過指針?p?為數(shù)組?a?的所有元素賦值,從 0 到 8。數(shù)組?a?將會是這樣的:

a[0][0] = 0, a[0][1] = 1, a[0][2] = 2,
a[1][0] = 3, a[1][1] = 4, a[1][2] = 5,
a[2][0] = 6, a[2][1] = 7, a[2][2] = 8

第二個循環(huán)遍歷數(shù)組?a?的第二行,即?a[1][i],并打印每個元素。

所以,程序?qū)⒋蛴〉诙械娜齻€元素:3, 4, 5。

完整的輸出結(jié)果是:復(fù)制代碼

3 4 5

2.以下程序段中,不能正確賦字符串(編譯時系統(tǒng)會提示錯誤)的是( )

A?char s[10]="abcdefg";

B?char t[]="abcdefg",*s=t;

C?char s[10];s="abcdefg";

D?char s[10];strcpy(s,"abcdefg");

解析:

在C語言中,字符串的賦值是一個常見的操作,但需要遵循一定的規(guī)則。

A.?char s[10]="abcdefg";
這是正確的。這里定義了一個字符數(shù)組s,并初始化為字符串"abcdefg"。數(shù)組大小為10,足夠存儲該字符串及其終止符。

B.?char t[]="abcdefg",*s=t;
這也是正確的。這里定義了一個字符數(shù)組t并初始化為字符串"abcdefg",同時定義了一個字符指針s,并將其指向數(shù)組t的首地址。這樣,指針s就指向了字符串"abcdefg"。

C.?char s[10];s="abcdefg";
這是錯誤的。在這里,s是一個字符數(shù)組,而不是字符指針。數(shù)組名(在這里是s)在大多數(shù)表達式中會被轉(zhuǎn)換為指向數(shù)組首元素的指針,但它本身是一個常量,不能被賦值。嘗試將字符串字面量的地址賦給數(shù)組名s是不合法的,編譯時會報錯。

D.?char s[10];strcpy(s,"abcdefg");
這是正確的。這里使用strcpy函數(shù)將字符串"abcdefg"復(fù)制到字符數(shù)組s中。strcpy函數(shù)是標(biāo)準(zhǔn)庫函數(shù),用于復(fù)制字符串,包括終止符。數(shù)組大小為10,足夠存儲該字符串及其終止符。

綜上所述,不能正確賦字符串,并且編譯時系統(tǒng)會提示錯誤的選項是C。在C語言中,不能直接將字符串字面量賦給字符數(shù)組名,而應(yīng)該使用初始化(如選項A)或字符串復(fù)制函數(shù)(如選項D)。

3.C語言中break和continue語句說法正確的是()。

A?break語句只應(yīng)用于循環(huán)體中

B?continue語句只應(yīng)用于循環(huán)體中

C?break是無條件跳轉(zhuǎn)語句,continue不是

D?break和continue的跳轉(zhuǎn)范圍不夠明確,容易產(chǎn)生問題

解析:

在C語言中,breakcontinue是兩個用于控制流程的關(guān)鍵字,它們主要在循環(huán)和switch語句中使用。接下來,我們將逐一分析每個選項的正確性:

A.?break語句只應(yīng)用于循環(huán)體中

這是不正確的。break語句不僅可以在循環(huán)體中使用,還可以在switch語句中使用,用于跳出當(dāng)前的switch分支或循環(huán)體。

B.?continue語句只應(yīng)用于循環(huán)體中

這是正確的。continue語句只能在循環(huán)體中使用,它的作用是跳過當(dāng)前循環(huán)的剩余部分,并立即開始下一次循環(huán)迭代。

C.?break是無條件跳轉(zhuǎn)語句,continue不是

這個說法部分正確,但不完全準(zhǔn)確。break確實是無條件地跳出當(dāng)前的循環(huán)或switch語句,可以認為是一種無條件跳轉(zhuǎn)。然而,continue也可以被視為一種“有條件”的跳轉(zhuǎn),因為它會跳過當(dāng)前循環(huán)的剩余部分,但并不是無條件地跳出整個循環(huán)或程序塊。更準(zhǔn)確地說,continue是控制循環(huán)迭代的語句,而不是傳統(tǒng)意義上的跳轉(zhuǎn)語句。

D.?breakcontinue的跳轉(zhuǎn)范圍不夠明確,容易產(chǎn)生問題

這是不正確的。在C語言中,breakcontinue的跳轉(zhuǎn)范圍是明確的。break會跳出最近的包圍它的循環(huán)或switch語句,而continue會跳過當(dāng)前循環(huán)的剩余部分并繼續(xù)下一次迭代。只要程序員理解了這些語句的作用和范圍,它們就不會產(chǎn)生混淆或問題。

綜上所述,正確的選項是B:continue語句只應(yīng)用于循環(huán)體中。

4.fseek函數(shù)的正確調(diào)用形式是()

A?fseek(文件類型指針,起始點,位移量)

B?fseek(文件類型指針,位移量,起始點)

C?fseek(位移量,起始點,文件類型指針)

D?fseek(起始點,位移量,文件類型指針)

解析:

在C語言中,fseek函數(shù)用于移動文件指針到指定的位置。其正確的調(diào)用形式非常重要,因為它決定了函數(shù)如何以及在哪里移動文件指針。

fseek函數(shù)的原型通常是這樣的:c

復(fù)制代碼

int fseek(FILE *stream, long offset, int whence);

從原型中我們可以看出,fseek函數(shù)需要三個參數(shù):

FILE *stream:這是一個指向文件的指針,它標(biāo)識了要操作的文件。

long offset:這是位移量,表示要從起始點移動多少字節(jié)。

int whence:這是起始點,用于指定從哪里開始計算位移。它通常是以下幾個宏之一:SEEK_SET(從文件開始)、SEEK_CUR(從當(dāng)前位置)或SEEK_END(從文件末尾)。

根據(jù)這個原型,我們可以對比給出的選項:

A.?fseek(文件類型指針,起始點,位移量)
這是錯誤的,因為參數(shù)的順序不正確。

B.?fseek(文件類型指針,位移量,起始點)
這是正確的,它匹配了fseek函數(shù)的原型。

C.?fseek(位移量,起始點,文件類型指針)
這是錯誤的,因為參數(shù)的順序和類型都不正確。

D.?fseek(起始點,位移量,文件類型指針)
這也是錯誤的,因為參數(shù)的順序不正確。

因此,正確的選項是B:fseek(文件類型指針,位移量,起始點)。這符合fseek函數(shù)的定義和用法。

 

未完待續(xù),持續(xù)更新!以防后邊找不到可以點贊收藏下!

相關(guān)推薦