1. 程式人生 > >常用標頭檔案的可呼叫函式的歸類筆記

常用標頭檔案的可呼叫函式的歸類筆記

1. #include <iostream.h>

在c++中,一般#include < iostream.h > 和 using namespace std一起出現(#include < iostream >一樣的,編譯器不同的緣故,接下來就按照我的編譯器為標準,不一一提示了 )

#include <iostream>
using namespace std;

int main()
{
    cin>>n;
    cout<<n<<endl;
}

控制:
(1) cin >> :輸入


(2) cout << :輸出
(3) endl:換行

2. #include <math.h>

控制:
(1) sqrt(x):計算引數x的平方根
(2) pow(x,y):計算以x為底的y次方值(即x^y)
(3) sin(x):求sin(x),其中x是弧度值
(4) abs(x):求x的絕對值
(5) exp(x):計算以e為底的x次方值(即e^x)
(6) log(x):計算以e為底的x對數值(即ln(x))
(7) log10(x):計算以10為底的x對數值(即lg(x))

3. #include < iomanip >

控制:
(1) dec:十進位制

#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
    int number=1001;
    cout<<dec<<number<<endl;//輸出1001
}

(2) hex:十六進位制

#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
    int number=1001;
    cout<<
hex<<number<<endl;//輸出3e9 }

(3) oct:八進位制

#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
    int number=1001;
    cout<<oct<<number<<endl;//輸出1751
}

(4) setw(n):設域寬為n個字元

用法一

#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
    float pi=3.14159;//包含小數點在內,域寬為 7
    cout<<setw(4)<<pi<<endl;//不按 4位寬度輸出,而是按原來樣式 3.14159的 7位輸出
    cout<<setw(6)<<pi<<endl;//不按 6位寬度輸出,而是按原來樣式 3.14159的 7位輸出
    cout<<setw(7)<<pi<<endl;//剛好 7位輸出
    cout<<setw(8)<<pi<<endl;//最左邊空 1格,然後輸出 7位的 3.14159
    cout<<setw(10)<<pi<<endl;//最左邊空 3格,然後輸出 7位的 3.14159
}

用法二

#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
    cout<<setw(8)<<10<<20<<endl;//先空 6格,再輸出 1020
    //注意,整數 20並沒有按寬度為 8輸出,而是緊挨著10
}

(5) setfill(a):填充字元a

#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
    cout<<setfill('*')
        <<setw(2)<<21<<endl//域寬 2位,整數 21就已經佔滿,所以直接輸出 21
        <<setw(3)<<21<<endl//輸出 *21
        <<setw(4)<<21<<endl;//輸出 **21
    cout<<setfill(' ');//恢復預設設定
}

(6) setiosflags(ios::fixed):固定浮點數顯示
(7) setiosflags(ios::scientific):指數顯示
(8) setprecision(n):顯示數精度為n位

用法一:普通表示輸出中,setprecision(n)表示有效位數

#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
    double num=22.0/7;
    cout<<num<<endl;//沒有設有效位數,預設 6位,輸出 3.14286
    cout<<setprecision(0)<<num<<endl;//C++最小有效位數是 1,所以就算設 0,也按 1位有效位走,輸出 3
    cout<<setprecision(1)<<num<<endl;//輸出 3
    cout<<setprecision(2)<<num<<endl;//輸出 3.1
    cout<<setprecision(3)<<num<<endl;//輸出 3.14
    cout<<setprecision(4)<<num<<endl;//輸出 3.143(都遵循四捨五入)
}

用法二:確定表示的輸出中,setprecision(n)表示小數位數

#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
    double num=22.0/7;
    cout<<num<<endl;//沒有設有效位數,預設 6位,輸出 3.14286
    cout<<setiosflags(ios::fixed);
    cout<<setprecision(0)<<num<<endl;//輸出 3
    cout<<setprecision(1)<<num<<endl;//輸出 3.1
    cout<<setprecision(2)<<num<<endl;//輸出 3.14
    cout<<setprecision(3)<<num<<endl;//輸出 3.143
    cout<<setprecision(4)<<num<<endl;//輸出 3.1429(都遵循四捨五入)
    cout<<resetiosflags(ios::fixed);//清除格式化標記,恢復預設設定
}

用法三:指數形式輸出中,setprecision(n)表示小數位數

#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
    double num=22.0/7;
    cout<<num<<endl;//沒有設有效位數,預設 6位,輸出 3.14286
    cout<<setiosflags(ios::scientific);
    cout<<setprecision(0)<<num<<endl;//輸出 3e+000
    cout<<setprecision(1)<<num<<endl;//輸出 3.1e+000
    cout<<setprecision(2)<<num<<endl;//輸出 3.14e+000
    cout<<setprecision(3)<<num<<endl;//輸出 3.143e+000
    cout<<setprecision(4)<<num<<endl;//輸出 3.1429e+000
    cout<<resetiosflags(ios::scientific);//清除格式化標記,恢復預設設定
}

(9) setiosflags(ios::left):左對齊
(10) setiosflags(ios::right):右對齊

#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
    cout<<setiosflags(ios::right)
        <<setw(5)<<"1"
        <<setw(5)<<"2"
        <<setw(5)<<"3"<<endl;
    cout<<resetiosflags(ios::right);//清除格式化標記,否則接下來會顯示不出來靠左的資料輸出

    cout<<setw(5)<<"1"
        <<setw(5)<<"2"
        <<setw(5)<<"3"<<endl;

    cout<<setiosflags(ios::left)
        <<setw(5)<<"1"
        <<setw(5)<<"2"
        <<setw(5)<<"3"<<endl;
}

輸出結果如下:

    1    2    3//先空4格再輸出,右對齊
1    2    3    //先輸出再空4格,左對齊

(11) setiosflags(ios::uppercase):十六進位制大寫輸出
(12) setiosflags(ios::lowercase):十六進位制小寫輸出

#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
    int number=1001;
    cout<<hex<<setiosflags(ios::uppercase)<<number<<endl;//輸出3E9
}

(13) setiosflags(ios::showpoint):強制顯示小數點

#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
    cout<<6.0/2<<endl;
    cout<<setiosflags(ios::showpoint)<<6.0/2<<endl;
}

輸出結果如下:

3
3.00000

(14) setiosflags(ios::showpos):強制顯示正負號

#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
    cout<<5<<" "<<-10<<endl;
    cout<<setiosflags(ios::showpos)<<5<<" "<<-10<<endl;
}

輸出結果如下:

5 10
+5 -10

4. #include < conio.h >

控制:
(1) getche():會等待你按下任意鍵,再繼續執行下面的語句(我比較喜歡用於執行exe檔案時讓視窗不是一下子消失,而是按下任意鍵後消失)

5. #include < mem.h >(這個是c語言,如果在c++裡呼叫可以用#include < stdlib.h >代替)

控制:
(1) memset():一個位元組一個位元組把整個陣列設定為一個制定的值,第一個引數是陣列的起始地址,第二個引數是設定陣列每個位元組的值,第三個引數是陣列的長度(位元組數,不是元素個數)。其函式原型是:void * memset(void * , int , unsigned);這個函式通常為新申請的記憶體做初始化工作,作用是在一段記憶體塊中填充某個給定的值,它是對較大的結構體或陣列進行清零操作的一種最快方法

#include <mem.h>

int main()
{
    int a[50];
    int b[500];
    memset(a,0,50*sizeof(int));
    memset(b,0,500*sizeof(int));
}

(2) memcpy():其函式原型是:void * memcpy(void * d, const void * s , size_t n);從源src中拷貝n個字元到目標dest中,第一個引數是目標陣列的起始地址,第二個引數是源陣列的首地址,第三個引數是要拷貝的長度(位元組數,不是元素個數)。

#include <iostream>
#include <men.h>
#include <string.h>
using namespace std;

int main()
{
    char src1[50] = "helloworld,guess";
    char dest1[50];
    memcpy(dest1, src1, strlen(src1)+1);//全部複製
    cout<<dest<<endl;

    char src2[50] = "helloworld,guess";
    char dest2[50];
    memcpy(dest2, src2+4, 6*sizeof(char));// 從第 4 個字元(o)開始複製,連續複製 6 個字元(oworld)
    dest2[6]='\0';
    cout<<dest<<endl;
    return 0;
}

6. #include < stdlib.h >

控制:
(1) rand()%b:產生偽隨機數(即每次都一樣的隨機數)

#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
    int magic1,magic2;
    magic1=rand()%b;//產生[0,b-1]之間的偽隨機數
    magic2=rand()%b+a;//產生[a,a+b-1]之間的偽隨機數
    return 0;
}

(2)srand(seed):產生隨機數

#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
    int seed,magic;
    cin>>seed;
    srand(seed);
    magic=rand()%100+1;//產生[1,100]之間的隨機數,但如果輸入的數一樣,則產生的隨機數每次都一樣
    return 0;
}

(3)malloc():獲得堆記憶體
(4)free():釋放堆記憶體

#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
    int size;//元素個數
    int *array;//一個擁有記憶體的指標可以作為一個數組使用
    cout<<"請輸入陣列長度:";
    cin>>size;
    
   array = (int *)malloc( size*sizeof(int));//分配堆記憶體

    for(int i=0;i<size;++i)
        cin>>array[i];

    for(int i=0;i<size;++i)
        cout<<array[i]<<" ";
    cout<<endl;
    free( array );//釋放堆記憶體
    return 0;
}

7. #include < ctime >

(1) time():為程式設計師提供代表時間的字串,使用NULL作為函式引數,使其不具備此功能

#include <cstdlib>
#include <iostream>
#include <ctime>
using namespace std;
int main()
{
    int magic;
    srand(time(NULL));
    magic=rand()%100+1;//產生[1,100]之間的隨機數,隨機數每次都不一樣
    return 0;
}

8. #include < string >

(1) strlen():是一個計數器,它從記憶體的某個位置(可以是字串開頭,中間某個位置,甚至是某個不確定的記憶體區域)開始掃描,直到碰到第一個字串結束符’\0’為止,然後返回計數器值(長度不包含’\0’)。

#include <iostream>
#include <cstring>
using namespace std;
int main()
{
    char array[100];
    int size;
    cin>>array;//只有字元型陣列可以這樣寫輸入的程式碼
    size=strlen(array);
    cout<<size<<endl;
    return 0;
}

(2) strcmp():比較兩個字串,設這兩個字串為str1,str2,若str1等於str2,則返回零;若str1小於str2,則返回負數;若str1大於str2,則返回正數。其原型為int strcmp( const char * str1, const char * ste2 )

#include <iostream>
#include <string>
using namespace std;
int main()
{
    char a[10] = "hello";
    char b[10] = "hello";

    if( strcmp( a, b ) == 0 ) cout<<"相等"<<endl;
    else cout<<"不相等"<<endl;
    return 0;
}

(3) strcpy():把從src地址開始且含有NULL結束符的字串複製到以dest開始的地址空間。其原型為int strcmp( const char * str1, const char * ste2 ) 這個函式一般用於對字元陣列的賦值(因為我們不能對字元陣列賦予一個字串)
錯誤程式碼:

char a[10];
a = "hello";

正確程式碼:

char a[10];
char b[10];
strcpy(a,"hello");
strcpy(b,a);

函式strcpy()僅能對以‘\0’作結束符的字元陣列進行操作。若要對其他型別的陣列賦值可呼叫函式memcpy() (這個函式在上面介紹過)

以上這些也就是我目前學到的常用的積累,之後會繼續補充