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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言编程题目(一)

發布時間:2023/12/20 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言编程题目(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?1人閱讀?評論(0)?收藏?舉報

轉自:http://blog.csdn.NET/oqqhutu12345678/article/details/69524383


1. 用預處理指令#define 聲明一個常數,用以表明1年中有多少秒(忽略閏年問題)
#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL?




2. 寫一個“標準”宏MIN,這個宏輸入兩個參數并返回較小的一個。
#define MIN(A,B) ((A) <= (B) (A) : (B))?
注意大小寫的問題、括號的問題
4.?嵌入式系統中經常要用到無限循環,你怎么樣用C編寫死循環呢?
這個問題用幾個解決方案。我首選的方案是:?
while(1)?
{?
}?
一些程序員更喜歡如下方案:?
for(;;)?
{?
}?
第三個方案是用 goto?
Loop:?
...?
goto Loop;


5. 用變量a給出下面的定義?
a) 一個整型數(An integer)?int a
b) 一個指向整型數的指針(A pointer to an integer) int* ptr
c) 一個指向指針的的指針,它指向的指針是指向一個整型數(A pointer to a pointer to an integer) int** ptr
d) 一個有10個整型數的數組(An array of 10 integers) int a[10]
e) 一個有10個指針的數組,該指針是指向一個整型數的(An array of 10 pointers to integers)int* p[10]?
f) 一個指向有10個整型數數組的指針(A pointer to an array of 10 integers) in (*p)[10]
g) 一個指向函數的指針,該函數有一個整型參數并返回一個整型數(A pointer to a function that takes an integer as an argument and returns an integer) int (*p)(int)
h) 一個有10個指針的數組,該指針指向一個函數,該函數有一個整型參數并返回一個整型數( An array of ten pointers to functions that take an integer argument and return an integer )int (*p[10])(int)


答案是:?
a) int a; // An integer?
b) int *a; // A pointer to an integer?
c) int **a; // A pointer to a pointer to an integer?
d) int a[10]; // An array of 10 integers?
e) int *a[10]; // An array of 10 pointers to integers?
f) int (*a)[10]; // A pointer to an array of 10 integers?
g) int (*a)(int); // A pointer to a function a that takes an integer argument and returns an integer?
h) int (*a[10])(int); // An array of 10 pointers to functions that take an integer argument and return an integer?


6. 關鍵字static的作用是什么?
這個簡單的問題很少有人能回答完全。在C語言中,關鍵字static有三個明顯的作用:?
1). 在函數體,一個被聲明為靜態的變量在這一函數被調用過程中維持其值不變。?
2). 在模塊內(但在函數體外),一個被聲明為靜態的變量可以被模塊內所用函數訪問,但不能被模塊外其它函數訪問。它是一個本地的全局變量。?
3). 在模塊內,一個被聲明為靜態的函數只可被這一模塊內的其它函數調用。那就是,這個函數被限制在聲明它的模塊的本地范圍內使用。?


修飾變量:在函數內,表示此變量在調用的過程中它的值維持不變;
? ? ? ? ? 在函數外,表示靜態變量,可以被本文件使用,但不能被其他文件使用。
修飾函數:表示是靜態函數,只能被該文件中其他函數調用;


7.關鍵字const是什么含意??
const int a; 表示a是一個常整數
int const a; 表示a是一個常整數
const int *a; 表示a是一個指向常整數的指針
int * const a; 表示a是一個指向整數類型的常指針
int const * a const;表示a是一個指向常整數類型的常指針


前兩個的作用是一樣,a是一個常整型數。第三個意味著a是一個指向常整型數的指針(也就是,整型數是不可修改的,但指針可以)。第四個意思a是一個指向整型數的常指針(也就是說,指針指向的整型數是可以修改的,但指針是不可修改的)。最后一個意味著a是一個指向常整型數的常指針(也就是說,指針指向的整型數是不可修改的,同時指針也是不可修改的)。如果應試者能正確回答這些問題,那么他就給我留下了一個好印象。


8. 關鍵字volatile有什么含意 并給出三個不同的例子。
一個定義為volatile的變量是說這變量可能會被意想不到地改變,這樣,編譯器就不會去假設這個變量的值了。精確地說就是,優化器在用到這個變量時必須每次都小心地重新讀取這個變量的值,而不是使用保存在寄存器里的備份。下面是volatile變量的幾個例子:?
1). 并行設備的硬件寄存器(如:狀態寄存器)?
2). 一個中斷服務子程序中會訪問到的非自動變量(Non-automatic variables)?
3). 多線程應用中被幾個任務共享的變量?


表示該變量是易變的,編譯器不應該去優化該值,即編譯器不會去假設這個變量的值。它必須去內存中重新獲取該值,而不是用寄存器中保存的值。
(1)并行設備的硬件寄存器
(2)一個服務子程序中訪問到的非自動變量。
(3)多線程應用中被幾個任務共享的變量。




1). 一個參數既可以是const還可以是volatile嗎?解釋為什么。?
可以,比如寄存器變量,我們希望它是只讀的,但是仍可能是易變的。
2). 一個指針可以是volatile 嗎?解釋為什么。?
buffer指向一個地址被A線程使用,B線程修改了buffer所指的地址,同時希望A線程使用新地址,設置volatile。
3). 下面的函數有什么錯誤:?
int square(volatile int *ptr)?
{?
return *ptr * *ptr;?
}?
Ptr由于是volatile類型,是易變的,兩次取得的值可能不一樣。因此此函數可能無法完成平方的功能。
Ptr內容可能被修改,無法保證兩次取得同一個值,應該先取出值放入一個變量中,然后通過這個變量來計算
9. 嵌入式系統總是要用戶對變量或寄存器進行位操作。給定一個整型變量a,寫兩段代碼,第一個設置a的bit 3,第二個清除a 的bit 3。在以上兩個操作中,要保持其它位不變。
#define BIT3 (0x1<<3)?
static int a;?
void set_bit3(void)?
{?
a |= BIT3;?
}?
void clear_bit3(void)?
{?
a &= ~BIT3;?
}?


#define BIT3 (0x1<<3) //注意括號
void set_bit3(void)
{?
? a | =BIT3
}
Void clear_bit3
{
? A&=~BIT3
}


10. 嵌入式系統經常具有要求程序員去訪問某特定的內存位置的特點。在某工程中,要求設置一絕對地址為0x67a9的整型變量的值為0xaa66。編譯器是一個純粹的ANSI編譯器。寫代碼去完成這一任務。
Int *p;
P=(int*)0x67a9;
*p=0xaa66;


Int *p=(int *)0x67a9;
*p=0xaa6;




11. 中斷是嵌入式系統中重要的組成部分,這導致了很多編譯開發商提供一種擴展—讓標準C支持中斷。具代表事實是,產生了一個新的關鍵字__interrupt。下面的代碼就使用了__interrupt關鍵字去定義了一個中斷服務子程序(ISR),請評論一下這段代碼的。
__interrupt double compute_area (double radius)?
{?
double area = PI * radius * radius;?
printf(" Area = %f", area);?
return area;?
}
(1)中斷不應該有返回值
(2)中斷子程序中應該盡量少使用浮點類型,因為不可重入,以及printf也是不可重入的,在不同平臺移植會出錯。
(3)中斷不應該傳參


12 . 下面的代碼輸出是什么,為什么?
void foo(void)?
{?
unsigned int a = 6;?
int b = -20;?
(a+b > 6) puts("> 6") : puts("<= 6");?
}
>6 ?
無符號整形和符號整形數字相加時,后者自動轉化為無符號整形,因此應該是>6
13. 評價下面的代碼片斷:


unsigned int zero = 0;?
unsigned int compzero = 0xFFFF;?
/*1's complement of zero */
因為不知道該平臺是幾位的,因此這個寫法是不對的,正確寫法應該是
unsigned int compzero=~0;


14. 盡管不像非嵌入式計算機那么常見,嵌入式系統還是有從堆(heap)中動態分配內存的過程的。那么嵌入式系統中,動態分配內存可能發生的問題是什么?
主要有三種類型:
內存泄露、
內存碎片、
內存崩潰  
內存崩潰是內存使用最嚴重的結果,主要原因有數組訪問越界、寫已經釋放的內存、指針計算錯誤、訪問堆棧地址越界等等。碎片收集的問題,變量的持行時間等等
下面的代碼片段的輸出是什么,為什么?


char *ptr;?
if ((ptr = (char *)malloc(0)) == NULL)?
puts("Got a null pointer");?
else?
puts("Got a valid pointer");?
該代碼的輸出是“Got a valid pointer”。




15. Typedef 在C語言中頻繁用以聲明一個已經存在的數據類型的同義字。也可以用預處理器做類似的事。例如,思考一下下面的例子:?
#define dPS struct s *?
typedef struct s * tPS;?


答案是:typedef更好。思考下面的例子:?
dPS p1,p2;?
tPS p3,p4;
第一個擴展為?
struct s * p1, p2;


上面的代碼定義p1為一個指向結構的指,p2為一個實際的結構,這也許不是你想要的。第二個例子正確地定義了p3 和p4 兩個指針。


16. C語言同意一些令人震驚的結構,下面的結構是合法的嗎,如果是它做些什么??
int a = 5, b = 7, c;?
c = a+++b;
上面的代碼被處理成:?
c = a++ + b;?
因此, 這段代碼持行后a = 6, b = 7, c = 12。?

總結

以上是生活随笔為你收集整理的c语言编程题目(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

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