核心方法:格式控制输入输出SCANF和PRINTF学案
格式控制输入输出SCANF和PRINTF
C++语言兼容C语言中的基本句式语法。scanf和printf是C语言中的输入输出函数(语句),在C++语言环境中也可以使用。
"f"是format(格式)之意,就是要按照选定的格式输入输出值,所以,又称为格式输入输出函数。
对于大数据的输入输出,使用scanf和printf,比C++中的输入输出流语句(cin和cout)效率更高、速度很快。
scanf和printf是标准库的变量,使用前必须加上头文件。
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
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
#include
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 是手动判断函数类别,比如一个 char 数据只能用默认的 char 方法取数据。
cout 先把要输出的东西存入缓冲区,遇到“endl”或者“return 0”再输出并刷新缓冲区,导致效率下降。
scanf 是格式化输入,printf 是格式化输出,包含在头文件 中。因为scanf是用指针操作的,没有类型安全措施,比如针对一个char类型数据,你就可以用“%f”获得输入,而不会报错,但在运行时会出现异常。scanf()函数取数据时遇到回车、空格、TAB就会停止。
printf输出效率非常高,但是编写代码相对而言麻烦一些。
4#练习
利用scanf输入三角形三边,计算三角形面积,并用printf输出,结果保留两位小数。如不能构成三角形,则输入 “No” 。
输入样例
3 4 5
输出样例
6.00
#include
#include
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;
}
那我应该死了很久了