一、定義π的時候能夠經過C庫函數的acos()實現
(一般儘可能用const關鍵字聲明常數)linux
const double pi=acos(-1.0);
acos()函數的聲明:windows
double acos(double x);
參數:數組
x——浮點值在區間[-1,+1]
返回值:函數
返回x的反餘弦,在區間[0,π]弧度.
二、數據類型的範圍測試
int min -2147483648 max 2147483647 10^10 unsigned int min 0 max 4294967295 10^10 long long min -9223372036854775808 max 9223372036854775807 10^19
代碼驗證:spa
int main() { int i=1; while(i>0) i++; cout<<"min "<<i<<endl; cout<<"max "<<i-1<<endl; return 0; }
double型浮點數能精確到多少位小數:16位 (15~16)
float型浮點數能精確到多少位小數: 7位 (6~7)操作系統
代碼驗證:命令行
double i = 1.0, j = 3.0; printf("%.20lf\n",i/j);//超過必定位數就會開始產生錯誤數據
double存儲最大字節數 : 8
double型浮點數最大正數值:1.7976931348623158e+308
(可是注意,初始化的數字位數過長,會致使編譯器內部緩衝溢出)指針
代碼驗證:code
int main(){ double i=0.0000000000000001; for(;i>0;i+=0.0000000000000001){ } printf("%.100lf\n%.100lf\n",i,i-1); return 0; }
float 存儲最大字節數 : 4
float 最小值: 1.175494E-38
float 最大值: 3.402823E+38
精度值: 6
代碼驗證:
#include <stdio.h> #include <float.h> int main() { printf("float 存儲最大字節數 : %lu \n", sizeof(float)); printf("float 最小值: %E\n", FLT_MIN ); printf("float 最大值: %E\n", FLT_MAX ); printf("精度值: %d\n", FLT_DIG ); return 0; }
三、需注意的優先級
邏輯運算符優先級:!> && > || 不過最好加括號咯 按位與& > 按位異或^ > 按位或|
四、stdio是standard I/O的縮寫 頭文件只包含函數的聲明和一些宏定義,真正的函數定義在庫中,編譯時用不上,連接時纔會加入進去
五、floor()返回不超過x的最大整數 向下取整,直接去掉小數部分
floor(x+0.5)就能夠實現四捨五入啦
六、測試程序運行時間:
printf("Time used = %.2lf\n", (double)clock()/CLOCKS_PER_SEC);//頭文件<time.h>,以秒爲單位
七、爲了不輸入數據的時間影響測試結果,可使用「管道」
在windows命令行下 執行 echo 20|abc 操做系統會自動把20輸入,其中abc是程序名 linux下須要輸入echo |./abc 由於默認狀況下,當前目錄不在可執行文件的搜索路徑中
八、輸入輸出重定向
freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); //在正式提交的時候要記得註釋掉
Windows 下用fc命令進行文件比較 Linux下 diff
有一種方法在本機測試時用文件重定向,可是一旦提交到比賽就自動刪除的重定向語句(只須要刪除#difine LOCAL)
#define LOCAL//只有定義了符號LOCAL,才能編譯裏面兩條語句 int main() { #ifdef LOCAL freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); #endif }
#include <fstream> using namespace std; ifstream fin("test.in"); ofstream fout("test.out"); int main() { int a,b; while(fin>>a>>b) fout<<a+b<<"\n"; return 0; } //若是想要標準輸入,只須要把fin和fout的聲明語句去掉 //而後加上這兩行:#define fin cin #define fout cout //用輸入輸出流時,標準輸入流cin比文件流fin慢不少
更好的方法是在編譯選項中定義LOCAL而不是在程序中,這樣在提交的時候就不用刪除了.
(實施方法留待補充)
若比賽要求用文件輸入輸出,但禁用重定向方式,解決方法:
int main(){ FILE *fin,*fout; fin=fopen("data.in","rb"); fout=fopen("data.out","wb"); ... fscanf(fin,"%d",&x); fprintf(fout,"%d\n",x); fclose(fin); fclose(fout); return 0; }
注意:若是想把fopen版的程序改爲讀寫標準輸入輸出,只需賦值:
fin=stdin; fout=stdout;
不需調用fopen和fclose.
重定向:寫起來簡單天然,可是不能同時讀寫文件和標準輸入輸出
fopen:雖然繁瑣,可是靈活性較大(eg:能夠反覆打開並讀寫文件)
!還有一個條件編譯 待了解和熟悉掌握!!!
九、while循環時最好是判斷一下scanf()的返回值.
十、注意數組放在main()函數外才能開的很大,放在裏面的時候稍微過大就會異常退出
十一、要把數組a複製k個元素到數組b:
memcpy(b,a,sizeof(int)*k);//頭文件string.h memcpy(b,a,sizeof(a));//a中元素所有複製
十二、scanf("%s",s);會讀入一個不含空格、TAB、回車符的字符串//char s[maxn]
strchr(s,'a');//在一個字符串中查找單個字符 sprintf(buf,"%d%d%d%d%d",a,b,c,d,e);//輸出到字符串buf,注意保證buf有足夠空間
strlen(s)能夠返回字符串s中結束標記以前的字符個數 strcpy(a,b),strcmp(a,b),strcat(a,b)
1三、用typedef定義結構體
typedef struct { doublex,y; }Point;
1四、指針問題
int *a;//聲明的變量a 是指向int型變量的指針; a=&b;//把變量b的地址存放在指針a中 //(*a)表示a指向的變量 //注意指針若是沒有賦初值,你不知道它指向哪裏,若是它指向系統區,不可被寫入,程序可能會崩潰
計算左閉右開區間內元素和:(關於數組做爲參數傳遞問題)兩種sum重要寫法
//方法一: int sum(int *begin,int *end) { int n=end-begin;//數組形式傳遞的實際上是數組首地址 int ans=0; for(int i=0;i<n;i++) ans+=begin[i]; return ans; }
//方法二: int sum(int *begin,int *end) { int *p=begin;//注意定義指針時必定要記得給它賦初值 int ans=0; for(int *p=begin;p!=end;p++) ans+=*p; return ans; }
1五、讀取一整行的方法:
//方法一: string line; getline(cin,line);
//方法二: char str[maxn]; cin.getline(str,maxn);//讀入char數組 //cin.getline第三個參數表示間隔符,默認爲換行符'\n'。讀入不須要考慮最後的換行符。
//方法三: char buf[maxn];//讀取不超過maxn-1個字符 fgets(buf,maxn,fin);//可使用它兄弟gets()可是不推薦
//方法四: char str[1024]; int i=0; while((str[i]=getchar())!='\n') i++; getchar(); //說明:這樣一個一個讀也能夠,也會把開頭的空格讀進來。最後也須要考慮換行符,使用getchar()讀處理。
//方法五: char str[1024]; scanf("%[^\n]",&str); getchar();
scanf函數也可完成這樣的功能,並且還更強大。這裏主要介紹一個參數,%[ ],這個參數的意義是讀入一個字符集合。[ ]是個集合的標誌,所以%[ ]特指讀入此集合所限定的那些字符,好比%[A-Z]是輸入大寫字母,一旦遇到不在此集合的字符便中止。若是集合的第一個字符是"^",這說明讀取不在"^"後面集合的字符,既遇到"^"後面集合的字符便中止。注意此時讀入的字符串是能夠含有空格的,並且會把開頭的空格也讀進來。
注意:若是要循環的屢次從屏幕上讀取一行的話,就要在讀取一行後,在用%c讀取一個字符,將輸入緩衝區中的換行符給讀出來。不然的話,在下一次讀取一行的時候,第一個就遇到'n',匹配不成功就直接返回了。這裏能夠用scanf()或者getchar()函數讀取換行符。
1六、結構體的一種賦值方式(我日常比較少用)
template <typename T> Struct Point{ T x,y; Point(T x=0,T y=0):x(x),y(y){}; };
1七、