ch01 程序設計入門
const double pi = acos(-1.0);
提示:
- 不要加sysytem pause或者get插入()讓程序按任意鍵退出
- 一般情況下,你的程序不能直接讀取鍵盤和控制屏幕:不要在競賽中使用getch() getche() gotoxy() clrscr()函數
- 不使用conio.h,腦韓getch() clrscr()等函數
- 競賽中,輸出應以回車符結束,包括最后一行,輸出的兩個數或者字符串之間應該以單個空格隔開
- 盡量使用const關鍵字聲明常數
ch02 循環(huán)結構
提示:
- 如果有多個并列,情況不交叉的條件需要一一處理,可以用else if語句
- 建議盡量縮短變量的定義范圍,例如,在for循環(huán)的初始化部分定義循環(huán)變量
- 浮點運算可能存在誤差,注意浮點誤差
- c99沒有規(guī)定int類型的確切大小,但是在競賽片平臺中,int都是32位的,及-2146483648~2147283647
- 可以使用time。h和clock()函數獲得程序運行時間,常數CLOCKS_PER_SEC與操作系統(tǒng)有關,不要直接使用clock()的返回值,而應該總是除以CLOCKS_PER_SEC
- 上述位避免輸入時間使用技巧“管道”,windows命令行執(zhí)行 echo 10(輸入)|abc(程序名稱)
- 兩個小工具:輸出中間結果和計時工具
算法競賽中的輸入輸出
- 變量在未賦值之前的值是不確定的,特別的他不一定等于0
用文件:把輸入輸出保存在文件中,使用文件的最簡單的方法是使用輸入輸出重定向,需要在main函數的入口處加
freoprn("input.txt","r",stdin);
freopen("output.txt","w",stdout);
注意:事實上,不只是scanf和printf,所有讀鍵盤輸入,寫屏幕輸出的函數都將改用文件。(競賽前看相關讀寫規(guī)定,使用文件時注意文件名和路徑)
- 主義在多數據的題目中,某些變量沒有重置會影響到下組數據的求解
- 當嵌套的兩個代碼塊中有同名變量時,內層的變量會屏蔽外層變量,有時候會引起十分隱蔽的錯誤
ch03 數組和字符串
比較大的數組應盡量生命在main()函數外,否則程序無法進行
a復制k個元素到數組b memcpy(b,a,sizeof(int)*k) 記得包含頭文件strig。h 如果全部復制到b中 memcpy(b,a,sizeof(a))
字符串本質是數組。賦值 比較 鏈接 strcpy strcmp strcat 記得不能用= == +等運算符
輸入字符串的方法:scanf("%s"),但是碰到空格和tab會停下來:
解決方法:
(1)fgetc(fin)讀取一個打開的文件fin,讀取一個字符,然后返回一個int值。讀取字符時應該檢查它不是EOF后再將其轉換成char值。
從標準輸入讀取一個字符可以用getchar 等價于fgetc(stdin)
以為不同os的回車換行不一樣,用fgetc和getchar時,應避免寫與操作系統(tǒng)相關的程序
(2)fgets(buf,maxn,fin)讀取完整的一行放在字符數組buf中定義常量數組能簡化代碼,定義時候無須指明大小,編譯器會計算
ch03 函數和遞歸
- c語言用調用棧(call stack)來描述函數之間的調用關系
調用棧由stack frame組成,每個frame對應一個未運行完的函數