您现在的位置:首页 > 教案格式 > 正文

核心方法:格式控制输入输出SCANF和PRINTF学案

2020-12-27 22:05 网络整理 教案网

格式控制输入输出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;
}