C C OJ 小tips 慢慢更新

2021-10-19 02:09:02 字數 1788 閱讀 7384

目錄:

一、結構體賦值

二、浮點數比較

三、一些運算精度的問題

後序會繼續更新

在一般情況下,編寫結構體在賦值的時變數名會比較複雜,舉例如下:

struct studentinfostu,

*stuptr;

讀入資料賦值:

scanf

("%d %c"

,&stu.id,

&stu.gender)

;

但實際上在定義結構體時,結構體內部有預設生成的建構函式,建構函式名與結構體型別名相同,沒有返回型別(如果有物件導向程式設計經驗的同學應該很容易與類進行模擬記憶);在上述例子中studentinfo{}就是預設聲稱的建構函式,因此我們可以利用這個建構函式,以直接定義studentinfo型別的變數而無需進行初始化。

struct studentinfo

}stu,

*stuptr;

如果要不經初始化定義結構變數那麼我們就需要重新定義建構函式

struct studentinfo

}stu,

*stuptr;

當然也可以簡化成一行

struct studentinfo

//賦值

}stu,

*stuptr;

如此一來就可以在需要的時候直接對結構體變數進行賦值了: (當然也可以通過臨時變數進行賦值)

studentinfo stu = studentinfo(10086, 'm');
一般來說浮點數比較會由於計算機的精度問題導致比較起來存在困難,在大部分oj中,只需要編寫函式使得當a落在[b-eps, b+eps]的區間中,即可判斷a==b成立,在大多數情況下eps取10-8就能夠保證在大多數情況下不會誤判和漏判

在c語言中我們可以通過#define進行巨集定義

這裡是引用

# include

# define equ(a,b) ((fabs((a)-(b)))<(eps))

一定要注意括號是不能夠漏掉的,因為#define進行巨集定義的時候其實就是簡單的換位置,如果不加上括號很容易導致錯誤(具體可以看

相對應的我們不難得出大於,小於的情況

# define more(a,b) (((a)-(b))>(eps))

# define less(a,b) (((a)-(b))<(eps))

tips:

1.π 不需要死記硬背,只需要利用acos(-1.0)即可

2.由於精度問題,在經過大量計算後,可能乙個變數中儲存的0是乙個很小很小的負數(即下溢位),此時如果直接開根號就會導致不在定義域內而出問題,因此需要用eps使得變數保證是在定義域內。

3.在某些由編譯環境產生的原因下,本應為0.00的變數在輸出時可能會變成-0.00這是編譯環境本身的bug,只能夠通過比對後用eps進行修正。

程式設計小 Tips ,持續更新中

任何技能都講究熟能生巧,包括程式設計。但是在敲 的過程中,掌握一些 奇技淫巧 還是可以對提高生產力大有幫助的!下面就記錄下自己學習到的一些小 tips,常用的快捷鍵就不多提了。有些小技巧自己不注意可能永遠不會發現,正如同事所說,有的東西,靠口口相傳!在 ide 中,按住 alt 鍵 拖動滑鼠,可以框...

SQL語句小tips(持續更新)

判斷people id是否是32為字母組成的,統計不滿足要求的資料 select count if binary people id not regexp 0 9a z true,null as people id illegality cnt from people day if expr1 ex...

Tips 持續更新

一般是classpath路徑有問題,或執行目錄有問題 在c語言裡 是或運算子,oracle裡雙豎線是字串連線運算子!ps ef grep ora12c grep v module mxm cut c 9 15 xargs kill 9 更換阿里yum源 使用unzip命令時,檔名必須一致,不可有隱藏...