格式控制输入输出SCANF和PRINTF学案

格式控制输入输出SCANFPRINTF

C++语言兼容C语言中的基本语句语法。scanfprintf是C语言中的输入输出函数(语句),在C++语言环境中也可以使用。

"f"是format(格式)之意,就是要按照指定的格式输入输出值,所以,又称为格式输入输出函数。

对于大数据的输入输出,使用scanf和printf,比C++中的输入输出流语句(cin和cout)效率更高、速度更快。

scanf和printf是标准库的函数,使用前需要加上<cstdio>头文件。

1#printf函数

printf函数的格式为:printf(格式控制字符串,输出列表);

格式控制字符列表

格式字符说明
%d以十进制形式输出带符号整数,正号不输出
%o以八进制形式输出无符号整数,不输出前缀0
%x,%X以十六进制形式输出无符号整数,不输出前缀0x
%u以十进制形式输出无符号整数
%c以字符形式输出一个字符
%s输出字符串
%f,%lf以小数形式输出单、双精度浮点数,隐含输出6位小数
e,%E以指数形式输出实数
%l加在格式符d、o、x、u前,用于长整型数据

使用说明:

1)输出整数形式可以用%d%md,m为指定的输出字符的宽度,输出数据右对齐。

2)输出长整型可以用%ld,一个int型数据可以用%d%ld格式输出。

3)输出字符串用%s,如printf("%s", "hello");

4)%ms,输出的字符串占m列,如字符串本身长度大于m,则突破m的限制,将字符串全部输出;若串的长度小于m,则左补空格。

5) “%-ms”,若串长小于 m,则在 m 列范围内,字符串向左靠,右补空格。

6) “%m.ns”,输出占 m 列,但只取字符串中左端 n 个字符。这 n 个字符输出在 m 列的右侧,左补空格。

7) “%-m.ns”,m、n 含义同上,n 个字符输出在 m 列范围的左侧,右补空格,如果 n>m,则 m自动取 n 值,即保证 n 个字符正常输出。

8) “%m.nf”,输出浮点数,占 m 列,其中有 n 位小数,如果数值长度小于 m,则左补空格。

9) “%-m.nf”,同上,只是使输出的数值向左端靠齐,右端补空格。

示例,上机实验:

//p2-10-1
#include<cstdio>
using namespace std;
int main(){
    printf(%d ” ,1); // 输出 1
    printf(%o ” ,8); // 输出 10
    printf(%x ” ,17); // 输出 11
    printf(%u ” ,12); // 输出 12
    printf(%c ” ,49); // 输出 1
    printf(%s ” ,1ab11 ” ); // 输出 1ab11
    printf(%f ” ,0.14); // 输出 0.140000
    printf(%e ” ,0.1); // 输出 1.000000e-001
    printf(%lld ” ,21473648); // 输出 21473648
}

2#scanf函数

scanf 函数的格式为:

scanf(格式控制字符串 , 地址表列);

scanf 的作用是输入指定形式的数据。其中,地址列表可以是变量的地址,也可以是字符串的首地址。

​ 例如:int a,b;

​ scanf(“%d,%d”,&a,&b);

就表示先在内存中各开辟4个字节空间给a和b,当遇到scanf语句时,就把键盘上输入的2个数依次存入a、b所在的空间(及地址中)。“&a”就表示取a变量的地址,“&”称为取地址符。简而言之,就是先找地址后放值。


使用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,因为“*”表示跳过相应数据。

#include <cstdio>
#include <string>
using namespace std;
int main()
{
    int a;
    double b;
    long c;
    char d;
    char s[101];
    scanf("%d", &a);
    scanf("%f", &b);
    scanf("%d", &c);
    scanf("%c", &d);
    scanf("%s", &s);
    return 0;
}

3#scanf、printf 与 cin、cout 的比较

cin 是输入流,cout 是输出流,重载了“>>”“<<”运算符,包含在头文件 中。

cin 代表标准输入设备,使用提取运算符“>>”从键盘取得数据,送到输入流对象 cin 中,然后送到内存。cin 是自动判断变量类型,比如一个 char 数据只能用默认的 char 方法取数据。

cout 先把要输出的东西存入缓冲区,遇到“endl”或者“return 0”再输出并刷新缓冲区,导致效率降低。

scanf 是格式化输入,printf 是格式化输出,包含在头文件 中。因为scanf是用指针操作的,没有类型安全机制,比如对于一个char类型数据,你就可以用“%f”获得输入,而不会报错,但在运行时会出现异常。scanf()函数取数据时遇到回车、空格、TAB就会停止。

printf输出效率比较高,但是编写代码相对而言麻烦一些。

4#练习

利用scanf输入三角形三边,计算三角形面积,并用printf输出,结果保留两位小数。如不能构成三角形,则输入 “No” 。

输入样例

3 4 5

输出样例

6.00

#include<cmath>
#include<cstdio>
using namespace std;
float a,b,c;
double p,s;
int main()
{
    scanf("%f%f%f",&a,&b,&c);
    if( a + b > c && a + c > b && b + c > a )
       	{
    	p = (a+b+c)/2;
    	s = sqrt(p*(p-a)*(p-b)*(p-c));
    	printf("%.2f\n",s);	
	}

	else 
	printf("No");
    return 0;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值