首页计算机计算机软件C语言程序设计 03 第三章 数据输入与输出.pptx

03 第三章 数据输入与输出.pptx

页数:21页文件大小:404.7 KB来源: C语言程序设计ppt课件

本课件讲解C语言标准输入输出的实现方式,先概述C语言无I/O语句、一切靠库函数完成的特点,再分别介绍字符输出输入函数putchar、getchar与getch,重点展开printf的格式字符、附加格式说明符与域宽精度控制,以及scanf的格式串、宽度控制与输入分隔符问题,最后配合三角形面积与大小写转换两个程序举例巩固。

第三章目录页,列出数据输出与数据输入两大部分及本章使用的库函数
输入输出概念图,展示CPU内存与显示器键盘磁盘等外设之间的读写方向
C语言输入输出实现方式页,说明I/O由库函数实现并需包含stdio.h头文件
查看本课件的文字版(共 21 页,供检索与复制)

第1页:第三章输入输出导览

Chapter 3 数据输入与输出:数据输出——putchar()、printf();数据输入——getchar()、getch()、scanf();最后为程序举例。

第2页:内存与外设的数据传输

Introduction:What is I/O?

计算机由 Central Processing Unit、Main Memory、Monitor、Network、Disk (Files)、Keyboard、mouse 构成,数据在内存与外设之间传输。

  • Write:由内存向外设(显示器、文件等)写入数据
  • Read:由外设(键盘、鼠标、文件等)读入数据到内存

第3页:C语言无IO语句

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>。

第4页:字符输出函数putchar

字符输出函数 putchar

格式
int putchar(int c)
参数
c 为字符常量、字符变量或表达式
功能
把字符 c 输出到显示器上
返值
正常为显示的代码值;出错为 EOF(-1)
#include <stdio.h> main() { int c; char a; c = 65; a = 'B'; putchar(c); putchar('\n'); putchar(a); putchar('\\x0a'); putchar('\\103'); }

Output:ABC

第5页:格式输出函数printf

格式输出函数 printf

格式
int printf("format string" [, expr-list])
功能
按指定格式向显示器输出数据
返值
正常返回输出字节数;出错返回 EOF(-1)

格式控制串包含两类信息:

  • 格式说明:%[修饰符]格式字符,用于指定输出数据类型与格式
  • 普通字符或转义字符序列:原样输出

例:printf("I say:\"Hello,\n\tWorld!\""); 输出 I say:"Hello, World!"

第6页:printf格式字符表

printf 格式字符:

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);
ge和f中较短一种float a=567.789; printf("%g",a);
%%输出百分号本身printf("%%");

第7页:printf附加格式说明符

附加格式说明符(修饰符):用于指定输出数据显示格式。

  • m:输出数据域宽,数据长度<m 时左补空格,否则按实际输出
  • .n:对实数指定小数点后位数(四舍五入);对字符串指定实际输出位数
  • -:输出数据在域内左对齐(缺省右对齐)
  • +:指定在有符号数的正数前显示正号
  • 0:输出数值时指定左面不使用的空位置自动填0
  • l 或 h:ld 为 long、lf 为 double、hd 为 short
  • #:在八进制和十六进制数前显示前导 0、0x

第8页: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

□ 表示输出中的空格位置。

第9页:左对齐与补零示例

左对齐输出示例:

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□□□□□□□

□ 表示输出中的空格位置。

第10页:前导符号与类型修饰符示例

修饰符综合示例:

  • int a=1234; printf("%08d\n",a); → 00001234
  • float f=123.456; printf("%010.2f\n",f); → 0000123.46
  • printf("%+08d\n",a); → +0001234
  • printf("%+010.2f\n",f); → +000123.56
  • int a=65; printf("%o,%#o,%x,%#x\n",a,a,a,a); → 101,0101,41,0x41
  • long a=65536; printf("%8ld,%hd\n",a,a); → □□□65536,0(%hd 只取低16位,输出0)

□ 表示输出中的空格位置;%hd 读取 long 的低16位会溢出为0。

第11页:字符输入函数getchar

字符输入函数 getchar

格式
int getchar(void)
功能
从键盘读一字符,有回显,按 Enter 结束
返值
正常返回读取的代码值;出错返回 EOF(-1)
#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

第12页:字符输入函数getch

字符输入函数 getch

格式
int getch(void)
功能
从键盘读一字符,不回显,不等待按 Enter 键
返值
正常返回读取的代码值;出错返回 EOF(-1)
#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 的区别在于是否回显、是否等待回车键。

第13页:格式输入函数scanf

格式输入函数 scanf

格式
int scanf("format string", addr-list)
功能
按指定格式从键盘读入数据,存入地址表指定的存储单元中,并按回车键结束
返值
正常返回输入数据个数

地址列表 addr-list 用于将输入数据存放到指定的变量中。变量地址由系统分配,可用取地址运算符 & 获得;& 为单目运算符,优先级(2),从右向左结合。

常见错误:scanf 中遗漏 &,如 scanf("%d",a) 应为 scanf("%d",&a)。

第14页:scanf格式字符与示例

scanf 格式字符串包括:

  • 格式说明:%[修饰符]格式字符,指定输入数据类型与格式
  • 普通字符序列:作为输入分隔符,须原样输入

格式字符:d、o、x、u、c、s、f、e

例:scanf("%d",&a); 输入 10↵ 则 a=10;scanf("%x",&a); 输入 11↵ 则 a=17。

第15页:scanf附加格式说明符

scanf 附加格式说明符:

  • l 或 h:ld 为 long、lf 为 double、hd 为 short
  • m:指定输入数据宽度,遇空格或不可转换字符则结束
  • *:抑制符,指定输入项读入后不赋给变量

例: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

第16页:scanf输入分隔符的指定

输入分隔符的指定:

  • 一般以 Space、Tab 或 Enter 键作为分隔符
  • 其他字符做分隔符时写在格式串中两个格式符之间,须原样输入

例: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); 可按不同进制分别读入三个变量。

第17页:输入函数留下的垃圾

输入函数留下的「垃圾」:

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)。

解决方法:

  • 用 getchar() 清除
  • 用函数 fflush(stdin) 清除全部剩余内容
  • 用格式串中空格或 "%*c" 来「吃掉」

第18页:求三角形面积流程图

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) 开平方求得。

第19页:求三角形面积程序

 #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)。

第20页:大小写字母转换程序

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

第21页:第三章本章小结

本章小结:

  • C语言数据输入输出采用函数调用,需 #include <stdio.h>
  • 数据输出:putchar() 输出一个字符;printf() 按格式输出任意类型的数据
  • 数据输入:getchar() 接收一个字符,回显,等待回车;getch() 接收一个字符,不回显,不等待;scanf() 按格式接收任意类型的数据
顶部目录