C语言的程序设计-数据的输入和输出
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例如:
printf(“%e”,123.456);
输出:1.234560e+002
6位 3位
e格式输出的实数共占13列宽度.
共 25 页 第 15 页
(9) g格式符:根据数值的大小输出实数,自动选 f 格式或 e 格式(选择输出时占宽度较小的一种),且不输出无意 义的零。 例如: f=123.468;
共 25 页 第 3 页
4.1 数据输出
4.1.1 格式输出函数
1. 函数的基本功能 格式:printf(格式控制串,输出表列) 功能:从标准输出设备上,按指定的格式输出对应 的变量。 2. 函数说明: (1) 格式控制串由双引号括起来,由“%”和格式符 以及普通字符(即需要原样输出的字符组成)。 (2)输出表列是需要输出的一些数据,可以是常量、 变量或表达式。 (3)输出的参数必须与格式控制符中的格式说明在类 型、个数和位置上一一对应。
*在用“%c”格式输入字符时,空格字符和“转 义字符”都作为有效字符输入. 如,scanf("%c%c%c",&a,&b,&c); 输入:x y z x字符赋给a,空格字符赋给b, y字符赋给c
提示注意:
输入double型数据,必须用格式说明符%lf或%le,
输入long型数据,必须用%ld。 标准C在scanf中不使用%u说明符,对unsigned型数 据,以%d或%o、%x格式输入。 %后的“*”为附加说明符,用来表示跳过它对应的 数据。 输入时格式控制符中不能加“\n”。 在scanf函数的格式控制字符串中尽量不要出现普 通字符,尤其不能将输入提示放在其中。需要显示 输入提示应该调用printf函数实现。
输出:
VC++下
-1,177777
共 25 页 第 10 页
(3) x格式符,以十六进制数形式输出整数。 (4) u格式符,以十进制形式输出无符号型数据。 [例 ] #include <stdio.h> main() { unsigned int a=65535; int b=-2; printf(“a=%d,%o,%x,%u\n”,a,a,a,a); printf(“b=%d,%o,%x,%u\n”,b,b,b,b); } 输出: a=-1,177777,ffff,65535 b=-2,177776,fffe,65534
printf(“%f %e %g”,f,f,f);
输出如下:
123.468000
10列
1.234680e+002
13列
123.468
10列
共 25 页
第 16 页
几点说明:
1. 格式控制串的控制符号与变量表要一一对应,即: 类型相同,个数相等 2. 格式控制符号用小写字母 3. 格式控制符号之外的符号均照原样显示 4. 若需显示百分号,格式为:%% 5. 如果实际数据所占字符位大于指定的域宽,按实际
1234 1234
实际 左补空
1234
左对齐,右补空
共 25 页 第 8 页
以下程序运行后的输出结果是? main() { int x,y,z; x=y=1; z=x++,y++,++y; printf("%d,%d,%d",x,y,z);}
A)2,3,3
B)2,3,2
C)2,3,1
D)2,2,1
例
怎样输出多个字符? 多个字符怎样排列?
与putchar(97);putchar(98); char c1,c2,c3; 等效 #include<stdio.h> putchar(99); 与printf(“%c%c%c”,c1,c2,c3); c1=a;c2=b;c3=c ; char 等效c1,c2,c3; main( ) putchar(c1); putchar( \n ); c1=a;c2=b;c3=c; { char c=a; putchar(c2); putchar( \n); putchar(c1); putchar( c); a abc putchar(c3); putchar(c2); } b putchar(c3); c 思考 putchar(\n);
共 25 页
第 18 页
4.1.2 字符输出函数
格式: putchar(字符变量) 功能 :在标准输出设备上,输出指定的字符。 说明: * 一次调用只能输出一个字符 * 加上分号成为字符输出语句 * 使用时在程序开头用编译预处理命令
#include”stdio.h” 或: #include<stdio.h>
输出: a,97
a,97
共 25 页 第 12 页
(6) s格式符 输出一个字符串。 说明: 若不指定字符宽度和对齐方式,则输出全部字符串. 例如: printf("%s", "CHINA");
程序运行输出: CHINA 若指定宽度m,实际字符个数大于m,按实际宽度输 出;如果实际字符个数小于m,字符右对齐,左边填 空格。 例如: printf(“s1=%s,s2=%3s,s3=%-5.2s,s4=%.3s", "abcd", "abcd", "abcd", "abcd") ; 程序运行输出: s1=abcd,s2=abcd,s3=ab ,s4=abc
第 23 页
* 格式控制字符串中若包含普通字符,则输入时必须 照原样输入普通字符,否则将导致输入结束。 如:int a,b,c; scanf(“%d,%d,%d”,&a,&b,&c); 输入:1,2,3<回车> * 数值型数据和字符型数据混合输入方法 注意格式说明符以 main() 外的其他字符 { int a,b,c,d,e; scanf(“%d%c%c%c%d”,&a,&b,&c,&d,&e); printf(“a=%d,b=%c,c=%c,d=%c,e=%d”,a,b, c,d,e); } 输入:123abc789<回车> 输出:a=123,b=a,c=b,d=c,e=789
共 25 页 第 22 页
如:int k; scanf(“%3d”,&k); 输入:123456789 * 输入时可以指定域宽 ,不允许规定精度. k为: 123
int a,b ;main( scanf(“%3d %3d”,&a,&b); 例: ) 输入a 123456 {int ,b,c; 系统自动将 123赋给a,456赋给b scanf("%d%d%d",&a,&b,&c) ; printf("%d ,%d ,%d\n",a float x; scanf(“%8.2f ”,&x); ,b,c); } * 输入时,遇下列情况结束 以下三种数据输入方法都可以: ①* 12 15 16 回车,空格 ②* 12 宽度结束 16 * 15 非法输入 ③ 12(按tab键)15 16 共 25 页
共 25 页
第 13 页
(7) f格式符
以小数形式输出实数(包括单、双精度)。
1) %f , 不指定字段宽度,由系统自动指定,使整数部 分全部输出,并输出6位小数(输出双精度数据, 也是6位,但误差降低)。 2) %m.nf , 指定输出的数据共占m列,其中有n位小 数.若数据长度小于m,则左端补空格。
输出
共 25 页
第 17 页
例:分析程序的执行结果 main( ) { int a=16;char e=’A’; unsigned b; long c; float d; b=65535;c=123456;d=123.45; printf(”a=%d,%4d,%-6d,c=%ld\n ”,7指输出宽度, a, a, a, 3表示输 c); 这里 3个字符。 printf(”%o, %x, %u\n”, b, b,出该字符串的前 b); printf(”%f, %e, %13.3e, %g\n”, d, d, d, d); printf(”%c,%s,%7.3s\n”,e,”China”,”Beijing”); }
说明如下: - 当数据的宽度小于显示宽度时,数据左对齐,右方补空格. m 输出数据占m个字符位,不够右对齐,左边填空格。 n 输出数据有n位小数 m.n 输出数据占m列,n位小数
对不同类型的数据使用不同的格式字符。有以 下几种格式符:
共 25 页
第 6 页
基本格式控制符
d: 以十进制带符号形式输出整型数 o:以八进制无符号形式输出整型数 x:以十六进制无符号形式输出整型 u:以十进制无符号形式输出整型数 f:以小数形式输出单、双精度实型数 e: 以指数形式输出单、双精度实型数 c: 以字符形式输出一个字符 s: 以字符形式输出一个字符串 ld:以十进制带符号形式输出长整型数
例:float x=15.3,y=222.225111;
printf(“%f,%6.2f\n”,x,y);
共 25 页
第 14 页
(8) e格式
以指数形式输出实数。
1) %e 不指定输出数据所占的宽度和数字部分小数 位数,由系统自动指定给出6位小数,指数部分占5位,其 中“e”占一位,指数符号占一位,指数占3位.数值按标 准化指数形式输出(小数点前有1位非零数字)。
共 25 页 第 4 页
[例 ]:
#include <stdio.h> main( ) 格式说明(格式字符) { int a=3, b=4; printf(“a=%d b=%d”,a,b); } 运行结果: 输出表列 普通字符 a=3 b=4
共 25 页
第 5 页
3.格式说明符
一般格式:%[-][m][.][n][l]格式符
共 25 页
第 7 页
(1) d格式符: 输出十进制整数。 %d 按整型数据的实际长度输出。 %md m为指定的输出字段的宽度.若数据的位数小于 m,则左端补以空格;若大于m,则按实际位数输出。 %ld 输出长整型数据.
例:int a=1234; printf(“%3d”,a); printf(“%5d\n”,a); printf(“%-5d”,a);
C语言程序设计
第四章
数据的输入和输出
共 25 页
第 1 页
本章要点
• 掌握C语言中输入输出数 据的方法 • 掌握各种格式的使用
共 25 页
第 2 页
数据输入输出的概念 输出:从计算机向显示器、打印机等外部设 备输出数据。 输入:从标准输入设备键盘、鼠标等向计算 机输入数据。 C语言不提供输入输出语句,输入输出操作 是由C函数库中的函数实现。 两个基本的输出(输入)函数: 即:格式输出(输入)函数 字符输出(输入)函数
共 25 页
第wenku.baidu.com9 页
(2)o格式符
以八进制数形式输出整数。
将内存单元中的各位的值(0或1)按八进制形式输出, 输出的数值不带符号,将符号也作为八进制数的一部分 输出。 例如,-1在内存单元中(以补码形式存放)如下:
int
a=-1;
-1: 1 1 11 11 11 11 11 11 11
printf(“%d,%o”,a,a);
VC++下
(5) c 格式符 输出一个字符。
整数的值在33~126范围内,也可以用字符形式输 出。在输出前,将该整数转换成相应的ASCII字符; 字符数据也可以用整数形式输出。 [例 ] #include <stdio.h> main( ) { char c='a'; int i=97; printf("%c,%d\n",c,c); printf("%c,%d\n",i,i); }
编译预处理
请详见附录E
共 25 页 第 19 页
例:#include <stdio.h> main( ) 注意:头文件声明不可少! { char a,b,c; a=„B‟;b=„O‟;c=„Y‟; putchar(a);putchar(b);putchar(c); } 输出:BOY
共 25 页
第 20 页
共 25 页 第 21 页
4.2 数据的输入
4.2.1 格式输入函数
一般形式: scanf(格式控制字符串, 地址表列) “格式控制字符串”的含义同printf函数, “地址表列”:要求是变量的地址,或字符串的首地址. 例如: int a,b,c; scanf(“%d%d%d”,&a,&b,&c); 说明: * scanf 函数中的“格式控制”后面应当是变量地址 而不是变量名。 * 输入数据时,在两个数据之间以一个或多个空格间隔 ,也可以用回车键、跳格键tab分隔。
printf(“%e”,123.456);
输出:1.234560e+002
6位 3位
e格式输出的实数共占13列宽度.
共 25 页 第 15 页
(9) g格式符:根据数值的大小输出实数,自动选 f 格式或 e 格式(选择输出时占宽度较小的一种),且不输出无意 义的零。 例如: f=123.468;
共 25 页 第 3 页
4.1 数据输出
4.1.1 格式输出函数
1. 函数的基本功能 格式:printf(格式控制串,输出表列) 功能:从标准输出设备上,按指定的格式输出对应 的变量。 2. 函数说明: (1) 格式控制串由双引号括起来,由“%”和格式符 以及普通字符(即需要原样输出的字符组成)。 (2)输出表列是需要输出的一些数据,可以是常量、 变量或表达式。 (3)输出的参数必须与格式控制符中的格式说明在类 型、个数和位置上一一对应。
*在用“%c”格式输入字符时,空格字符和“转 义字符”都作为有效字符输入. 如,scanf("%c%c%c",&a,&b,&c); 输入:x y z x字符赋给a,空格字符赋给b, y字符赋给c
提示注意:
输入double型数据,必须用格式说明符%lf或%le,
输入long型数据,必须用%ld。 标准C在scanf中不使用%u说明符,对unsigned型数 据,以%d或%o、%x格式输入。 %后的“*”为附加说明符,用来表示跳过它对应的 数据。 输入时格式控制符中不能加“\n”。 在scanf函数的格式控制字符串中尽量不要出现普 通字符,尤其不能将输入提示放在其中。需要显示 输入提示应该调用printf函数实现。
输出:
VC++下
-1,177777
共 25 页 第 10 页
(3) x格式符,以十六进制数形式输出整数。 (4) u格式符,以十进制形式输出无符号型数据。 [例 ] #include <stdio.h> main() { unsigned int a=65535; int b=-2; printf(“a=%d,%o,%x,%u\n”,a,a,a,a); printf(“b=%d,%o,%x,%u\n”,b,b,b,b); } 输出: a=-1,177777,ffff,65535 b=-2,177776,fffe,65534
printf(“%f %e %g”,f,f,f);
输出如下:
123.468000
10列
1.234680e+002
13列
123.468
10列
共 25 页
第 16 页
几点说明:
1. 格式控制串的控制符号与变量表要一一对应,即: 类型相同,个数相等 2. 格式控制符号用小写字母 3. 格式控制符号之外的符号均照原样显示 4. 若需显示百分号,格式为:%% 5. 如果实际数据所占字符位大于指定的域宽,按实际
1234 1234
实际 左补空
1234
左对齐,右补空
共 25 页 第 8 页
以下程序运行后的输出结果是? main() { int x,y,z; x=y=1; z=x++,y++,++y; printf("%d,%d,%d",x,y,z);}
A)2,3,3
B)2,3,2
C)2,3,1
D)2,2,1
例
怎样输出多个字符? 多个字符怎样排列?
与putchar(97);putchar(98); char c1,c2,c3; 等效 #include<stdio.h> putchar(99); 与printf(“%c%c%c”,c1,c2,c3); c1=a;c2=b;c3=c ; char 等效c1,c2,c3; main( ) putchar(c1); putchar( \n ); c1=a;c2=b;c3=c; { char c=a; putchar(c2); putchar( \n); putchar(c1); putchar( c); a abc putchar(c3); putchar(c2); } b putchar(c3); c 思考 putchar(\n);
共 25 页
第 18 页
4.1.2 字符输出函数
格式: putchar(字符变量) 功能 :在标准输出设备上,输出指定的字符。 说明: * 一次调用只能输出一个字符 * 加上分号成为字符输出语句 * 使用时在程序开头用编译预处理命令
#include”stdio.h” 或: #include<stdio.h>
输出: a,97
a,97
共 25 页 第 12 页
(6) s格式符 输出一个字符串。 说明: 若不指定字符宽度和对齐方式,则输出全部字符串. 例如: printf("%s", "CHINA");
程序运行输出: CHINA 若指定宽度m,实际字符个数大于m,按实际宽度输 出;如果实际字符个数小于m,字符右对齐,左边填 空格。 例如: printf(“s1=%s,s2=%3s,s3=%-5.2s,s4=%.3s", "abcd", "abcd", "abcd", "abcd") ; 程序运行输出: s1=abcd,s2=abcd,s3=ab ,s4=abc
第 23 页
* 格式控制字符串中若包含普通字符,则输入时必须 照原样输入普通字符,否则将导致输入结束。 如:int a,b,c; scanf(“%d,%d,%d”,&a,&b,&c); 输入:1,2,3<回车> * 数值型数据和字符型数据混合输入方法 注意格式说明符以 main() 外的其他字符 { int a,b,c,d,e; scanf(“%d%c%c%c%d”,&a,&b,&c,&d,&e); printf(“a=%d,b=%c,c=%c,d=%c,e=%d”,a,b, c,d,e); } 输入:123abc789<回车> 输出:a=123,b=a,c=b,d=c,e=789
共 25 页 第 22 页
如:int k; scanf(“%3d”,&k); 输入:123456789 * 输入时可以指定域宽 ,不允许规定精度. k为: 123
int a,b ;main( scanf(“%3d %3d”,&a,&b); 例: ) 输入a 123456 {int ,b,c; 系统自动将 123赋给a,456赋给b scanf("%d%d%d",&a,&b,&c) ; printf("%d ,%d ,%d\n",a float x; scanf(“%8.2f ”,&x); ,b,c); } * 输入时,遇下列情况结束 以下三种数据输入方法都可以: ①* 12 15 16 回车,空格 ②* 12 宽度结束 16 * 15 非法输入 ③ 12(按tab键)15 16 共 25 页
共 25 页
第 13 页
(7) f格式符
以小数形式输出实数(包括单、双精度)。
1) %f , 不指定字段宽度,由系统自动指定,使整数部 分全部输出,并输出6位小数(输出双精度数据, 也是6位,但误差降低)。 2) %m.nf , 指定输出的数据共占m列,其中有n位小 数.若数据长度小于m,则左端补空格。
输出
共 25 页
第 17 页
例:分析程序的执行结果 main( ) { int a=16;char e=’A’; unsigned b; long c; float d; b=65535;c=123456;d=123.45; printf(”a=%d,%4d,%-6d,c=%ld\n ”,7指输出宽度, a, a, a, 3表示输 c); 这里 3个字符。 printf(”%o, %x, %u\n”, b, b,出该字符串的前 b); printf(”%f, %e, %13.3e, %g\n”, d, d, d, d); printf(”%c,%s,%7.3s\n”,e,”China”,”Beijing”); }
说明如下: - 当数据的宽度小于显示宽度时,数据左对齐,右方补空格. m 输出数据占m个字符位,不够右对齐,左边填空格。 n 输出数据有n位小数 m.n 输出数据占m列,n位小数
对不同类型的数据使用不同的格式字符。有以 下几种格式符:
共 25 页
第 6 页
基本格式控制符
d: 以十进制带符号形式输出整型数 o:以八进制无符号形式输出整型数 x:以十六进制无符号形式输出整型 u:以十进制无符号形式输出整型数 f:以小数形式输出单、双精度实型数 e: 以指数形式输出单、双精度实型数 c: 以字符形式输出一个字符 s: 以字符形式输出一个字符串 ld:以十进制带符号形式输出长整型数
例:float x=15.3,y=222.225111;
printf(“%f,%6.2f\n”,x,y);
共 25 页
第 14 页
(8) e格式
以指数形式输出实数。
1) %e 不指定输出数据所占的宽度和数字部分小数 位数,由系统自动指定给出6位小数,指数部分占5位,其 中“e”占一位,指数符号占一位,指数占3位.数值按标 准化指数形式输出(小数点前有1位非零数字)。
共 25 页 第 4 页
[例 ]:
#include <stdio.h> main( ) 格式说明(格式字符) { int a=3, b=4; printf(“a=%d b=%d”,a,b); } 运行结果: 输出表列 普通字符 a=3 b=4
共 25 页
第 5 页
3.格式说明符
一般格式:%[-][m][.][n][l]格式符
共 25 页
第 7 页
(1) d格式符: 输出十进制整数。 %d 按整型数据的实际长度输出。 %md m为指定的输出字段的宽度.若数据的位数小于 m,则左端补以空格;若大于m,则按实际位数输出。 %ld 输出长整型数据.
例:int a=1234; printf(“%3d”,a); printf(“%5d\n”,a); printf(“%-5d”,a);
C语言程序设计
第四章
数据的输入和输出
共 25 页
第 1 页
本章要点
• 掌握C语言中输入输出数 据的方法 • 掌握各种格式的使用
共 25 页
第 2 页
数据输入输出的概念 输出:从计算机向显示器、打印机等外部设 备输出数据。 输入:从标准输入设备键盘、鼠标等向计算 机输入数据。 C语言不提供输入输出语句,输入输出操作 是由C函数库中的函数实现。 两个基本的输出(输入)函数: 即:格式输出(输入)函数 字符输出(输入)函数
共 25 页
第wenku.baidu.com9 页
(2)o格式符
以八进制数形式输出整数。
将内存单元中的各位的值(0或1)按八进制形式输出, 输出的数值不带符号,将符号也作为八进制数的一部分 输出。 例如,-1在内存单元中(以补码形式存放)如下:
int
a=-1;
-1: 1 1 11 11 11 11 11 11 11
printf(“%d,%o”,a,a);
VC++下
(5) c 格式符 输出一个字符。
整数的值在33~126范围内,也可以用字符形式输 出。在输出前,将该整数转换成相应的ASCII字符; 字符数据也可以用整数形式输出。 [例 ] #include <stdio.h> main( ) { char c='a'; int i=97; printf("%c,%d\n",c,c); printf("%c,%d\n",i,i); }
编译预处理
请详见附录E
共 25 页 第 19 页
例:#include <stdio.h> main( ) 注意:头文件声明不可少! { char a,b,c; a=„B‟;b=„O‟;c=„Y‟; putchar(a);putchar(b);putchar(c); } 输出:BOY
共 25 页
第 20 页
共 25 页 第 21 页
4.2 数据的输入
4.2.1 格式输入函数
一般形式: scanf(格式控制字符串, 地址表列) “格式控制字符串”的含义同printf函数, “地址表列”:要求是变量的地址,或字符串的首地址. 例如: int a,b,c; scanf(“%d%d%d”,&a,&b,&c); 说明: * scanf 函数中的“格式控制”后面应当是变量地址 而不是变量名。 * 输入数据时,在两个数据之间以一个或多个空格间隔 ,也可以用回车键、跳格键tab分隔。