Академический Документы
Профессиональный Документы
Культура Документы
语
言
程 第四讲 数据输入与输出
序
设 §4.0 C 语句 概述
计
C 语句的类型
一个 C 程序可以由几个源文件组成,一个源文件可以
由若干个函数和预编译命令组成,函数包括说明部分和函
数体,而函数体一般包括变量定义和执行部分。
C程序的执行部分是由语句组成的,程序的功能也是由执
行语句实现的。 C 语句可分为以下五类:
1 控制语句
2. 函数调用语句
第
四 3 表达式语句
讲 4. 空语句
数 5. 复合语句
据
输
入
C
语
言
程
序
设 1. 控制语句:完成一定的控制功能。
计 (1) 条件判断语句
if 语句, switch 语句
(2) 循环执行语句
do while 语句, while 语句, for 语句
(3) 转向语句
break 语句, continue 语句, goto 语句,
return 语句
第 2. 函数调用语句:
四
讲 a=sort(b); 必须包含有函数定义的头文件
数
据 ,或自己定义函数。
输
入
构成:表达式 + 分号“;”
C
语 执行表达式语句就是计算表达式的值。例如:
言
程 x=y+z; 赋值语句
序
设 y+z; 加法运算语句,但计算结果不能
计
保
留,无实际意义
i++; 自增 1 语句, i 值增 1
在编译程序时,常常出现:
Warning: Code has no effect in
第 function main
四
讲 仅说明此语句无实际意义,在连接( Link) 程
数
据 序时,可以通过。
输
入
C
语
言
程
序
设
计
第
四
讲
数
据
输
入
C
语
言
程
序 4. 空语句:只有一个分号的语句,不执行任何操
设
计 作。
for(i=1;i<10;i++);
while(getchar()!=‘\n’);
本语句的功能是,只要从键盘输入的字符不是回
车则重新输入,这里的循环体为空语句。
第
四
讲
数
据
输
入
C
语
言
程
5. 复合 语句 :
序
设 用 { } 括起来 的语 句,在 { } 外面 不需要 用
计 “;” 。
第
四
讲
数
据
输
入
C
语
言
程 数据输 入输出 的概 念及其 在 C 语言中 的实现
序
设
计
一个完整的计算机程序,常常要求具备输入输
出功能。C语言本身没有配备完成输入输出的语句
,其输出输入功能是通过调用系统提供的标准函数
实现的。
C 的库函数存放在文件中,文件称为“头文件
”或“包含文件”,在使用函数时,必须把该文件用
第
四 编译预处理命令“ #include” 将其包含到用户源文
讲
数
件中。例如在调用标准输入输出函数时,必须使用
据 以下预编译命令: #include<stdio.h> 或
输
入 #include“stdio.h” ,头文件通常以 .h 作为扩
C
语
言 文件包含命令行的一般形式为:
程
序 #include" 文件名 "
设
计 例如:
#include"stdio.h"
#include"math.h"
文件包含命令的功能是把包含文件内容插入该命令
行位置取代该命令行,从而把包含文件和当前的源
程序文件连成一个源文件。包含命令中的文件名可
以用双引号括起来,也可以用尖括号括起来。当用
第
四 尖括号时表示按系统设定的标准目录去查找包含文
讲 件,而用双引号则表示首先在当前的源文件目录中
数
据 查找,若未找到才到系统设定的标准目录去查找。
输
入
C
语
言 § 4.1 数据输出
程
序
字符输出函数
设
计 格式 : putchar( c )
参数 : c 为字符常量、变量或表达式
功能:把字符 c 输出到显示器上
返值:正常,为显示的代码值;出错,为 EOF(-1)
例 /*ch4_1.c*/
ch4_1.c
#include"stdio.h"
main()
第 { int c;
四 运行结果: A char a;
讲
B c=65; a='B';
数
据 putchar(c); putchar('\n'); putchar(a);
输 }
入
C putchar 函数可以输出转义字符和普通字
语
言
符
程
序
#include"stdio.h"
设 main() ch4_3.c
计
{putchar(‘\101’); \* 输出字符 A*\
putchar(‘A’) \* 输出字符 A*\
putchar(‘\x41’); \* 输出字符 A*\
putchar(‘\’’); \* 输出单引号字符
*\
第
四
putchar(‘\012’); \* 输出回车换行符 *\
讲 putchar( ) 中的变量可以是字符型变量也可以是整型变量
数 }。
据 对控制字符执行控制功能,不在屏幕上显示,如:
输
入 putchar(‘\n’); 换行
C
语
言 格式输出函数
程
序
设
计 格式: printf(“ 格式控制串”,输出表列 )
功能:按指定格式向显示器输出数据
返值:正常,返回输出字节数;出错,返回 EOF(-1)
格式控制串:是用双引号括起来的字符串,包含三种信息。
1. 格式说 明: %[ 修饰符 ] 格式 字符,用于 指定输出 格式
2. 普通字 符:原样 输出,如逗 号、空格及其 他字符
3. 转义字 符:按照 转义后的含 义输出
格式说 明又称为 格式字符串 ,普通字符和 转义字符又 称为 非格式 字符串
第 。
四 输出表列:要输出的数据,可以是变量、表达式,也可以是
讲 常量。如果格式控制串中没有格式说明部分,则没有输出表
数
据
列,反之则有,多个时以“ ,” 分隔,并且要求格式说明和输
输 出表列在数量上和类型上要一致。
入
C
语 格式字符:
言 int a=567;printf ( “%d”,a); 567
程 d 十进制整数
序 x 十六进制无符号整数 int a=255;printf(“%x”,a); ff
设 int a=65;printf(“%o”,a); 101
计
o 八进制无符号整数
u 不带符号十进制整数 int 例 a=567;printf(“%u”,a);
main()
567
例 int a=3,b=4;
char a=65;printf(“%c”,a);
c 单一字符 { unsigned int u=65535;
A
printf(“%d %d\n”,a,b);
s 字符串 printf(“%s”,“ABC”); ABC
printf(”u=%d\n",u);
printf(“a=%d , b=%d\n”,a,b);
e 指数形式浮点小数 float a=567.789;printf(“%e”,a); 5.677890e+02
输出结果 : }3 4
f 小数形式浮点小数 a=3, b=4 输出结果: u=-1 567.789000
float a=567.789;printf(“%f”,a);
g e 和 f 中较短一种 float a=567.789;printf(“%g”,a); 567.789
%% 百分号本身 11 11 11 11 11 11 11 11
printf(“%%”); %
第
四 说明
讲
数 格式字符要用小写
据 格式字符与输出项个数应相同,按先后顺序一一对应
输
入
C
语 附加格式说明符(修饰符)
言
程 修饰符 功 能
序
设 m 输出数据域宽 , 数据长度 <m, 左补空格 ; 否则按实际输出
计
对实数 , 指定小数点后位数 ( 四舍五
.n
入)
对字符串 , 指定实际字符输出位数
- 输出数据在域内左对齐(缺省右对齐
)
+ 指定在有符号数的正数前显示正号
(+)
0 输出数值时指定左面不使用的空位置自动填
0
第 # 在八进制和十六进制数前显示前导 0 ,
四 0x
讲 在 d,o,x,u 前,指定输出精度为
l
数 long 型
据 在 e,f,g 前,指定输出精度为
输
入 double 型
C 例 m.n
语 例 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);
运行 1234,1234
结果: 123.456000,123.456000, 123.5,123.46,1.23e+02
a
运行结果: 1234,1234
123.46,123.5
第 Hello,Hel
四
讲
数
据
输
入
C 例 0 、+
语
言 例 int a=1234;
程 float f=123.456;
序
设 printf(“%08d\n”,a); //00001234
计 printf(“%010.2f\n”,f); //0000123.46
printf(“%+08d\n”,a); //+0001234
printf(“%+012f\n”,f); //+0123.456001
例 #
例 int a=123;
printf(“%o,%#o,%x,%#x\n”,a,a,a,a);
//173,0173,7B,0x7B
第
四 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00
讲 例 l
数
据 例 long a=65536;
输 printf(“%8ld,%d\n”,a, a);
入
//65536,0
C
语
言
§ 4.2 数据输入
程 字符输入函数
序
设
计 格式 :getchar( )
功能:从键盘读一字符
返值:正常,返回读取的代码值;出错 , 返回 EOF(-1)
例 /*ch4_2.c*/
#include "stdio.h "
main() 运行结果:
第 { int c; Enter a character:A↵
四
printf("Enter a character:"); A--->hex41
讲
数 c=getchar();
据
输 printf("%c--->hex%x\n",c,c);
ch4_2.c
入 }
C
语
言
程
使用 get cha r 函数应 注意 几个问 题:
序 • ge tc har 函数只 接受单 个字 符,输 入数字 也
设 按字符处 理。输 入多 于一个 字符 时,只 接收
计
第一个字 符。
• 使用本函 数前必 须包 含文件 “ st dio .h” 。
• 在 TC 屏幕下 运行含 本函 数程序 时, 将退 出 TC
屏幕进入 用户屏 幕等 待用户 输入 ,输入 完毕
再返回 TC 屏幕。
第
四
讲 例 scanf(“%d”,&a); 例 scanf(“%x”,&a);
数
据
输入: 10↵ 输入: 11↵
输 则 a=10 则 a=17
入
C
语 附加格式说明符(修饰符)
言
程 修饰符 功 能
序
设 h 用于 d,o,x 前,指定输入为 short 型整数
计
用于 d,o,x 前,指定输入为 long 型整数
l
用于 e,f 前,指定输入为 double 型实数
m 指定输入数据宽度,遇空格或不可转换字符则结束
* 抑制符,指定输入项读入后不赋给变量
例 scanf(“%4d%2d%2d”,&yy,&mm,&dd);
例 scanf(“%3d%*4d%f”,&k,&f);
第 注意: 输入数据 19991015↵
输入 时不能规定精
输入 度 如: scanf(“
12345678765.43↵
四 %7.2f”,&a);则 1999⇒yy, 10 ⇒mm, 15 ⇒dd
讲 则 123⇒k, 8765.43⇒f
数
据
输
入
C
语 输入分隔符的指定
言
程
一般以空格、 TAB 或回车键作为分隔符
序 其它字符做分隔符:格式控制串中两个格式说明
设 之间的字符
计
“ 格式控制串” 中除了格式说明以外的其它所有
字符,在输入数据时应输入与这些字符相同的字
符。
例 scanf(“%d%o%x”,&a,&b,&c);
例 scanf(“%d:%d:%d”,&h,&m,&s);
例 scanf(“%d,%d”,&a,&b)
printf(“a=%d,b=%d,c=%d\n”,a,b,c);
输入 输入 12:30:45↵
3,4↵
输入 123 123 123↵
例 scanf(“a=%d,b=%d,c=%d”,&a,&b,&c);
则 12 ⇒h,则 30 ⇒m,
3⇒a, 4 45 ⇒s
⇒b
输出 a=123,b=83,c=291
输入 a=12,b=24,c=36↵
第
四
讲
数
据
输
入
C 说明:
语
言
用“ %c” 格式符时,空格和转义字符作为有
程 效字符输入
序 输入数据时,遇以下情况认为该数据结束
设
计 : scanf(“%c%c%c”,&c1,&c2,&c3);
如
若输入 abc↵
1) 遇空格、 TAB 、或回
2) 遇
则宽a⇒c1,
度结束 ⇒c2, b ⇒c3
3) 遇非法输“入
输入函数留下的 垃圾”:
scanf(“%d%c%f”,&a,&b,&c);
如 #include”stdio.h”
main()若输入 1234a123o.26 ↵
{int x;则 1234 ⇒a, ‘a’ ⇒b, 123 ⇒c
char ch;
第
四
scanf(“%d”,&x);
讲 scanf(“%c”,&ch); ch4_5.c
数 printf(“x=%d,ch=%d\n”,x,ch);}
据
输
执行: 123↵
入 输出: x=123,ch=10
C
语
言
程
序 解决方法:
设 ( 1 )用 getchar() 清除
计
( 2 )用函数 fflush(stdin) 清除全部剩余内容
(3) 用格式串中空格或“ %*c” 来“吃掉”
Ch4_6.c Ch4_7.c
例 int x;
第 char ch;
四
讲
scanf(“%d”,&x);
数 scanf(“ %c”,&ch);
据 或 scanf(“%*c%c”,&ch);
输
入
C
语
言
§ 4.3 程序举例 s=
1
(a + b + c)
2
程
序 例 输入三角形边长,求面积 area = s × ( s − a ) × ( s − b) × ( s − c)
设
计
/*ch4_8.c*/
ch4_8.c
#include"math.h" 文件包含预处理命令
#include"stdio.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);
讲 }
数
据 输入: 3,4,6 ↵
输 输出: a=3.00,b=4.00,c=6.00,s=6.50
入 area=5.33
C
语
言
程 例 从键盘输入大写字母,用小写字母输出
序
设
计
ch4_9.c
/*ch4_9.c*/
#include "stdio.h"
main() 输入: A ↵
{ char c1,c2; 输出: A,65
c1=getchar(); a,97
printf("%c,%d\n",c1,c1);
c2=c1+32;
第 printf("%c,%d\n",c2,c2);
四 }
讲
数
据
输
入
C
语
言
程
序
设 #include"stdio.h"
计
main()
{putchar(getchar()+32);
}
#include"stdio.h"
main()
第
四 {printf(“%c”,getchar()+32);
讲
数
}
据
输
入
C
语 例求ax + bx + c = 0方程的根,设b − 4ac > 0
2 2 − b ± b 2 − 4ac
言 x=
2a
程
序 /*ch4_10.c*/
设 ch4_10.c #include"stdio.h"
计
#include"math.h"
main()
{ float a,b,c,disc,x1,x2,p,q;
scanf("a=%f,b=%f,c=%f",&a,&b,&c);
disc=b*b-4*a*c;
p=-b/(2*a); q=sqrt(disc)/(2*a);
x1=p+q; x2=p-q;
第
四
printf("\n\nx1=%5.2f\nx2=%5.2f\n",x1,x2);
讲 }
数
据
输入: a=1,b=3,c=2 ↵
输 输出: x1=-1.00
入
x2=-2.00
C
语
言 作业与 上机
程
序 1. 写出下面程序运行结果。
设 2) #include“stdio.h”
计 main()
{float x=123.456;
printf(“%f,\n%12f,\n%12.2f,\n%.2f,\n%-
12.2f,\n”,x,x,x,x,x);
}
3) #include“stdio.h”
main()
{printf(“%3s,%7.2s,%.4s,%-5.3s,\n”,“CHINA”,
“CHINA”,“CHINA”,“CHINA”);
第 }
四 2. 设圆的半径 r=1.5 ,求圆球表面积和体积。用 scanf 函数输入数据,输
讲 出计算结果,取小数点后 2 位小数。
数
据 3. 设直角三角形的直角边长分别为 12 和 16 ,求直角三角形的面积和斜边
输 长。用 scanf 函数输入数据,输出计算结果,取小数点后 2 位小数。
入