⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ep9_10.cpp

📁 这里有大量的c语言习题呢!真的是题海哦
💻 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 + -