當前位置:
首頁 > 知識 > C語言你不可以錯過的8個經典題目

C語言你不可以錯過的8個經典題目


C語言你不可以錯過的8個經典題目

以下這些都是C語言中較為經典的例題,可以幫助大家在寫程序中少走彎路,少出點BUG。


1. 一下敘述中不正確的是(D)


A.在不同的函數中可以使用相同名字的變數


B.函數中的形式參數是在棧中保存

C.在一個函數內定義的變數只在本函數範圍內有效


D.在一個函數內複合語句中定義的變數在本函數範圍內有效


(複合語句值函數中的成對括弧構成)


註:D項是有錯誤的比如我舉個例子


#include


int man()


{


{


int a=10;


}

printf("%d
",a);


return 0;


}


這個如果再編譯中,一定會出現,a未定義的錯誤的。


想要一起學習C++的可以加裙二四八八九四四三零,裙內有各種資料滿足大家,歡迎加裙


2.


#include


#include


int main()


{

int i;


char acNEW[20];


for (i = 0; i


{


acNEW[i] = "0";


}


printf("%d
", strlen(acNEW));


system("pause");


return 0;


問題是求輸出結果: 這個答案應該不確定,因為呢它在為字元數組賦值時,並未賦 "" 但是strlen函數

認為結束的標準就是 "" ,所以當它讀到最後一位他會繼續走下去,直到它遇到 "",因為後面是垃圾數據


數據都是隨機的所以strlen函數在讀時直到遇到 "" 它才會停下來,所以答案是不確定的。


3.全局變數可以定義在被多個.c文件包含著的頭文件中? 錯誤


這個在編譯時會報錯的,但是如果使用static修飾就可以編譯通過。


4.


在X86下,有這些程序:


#include


#include


int main()


{

union


{


short k;


char i[2];


}*s,a;


s = &a;


s->i[0] = 0x39;


s->i[1] = 0x38;


printf("%x
", a.k);


system("pause");

return 0;


這道題問的是輸出的什麼?這裡牽扯的知識點 聯合體和大小端存儲,x86是小端存儲,這種東西就得靠記了。。沒辦法大家都知道聯合體空間公用對吧,short長度為2B,char i[2]長度也為2B.所以你的a.k雖然並未賦值,但是你等於輸出了char i[2]數組中的內容,他們雖然名字不同現在他們內容是一樣的。 這就考驗我們大小端的概念了。


接下來下面是我畫的這道題的理解圖:


大家也知道讀取數據一般是從高位開始讀,比如一個數字 120 我們肯定是先看他最大的位對吧(高位)


所以這道題的答案是 3839


我再截圖驗證一下:


5.求下列程序輸出結果


#include


#include


int main()

{


unsigned char a = 200;


unsigned char b = 100;


unsigned char c = 0;


c = a + b;


printf("%d %d", a + b, c);


system("pause");


return 0;


這道題主要考的是你對unsigned的理解,接下來我畫一張圖幫大家理解


現在我說的對不對呢? 大家看看輸出結果

6.在x86,vc++ 6.0環境下,有下列程序


#include


#include


int main()


{


char c;


unsigned char uc;


unsigned short us;


c = 128;


uc = 128;

us = c + uc;


printf("0x%x
", us);


us = (unsigned char)c + uc;


us = c + (char)uc;


system("pause");


return 0;


}


做這道題前應該知道 char 的取值範圍是-128 ~ 127,所以當你給uc賦128的時候,它真實的值為-128.


具體我說的對不對? 看看運行結果。


想要一起學習C++的可以加裙二四八八九四四三零,裙內有各種資料滿足大家,歡迎加裙


7.


#include


#include


struct tagAAA


{


unsigned char ucld : 1;


unsigned char ucpara : 2;


unsigned char ucState : 6;


unsigned char ucTail : 4;


unsigned char ucAvail;


unsigned char ucTail2;


unsigned char ucData;


}AAA_S1;


struct tagAAA2


{


unsigned int ucld : 1;


unsigned int ucpara : 2;


unsigned int ucState : 6;


unsigned int ucTail : 4;


unsigned int ucAvail;


unsigned int ucTail2;


unsigned int ucData;


}AAA_S2;


int main()


{


printf("%d %d
", sizeof(AAA_S1), sizeof(AAA_S2));


system("pause");


return 0;


}


求AAA_S再分別為1位元組對齊和四位元組對齊的情況下,佔用空間的大小:?


答案為 6 16.


這個問題就是位域的問題,我有專門關於結構體對齊的博客,不懂可以過去看一看。


8.


#include


#include


#pragma pack(4);


int main()


{


unsigned char puc[4];


struct sagPIM{


unsigned char ucpim1;


unsigned char ucDate:1;


unsigned char ucDate1:2;


unsigned char ucDate2:3;


}*pstPimData;


pstPimData = (struct sagPIM*)puc;


memset(puc, 0, 4);


pstPimData->ucpim1 = 2;


pstPimData->ucDate = 3;


pstPimData->ucDate1 = 4;


pstPimData->ucDate2 = 5;


printf("%02x %02x %02x %02x
", puc[0], puc[1], puc[2], puc[3]);


system("pause");


return 0;


}


這個主要還是位域,還有存儲的一些關係了。


因為按照位域存儲,該結構體只需要2個位元組即可存儲全部內容,然後開始思考他內部的結構。


下來我畫一個圖理解一下。


再看看運行的結果吧 有圖有真相。


這些題目都很經典,可以幫助我們理解一些藏在深處的知識,各種坑各種容易犯的錯誤。。


想要一起學習C++的可以加裙二四八八九四四三零,裙內有各種資料滿足大家,歡迎加裙



C語言你不可以錯過的8個經典題目


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 C加加 的精彩文章:

Linux下C語言的幾道經典面試題
C語言入門只需如此簡單
C語言基礎——結構體

TAG:C加加 |

您可能感興趣

不知道取什麼題目了,不寫題目了
題目有十一個字不信你數
窮盡腦力想不到一個合適的題目的題目
我沒有想好這個離別的題目
不知道什麼題目,只是突然這麼想的
王維一首詩只有4句,有3句都描寫了不可能之景,看題目才明白!
史上最奇葩的一首詩,題目就有50個字,大多數人連題目都背不出
不知作者也沒有題目,28字古詩卻有4個「幾」,讀來如同一首歌
所謂「癌症性格」是不是一個聳人聽聞的題目
一篇不會起題目的文
想不出題目了
不知道起什麼題目了
據說這是10個難倒無數人的面試題目……
題目沒出好,作文寫不了
今年的作文題目 你覺得哪個最難寫 網友直言「幸虧我已經考過了」
看圖猜成語:有人說題目很簡單,可就是猜不對!
這些走錯片場的猜成語題目,每一個,都能讓你懷疑智商
為什麼做題目難以下手又盯著題目?
這些詩的題目有近60個字,比內容還多,你見過最長的詩名是幾個字?
看圖猜成語:挺簡單的,可是還有人連題目都看不懂!