1. 程式人生 > >[C++]學習面向物件之輸入輸出流

[C++]學習面向物件之輸入輸出流

需要實現的功能:

(1) 輸入三角形的三個a,b,c計算三角形的面積公式是

形成三角形的條件是:a+b>c,b+c>a,c+a>b

編寫程式,輸入a,b,c,檢查a,b,c,是否滿足條件,如不滿足,由cerr輸出錯誤資訊。

#include<iostream>
#include<math.h>

using namespace std;
class area
{
public:
        void input();
private:
        double a;
        double b;
        double c;
};
void area::input()
{
        double s;
        cout<<"請輸入三角形的三邊:"<<endl;
        cin>>a>>b>>c;
        s=(a+b+c)/2;
        if(a+b>c&&b+c>a&&c+a>b)
                cout<<sqrt(s*(s-a)*(s-b)*(s-c))<<endl;
        else
                cerr<<"輸入的三邊不符合要求"<<endl;        
}
int main()
{
        area a;
        a.input();
        return 0;
}

(2) 從鍵盤輸入一批數值,要求保留3位小數,在輸出時上下行小數點對齊。

A) 用控制符控制輸出格式

B) 用流成員函式控制輸出格式。

#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
        double a,b,c;
        cout<<"input a b c"<<endl;
        cin>>a>>b>>c;
        cout<<"a:"<<setprecision(4)<<setiosflags(ios::left)<<a<<endl;
        cout<<"b:"<<setprecision(4)<<setiosflags(ios::left)<<b<<endl;
        cout<<"c:"<<setprecision(4)<<setiosflags(ios::left)<<c<<endl;
        
        cout.precision(4);
        cout<<"a:"<<a<<endl;
        cout<<"b:"<<b<<endl;
        cout<<"c:"<<c<<endl;
        return 0;
}

(3) 建立兩個磁碟檔案f1.dat和f2.dat,程式設計序實現以下工作:

A) 從鍵盤輸入20個整數,分別存放在兩個磁碟檔案中(每個檔案放10個整數);

B) 從f1.dat讀入10個數,然後存放到f2.dat檔案原有的資料後面;

C) 從f2.dat中讀入20個整數,將它們按從從小到大的順序存放到f2.dat(不保留原來資料)。


#include<fstream>
#include<iostream>
#include<stdlib.h>
using namespace std;
void save_f1()
{
        int a[10];
        ofstream outfile("f1.dat",ios::out);
        if(!outfile)
        {
                cerr<<"open error"<<endl;
                exit(1);
        }
        cout<<"enter 10 integer numbers:"<<endl;
        for(int i=0;i<10;i++)
        {
                cin>>a[i];
                outfile<<a[i]<<" ";
        }
        outfile.close();//存放10個數據到f1.dat

}
void save_f2()
{
        int a[10];
        ofstream outfile("f2.dat");
        if(!outfile)
        {
                cerr<<"open error"<<endl;
                exit(1);
        }
        cout<<"enter 10 integer numbers:"<<endl;
        for(int i=0;i<10;i++)
        {
                cin>>a[i];
                outfile<<a[i]<<" ";
        }
        outfile.close();//存放10個數據到f2.dat
}
void load_f1_save_f2()
{
        int b[10];
        ifstream infile("f1.dat");
        if(!infile)
        {
                cerr<<"open error"<<endl;
                exit(1);
        }
        cout<<"從f1.dat中讀10個數據到b陣列中:";
        for(int i=0;i<10;i++)
        {
                infile>>b[i];
                cout<<b[i]<<" ";
        }
        cout<<endl;
        infile.close();//從f1.dat中讀10個數據到b陣列中

        ofstream outfile("f2.dat",ios::app);
        for(i=0;i<10;i++)
        {
                outfile<<b[i]<<" ";
        }
        outfile.close();//存放到f2.dat檔案原有的資料後面
}
void load_f2_save_f2()
{
        int a[20];
        int i;
        int x=0,y=0,n=0,t;
        
        ifstream infile("f2.dat");
        if(!infile)
        {
                cerr<<"open error"<<endl;
                exit(1);
        }
        cout<<"從f2.dat中讀20個數據到a陣列中:";
        for(i=0;i<20;i++)
        {
                infile>>a[i];
                cout<<a[i]<<" ";
        }
        cout<<endl;
        infile.close();

        
        for(x-0;x<20;x++)
        {
                for(y=0;y<20;y++)
                {
                        if(a[x]<a[y])
                        {
                                t=a[x];
                                a[x]=a[y];
                                a[y]=t;
                                
                        }
                }
        }
        cout<<"小到大順序:";
        for(i=0;i<20;i++)
        {
                cout<<a[i]<<" ";
        }
        cout<<endl;

        ofstream outfile("f2.dat",ios::out);
        cout<<endl;
        for(i=0;i<20;i++)
        {
                outfile<<a[i]<<" ";
                cout<<a[i];

        }
        outfile.close();//將從小到大的順序存入f2.dat
}


int main()
{
        save_f1();
        save_f2();
        load_f1_save_f2(); 
        load_f2_save_f2();
        return 0;
}