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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

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

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

題目1:指針基礎知識

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

考察點:C指針的基礎知識

答案:考慮如下

char *q[] = {“xxx”, “xxx”, “xxx”}; 指針數組,q[0] 為一個指針

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

時間:1min

題目2:內存分配

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

考察點:編程基礎

參考答案:

1) 從靜態存儲區域分配。內存在程序編譯的時候就已經分配好,這塊內存在程序的整個運行期間都存在。例如全局變量,static 變量。

2) 在棧上創建。在執行函數時,函數內局部變量的存儲單元都可以在棧上創建,函數執行結束時這些存儲單元自動被釋放。棧內存分配運算內置于處理器的指令集。

3) 從堆上分配,亦稱動態內存分配。程序在運行的時候用malloc 或new 申請任意多少的內存,程序員自己負責在何時用free 或delete 釋放內存。動態內存的生存期由程序員決定。

題目3:讀程序找錯

問題:【找錯類】下面的程序用于讀取整數,整數的范圍在1和從標準輸入讀取的size之間,它返回每個值出現的次數,這個程序包含了幾個錯誤,請指出。(10min)

#include <stdlib.h>

Int * frequency(int size)

{

Int *array;

Int i;

array= (int *)malloc(size *2);#獲得足夠的內存來容納計數

#調整指針,讓它后退一個整形位置,這樣就可以使用范圍1-size的下標

Array-=1;

#把各個元素清零

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

Array[i]=0;

#計數每個值出現的次數,然后返回結果

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

Array[i] +=1;

Free(array);

Return array;

}

錯誤點:

(1) 用字面值常量2作為整型值的長度,這個值在整型值長度為2個字節的機器上能正常工作,但在4字節整數機器上,實際分配的內存將只是所需內存的一半,所以應該用sizeof

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

(3) 把指針退到數組左邊界的左邊來調整下標的范圍或許行得通,但它違背了標準關于指針不能越過數組左邊界的規定。

(4) 指針經過調整后,第一個元素的下標變成了1,接著for循環將錯誤地從0開始。在許多系統中,這個錯誤將破壞malloc所使用的用于追蹤堆的信息,常常導致程序崩潰

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

(6) 如果數組應該被返回,它就不能被free掉

題目4:讀程序確認返回值

求函數返回值,輸入x=9999;

int func(int x)

{

int countx = 0;

while(x)

{

countx ++;

x = x&(x-1);

}

return countx;

}

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

參考答案:8

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

9999/256 = 39 余 15,把這兩個數分別轉化一下就很快了

39 = 32 + 4 + 2 +1 = 00100111

15 = 0f = 00001111

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

考察點:c編程基礎知識

題目5:實現strndup函數

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

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

l是否能正確使用內存申請函數和指針;

l對于"最多復制n個字節"的要求考慮是否周到

題目6:合并兩個有序鏈接

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

typedef struct _link_t

{

int val;

struct _link_t *next;

} link_t;

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

題目7

(本題答案不全):實現子序列最大和

給定一個int 數組,給出其中連續子序列的最大和

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

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

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

題目8

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

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

實現 void sort(char* s); 返回寫入s。

題目9

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

寫代碼反轉一個字符串,要求交換的次數和輔助空間盡量少。

實現 void reverse(char* s);返回寫入s。

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

走樓梯可以一次上1級,也可以一次上兩級,請問上n級臺階有幾種走法。n不超過10K,要求效率盡可能高。

實現 unsigned int count(unsigned int n);

?

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。