Download presentation
Presentation is loading. Please wait.
1
第三讲 数据输入与输出 数据输出 数据输入
2
3.1 数据输出 C语言无I/O语句,I/O操作由函数实现 #include <stdio.h> 字符输出函数
格式: putchar( c ) 参数: c为字符常量、变量或表达式 功能:C提供的标准字符输出函数,在屏幕上输出一 个字符,无自动换行功能 返值:正常,为显示的代码值;出错,为EOF(-1)
3
格式输出函数 输出表:要输出的数据(可以没有,多个时以“,”分隔) 格式控制串:格式编辑符 + 原样输出字符串(转义字符)
格式:printf(“格式控制串”,输出表) 功能:按指定格式向显示器输出数据 返值:正常,返回输出字节数;出错,返回EOF(-1) 输出表:要输出的数据(可以没有,多个时以“,”分隔) 格式控制串:格式编辑符 + 原样输出字符串(转义字符) 格式编辑符:%[格式修饰]格式字符 格式修饰:输出值宽度,小数位数,何类型输出 包括:标志,类型修饰,输出最小宽度,精度等
4
若x=1.2973 实型数据输出的例子printf(“f=%4.2f”,x); 原样输出字符:x= 格式编辑:%4.2f 格式修饰:4.2(带小数点一共输出4位) 格式字符:f 数据输出结果:1.30
5
格式字符与输出项个数应相同,按先后顺序一一对应 输出转换:格式字符与输出项类型不一致,自动按指定格式输出
d,i x,X o u c s e,E f g %% 十六进制无符号整数 不带符号十进制整数 十进制整数 指数形式浮点小数 单一字符 字符串 八进制无符号整数 小数形式浮点小数 e和f中较短一种 百分号本身 格式字符 int a=567;printf ( “%d”,a); 567 ff int a=255;printf(“%x”,a); 101 int a=65;printf(“%o”,a); 567 int a=567;printf(“%u”,a); A char a=65;printf(“%c”,a); ABC printf(“%s”,“ABC”); e+02 float a= ;printf(“%e”,a); float a= ;printf(“%f”,a); float a= ;printf(“%g”,a); % printf(“%%”); 说明 格式字符要用小写 格式字符与输出项个数应相同,按先后顺序一一对应 输出转换:格式字符与输出项类型不一致,自动按指定格式输出
6
附加格式说明符(修饰符):修饰符必须和格式字符一起使用才有意义
功 能 m 输出数据域宽,数据长度<m,左补空格;否则按实际输出 对实数,指定小数点后位数(四舍五入) .n 对字符串,指定实际输出位数 - 输出数据在域内左对齐(缺省右对齐) 指定在有符号数的正数前显示正号(+) + *输出数值时指定左面不使用的空位置自动填0 # *在八进制和十六进制数前显示前导0,0x 在d,o,x,u前,指定输出精度为long型 在e,f,g前,指定输出精度为double型 l
7
不同格式的输出实例 1/%d 按整型数据实际长度输出 例: int a=6 printf("%d",a);
%md m为指定输出字段宽度,如果数据位数小于M左补空格,如果 数据位数量大于M,则按照实际位数输出 例: int a=123,b=12345; printf("%4d,%4d",b,a) , 123 %ld 输出长整型数据 例: long a= printf("%ld",a); 2/%o 以8进制数形式输出整数 3/%x 以16进制形式输出整数 例: int a=-1; printf("%d,%o,%x",a,a,a) -1,177777,ffff; 4/%u 用来输出unsigned类型数据,以十进制输出 例: int b=-2; printf("%u",b); 65534 5/c格式符,用来输出一个字符. 例: char c='a' printf("%3c",c);
8
6/s格式符 用来输出一个字符串 %s 输出字符串 如字符串本身长度大于m,则突破M的限制,将字符串 全部输出 %ms输出字符串占M列,若串长小于m,则左补空格 (右对齐) %-ms若字符串小于m,则在m列范围内,字符串向左靠,右补空格 (右对齐) %m.ns 输出占m列,只取得字符串左面n个字符,这n个字符输出在m列右侧,左 补空格. %-m.s m.s 输出占m列,只取得字符串左面n个字符,这n个字符输出在m列左侧, 右补空格. 例: printf("%s,%7.2s,%.4s,%-5.3s\n","china","china","china","china") china,-----ch,chin,chi--
9
7/f格式符 %f: 将整数部分输出,然后再输出6个小数,float有效位数为7位,double 为14位 %m.nf :指定输出数据占 m列,其中有n位小数,如果数值长度小于m,则左端补空格 小数点占一位,在输出小数的时候进行四舍五入,如果位数不够按实际长度输出 %-m.nf与m.nf基本相同,只是使输出的数值向左端靠,右端补空格 小数点占一位,在输出小数的时候进行四舍五入,如果位数不够按实际长度输出 f= 输出时有存储误差 printf("%f %10f %10.2f %.2f %-10.2f\n",f,f,f,f,f) 8/e格式符用指数形式输出实数 系统自动给出6位小数,指数部分占5位,e占一位,指数符号1位(+),指数3位 printf("%e", )
10
3.2 数据输入 字符输入函数 运行结果: Enter a character:A A--->hex41 格式:getchar( )
3.2 数据输入 字符输入函数 格式:getchar( ) 功能:从键盘读一字符 返值:正常,返回读取的代码值;出错,返回EOF(-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
11
格式输入函数 格式: scanf(“格式控制串”,地址表) 功能:按指定格式从键盘读入数据,存入地址表 指定的存储单元中,并按回车键结束
返值:正常,返回输入数据个数 地址表:变量的地址,前加取地址运算符& 格式字符串:[格式修饰]格式字符+原样输入 格式字符:d,i,o,x,u,c,s,f,e 例 scanf(“%d”,&a); 输入:10 则 a=10 例 scanf(“%x”,&a); 输入:11 则 a=17
12
输入分隔符的指定(原样输入字符) 例 scanf(“%d%o%x”,&a,&b,&c);
一般以空格、TAB或回车键作为分隔符 其它字符做分隔符:格式串中两个格式符间字符 例 scanf(“%d%o%x”,&a,&b,&c); printf(“a=%d,b=%d,c=%d\n”,a,b,c); 输入 输出 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 则3a, 4 b 例 scanf(“a=%d,b=%d,c=%d”,&a,&b,&c); 输入 a=12,b=24,c=36
13
如 scanf(“%c%c%c”,&c1,&c2,&c3); 若输入abc 则ac1, c2, b c3
说明: 输入数据时,遇以下情况认为该项数据结束: 遇空格、TAB、或回车 遇宽度结束 遇非法输入 如 scanf(“%c%c%c”,&c1,&c2,&c3); 若输入abc 则ac1, c2, b c3 阅读程序test6.cpp进一步理解键盘缓冲区 驱除键盘缓冲区对数据输入干扰的解决方法: (1)用getchar()清除 (2)用函数flushall(stdin)清除全部剩余内容 (3) 用格式串中空格或“%*c”来“吃掉” 例 int x; char ch; scanf(“%d”,&x); scanf(“ %c”,&ch); 或 scanf(“%*c%c”,&ch); 关于键盘缓冲区: 如 scanf(“%d%c%f”,&a,&b,&c); 若输入1234a123o.26 则 a, ‘a’ b, 123 c 例 int x; char ch; scanf(“%d”,&x); ch=getchar(); printf(“x=%d,ch=%d\n”,x,ch); 执行:123 输出:x=123,ch=10 说明:ch=10为换行 例 int x; char ch; scanf(“%d”,&x); scanf(“%c”,&ch); printf(“x=%d,ch=%d\n”,x,ch); 执行:123 输出:x=123,ch=10 说明:ch=10为换行
14
flushall清空键盘缓冲区,必须使用stdio.h头文件调用
#include<stdio.h> main() {char a; a=getchar();/*hello*/ putchar(a); a=getchar(); printf("%3c",a); flushall(); scanf("%c",&a);/*hello*/ putchar(a); scanf("%c",&a); }
15
注意点: 1.% 对应变量的地址 (字符串输入) char s[5] scanf("%s",s)
1.% 对应变量的地址 (字符串输入) char s[5] scanf("%s",s) 原样输入字符:格式控制中给出的字符需要原样输入 输入的数据格式,类型必须与格式控制中一致 2. 不可出现 scanf("%5.2f",f) 5.2是输入精度代表总为5位,小数点后2位, 输入时就要保证该精度,并非原样输入字符 scan("%\nf",f) 解释键盘输入原理,回车是输入结束标识
16
2.5 语句 程序流程的控制指令就是‘语句’,在C语言中由main函数开始顺序分步执行。 C语句以“;”作分隔符,编译后产生机器指令
2.5 语句 程序流程的控制指令就是‘语句’,在C语言中由main函数开始顺序分步执行。 C语句以“;”作分隔符,编译后产生机器指令 程序的基本结构 预定义(#include,#define等) main() { 定义变量; 算法; 结果输出或保存; }
17
输入:A 输出:A,65 a,97 例 从键盘输入大写字母,用小写字母输出 /*ch3_13.c*/
例 从键盘输入大写字母,用小写字母输出 /*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
18
例 输入三角形边长,求面积 文件包含预处理命令 变量定义 输入数据 输出数据 输入:3,4,6
例 输入三角形边长,求面积 /*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= , b= , c= s= area=
19
作业 练习 p54-p58
Similar presentations