第五课 格式控制
目 标
01.了解 C++ 的格式控制。
03.知晓 scanf、printf 与 cin、cout 的区别。
02.学会 scanf 和 printf 函数的使用。
C++语言兼容C语言中的基本语句语法。scanf和printf是C语言中的输入输出函数(语句),在C++语言环境中也可以使用。
“f”是format(格式)之意,就是要按照指定的格式输入输出值,所以,又称为格式输入输出函数。
对于大数据的输入输出,使用scanf和printf,比C++中的输入输出流语句(cin和cout)效率更高、速度更快。
scanf和printf是标准库函数,使用前需要加上cstdio头文件。
01.scanf函数
scanf 函数的格式为:
scanf(格式控制字符串 , 地址表列);
scanf 的作用是输入指定形式的数据。其中,地址列表可以是变量的地址,也可以是字符串的首地址。
例如:int a,b;
scanf(“%d,%d”,&a,&b);
就表示先在内存中各开辟4个字节空间给a和b,当遇到scanf语句时,就把键盘上输入的2个数依次存入a、b所在的空间(及地址中)。“&a”就表示取a变量的地址,“&”称为取地址符。简而言之,就是先找地址后放值。
Scanf的格式控制符:
{5C22544A-7EE6-4342-B048-85BDC9FD1C3A}格式符
说 明
d,i
用于输入十进制整数
u
以无符号十进制形式输入十进制整数
o(字母)
用于输入八进制整数
x
用于输入十六进制整数
c
用于输入单个字符
s
用于输入字符串(非空格开始,空格结束,字符串变量以'\0'结尾)
f
用于输入实数(小数或指数均可)
e
与f相同(可与f互换)
scanf 函数
使用scanf函数时,需要注意以下几个问题:
(1)如果在格式控制字符串中有其它字符,则运行程序输入数据时,对应的位置也要输入这些相同的字符。
例如:scanf(“%d,%d”,&a,&b);
键盘输入应该是“3,4”,而不能是“3 4”。
?
(2)scanf函数输入时可以过滤掉不想读入的字符。
例如:scanf(“%d+%d+%d”,&a,&b,&c);
键盘输入:1+2+3
则scanf可以无视“+”,使得a,b,c的值分别为1,2,3。
再如:scanf(“%3d %*3d %2d”,&m,&n);
键盘输入:113 118 69
则m,n的值分别为113,69,因为“*”表示跳过相应数据。
国内外研究状况
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec luctus nibh sit amet sem vulputate venenatis bibendum orci pulvinar. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec luctus nibh sit amet sem vulputate venenatis bibendum orci pulvinar.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec luctus nibh sit amet sem vulputate venenatis bibendum orci pulvinar. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec luctus nibh sit amet sem vulputate venenatis bibendum orci pulvinar.
例、阅读并上机调试程序,体会scanf的使用。
#include
#include
int main(){
double x1,y1,x2,y2,q;
scanf("%lf %lf %lf %lf",&x1,&y1,&x2,&y2);
q = sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
printf(“%.3f\n”,q);
return 0;
}
国内外研究状况
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec luctus nibh sit amet sem vulputate venenatis bibendum orci pulvinar. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec luctus nibh sit amet sem vulputate venenatis bibendum orci pulvinar.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec luctus nibh sit amet sem vulputate venenatis bibendum orci pulvinar. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec luctus nibh sit amet sem vulputate venenatis bibendum orci pulvinar.
2、Printf函数的格式控制符:
{5C22544A-7EE6-4342-B048-85BDC9FD1C3A} 格式符
说 明
d(或i)
以带符号的十进制形式输出整数,正数的(+)号省略不输出
u
以无符号十进制形式输出整数
x(或X)
以十六进制无符号形式输出整数(不输出前导符0x)
o(字母)
以八进制无符号形式输出整数(不输出前导符数字0)
c
输出一个字符
s
输出字符串
f
以小数形式输出单、双精度,隐含输出6位小数
e(或E)
以指数形式输出单、双精度,隐含输出6位小数
g(或G)
自动选用%f、%e或%E格式中输出宽度较小的一种使用
国内外研究状况
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec luctus nibh sit amet sem vulputate venenatis bibendum orci pulvinar. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec luctus nibh sit amet sem vulputate venenatis bibendum orci pulvinar.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec luctus nibh sit amet sem vulputate venenatis bibendum orci pulvinar. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec luctus nibh sit amet sem vulputate venenatis bibendum orci pulvinar.
Printf函数:d格式符:
{5C22544A-7EE6-4342-B048-85BDC9FD1C3A} 参 数
说 明
%d
输出数字长为变量数值的实际长度
%md
输出m位(不足补空格,大于m位时按实际长度输出)
%-md
m含义同上。左对齐输出
%ld
l(小写字母)表示输出“长整型”数据
%m1d
指定长整型输出宽度m位,左边补空格;否则,按实际位数输出
%0md,%0m1d
0(数字0)表示位数不足m时补0
Printf函数: f格式符:
{5C22544A-7EE6-4342-B048-85BDC9FD1C3A}参 数
说 明
%f
按实数格式输出,整数部分按实际位数输出,6位小数
%m.nf
总位数m(含小数点),其中有n位小数
%-m.nf
同上,左对齐
Printf函数: s格式符:
{5C22544A-7EE6-4342-B048-85BDC9FD1C3A}参 数
说 明
%s
按实际宽度输出一个字符串
%ms
m指定宽度(不足时左补空格,大于时按实际宽度输出)
%-ms
左对齐,不足时右补空格
%m.ns
输出占m个字符位置,其中字符数最多n个,左补空格
%-m.ns
同上,右补空格
【例题】
传说古代的叙拉古国王海伦二世发现的公式,利用三角形的三条边长来求取三角形面积。已知△ABC中的三边长分别为a,b,c,求△ABC的面积。(提示:海伦公式,其中p=(a+b+c)/2 )
参考程序:
#include //Dev C++可调用和库
#include //在Dev C++中可调用数学函数库cmath
int main()
{
float a,b,c,p,s;
scanf("%f%f%f",&a,&b,&c); //输入三角形的三边
p=(a+b+c)/2; //求出p的值
s=sqrt(p*(p-a)*(p-b)*(p-c)); //根据p求面面积,sqrt是开方函数
printf("%0.3f\n",s); //输出面积,0.3f按实际位数输出,保留3位小数
}
运行结果:
输入:3 4 5
输出:6.000
问题分析:公式中p是三角形周长的一半,求出p后直接代入海伦公式中求得面积。
scanf、printf 与 cin、cout 的比较
cin 是输入流,cout 是输出流,重载了“>>”“<<”运算符,包含在头文件 中。
cin 代表标准输入设备,使用提取运算符“>>”从键盘取得数据,送到输入流对象 cin 中,然后送到内存。cin 是自动判断变量类型,比如一个 char 数据只能用默认的 char 方法取数据。
cout 先把要输出的东西存入缓冲区,遇到“endl”或者“return 0”再输出并刷新缓冲区,导致效率降低。
scanf 是格式化输入,printf 是格式化输出,包含在头文件 中。因为scanf是用指针操作的,没有类型安全机制,比如对于一个char类型数据,你就可以用“%f”获得输入,而不会报错,但在运行时会出现异常。scanf()函数取数据时遇到回车、空格、TAB就会停止。
printf输出效率比较高,但是编写代码相对而言麻烦一些。
作业:
例3:歌手大奖赛上6名评委给一位参赛者打分,6个人打分的平均分为9.6分;如果去掉一个最高分,这名参赛者的平均分为9.4分;如果去掉一个最低分,这名参赛者的平均分为9.8分;如果去掉一个最高分和一个最低分,这名参赛者的平均是多少?
参考程序:
#include
int main()
{
float high,low,sall,shigh,slow,ans;
sall=6*9.6;
shigh=5*9.4;
slow=5*9.8;
high=sall-shigh;
low=sall-slow;
ans=(sall-high-low)/4;
printf("ans=%5.2f\n",ans); //%5.2f按实数格式输出,保留2位小数
}
运行结果: 9.60
问题分析:首先求出6名评委的总分,然后根据去掉最高分的总分和最低分的总分,求出最高分的分值和最低分的分值,最后总分减去最高分和最低分除以4即是答案。
感谢各位
Thank you for your