ep9_10.cpp
上传用户:wxcui2006
上传日期:2022-07-12
资源大小:1274k
文件大小:3k
- /*9.10 采用筛选法求100以内的所有素数(参见【例3.16】)。将所得数据存入文本文件和二进制文件。
- 对送入文本文件中的素数,要求存放格式是每行10个素数,每个数占6个字符,左对齐;可用任一文本编辑
- 器将它打开阅读。二进制文件整型数的长度请用sizeof()来获得,要求可以正序读出,也可以逆序读出
- (利用文件定位指针移动实现),读出数据按文本文件中的格式输出显示。*/
- /*前半题文本文件与习题3.17相同,只是哪里是右对齐,这里只了新做了二进制文件*/
- #include<fstream>
- #include<iostream>
- #include<iomanip>
- #include<cmath>
- using namespace std;
- const int n=100;
- int main(){
- ofstream ofile;
- ifstream ifile;
- int a[n],i,j;
- char ch,b[256];
- for(i=0;i<n;i++) a[i]=1+i; //用数组保存整数1-100
- a[0]=0; //1不是素数,置0
- for(i=0;i<n;i++){
- if(a[i]==0) continue; //该数已经置0,判断下一个数
- for(j=i+1;j<n;j++) if(a[j]%a[i]==0) a[j]=0; //是a[i]倍数的元素置0;
- }
- ofile.open("myfile9_10.txt");
- int count=0;
- ofile.flags(ios::left);
- ofile<<"1-"<<n<<"之间的素数:"<<endl;
- for(i=0;i<n;i++) //输出所有素数
- if(a[i]!=0){
- ofile<<setw(6)<<a[i];
- count++;
- if(count%10==0) ofile<<endl; //每行10个数据
- }
- ofile.close();
- cout<<"是否要将文本文件输出?Y或N"<<endl;
- cin>>ch;
- if(ch=='y'||ch=='Y'){
- ifile.open("myfile9_10.txt");
- i=0;
- while(ifile.get(b[i])){//读标题,不可用>>,它不能读白字符,
- if(b[i]=='n') break;
- i++;
- }
- b[i]=' ';
- cout.flags(ios::left);
- cout<<b<<endl;
- count=0;
- while(1){
- ifile>>i;//由文件读入
- if(ifile.eof()!=0) break;
- cout<<setw(6)<<i;//屏幕显示
- count++;
- if(count%10==0) cout<<endl; //每行10个数
- }
- ifile.close();
- cout<<endl;
- }
- ofile.open("myfile9_10.dat",ios::out|ios::binary);
- for(i=0;i<n;i++) //输出所有素数
- if(a[i]!=0){
- ofile.write((char*)&a[i],sizeof(int));
- }
- ofile.close();
- cout<<"是否要将二进制文件输出?Y或N"<<endl;
- cin>>ch;
- if(ch=='y'||ch=='Y'){
- count=0;
- ifile.open("myfile9_10.dat",ios::in|ios::binary);
- ifile.clear(0);//采用标准库不可少,前面曾经读到过文件结束,无法恢复
- while(1){
- ifile.read((char*)&i,sizeof(int));
- if(ifile.eof()) break;
- cout<<setw(6)<<i;//屏幕显示
- count++;
- if(count%10==0) cout<<endl;
- }
- ifile.close();
- cout<<endl;
- }
- cout<<"是否要将二进制文件逆序输出?Y或N"<<endl;
- cin>>ch;
- if(ch=='y'||ch=='Y'){
- count=0;
- ifile.open("myfile9_10.dat",ios::in|ios::binary);
- ifile.clear(0);//采用标准库不可少,前面曾经读到过文件结束,无法恢复
- while(1){
- ifile.read((char*)&i,sizeof(int));
- if(ifile.eof()!=0) break;
- count++;
- }
- ifile.clear(0);//当文件读完时,eofbit=1,不清0,后面的操作不能进行
- ifile.seekg(-4,ios::end);
- for(j=1;j<=count;j++){
- ifile.read((char*)&i,sizeof(int));
- cout<<setw(6)<<i;//屏幕显示
- if(j%10==0) cout<<endl;
- ifile.seekg(-8,ios::cur);
- }
- ifile.close();
- cout<<endl;
- }
- return 0;
- }