📄 ep9_10.cpp
字号:
/*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]='\0';
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;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -