页数:21页文件大小:404.7 KB来源: C语言程序设计ppt课件
本课件讲解C语言标准输入输出的实现方式,先概述C语言无I/O语句、一切靠库函数完成的特点,再分别介绍字符输出输入函数putchar、getchar与getch,重点展开printf的格式字符、附加格式说明符与域宽精度控制,以及scanf的格式串、宽度控制与输入分隔符问题,最后配合三角形面积与大小写转换两个程序举例巩固。
Chapter 3 数据输入与输出:数据输出——putchar()、printf();数据输入——getchar()、getch()、scanf();最后为程序举例。
Introduction:What is I/O?
计算机由 Central Processing Unit、Main Memory、Monitor、Network、Disk (Files)、Keyboard、mouse 构成,数据在内存与外设之间传输。
What is I/O?:C语言无I/O语句,I/O操作由库函数实现。
源程序 Source f.c 经 compile 生成 Object f.obj,再与 Library.obj 经 link 生成 Executable f.exe。
使用标准输入输出库函数必须在程序开头写编译预处理命令 #include <stdio.h>。
字符输出函数 putchar
int putchar(int c)#include <stdio.h> main() { int c; char a; c = 65; a = 'B'; putchar(c); putchar('\n'); putchar(a); putchar('\\x0a'); putchar('\\103'); }Output:ABC
格式输出函数 printf
int printf("format string" [, expr-list])格式控制串包含两类信息:
例:printf("I say:\"Hello,\n\tWorld!\""); 输出 I say:"Hello, World!"
printf 格式字符:
| 格式字符 | 含义 | 示例 |
|---|---|---|
| d | 有符号十进制整型 | int a=-567; printf("%d",a); |
| o | 无符号八进制整型 | unsigned int a=65; printf("%o",a); |
| x | 无符号十六进制整型 | unsigned int a=255; printf("%x",a); |
| u | 无符号十进制整型 | unsigned int a=567; printf("%u",a); |
| c | 单一字符 | char a=65; printf("%c",a); |
| s | 字符串 | printf("%s","ABC"); |
| f | 浮点型(默认6位小数) | float a=567.789; printf("%f",a); |
| e | 指数形式浮点 | float a=567.789; printf("%e",a); |
| g | e和f中较短一种 | float a=567.789; printf("%g",a); |
| %% | 输出百分号本身 | printf("%%"); |
附加格式说明符(修饰符):用于指定输出数据显示格式。
printf 域宽与精度示例:
int a = 1234; float f = 123.456; char ch = 'a'; printf("%8d,%2d\n", a, a); printf("%f,%8f,%8.1f,%.2f,%.2e\n", f, f, f, f, f); printf("%3c\n", ch);Output:□□□□1234,1234 / 123.456000,123.456000,□□□123.5,123.46,1.23e+002 / □□a
char a[] = "Hello,world!"; printf("%s\n%15s\n%10.5s\n%2.5s\n%.3s\n", a, a, a, a, a);Output:Hello,world! / □□□□Hello,world! / □□□□□Hello / Hello / Hel
□ 表示输出中的空格位置。
左对齐输出示例:
int a = 1234; float f = 123.456; char c[] = "Hello,world!"; printf("%8d,%-8d\n", a, a); printf("%10.2f,%-10.1f\n", f, f); printf("%10.5s,%-10.3s\n", c, c);Output:□□□□1234,1234□□□□ / □□□□123.46,123.5□□□□□ / □□□□□Hello,Hel□□□□□□□
□ 表示输出中的空格位置。
修饰符综合示例:
int a=1234; printf("%08d\n",a); → 00001234float f=123.456; printf("%010.2f\n",f); → 0000123.46printf("%+08d\n",a); → +0001234printf("%+010.2f\n",f); → +000123.56int a=65; printf("%o,%#o,%x,%#x\n",a,a,a,a); → 101,0101,41,0x41long a=65536; printf("%8ld,%hd\n",a,a); → □□□65536,0(%hd 只取低16位,输出0)□ 表示输出中的空格位置;%hd 读取 long 的低16位会溢出为0。
字符输入函数 getchar
int getchar(void)#include <stdio.h> main() { int c; printf("Enter a character:"); c = getchar(); printf("%c--->hex%x\n", c, c); }Output:Enter a character:A↵ / A--->hex41
字符输入函数 getch
int getch(void)#include <stdio.h> main() { int c; printf("Enter a character:"); c = getch(); printf("%c--->hex%x\n", c, c); }Output:Enter a character:A--->hex41
getch 与 getchar 的区别在于是否回显、是否等待回车键。
格式输入函数 scanf
int scanf("format string", addr-list)地址列表 addr-list 用于将输入数据存放到指定的变量中。变量地址由系统分配,可用取地址运算符 & 获得;& 为单目运算符,优先级(2),从右向左结合。
常见错误:scanf 中遗漏 &,如 scanf("%d",a) 应为 scanf("%d",&a)。
scanf 格式字符串包括:
格式字符:d、o、x、u、c、s、f、e
例:scanf("%d",&a); 输入 10↵ 则 a=10;scanf("%x",&a); 输入 11↵ 则 a=17。
scanf 附加格式说明符:
例:scanf("%4d%2d%2d",&yy,&mm,&dd); 输入 19991015↵ → yy=1999, mm=10, dd=15
例:scanf("%3c%2c",&c1,&c2); 输入 abcde↵ → c1='a', c2='d'
例:scanf("%3d%*4d%f",&k,&f); 输入 12345678765.43↵ → k=123, f=8765.43
输入分隔符的指定:
例:scanf("a=%d,b=%d,c=%d",&a,&b,&c); 输入 a=12,b=24,c=36↵
例:scanf("%d,%d",&a,&b); 输入 3,4↵ → a=3, b=4
例:scanf("%d:%d:%d",&h,&m,&s); 输入 12:30:45↵ → h=12, m=30, s=45
例:scanf("%d%o%x",&a,&b,&c); 可按不同进制分别读入三个变量。
输入函数留下的「垃圾」:
int x; char ch; scanf("%d", &x); ch = getchar(); printf("x=%d,ch=%d\n", x, ch);输入 123↵,输出 x=123, ch=10(ch 读到的是回车符,ASCII 码10)。
解决方法:
Example:Calculate the area of a triangle
流程:Begin → Input a、b、c → Calculate s → Calculate area → Output area → End
其中 s 为三边和的一半,area 由海伦公式 s(s-a)(s-b)(s-c) 开平方求得。
#include <stdio.h> #include <math.h> main() { float a, b, c, s, area; scanf("%f,%f,%f", &a, &b, &c); s = 1.0 / 2 * (a + b + c); area = sqrt(s * (s - a) * (s - b) * (s - c)); printf("a=%7.2f, b=%7.2f, c=%7.2f, s=%7.2f\n", a, b, c, s); printf("area=%7.2f\n", area); }Input:3,4,6↵
Output:a= 3.00, b= 4.00, c= 6.00, s= 6.50 / area= 5.33
要点:文件包含预处理命令需写 #include <math.h> 才能使用 sqrt;变量声明、输入、输出三段结构清晰。原式写作 1/2*(a+b+c) 会因整数除法得0,应写作 1.0/2*(a+b+c)。
Example:Converse upper case character to lower case
#include <stdio.h> main() { char c1, c2; c1 = getchar(); printf("%c,%d\n", c1, c1); c2 = c1 + 32; printf("%c,%d\n", c2, c2); }Input:A↵
Output:A,65 / a,97
本章小结:
下载地址:{{downurl}}
{{{a}}}
{{#b}}{{{b}}}
{{/b}} {{/title}} {{#nolog}}登陆注册
{{/nolog}} {{#djsx}}点我刷新
{{/djsx}} {{#gocz}} {{/gocz}} {{#ffqr}} {{/ffqr}}