C程序设计
南京师范大学
地图学与地理信息系统 04级
专业选修课
主讲教师, 汪闽
3.2 数据输出
3.3 数据输入
第三章 顺序结构设计
3.1 C语言的语句
3.1 C语言的语句
C语句,以,;”作分隔符,编译后产生机器指令,
C语句分类
表达式语句:表达式加分号构成。
空语句,;
程序控制语句 (9种):
if( )~else~
switch
for( )~
while( )~
do~while( )
continue
break
goto
return
分支
循环
辅助控制
如 total=total+limit;
a=3;
func( );
printf(“Hello,world!\n”);
?,用 {…} 括起来的一组语句
–一般形式,{ [数据说明部分; ]
执行语句部分;
}
–说明:
?,}”后不加分号
?语法上和单一语句相同
?复合语句可嵌套
复合语句
3.2 数据输出
格式, putchar( c )
参数, c为字符常量、变量或表达式
功能:把字符 c输出到显示器上
返值:正常,为显示的代码值;出错,为 EOF(-1)
?C语言无 I/O语句,I/O操作由函数实现
3.2.1字符输出函数
? #include <stdio.h>
格式,printf(,格式控制串”,输出表 )
功能:按指定格式向显示器输出数据
返值:正常,返回输出字节数;出错,返回 EOF(-1)
1) 输出表:要输出的数据(可以没有,多个时以
“,”分隔)
2) 格式控制串:包含两种信息
格式说明,%[修饰符 ]格式字符,用于指定输出
格式
普通字符或转义序列:原样输出
3.2.2 格式输出函数
d,i
x,X
o
u
c
s
e,E
f
g
%%
十六进制无符号整数
不带符号十进制整数
十进制整数
指数形式浮点小数
单一字符
字符串
八进制无符号整数
小数形式浮点小数
e和 f中较短一种
百分号本身
int a=567;printf (,%d”,a);
int a=255;printf(“%x”,a);
int a=65;printf(“%o”,a);
int a=567;printf(“%u”,a);
char a=65;printf(“%c”,a);
printf(“%s”,“ABC”);
float a=567.789;printf(“%e”,a);
float a=567.789;printf(“%f”,a);
float a=567.789;printf(“%g”,a);
printf(“%%”);
567
ff
101
567
A
ABC
5.677890e+02
567.789000
567.789
%
说明
格式字符一般要用小写
格式字符与输出项个数应相同,按先后顺序一一对应
输出转换,格式字符与输出项类型不一致,自动按指定格式输出
… 续格式字符串
.n
对实数,指定小数点后位数 (四舍五入 )
修饰符 功 能
m 输出数据域宽,数据长度 <m,左补空格 ;否则按实际输出
输出数据在域内左对齐(缺省右对齐 )-
指定在有符号数的正数前显示正号 (+)+
输出数值时指定左面不使用的空位置自动填 00
在八进制和十六进制数前显示前导 0,0x#
在 d,o,x,u前,指定输出精度为 long型
在 e,f,g前,指定输出精度为 double型
l
附加格式说明符(修饰符)
对字符串,指定实际输出位数
… 续格式字符串
例 int a=1234;
float f=123.456;
printf(“%08d\n”,a);
printf(“%010.2f\n”,f);
printf(“%+08d\n”,a);
printf(“%+010.2f\n”,f);
0, +
例 int a=123;
printf(“%o,%#o,%X,%#X\n”,a,a,a,a);
例 #
例 long a=65536;
printf(“%d,%8ld\n”,a,a);
例 l 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00
//00001234
//0000123.46
//+0001234//+000123.56
//173,0173,7B,0X7B
//0,65536

3.3 数据输入
格式,getchar( )
功能:从键盘读一字符
返值:正常,返回读取的代码值;出错,返回 EOF(-1)
3.3.1 字符输入函数
例 /*ch3_4.c*/
#include <stdio.h>
main()
{ int c;
printf("Enter a character:");
c=getchar();
printf("%c--->hex%x\n",c,c);
}
运行结果:
Enter a character:A?
A--->hex41
格式, scanf(“格式控制串,,地址表)
功能:按指定格式从键盘读入数据,存入地址表指定的
存储单元中,并按回车键结束
返值:正常,返回输入数据个数
地址表:变量的地址,常用取地址运算符 &
格式字符,d,i,o,x,u,c,s,f,e
例 scanf(“%d”,&a);
输入,10 ?
则 a=10
例 scanf(“%x”,&a);
输入,11 ?
则 a=17
3.3.2 格式输入函数
附加格式说明符(修饰符)
l
修饰符 功 能
h
域宽
*
用于 d,o,x前,指定输入为 short型整数
用于 d,o,x前,指定输入为 long型整数
用于 e,f前,指定输入为 double型实数
指定输入数据宽度,遇空格或不可转换字符则结束
抑制符,指定输入项读入后不赋给变量
例 scanf(“%4d%2d%2d”,&yy,&mm,&dd);
输入 19991015 ?
则 1999?yy,10 ?mm,15 ?dd
修饰符功能 … 续格式输入函数
– 一般以空格,TAB或回车键作为分隔符
– 其它字符做分隔符:格式串中两个格式符间字符
例 scanf(“%d%o%x”,&a,&b,&c);
printf(“a=%d,b=%d,c=%d\n”,a,b,c);
输入 123 123 123?
输出 a=123,b=83,c=291
例 scanf(“%d:%d:%d”,&h,&m,&s);
输入 12:30:45?
则 12 ?h,30 ?m,45 ?s例 scanf(“%d,%d”,&a,&b)
输入 3,4 ?
则 3?a,4 ?b
例 scanf(“a=%d,b=%d,c=%d”,&a,&b,&c);
输入 a=12,b=24,c=36 ?
输入分隔符的指定
用,%c”格式符时,空格和转义字符作为有效字符输

如 scanf(“%c%c%c”,&c1,&c2,&c3);
若输入 a b c?
则 a?c1,?c2,b ?c3
输入数据时,遇以下情况认为该数据结束:
?遇空格,TAB、或回车
? 遇宽度结束
?遇非法输入

scanf(“%d%c%f”,&a,&b,&c);
若输入 1234a123o.26 ?
则 1234 ?a,?a? ?b,123
?c
说明:
赋值抑制字符 *
? 表示本输入项对应的数据读入后,不赋给相
应的变量(该变量由下一个格式指示符输入)。
? 例如,
scanf("%2d%*2d%3d",&num1,&num2);
?
printf("num1=%d,num2=%d\n",num1,num2);
? 假设输入,123456789”,则系统将读取
,12”并赋值给 num1;读取,34”、但舍弃掉
(,*”的作用);读取,567”并赋值给 num2。
所以,printf()函数的输出结果为:
num1=12,num2=567。
进一步介绍,
数据输入操作
1,如果相邻 2个格式指示符之间, 不指定数据分隔
符 ( 如逗号, 冒号等 ), 则相应的 2个输入数据之间, 至
少用一个空格分开, 或者用 Tab键分开, 或者输入 1个数
据后, 按回车, 然后再输入下 1个数据 。
例如, scanf("%d%d",&num1,&num2);
假设给 num1输入 12,给 num2输入 36,则正确的输
入操作为,12□ 36↙
或者,12↙
36↙
注,使用, ↙, 符号表示按回车键操作, 在输入数
据操作中的作用是, 通知系统输入操作结束 。
2., 格式字符串, 中出现的普通字符 ( 包括转义字
符形式的字符 ), 务必原样输入 。
例如, scanf("%d,%d",&num1,&num2);
假设给 num1输入 12,给 num2输入 36,正确的输入操
作为,12,36↙
另外, scanf()函数中, 格式字符串内的转义字符 (如
\n),系统并不把它当转义字符来解释, 从而产生一个控制
操作, 而是将其视为普通字符, 所以也要原样输入 。
例如:
scanf("num1=%d,num2=%d\n",&num1,&num2);
假设给 num1输入 12,给 num2输入 36,正确的输入
操作为:
num1=12,num2=36\n↙
提高人机交互性建议,为改善人机交互性, 同时简化
输入操作, 在设计输入操作时, 一般先用 printf()函数输出
一个提示信息, 再用 scanf()函数进行数据输入 。
例如,将
scanf("num1=%d,num2=%d\n",&num1,&num2
);改为:
printf("num1="); scanf("%d",&num1);
printf("num2="); scanf("%d",&num2);
3,输入数据时, 遇到以下情况, 系统认为该数据结束:
( 1) 遇到空格, 或者回车键, 或者 Tab键 。
( 2) 遇到输入域宽度结束 。 例如, %3d”,只取 3列 。
( 3) 遇到非法输入 。 例如, 在输入数值数据时, 遇到
字母等非数值符号 (数值符号仅由数字字符 0-9,小数点和
正负号构成 )。
4,使用格式说明符, %c”输入单个字符时, 空格和转
义字符均作为有效字符被输入 。
例如, scanf("%c%c%c",&ch1,&ch2,&ch3);
printf("ch1=%c,ch2=%c,ch3=%c\n",ch1,ch2,ch3);
假设输入,A□ B□ C↙, 则系统将字母 'A'赋值给 ch1,
空格 '□ '赋值给 ch2,字母 'B'赋值给 ch3。
[Return]
/*ch3_12.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
文件包含预处理命令
变量定义
输入数据
输出数据
例 输入三角形边长,求面积
/*ch3_13.c*/
#include "stdio.h"
main()
{ char c1,c2;
c1=getchar();
printf("%c,%d\n",c1,c1);
c2=c1+32;
printf("%c,%d\n",c2,c2);
}
输入,A ?
输出,A,65
a,97
例 从键盘输入大写字母,用小写字母输出