日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C/C++基础知识10道题,你都会吗?

發(fā)布時(shí)間:2025/3/15 c/c++ 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C/C++基础知识10道题,你都会吗? 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目1:指針基礎(chǔ)知識(shí)

題述:描述指針數(shù)組和數(shù)組指針(指向數(shù)組的指針)的區(qū)別并舉例

考察點(diǎn):C指針的基礎(chǔ)知識(shí)

答案:考慮如下

char *q[] = {“xxx”, “xxx”, “xxx”}; 指針數(shù)組,q[0] 為一個(gè)指針

char (*p)[] = a; 數(shù)組指針,p[0] 為一個(gè)變量

時(shí)間:1min

題目2:內(nèi)存分配

題述:描述c程序內(nèi)存分配方式以及它們的區(qū)別(5分鐘)

考察點(diǎn):編程基礎(chǔ)

參考答案:

1) 從靜態(tài)存儲(chǔ)區(qū)域分配。內(nèi)存在程序編譯的時(shí)候就已經(jīng)分配好,這塊內(nèi)存在程序的整個(gè)運(yùn)行期間都存在。例如全局變量,static 變量。

2) 在棧上創(chuàng)建。在執(zhí)行函數(shù)時(shí),函數(shù)內(nèi)局部變量的存儲(chǔ)單元都可以在棧上創(chuàng)建,函數(shù)執(zhí)行結(jié)束時(shí)這些存儲(chǔ)單元自動(dòng)被釋放。棧內(nèi)存分配運(yùn)算內(nèi)置于處理器的指令集。

3) 從堆上分配,亦稱動(dòng)態(tài)內(nèi)存分配。程序在運(yùn)行的時(shí)候用malloc 或new 申請(qǐng)任意多少的內(nèi)存,程序員自己負(fù)責(zé)在何時(shí)用free 或delete 釋放內(nèi)存。動(dòng)態(tài)內(nèi)存的生存期由程序員決定。

題目3:讀程序找錯(cuò)

問題:【找錯(cuò)類】下面的程序用于讀取整數(shù),整數(shù)的范圍在1和從標(biāo)準(zhǔn)輸入讀取的size之間,它返回每個(gè)值出現(xiàn)的次數(shù),這個(gè)程序包含了幾個(gè)錯(cuò)誤,請(qǐng)指出。(10min)

#include <stdlib.h>

Int * frequency(int size)

{

Int *array;

Int i;

array= (int *)malloc(size *2);#獲得足夠的內(nèi)存來容納計(jì)數(shù)

#調(diào)整指針,讓它后退一個(gè)整形位置,這樣就可以使用范圍1-size的下標(biāo)

Array-=1;

#把各個(gè)元素清零

For(i=0;i<size;i++)

Array[i]=0;

#計(jì)數(shù)每個(gè)值出現(xiàn)的次數(shù),然后返回結(jié)果

While(scanf("%d",&i) == 1) #scanf的返回值代表成功讀入的個(gè)數(shù)

Array[i] +=1;

Free(array);

Return array;

}

錯(cuò)誤點(diǎn):

(1) 用字面值常量2作為整型值的長度,這個(gè)值在整型值長度為2個(gè)字節(jié)的機(jī)器上能正常工作,但在4字節(jié)整數(shù)機(jī)器上,實(shí)際分配的內(nèi)存將只是所需內(nèi)存的一半,所以應(yīng)該用sizeof

(2) 從malloc函數(shù)返回值未被檢查,如果內(nèi)存不足,將返回NULL

(3) 把指針退到數(shù)組左邊界的左邊來調(diào)整下標(biāo)的范圍或許行得通,但它違背了標(biāo)準(zhǔn)關(guān)于指針不能越過數(shù)組左邊界的規(guī)定。

(4) 指針經(jīng)過調(diào)整后,第一個(gè)元素的下標(biāo)變成了1,接著for循環(huán)將錯(cuò)誤地從0開始。在許多系統(tǒng)中,這個(gè)錯(cuò)誤將破壞malloc所使用的用于追蹤堆的信息,常常導(dǎo)致程序崩潰

(5) 數(shù)組增值前并未檢查輸入值是否位于合適的范圍內(nèi);

(6) 如果數(shù)組應(yīng)該被返回,它就不能被free掉

題目4:讀程序確認(rèn)返回值

求函數(shù)返回值,輸入x=9999;

int func(int x)

{

int countx = 0;

while(x)

{

countx ++;

x = x&(x-1);

}

return countx;

}

【問題】請(qǐng)寫出該函數(shù)的返回值以及分析過程。(10分鐘)

參考答案:8

解這道題的時(shí)候,如果拿出一個(gè)二進(jìn)制數(shù)來分析就會(huì)容易的多了,x=x&(x-1)實(shí)際上就是把x的二進(jìn)制形式的最后一個(gè)“1”變成“0”,x的二進(jìn)制形式有多少個(gè)“1”循環(huán)就執(zhí)行多少次。

9999/256 = 39 余 15,把這兩個(gè)數(shù)分別轉(zhuǎn)化一下就很快了

39 = 32 + 4 + 2 +1 = 00100111

15 = 0f = 00001111

所以 9999=0010011100001111,共有8個(gè)1,答案就是 8 了

考察點(diǎn):c編程基礎(chǔ)知識(shí)

題目5:實(shí)現(xiàn)strndup函數(shù)

請(qǐng)編寫以下功能的函數(shù):char *strndup(char *src, int n); 復(fù)制字符串src,返回新的指針地址,最多復(fù)制n個(gè)字節(jié)(包括字符串結(jié)束的'\0')。該題目的審查要點(diǎn)是:

l是否檢查參數(shù)的有效性:src, n;

l是否能正確使用內(nèi)存申請(qǐng)函數(shù)和指針;

l對(duì)于"最多復(fù)制n個(gè)字節(jié)"的要求考慮是否周到

題目6:合并兩個(gè)有序鏈接

合并兩個(gè)有序(升序)鏈接。

typedef struct _link_t

{

int val;

struct _link_t *next;

} link_t;

link_t* merge(link_t* ln1, link_t* ln2);

題目7

(本題答案不全):實(shí)現(xiàn)子序列最大和

給定一個(gè)int 數(shù)組,給出其中連續(xù)子序列的最大和

unsigned int foo(int *arr, size_t len);

例子1: 數(shù)組[-2,11,-4,13,-5,2]中具有最大累加和的子數(shù)組為[11,-4,13],其和為20;

例子2:[1, -3, 4, -2, -1, 6] 中具有最大累加和的子數(shù)組為[4, -2, -1, 6], 其和為7。

題目8

(本題答案不全):字符串排序

有一個(gè)由字母(大小寫)組成的字符串,要求對(duì)其排序,要求效率盡可能高且輔助空間盡可能少。

實(shí)現(xiàn) void sort(char* s); 返回寫入s。

題目9

(本題答案不全):字符串反轉(zhuǎn)

寫代碼反轉(zhuǎn)一個(gè)字符串,要求交換的次數(shù)和輔助空間盡量少。

實(shí)現(xiàn) void reverse(char* s);返回寫入s。

題目10(本題答案不全):樓梯走法

走樓梯可以一次上1級(jí),也可以一次上兩級(jí),請(qǐng)問上n級(jí)臺(tái)階有幾種走法。n不超過10K,要求效率盡可能高。

實(shí)現(xiàn) unsigned int count(unsigned int n);

?

總結(jié)

以上是生活随笔為你收集整理的C/C++基础知识10道题,你都会吗?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。