我们编程解题少不了与计算机进行信息交流,把已知数据输入计算机,让计算机把处
理结果等输出,这就是程序设计中数据的输入和输出。C++标准库提供了丰富的输入/输出
功能,本课讨论 C++编程中最基本和最常见的输入输出(I/O)操作。
一、C++的输入与输出
C++输入/输出的表现形式是“流”(stream),“流”是字节的序列。字节流是从设备
(如键盘、磁盘等)流向内存是输入操作;字节流是从内存流向设备(如显示屏、打印机、
磁盘等是输出操作。
1.有关头文件
C++输入输出涉及下列头文件,需要时将它们包含(include)到我们的程序中。
1)iostream 头文件
该头文件定义了 cin、cout 等对象,分别对应于标准输入流和标准输出流。
2)Iomanip 头文件
该头文件通过参数化的流操控器(如 setprecision、setw 等),对标准化输入/输出进行
控制,提供有关服务。
2.数据输出
C++输出数据是通过预定义的对象 cout 来实现的。cout 是输出流 ostream 类的一个实例
(我们可以简单地把这看成是输出命令或输出语句),它默认"连接"到标准输出设备“显
示器”。我们通过输出流插入运算符“<<”把要输出的数据转换成字节流送往 cout(输出
流)中,格式如下:
cout<<表达式 1<<表达式 2<<……
其中,各表达式为输出对象,整型、实型、字符型、字符串型表达式等(包括常量和
变量)均可以输出,输出的是表达式的值。
下面通过具体的实例说明 cout 的用法。
1)基本类型数据的输出
先看一个简单的输出例。
#include <iostream>
using namespace std;
int main( ){
青少年信息学奥林匹克竞赛
©程老师信息学奥赛课堂 17
int a=98, b=20;
cout<<"a+b="<<a<<’+’<<b<<’=’<<a+b<<endl;
float x=100.0, y=3;
cout<<"x/y="<<x/y<<endl; //endl 为换行符
x=1234569.0;
cout<<x/y<<endl;
x=12345696.0;
cout<<x/y<<endl;
return 0;
}
当上面的代码被编译和执行时,它会产生下列结果:
a+b=98+20=118
x/y=33.3333
411523
4.11523+e06
从上面的程序及其执行结果看,整数、字符、字符串数据均按实际宽度输出;而浮点
数(实数)输出有点复杂,具体输出形式由系统根据情况决定。一般地,如果输出数据有
效数字在 6 位以内,则以日常记数形式输出(可能没有小数位);如果有效数字超过 6 位,
则以科学记数形式输出。
3)浮点数的固定小数位输出
一个浮点数,默认的输出形式上面已说明,由系统根据待输出数的有效数字位数自动
选择日常记数形式或科学记数形式。但在程序设计中,我们更多的是需要以日常记数形式
输出,一种办法是用流操控算子 fixed 与 setprecision 实现,具体形式为:
cout<<fixed<<setprecision(n);
其中,fixed 指明用固定小数位输出,setprecision()设置小数位数。
请看下面的例子:
#include<iostream>
#include<iomanip> //使用流操控算算子必须包含此头文件
using namespace std;
int main(){
double x=100, y=15;
cout<<fixed<<setprecision(4);
cout<<x/y<<'\n'; // ’\n’是换行符的另一种表示形式
cout<<setprecision(3)<<x*y<<'\n';
青少年信息学奥林匹克竞赛
©程老师信息学奥赛课堂 18
return 0;
}
上面程序执行结果是:
6.6667
1500.000
3. 设置输出域宽
我们可以根据需要,利用流操纵算子 setw()设置输出数据所占宽度,请看下例:
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int n=123456;
cout<<setw(5);
cout<<n<<endl;
cout<<setw(8)<<n<<endl;
return 0;
}
该程序执行后显示:
123456
123456
注:第二行前有两个空格。
3.数据输入
C++数据输入是通过预定义的对象 cin 实现的。cin 是输入流 istream 类的一个实例(与
cout 一样,我们可以简单地把 cin 看成是输入命令或输入语句)。默认情况下,cin 对象“连
接”到标准输入设备“键盘”。
我们通过输入流提取运算符“>>”完成数据输入。具体来说,当我们从键盘输入字符
时,提取因子后面的变量会根据自己的类型从输入字符流中获取相应类型的数据(取自己
所需)。提取过程在遇到下面两种情况时结束:1)本类型数据不“接纳”的字符,如整型
变量获取数据时遇到非数字字符;2)输入字符流结束。
下面通过实例说明。
1)整数,实数的输入
请看下面的例子:
#include <iostream>
青少年信息学奥林匹克竞赛
©程老师信息学奥赛课堂 19
using namespace std;
int main( ){
int m,n;
float x,y;
cin>>m>>n;
cout<<m<<' '<<n<<endl;
cin>>x>>y;
cout<<x<<' '<<y<<endl;
return 0;
}
当上面的代码被编译、执行后,它会等待用户输入数据,要求输入两个整数和两个实
数。看程序我们知道,在两个输入句中间还有一个输出句,输出变量 m 和 n 的值。所以,
通常我们先输入两个整数,在计算机输出变量 m 和 n 值之后,我们再输入两个实数。正常
情况下输入数据之间都是以一个或多个空格或回车符等相隔。
输入输出例:
89 107 //此行为用户输入
89 107 //此行为程序执行的输出
23.56 65.5 //此行为用户输入
23.56 65.5 //此行也是计算机显示
我们也可以一次性输入:
89 107 23.56 65.5
这种情况下,计算机先从输入流中提取 89 存放在变量 m 中,提取 107 存放在变量 n
中,剩下的字符仍保留在输入流中。当第一个输出句输出 m、n 值之后,计算机执行第二个
输入句,从输入流中提取 23.56 存放在变量 x 中,提取 65.5 存放在变量 y 中。
若输入的字符流中的数据不够,则系统会等待用户输入,直到用户输入足够数据为止。
上面程序执行后,如输入:1 2 3.6,则显示 1 2(m 和 n 的值)并提取实数 3.6 存放在
变量 x,之后等待用户输入。当用户接着输入 5.89 2.91 后,显示:3.6 5.89。(注:2.91 仍
然在输入字符流中)。
程序执行时,如果用户有下列形式的输入:
87-90 100 56 31
则 m=87, n=-90, x=100.0, y=56.0。因为输入中夹杂了字符‘-’。如果把上面输入中的’-’ 换成其它什么字符(如’@’),则 m=87,而 n、x、y 获得的数据是不可预期的.
青少年信息学奥林匹克竞赛
©程老师信息学奥赛课堂 20
2)字符的输入
在为字符型变量输入数据时,字符可以连续输入也可以以空白字符相隔,系统会忽略
这些空白字符(包括换行符),而把输入流中对应的非空白字符存放到相应的字符变量中。
请看下面的例子:
#include <iostream>
using namespace std;
int main( ){
char a,b,c,d;
cin>>a>>b>>c>>d;
cout<<a<<' '<<b<<' '<<c<<' '<<d<<endl;
return 0;
}
执行上面的程序,输入:
+ -*
/ %
屏幕显示:
+ - * /
字符%会留在输入流中。
若输入的字符可能是空格字符时,用 cin 就无法实现了。但我们可以用 C 语言中的格
式化输入函数 scanf()或 getchar()函数(见后)。
3)字符和整数、实数混合输入
当为字符和整数/实数变量混合输入数据时,cin 处理的原则是一样的,首先忽略输入
流中的空白字符,然后依次从流中提取相应类型的数据给对应的变量。如:
#include <iostream>
using namespace std;
int main(){
char c;
int m,n;
cin>>m>>c>>n;
cout<<m<<” “<<c<<” “<<n<<endl;
return 0;
}
如果我们希望 m=58,c=’*’,n=123,可以这样输入:
青少年信息学奥林匹克竞赛
©程老师信息学奥赛课堂 21
58 * 123
也可以这样输入:
58*123
甚至这样输入:
58
*123
但如果我们输入时忘记输入’*’:
58 123
则 m 提取了 58,c 提取了’1’,n 提取了 23。
4.例题
【例题 1】商品处理
问题描述
某商场正在处理一批商品,八折优惠,但每个人只允许购买其中的一种商品,购买的
件数任意。请为该商场编一个计价收款程序,根据顾客购买商品的原价格和购买的件数求
应付款数,保留一位小数输出。
如输入
12.5 2
则输出
20.0
解:用 p 表示商品的原价格,n 代表购买的商品件数,y 为应付款额,则有:y=p*n*0.8,
参考程序如下:
#include<iostream>
#include<iomanip>
using namespace std;
int main(){
float p,y;
int n;
cin>>p>>n;
y=p*n*0.8;
cout<<fixed<<setprecision(1)<<y<<endl;
return 0;
}
青少年信息学奥林匹克竞赛
©程老师信息学奥赛课堂 22
【例题 2】右对齐输出
问题描述
读入三个整数,按每个整数占 10 个字符的宽度,右对齐输出它们,即不管三个数分别
为多少位,程序保证输出的三个数右对齐。
如输入
123456789 0 -1
则输出
123456789
0
-1
解:通常整数是按实际宽度输出。现在要求三个整数右对齐输出而不论它们各自的位
数,就需要指定输出占用宽度。
参考程序如下:
#include<iostream>
#include<iomanip>
using namespace std;
int main(){
int a,b,c;
cout<<setw(10);
cin>>a>>b>>c;
cout<<a<<endl<<b<<endl<<c<<endl;
return 0;
}
二、格式化输入输出
C++语言是在 C 语言基础上发展而来,C 语言的语句在 C++中可以继续使用。
C 语言的输入输出语句分别是 scanf()和 printf(),它们是标准库函数,对于不同类型数
据的输入和输出有严格对应的格式要求。在使用前需要包含下列头文件:
#incude<cstdio>或 include<stdio.h>
scanf()和 printf()的输入/输出效率较之 C++中的字符输入输出流 cin 和 cout 的效率要高
不少,所以在输入输出数据量大的时候最好采用 C 语言的格式化输入/输出。
1.格式化输入函数 scanf()
青少年信息学奥林匹克竞赛
©程老师信息学奥赛课堂 23
scanf(输入格式控制串,变量地址列表)
示例:
1) 输入格式控制串,包括两类字符:
一是由“%”开头后跟格式符,如“%d”,“%f”等,表示对应的输入必须是相应类
型的数据;
二是普通字符,这是输入数据中必须原样输入的。如“a=%d,b=%d”中的”a=”、”,”、”b =”都是普通字符,输入时必须原样输入。没有特别需要,输入格式控制串中一般不安排普
通字符。
2) 变量地址列表
由若干个变量地址组成,地址间用逗号相隔。对简单变量,在变量名前冠以“&”就是
变量地址,若是字符数组(串变量),因为数组名就是该数组空间的首地址,所以不必在
字符数组名前加运算符&。
如:
int a,b;
float r;
char s[100];
scanf(“%d%d%f%s”,&a,&b,&r,s);
3)常用的输入格式控制符
格式输入中,输入格式控制符指明对应输入变量的类型。常用的输入格式符有:
d:输入 int 型整数
lld:输入 long long int 型整数
f:输入 float 型浮点数
lf:输入 double 型浮点数
c:输入单个英文字符(包括空格)
s:输入字符串,将字符串送到一个字符数组中,输入时以非空字符开始,以第一个空
格字符结束。。
4)格式化输入注意事项
A、一般情况下,输入格式控制串中只包含格式控制符,而不加入普通字符,这样可以
减少程序执行后输入数据的麻烦。这时,各输入数据用空白符(空格、回车、Tab)或“非
法”字符结束。
示例:
#include<cstdio>
scanf(”a=%d,b=%d”,&a,&b);
青少年信息学奥林匹克竞赛
©程老师信息学奥赛课堂 24
#include<iostream>
using namespace std;
int main(){
int a,b,c;
char ch;
scanf("%d%c%d%d",&a,&ch,&b,&c);
cout<<a<<" "<<b<<" "<<c<<" "<<ch<<endl;
return 0;
}
执行时输入
123*678 9876
则有输出
123 678 9876 * 同学们细心体会一下。
B、格式化输入字符型数据时,空格符也是作为有效字符输入,而不是作为输入数据之
间的分隔符。
#include<cstdio>
#include<iostream>
using namespace std;
int main(){
int a,b;
char c1,c2;
scanf("%d%c%c%d",&a,&c1,&c2,&b);
cout<<"a="<<a<<endl;
cout<<"c1="<<c1<<endl;
cout<<"c2="<<c2<<endl;
cout<<"b="<<b<<endl;
return 0;
}
执行时输入:
123 567(两数间有一个空格)
则输出:
a=123
c1=
青少年信息学奥林匹克竞赛
©程老师信息学奥赛课堂 25
c2=5
b=67
第二行输出的“=”后应该有一个空格,只是不可见而已,这从 c2 读到字符“5”可以看
出来。
2、格式化输出函数 printf()
printf(格式控制串,输出列表)
示例:
1) 格式控制串
与格式输入函数中的格式控制串类似,输出格式控制串也包括两类字符:
一是输出格式控制符,由“%”开始后跟格式符,如“%d”,“%f”等,表示将输出
列表中对应输出项转换为相应类型格式输出;
二是普通字符,即需要原样输出的字符。如示例中的“*”、“=”等,输出时将原样输出。
反过来说,若需要在输出中包含特定字符,则应该把这些字符以普通字符形式放在输出格
式串中。
2) 输出列表
输出列表中列出的就是实际要输出的数据,由若干个表达式(包括常量、变量等特殊
表达式)组成。这·实际输出的是各表达式的值而非表达式本身。看下面的例子:
#include<cstdio>
int main(){
int a=3,b=5;
float r=3.14;
printf("a=%d,b=%d,a+b=%d\n",a,b,a+b);
printf("r=%f\n",r);
return 0;
}
执行结果为:
a=3,b=5,a+b=8
r=3.140000
3)常用输出用格式符
与输入格式控制符相似,输出格式控制符指明输出列表中对应数据输出类型。常用的
输出格式符有:
printf(“%d*%d=%d\n”,a,b,a*b);
青少年信息学奥林匹克竞赛
©程老师信息学奥赛课堂 26
d:输出 int 型整数
u:输出 unsigned int 型整数
lld:输出 long long int 类型整数
llu:输出 unsigned long long int 类型整数
c:输出英文字符
s:输出英文字符串
f:用日常记数形式输出 float 类型浮点数(默认 6 位小数)
lf:用日常记数形式输出 double 类型浮点数(默认 6 位小数)
4)附加格式说明符
附加格式说明符配合格式说明符使用,放在格式说明符前。下面举例说明:
printf(“%10d\n%-10d\n”,198,198);
该语句执行后会显示:
198 //有 7 个前导空格
198 //后面有 7 个空格占位,附加格式控制符’-’的作用
printf(“%.3f\n%8.3f\n”,20.0/3,20.0/3); //注意小数位的控制
该语句执行后会显示:
6.667
6.667 //前面有 3 个前导空格
,如“%8d%9.2f%-10s”等。常见附加格式说明符见下表(m,n 分别代表一个非负整数):
5)两点说明
A、格式符是以%开头的,若上面的格式控制符出现在其它位置上应视为普通字符。如:
char c=’@’;
float f=1.23;
printf(“ c=%c\nf=%.3f\n”,c,f);
格式控制串中两个%后的字符 c 和 f 是格式符,另外的那个 c 和 f 是普通字符,会原样
输出的。上面的 printf()的输出为:
c=@
f=1.230
B、如果想输出字符"%",则应该在“格式控制”字符串中用连续两个%表示,如:
printf("%f%%", 1.0/3);
青少年信息学奥林匹克竞赛
©程老师信息学奥赛课堂 27
输出
0.333333%。
3)例题
问题描述
给定一个字符,用它构造一个对角线长 5 个字符的菱形。
样例输入
*样例输出
*
***
*****
***
* 解:问题较为简单,这里直接给出程序,大家注意体会 scanf()和 printf()函数的用法。
#include<cstdio>
int main(){
char x;
scanf("%c",&x);
printf(“%3c\n”,x);
printf(“%2c%c%c\n”,x,x,x);
printf(“%c%c%c%c%c\n”,x,x,x,x,x);
printf(“%2c%c%c\n”,x,x,x);
printf(“%3c\n”,x);
return 0;
}
习题三
1、输出第二个整数
问题描述
输入三个整数,把第二个输入的整数输出。
青少年信息学奥林匹克竞赛
©程老师信息学奥赛课堂 28
输入
只有一行,共三个整数,整数之间由一个空格分隔。
样例输入
123 456 789
样例输出
456
2、输出浮点数(保留 3 位小数)
描述
读入一个单精度浮点数,保留 3 位小数输出这个浮点数。
样例输入
12.34521
样例输出
12.345
3、长方形的周长和面积
描述
已知长方形的长为 a,宽为 b,求它的周长和面积(其中周长保留一位小数,面积保留
两位小数)。
输入样例
5 3
输出样例
16.0 15.0

第三课 数据的输入与输出相关推荐

  1. scanf可不可以输入浮点型_数据的输入和输出

    一.基本数据类型C 的基本数据类型有 short.int.long.char.float.double 等.类型多且杂,学习时极易厌烦,这时建议使用思维导图来整理这些繁杂但有章的知识.做思维导图时首先 ...

  2. 入职培训笔记记录--day2续(1、运算符 2、数据的输入与输出 3、控制语句)

    再基础的东西也是要细心过一遍时间用的不多,但是还是有效果的. ---------------------------------------- 1.运算符 1.条件运算符(三目运算符): 表达式1 ? ...

  3. vb教材笔记_VB课堂笔记-----第五章 数据的输入与输出

    第五章 数据的输入与输出(笔试2-4分) 需要掌握:3个方法.2个函数.1个语句 一.Print输出方法 格式: 对象名.Print 表达式-- 功能:输出表达式的结果(计算和输出) 注: 1)对象名 ...

  4. 闭着眼睛也要会打的【数据的输入和输出有几道练习题】---- HDU1089-1096

    对于数据的输入和输出有几道练习题 HDU1089-1096 HDU1089 [google自动翻译,将就着看吧] 一个输入输出的实践(一) 问题描述 你的任务是计算A + B. 太容易了?!当然!我专 ...

  5. c语言中向计算机输入,C语言中字符数据的输入和输出

    字符的输出 C语言中使用putchar函数来输出字符数据 #include int main() { char a,b,c,d; //定义字符变量a,b,c,d a = 'F'; b = 'U'; c ...

  6. 回归预测 | MATLAB实现PSO-GCNN粒子群算法优化分组卷积神经网络的数据多输入单输出回归预测

    回归预测 | MATLAB实现PSO-GCNN粒子群算法优化分组卷积神经网络的数据多输入单输出回归预测 目录 回归预测 | MATLAB实现PSO-GCNN粒子群算法优化分组卷积神经网络的数据多输入单 ...

  7. 帮我用python写一个程序 输入三个列表数据 使用熵权法计算这三组数据的权重并输出...

    好的,以下是用Python实现熵权法计算三组数据权重的代码: import numpy as np# 定义熵权法函数 def entropy_weight(x):x = np.array(x)# 计算 ...

  8. 【回归预测】基于TPA-LSTM(时间注意力注意力机制长短期记忆神经网络)实现数据多输入单输出回归预测附matlab代码

    1 内容介绍 随着当今时代科技不断地飞速发展,科技信息也在急剧增加,收集并挖掘分析这些来源多样化的科技信息,有助于推动科技的发展.而预测作为一种重要的数据研究方法,在各个行业各个领域都有着广泛的应用. ...

  9. c++ double 只输出五位_c 语言第四章 在控制台上数据的输入和输出

    1 数据输出 我们之前已经使用过printf()函数来实现数据在控制台上输出 #include<stdio.h> int main(){printf("hello world&q ...

最新文章

  1. 归并排序执行次数_归并排序过程、时间复杂度分析及改进
  2. OPNET仿真zigbee
  3. ubuntu 打开ssh登陆_Ubuntu 开启远程登录 SSH 的安装和配置
  4. 2、HTML <img>标签(插入图片)
  5. linux文件的打包与下载总结,linux下文件的打包和压缩
  6. HDU - 6186 CS Course(维护前缀+后缀)
  7. inotify 机制
  8. 探索Julia(part11)--自定义函数
  9. JS中通过call方法实现继承
  10. 一文带你了解如何打造持续学习文化
  11. Android开发之自定义的ProgressDialog
  12. Gitbub远程仓库的访问
  13. TortoiseHg 学习笔记
  14. react-redux多reducer完整实例
  15. html中怎么写小箭头,HTML+CSS入门 CSS用伪类制作小箭头
  16. android+照片合成,图片合成修图神器手机版
  17. 视频编辑器GoPro Quik for mac中文版
  18. 搜索引擎登录站点-提交网站(大全)
  19. 带分数 -- 蓝桥杯
  20. spring注解详解与用法(总览)

热门文章

  1. linux进系统黑屏,kail-linux 进入系统时黑屏
  2. anaconda无法打开显示there is an instance of anaconda navigator already running ——如何解决
  3. 最新HGVS基因突变命名规则速览
  4. 如何正确给手机充电?
  5. mysql语句优化难点大全_mysql优化建议大全
  6. 苹果iPhone 5C和5S发布后,消费者如何选择?
  7. vue 打开新的窗口
  8. InkScape绘制LOGO教程 渐变色
  9. 【线段树】「CodePlus 2018 3 月赛」白金元首与克劳德斯
  10. c语言考试编程题万能公式,C语言程序设计历年统考试题集10套含答案(可编辑)