C語言演算法題的一些技巧

2021-09-10 14:58:56 字數 1297 閱讀 3746

1.floor函式為向下取整函式。floor(x)可以返回x的整數部分。如果想實現四捨五入的效果,可以用floor(x+0.5)。

2.π的表示方法。const double pi = 4.0 * atan(1.0)。atan為反正切函式。

3.想要獲取程式的執行時間,可以用clock()函式,除以clocks_per_sec得到的值以秒為單位。注意需要引入time.h標頭檔案。

但是這個時間會受到輸入的影響。為避免影響,可以在windows命令列裡裡面敲echo x|abc。x是輸入資料,abc是程式名。這種方法叫管道。

4.在windows下,輸入完畢後先按enter鍵,再按ctrl+z,再按enter即可結束輸入。

5.windows的記事本的換行符是/r/n。

6.全域性變數,包括靜態全域性變數,和非靜態全域性變數,在沒有初始化值時,其值自動為0.

即定義在所有函式外,不歸屬於任何乙個函式的,在沒有初始化值時,自動為0。

靜態區域性變數。

當定義在函式內的區域性變數,有static 標記時,預設初始化為0值。

非靜態區域性變數,無缺省初始值,c標準規定初始化值為隨機值,但具體實現由編譯器決定。

7.在c中,char型是一位元組整型,int是四位元組(早期的是二位元組)整型,它們是可以通用的,甚至一些c的庫函式如getc、getchar等在接收鍵盤輸入的字元時返回的就是int型值而並非char型值。char型在%d控制下按int型輸出時符號位將被擴充套件至總長度為四位元組,而int型在%c控制下按char型輸出時,將從低位擷取一位元組而放棄前三個位元組。下面的**可以佐證此情況:

#include "stdio.h"

int main(int argc,char *ar**)

8.while (~scanf("%d%d",&m,&n))什麼用的?

acm中比較常見,其功能是迴圈從輸入流讀取m和n,直到遇到eof為止,等同於while (scanf("%d%d",&m,&n)!=eof)。

scanf()函式返回成功賦值的資料項數,出錯時則返回,eof定義為-1。~是按位取反,-1十六進製制補碼表示為0x ffffffff,f是二進位制的1111,取反後就全部變成0了,於是while結束。只有返回值為eof(即-1)時,其取反的的值(即while迴圈的判斷條件)才為0,才能結束迴圈,其它輸入情況下(無論是否輸入成功)while迴圈的判斷條件為非0,即為真。

這種寫法的漏洞在於:一但輸入的值為字母、符號之類的,scanf賦值不成功把讀到的內容又返回到stdin的緩衝區(假設這個值為t),其取反得到的值使while又進入到下一次迴圈,scanf又從stdin緩衝區裡讀到了原先吐回的t,如此成了死迴圈……

解演算法題的一些基本技巧

解題的流程 1.理解題意 2.思考所有可能的解法,以及對應的時間空間複雜度 3.選擇想到的最優解法編寫 4.寫測試用例 寫 的流程 1.想清楚 的初始狀態,遞推公式 遍歷要執行的操作,終止條件 2.編寫初始化,迴圈遍歷 3.處理邊界值 4.返回結果 常用的一些思想 0.使用雜湊表降低各種查詢,存在判...

C 一些技巧

一如果函式對傳入的指標引數進行修改,一定要把引數設定為指標的指標或者指標的引用 delete the first occurrence of the node which value equals item in a single linked list void delete node head,...

C 語言中的一些程式設計技巧

1 如何對復合型別資料構造stl模版的比較函式。對於通用的stl演算法,比如一些排序演算法或比較演算法,都能夠自己定義比較函式。比如下面的形式 bool compare suitor a,suitor b stable sort suitors,suitors suitor count 1,comp...