[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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值