知識點
①常用的函數(shù)及庫

②小心使用全局變量
例如:
#include<cstdio>
int g = 0;
int f() { g++; return g; } //修改全局變量的函數(shù)
int main() {
int a = f();
int b = f();
printf("%d %d\n", a, b);
return 0; }
運行后a!=b。
③精度問題
#include<cstdio>
int main() {
double f;
for(f = 2; f > 1; f -= 1e-6);
printf("%.7f\n", f);
printf("%.7f\n", f / 4);
printf("%.1f\n", f / 4);
return 0; }
輸出如下:
0.9999990
0.2499998
0.2
分析發(fā)現(xiàn),在不斷減1e-6的過程中出現(xiàn)了誤差,使得循環(huán)終止時f并不等于1,而是比1小 一點。在除以4保留1位小數(shù)時成了0.2。如果不出現(xiàn)誤差,正確答案應(yīng)該是0.25四舍五入保留 一位小數(shù),即0.3。有 一種方法可以緩解這種情況:加上一個EPS以后再輸出。這里的EPS通常取一個比最低精度 還要小幾個數(shù)量級的小實數(shù)。例如,要求保留3位小數(shù)時取EPS為1e-6。(但是不總是可行的)
④C++ string類型
C++提供了一個新的string類型,用來替代C語言中的字符數(shù)組。用戶仍然可以繼續(xù)用 字符數(shù)組當(dāng)字符串用,但是如果希望程序更加簡單、自然,string類型往往是更好的選擇。 例如,C++的cin/cout可以直接讀寫string類型,卻不能讀寫字符數(shù)組;string類型還可以像 整數(shù)那樣“相加”,而在C語言里只能使用strcat函數(shù)。
例題:輸入數(shù)據(jù)的每行包含若干個(至少一個)以空格隔開的整數(shù),輸出每行中所有整數(shù)之和。
#include<iostream> #include<string> #include<sstream> using namespace std; int main() { string line; while(getline(cin, line)) { int sum = 0, x; stringstream ss(line); while(ss >> x) sum += x; cout << sum << "\n"; } return 0; }
每行中所有整數(shù)之和。
string類在string頭文件中,而stringstream在sstream頭文件中。首先用getline函數(shù)讀一行數(shù) 據(jù)(相當(dāng)于C語言中的fgets,但由于使用string類,無須指定字符串的最大長度),然后用這 一行創(chuàng)建一個“字符串流”——ss。接下來只需像讀取cin那樣讀取ss即可。
雖然string和sstream都很方便,但string很慢,sstream更慢,應(yīng)謹(jǐn)慎使用

浙公網(wǎng)安備 33010602011771號