程序实践:C++流和文件流

理论练习题

试题一

编写一个程序,输入一个整数,分别以十进制、八进制和十六进制数值输出,输出十六进制值时限用大写字母。

解:对应的程序如下:

 #include <iostream.h>
 #include <iomanip.h>
 void main()
{    
  int n;    
  cout << "输入一个整数:";    
  cin >> n;    
  cout << "十 进 制:" << n << endl;   
  cout << "八 进 制:" << oct << n << endl;   
  cout << "十六进制:" << hex << setiosflags(ios::uppercase) << n << endl;
}

试题二

设计一个类Student,其说明如下:
class Student

class Student
{
  int no;
  char *name
  char sex[2];
public:
  Student();
  friend istream & operator >> (istream & stream,Student & s)
  friend ostream & operator << (ostream & stream,Student & s)
};

实现该类,并编写main()函数对该类进行操作。

解:对应的程序如下:

 #include <iostream.h>
class Student
{
   int no;
   char *name;    
   char sex[2];
public:    
   Student()      {        
     name=new char[10];    
   }     

   friend istream & operator >> (istream & stream,Student & s){
        cout << "输入一个学生数据" << endl;        
        cout << "  学号:";
        stream >> s.no;        
        cout << "  姓名:";        
        stream >> s.name;        
        cout << "  性别:";        
        stream >> s.sex;       
        return stream;
   }
   friend ostream & operator << (ostream & stream,Student & s){
       cout << "输出一个学生数据" << endl;        
       cout << "  学号:" << s.no << endl;        
       cout << "  姓名:" << s.name << endl;       
       cout << "  性别:" << s.sex << endl;       
       return stream;
   }
  }

  void main(){
      Student A;    
      cin >> A;    
      cout << A;
   }

上机实习题

试题一

编写一个程序,实现以下功能:

(1)输入一系列的数据(学号、姓名、成绩)存放在文件stud.dat中。

(2)从该文件中读出这些数据并显示出来。

解:先设计一个类Stud,其中包括一个学生数据的操作,然后建立两个普通函数inputfunc()、outputfunc(),分别实现功能(1)和(2)。

参考程序

#include <fstream>
#include <iostream>
#include <iomanip> 

using namespace std;

class Stud {
	int no;   //学号
    char name[10]; //姓名
	int score;  //成绩 

public:
	void getdata()  {
		cout << "(学号 姓名 成绩):";
		cin >> no >> name >> score;
	}  

	void disp()  {
		cout << setw(6) << no << setw(10) << name << setw(6) << score << endl;
	}
}; 

void outputfunc() {
	ofstream output("stud.dat");
	Stud s;
	int n;  

	cout << "输入数据" << endl;
	cout << "  学生人数:";
	cin >> n;  

	for (int i=0;i<n;i++)  {
		cout << "  第" << i+1 << "个学生";
		s.getdata();   

		output.write((char *)&s,sizeof(s));
		};
	output.close();
} 

void inputfunc() {
	ifstream input("stud.dat");
	Stud s;  

	cout << "输出数据" << endl;
	cout << "    学号   姓名    成绩" << endl;
	input.read((char *)&s,sizeof(s));  

	while (input)  {
		s.disp();
		input.read((char *)&s,sizeof(s));
	};
	input.close();
} 

int main() {
  int sel;
  do
  {
	cout << "选择(1:输入数据 2:输出数据 其他退出):";
    cin >> sel;
    switch(sel)
    {
   		case 1: outputfunc(); break;
   		case 2: inputfunc(); break;
   }
  } while (sel==1 || sel==2); 

  return 0;
 }

输出结果

试题二

编写一个程序,输入一系列的数据(学号、姓名、成绩)存放在文件stud.dat中。输出这些学生数据和相应的成绩等级(≥90为优,80~89为良,70~79为中,60~69为及格,≤59为不及格)。要求在上题的基础上实现。

解:在上题的Stud类中添加一个数据成员level,getdata()成员函数根据输入的score计算出该等级值。

参考程序

 #include <string>
 #include <fstream>
 #include <iostream>
 #include <iomanip> 

 using namespace std;

 class Stud
 {
  int no;
  char name[10];
  int score;
  char level[7];
 public:
  void getdata() {
  	cout << "(学号 姓名  成绩):";
	cin >> no >> name >> score;
	if (score>=90)
		strcpy(level,"优");
	else if (score>=80)
		strcpy(level,"良");
	else if (score>=70)
		strcpy(level,"中");
	else if (score>=60)
		strcpy(level,"及格");
	else
	    strcpy(level,"不及格");
  }  

  void disp()  {
  	cout << setw(6) << no << setw(10) << name << setw(6)     << score << setw(8) << level << endl;
 }
}; 

void outputfunc() {
	ofstream output("stud.dat"); 

	Stud s;
	int n;  

	cout << "输入数据" << endl;
	cout << "  学生人数:";
	cin >> n;  

	for (int i=0;i<n;i++)  {
		cout << "  第" << i+1 << "个学生";
		s.getdata();
		output.write((char *)&s,sizeof(s));
	};
	output.close();
} 

void inputfunc() {
	ifstream input("stud.dat");
	Stud s;
	cout << "输出数据" << endl;
	cout << "    学生   姓名    成绩   等级" << endl;
	input.read((char *)&s,sizeof(s));  

	while (input)  {
		s.disp();
		input.read((char *)&s,sizeof(s));
	};
	input.close();
} 

int main()
{
	int sel;
	do  {
		cout << "选择(1:输入数据 2:输出等级  其他退出):";
		cin >> sel;
		switch(sel)   {
			case 1:outputfunc();break;
			case 2:inputfunc();break;
		}
	} while (sel==1 || sel==2); 

	return 0;
} 

输出结果

关于Program Language更多讨论与交流,敬请关注本博客和新浪微博songzi_tea.

时间: 2024-10-21 22:35:53

程序实践:C++流和文件流的相关文章

重要的几种流:文件流、缓冲流、转换流!

一.文件流(字节流,字符流) 1.字节流 package com.zijie; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; public class TestFileInputStream { public static void main(String[] args) { int b = 0; FileInputStream in = null

Java中常用IO流之文件流的基本使用姿势

所谓的 IO 即 Input(输入)/Output(输出) ,当软件与外部资源(例如:网络,数据库,磁盘文件)交互的时候,就会用到 IO 操作.而在IO操作中,最常用的一种方式就是流,也被称为IO流.IO操作比较复杂,涉及到的系统调用比较多,相对操作内存而言性能很低.然而值得兴奋的是,Java提供了很多实现类以满足不同的使用场景,这样的实现类有很多,我只挑选些在日常编码中经常用到的类进行说明,本节主要介绍和文件操作相关的流,下面一起来瞧瞧吧. File File是Java在整个文件IO体系中比较

C#流总结(文件流、内存流、网络流、BufferedStream、StreamReader/StreamWriter、TextReader/TextWriter)

一.文件流 FileStream类主要用于读写磁盘文件.常用于向磁盘存储数据或读取配置文件. 读取文件:复制代码 //文件流:读取 FileStream fileStream = File.Open(@"D:\test.txt", FileMode.Open);//初始化文件流 byte[] array = new byte[fileStream.Length];//初始化字节数组,用来暂存读取到的字节 fileStream.Read(array, 0, array.Length);/

springboot 头像上传 文件流保存 文件流返回浏览器查看 区分操作系统 windows 7 or linux

1 //我的会员中心 头像上传接口 2 /*windows 调试*/ 3 @Value("${appImg.location}") 4 private String winPathPic; 5 /*linux 使用*/ 6 @Value("${img.location}") 7 private String linuxPathPic; 8 9 @PostMapping(value = "/file") 10 public String file(

C++学习47 文件的概念 文件流类与文件流对象 文件的打开与关闭

迄今为止,我们讨论的输入输出是以系统指定的标准设备(输入设备为键盘,输出设备为显示器)为对象的.在实际应用中,常以磁盘文件作为对象.即从磁盘文件读取数据,将数据输出到磁盘文件.磁盘是计算机的外部存储器,它能够长期保留信息,能读能写,可以刷新重写,方便携带,因而得到广泛使用. 文件(file)是程序设计中一个重要的概念.所谓“文件”,一般指存储在外部介质上数据的集合.一批数据是以文件的形式存放在外部介质(如磁盘.光盘和U盘)上的.操 作系统是以文件为单位对数据进行管理的,也就是说,如果想找存在外部

JAVA学习--文件流FileInputStream和FileOutputStream操作

* 1.流的分类: * 按照数据流向的不同:输入流  输出流 * 按照处理数据的单位的不同:字节流  字符流(处理的文本文件) * 按照角色的不同:节点流(直接作用于文件的)  处理流 *  * 2.IO的体系 * 抽象基类            节点流(文件流)                                缓冲流(处理流的一种) * InputStream        FileInputStream            BufferedInputStream * Outp

C++文件流类与文件流对象具体介绍

文件流是以外存文件为输入输出对象的数据流.输出文件流是从内存流向外存文件的数据,输入文件流是从外存文件流向内存的数据.每一个文件流都有一个内存缓冲区与之对应. 请区分文件流与文件的概念,不用误以为文件流是由若干个文件组成的流.文件流本身不是文件,而只是以文件为输入输出对象的流.若要对磁盘文件输入输出,就必须通过文件流来实现. 在C++的I/O类库中定义了几种文件类,专门用于对磁盘文件的输入输出操作.在 图13.2(详情请查看:与C++输入输出有关的类和对象)中可以看到除了标准输入输出流类istr

【C#小知识】C#中一些易混淆概念总结(九)---------异常,文件流对象,.NET序列化,多线程

终于有时间来完成这个系列的最后一篇关于C#中异常,文件流对象,序列化,多线程问题的总结. 首先就来看关于异常的相关知识吧 一,异常 首先区分三个概念:警告,异常和错误.不管对于编程新手或者是老手对这三个概念都应该是非常熟悉,且是经常遇到的. 警告:在程序中出现,对于程序的执行没有影响. 异常:在运行的时候发生,一旦发生程序就会停止. 错误:一直是 指程序不符合语法规范. 在C#中的标准抛出异常的语句如下: try { //尝试执行的语句 } catch (Exception) { //抛出异常的

Java 基础(四)| IO 流之使用文件流的正确姿势

为跳槽面试做准备,今天开始进入 Java 基础的复习.希望基础不好的同学看完这篇文章,能掌握泛型,而基础好的同学权当复习,希望看完这篇文章能够起一点你的青涩记忆. 一.什么是 IO 流? 想象一个场景:我们在电脑上编辑文件,可以保存到硬盘上,也可以拷贝到 U 盘中.那这个看似简单的过程,背后其实是数据的传输. 数据的传输,也就是数据的流动.既然是流动也就会有方向,有入方向和出方向.举个上传文件的栗子,现在有三个对象,文件.应用程序.上传的目标地址(服务器).简化的上传文件有两步: 应用程序读文件