C語言學習篇(程式類)

2021-09-19 13:36:33 字數 2337 閱讀 5087

用預處理指令#define 宣告乙個常數,用以表明1年中有多少秒(忽略閏年問題)

#define seconds_per_year (60 * 60 * 24 * 365)ul
註解:

1)#define 語法的基本知識(例如:不能以分號結束,括號的使用,等等);

2)直接寫出你是如何計算一年中有多少秒而不是計算出實際的值,是更清晰而沒有代價的;

3)意識到這個表示式將使乙個16位機的整型數溢位-因此要用到長整型符號l,告訴編譯器這個常數是的長整型數;

4)如果你在你的表示式中用到ul(表示無符號長整型),那麼你有了乙個好的起點。記住,第一印象很重要。

寫乙個"標準"巨集min ,這個巨集輸入兩個引數並返回較小的乙個

#define mix(a,b) ( (a) <= (b) ? (a) : (b) )
註解:

1)三重條件操作符的知識。這個操作符存在c語言中的原因是它使得編譯器能產生比if-then-else更優化的**;使用括號。

預處理器標識#error的目的是什麼?

答:#error 停止編譯並顯示錯誤資訊。

用變數a給出下面的定義

1)乙個指向指標的的指標,它指向的指標是指向乙個整型數;int **a;

2)乙個指向有10個整型數陣列的指標;int (*a)[10];

3)乙個指向函式的指標,該函式有乙個整型引數並返回乙個整型數;int (*max_function)(int a);

4)乙個有10個指標的陣列,該指標指向乙個函式,該函式有乙個整型引數並返回乙個整型數;int (*a[10])(int);

給定乙個整型變數a,寫兩段**,第乙個設定a的bit 3,第二個清除a 的bit 3。在以上兩個操作中,要保持其它位不變。(位操作題)

#define bit3 (0x01<<3)

static int a;

void set_bit3(void)

void clear_bit3(void)

6.設定一絕對位址為0x67a9的整型變數的值為0xaa55。(固定記憶體操作題)

int *ptr;

ptr = (int*)0x67a9;

*ptr = 0xaa55;

__interrupt double compute_area (double radius)  

這個函式有太多的錯誤了,以至讓人不知從何說起了:

1)  isr 不能返回乙個值。如果你不懂這個,那麼你不會被雇用的。

2) isr 不能傳遞引數。如果你沒有看到這一點,你被雇用的機會等同第一項。

3)   在許多的處理器/編譯器中,浮點一般都是不可重入的。有些處理器/編譯器需要讓額處的暫存器入棧,有些處理器/編譯器就是不允許在isr中做浮點運算。此外,isr應該是短而有效率的,在isr中做浮點運算是不明智的。

4)  與第三點一脈相承,printf()經常有重入和效能上的問題。如果你丟掉了第三和第四點,我不會太為難你的。不用說,如果你能得到後兩點,那麼你的被雇用前景越來越光明了

請找出下面**中的所有錯誤 (題目不錯,值得一看)  //說明:以下**是把乙個字串倒序,如「abcd」倒序後變為「dcba」  

#include"string.h"   

int main(void)   

解答:

// 找出錯誤,一共有4個錯誤;   

int main()   

// 改進該函式提高效率: (方法一需要額外的儲存空間,效率不高.) 不錯的想法

#include #include main()

printf("%s",str);

return 0;

}

int a = 0x9f;

a &=~(1<<2);

uint8_t temp0 =0,temp1 = 0,temp2 = 2,te*** =0;

uint32_t temp = 0;

temp= (temp0<<24)|(temp1<<16)|(temp2<<8)|te***;

//此處定義了陣列為15個,但沒有明確給出大小

uint8_t length;

uint8_t data =;

length=sizeof(data)/sizeof(data[0]);//陣列佔記憶體總空間,除以單個元素佔記憶體空

printf("data length=%d\r\n",length);//輸出為15

c語言學習篇

c語言 編譯 執行c程式 include intmain 1.了解c語言結構 main 主函式,所有c語言程式都要包含主函式,從main 函式開始執行 include 是乙個預處理的命令,用來引入標頭檔案 stdio.h 是乙個標頭檔案 標準輸入輸出標頭檔案 printf 格式化輸出到螢幕。prin...

C語言學習 函式篇

函式需要前置,因為系統會預設主函式先執行。為什麼使用函式 避免重複性操作。提高程式可讀性,方便後期修改和完善。有利於程式的模組化。函式類似於乙個黑盒子,有時候不需要知道裡面你怎麼執行的,知道如何用就好了。函式形參用完之後記憶體空間會被釋放,void表示沒有返回值。函式是c語言的基本單位。什麼是函式 ...

C語言學習篇(概念題)

關鍵字static的作用是什麼?1 在模組內 在函式內 則此靜態變數只能在該函式內使用,超出範圍不能使用,但是它還占用記憶體,還存在。2 在模組內 但在函式體外 乙個被宣告為靜態的變數可以被模組內所用函式訪問,但不能被模組外其它函式訪問,它是乙個本地的全域性變數。3 在模組內,乙個被宣告為靜態的函式...