Upload
priscilla-boyd
View
107
Download
4
Embed Size (px)
DESCRIPTION
第二讲 C 语言概述. 主讲:周春容. 2.0 预备知识 2.1 常量与变量 2.2 数据类型 2.3 常用输出与输入函数 练习与实践. 2.0 预备知识 计算机中数的表示及进制转换 数码、基与权 数码:表示数的符号 基:数码的个数 权:每一位所具有的值 数制. 十六进制数. 数制. 十进制数. 二进制数. 八进制数. 数码. 0~9. 0~1. 0~7. 0~9,A~F,a~f. 基. 10. 2. 8. 16. 权. … ,10²,10¹ 10 º. … , 2², 2¹, 2 º. - PowerPoint PPT Presentation
Citation preview
第二讲 C 语言概述主讲:周春容
第二讲 基本数据类型及数据输入输出
2.0预备知识2.1常量与变量2.2数据类型2.3常用输出与输入函数 练习与实践
第二讲 基本数据类型及数据输入输出
2.0 预备知识 计算机中数的表示及进制转换
•数码、基与权– 数码:表示数的符号– 基:数码的个数– 权:每一位所具有的值
•数制
第二讲 基本数据类型及数据输入输出
数制
基
权
表示
数码
特点
… ,10²,10¹10º
十进制数
0~9
10
逢十进一
二进制数
0~1
2
… , 2², 2¹, 2º
逢二进一
八进制数
0~7
8
… , 8², 8¹, 8º
逢八进一
十六进制数
0~9,A~F,a~f
16
… , 16², 16¹, 16º
逢十六进一
十进制: 4956= 410³+910² +510¹+610º二进制: 1011=12³+02² +12¹+12º十六进制: 81AE=816³+116² +1016¹+1416º八进制: 4275=48³+28² +78¹+58º
第二讲 基本数据类型及数据输入输出
• 各种进制之间的转换– 二进制、八进制、十六进制转换成十进制
» 方法:按权相加
10012345
2 59212120212121111011 )()(例
10012
8 94868381136 )()(例
100123
16 79781610162161516121 )()(例 AF
第二讲基本数据类型及数据输入输出各种进制之间的转换 ( 整数 )
二进制、八进制、十六进制转换成十进制方法:按权相加
十进制转换成二进制、八进制、十六进制原理:
的余数是2
)2......22(2
22......22
)......(
0
00
12
11
00
11
11
2011
Na
aaaa
aaaa
aaaaN
nn
nn
nn
nn
nn
方法:连续除以基,从低到高记录余数,直至商为 0
例 把十进制数 59 转换成二进制数
592
292
142
72
32
120
(59)10=(111011)2
1
1
01
11
1 1 1 0 1 1
余余余余余余
例 把十进制数 159 转换成八进制数
1598
198
280
(159)10=(237)8
2 3 7
余 7
余 3
余 2
例 把十进制数 459 转换成十六进制数
45916
2816
1160
(459)10=(1CB)16
1 C B
余 11
余 12
余 1
第二讲 基本数据类型及数据输入输出二进制与八进制之间的转换
二进制转换成八进制:从右向左,每 3 位一组(不足 3 位左补 0 ),转换成八进制
八进制转换成二进制:用 3 位二进制数代替每一位八进制数
例 (1101001)2=(001,101,001)2=(151)8
例 (246)8=(010,100,110)2=(10100110)2
000 ~ 0001 ~ 1010 ~ 2011 ~ 3100 ~ 4101 ~ 5110 ~ 6111 ~ 7
第二讲 基本数据类型及数据输入输出二进制与十六进制之间的转换
二进制转换成十六进制:从右向左,每 4 位一组(不足 4 位左补 0 ),转换成十六进制
十六进制转换成二进制:用 4 位二进制数代替每一位十六进制数
例 (11010101111101)2=(0011,0101,0111,1101)2=(357D)16
例 (4B9E)16=(0100,1011,1001,1110)2=(100101110011110)2
0000 ~ 00001 ~ 10010 ~ 20011 ~ 30100 ~ 40101 ~ 50110 ~ 60111 ~ 71000 ~ 81001 ~ 91010 ~ A1011 ~ B1100 ~ C1101 ~ D1110 ~ E1111 ~ F
第二讲 基本数据类型及数据输入输出 字节和位
• 内存以字节为单元组成• 每个字节有一个地址• 一个字节一般由 8 个二进制位组成• 每个二进位的值是 0 或 1
01234567
0123456789
10
……
...
7
6
4
3
2
5
1
第二讲 基本数据类型及数据输入输出 数值的表示方法——原码、反码和补码
• 原码:最高位为符号位,其余各位为数值本身的绝对值• 反码:
– 正数:反码与原码相同– 负数:符号位为 1 ,其余位对原码取反
• 补码:– 正数:原码、反码、补码相同– 负数:最高位为 1 ,其余位为原码取反,再对整个数加 1
3
12
6
9
1
2
4
57
8
10
11
9-5=49+7=16=(14)12
第二讲 基本数据类型及数据输入输出
为什么用补码表示?
25-19=25+(-19)(25)10=(00011001)2 (-19) 10
=(11101101) 2
00011001
+ 11101101----------------- 100000110
第二讲 基本数据类型及数据输入输出
为什么用补码表示?19 - 25 = 19 +(- 25)(19)10=(00010011)2 (-25) 10 =(11100111)
2
00010011+ 11100111----------------- 11111010 -------(-6)?
引入补码之后符号位也进入了运算,不用再单独处理符号位
第二讲 基本数据类型及数据输入输出
原码 反码 补码+7 00000111 00000111 00000111
-7 10000111 11111000 11111001
+0 00000000 00000000 00000000
-0 10000000 11111111 00000000
数的范围01111111~
11111111(-127~+127)
01111111~10000000
(-127~+127)
01111111~10000000
(-128~+127)
(用一字节表示数)
负数补码转换成十进制数:最高位不动,其余位取反加 1
例 补码: 11111001 取反: 10000110
加 1 : 10000111=-7
第二讲 基本数据类型及数据输入输出2.1 常量与变量
标识符• 定义:用来标识变量、常量、函数等的字符序列• 组成:
– 只能由字母、数字、下划线组成,且第一个字母必须是字母或下划线
– 大小写敏感– 不能使用关键字
• 长度:最长 32 个字符• 命名原则:
– 见名知意– 不宜混淆 如 l 与 I, o 与 0
例 :判断下列标识符号合法性sum Sum M.D.John day Date 3days
student_name #33 lotus_1_2_3
char a>b _above $123
M.D.John 3days#33
char $123a>b
第二讲 基本数据类型及数据输入输出
一般用大写字母是宏定义预处理命令,不是 C 语句
直接常量 :整型常量 实型常量 字符常量 字符串常量
如 #define PRICE 30
常量定义:程序运行时其值不能改变的量(即常数)分类 :
符号常量 : 用标识符代表常量定义格式: #define 符号常量 常量
例 符号常量举例
#define PRICE 30main(){ int num,total; num=10; total=num*PRICE; printf("total=%d",total);}
运行结果: total=300
第二讲 基本数据类型及数据输入输出
变量 ------ 其值可以改变的量 概念:
• 每个变量有一个名字:用标识符表示。• 每个变量有一个存储空间(存储单元),该单元中的状态所表示
的数为此时变量的值。
变量初始化 : 定义时可以赋初值
合法标识符
变量的使用:先定义,后使用变量定义的一般格式: 数据类型 变量 1[ ,变量 2 ,…,变量 n];
如: int a,b,c; float x,y;
第二讲 基本数据类型及数据输入输出
编译程序根据变量定义为其分配指定字节的内存单元 …
...
地址
int a=1, b=-3,c;
a
b
c
2 字节
2 字节
2 字节
地址
地址
….
..
内存
1
-3
随机数
第二讲 基本数据类型及数据输入输出
例 : int a=2,b,c=4; float data=3.67; char ch=‘A’; int x=1,y=1,z=1; int x=y=z=1;
例 2 float a,b,c; c=a%b; //Illegal use of floating point in function main
变量定义位置:一般放在函数开头
main(){ int a,b=2; float data; a=1; data=(a+b)*1.2; printf(“data=%f\n”,data);}
变量定义可执行语句
main(){ int a,b=2; a=1; float data; data=(a+b)*1.2; printf(“data=%f\n”,data);}
例 1 int student; stadent=19; //Undefined symbol ‘statent’ in function main
第二讲 基本数据类型及数据输入输出
每一个变量都有一个类型,表明了为它的存储属性 : 分配空间的大小; 表示的数的范围; 所能进行的运算。
第二讲 基本数据类型及数据输入输出例 2.1main(){float length,area,radius; /*length 为周
长, area 为面积, radius 半径 */ printf("\nEnter a radius: "); scanf("%f",&radius); length=2*PI*radius; /* 计算圆的周长 */ area=PI*radius*radius; /* 计算圆的面积 */ printf("\n length is : %f ",length); printf("\n area is : %f ",area); }程序的运行情况为: Enter a radius: 2.8 ↙ length is : 17.584000 area is : 24.617599
第二讲 基本数据类型及数据输入输出2.2 数据类型
数据类型总表
C数据类型
基本类型
构造类型
指针类型空类型 void
定义类型 typedef
字符类型 char
枚举类型 enum
整 型
实型单精度型 float
双精度型 double
数组结构体 struct
共用体 union
短整型 short
长整型 long
整型 int
数据类型决定:1. 数据占内存字节数
2. 数据取值范围3. 其上可进行的操作
第二讲 基本数据类型及数据输入输出2.2.1 整数类型 整数类型的标识符是 int。整型数据根据其占用的内存字节数不同,可加限定词:
short(短整型 ) , int ,long(长整型 ) , short≤int≤long可用 sizeof( 类型标识符)测量
unsigned short (无符号短整型 ), unsigned int (无符号整型 ),
unsigned long (无符号长整型 ), 其中 short 和 long的引入是为满足实际要求的不同长度的整数,而经 unsigned限定词限定的整数总是正的。
第二讲 基本数据类型及数据输入输出
01 11 11 11 11 11 11 11int 型: 最大 :32767
10 00 00 00 00 00 00 00 最小 :-32768
11 11 11 11 11 11 11 11unsigned int 型: 最大 :65535
00 00 00 00 00 00 00 00 最小 :0
第二讲 基本数据类型及数据输入输出
整型常量(整常数)三种形式:
十进制整数:由数字 0~9 和正负号表示 . 如 123,-456,0八进制整数:由数字 0 开头 , 后跟数字 0~7 表示 . 如0123,011
十六进制整数:由 0x开头 , 后跟 0~9,a~f,A~F 表示 . 如 0x123,0Xff
例 12 与 12L例 30000 为 int 型 65536 为 long int 型
问题:0123 = ( )10
0x123 = ( )10
0Xff = ( )10
83
291
255
问题:0123 = ( )10
0x123 = ( )10
0Xff = ( )10
第二讲 基本数据类型及数据输入输出
整型常量的类型根据其值所在范围确定其数据类型: 一个整数若值在 -32768 ~ 32767内,则默认为它是 int型;一个整数若值在 -2147483648 ~ 2147483647之间,可使用长整型常量表示。
在整常量后加字母 l 或 L ,认为它是 long int 型常量无符号数也可用后缀表示,整型常数的无符号数的后缀为“ U” 或“ u” 。
例如: 358u,0x38Au,235Lu 均为无符号数; 0XA5Lu表示十六进制无符号长整数 A5,其十进制为 165。
一个非负的整数,只要它的值不超过相应变量的取值范围,就可以赋给 unsigned型变量。例如,可以将 6000赋给一个 unsigned int型变量,但却不可以将 66000赋给一个unsigned int型变量(将会出现溢出错误)
第二讲 基本数据类型及数据输入输出 整型变量 定义方法: int a1,a2; unsigned int b1,b2;
一个整型常量只可以赋给能容纳下其值的整型变量。
如 a1,a2的取值范围为 -32768----32767 b1,b2的取值范围为 0----65535如果: a1=65535;或者 : b1=-1;在内存中数值将不是所赋的数值。
第二讲 基本数据类型及数据输入输出
2.2.2 实数类型 实数类型分为单精度( float)和双精度( double
)类 型,二者的区别在于所占存储位的多少,从而决定了其取值范围。
通常以 32位( bits)来存储单精度实数型数据,以64位来存储双精度实型数据。
第二讲 基本数据类型及数据输入输出
实型常量(实数或浮点数)表示形式:
十进制数形式:由数字和小数点组成,小数点的左右至少一边要有数字。 (必须有小数点) 如 0.123, .123, 123.0, 0.0, 123.
指数形式:由尾数、 e 或 E 和指数部分组成, E 的两边都至少要有一位数且 E 的右边只允许是整数形式( e 或 E 之前必须有数字;指数必须为整数)如 12.3e3 ,123E2, 1.23e4 , e-5 , 1.2E-3.5
实型常量的类型默认 double型在实型常量后加字母 f 或 F ,认为它是 float 型
第二讲 基本数据类型及数据输入输出 实型变量
实型变量的说明形式如下 : float 变量名 1[,变量名 2 ,…… 变量名 n]; double 变量名 1[,变量名 2 ,…… 变量名 n];
float:占 4字节,提供 7位有效数字double:占 8字节,提供 15~16 位有效数字
例 float a;a=111111.111; /* a=111111.1*/double b;b=111111.111; /* b=111111.111*/
float a,b,c;double x,y;
第二讲 基本数据类型及数据输入输出【例 2.2 】实型变量的有效数字。 main( ){ double a; a=6.152367864359046178294901; printf("\n%25.20f",a);}输出结果为: 6.15236786435904648000
在这个例子中, a 被赋值了一个有效位数为 25 位的数字。但由于 a是 double 类型的,所以 a 只能接收 15~16 位有效数字。在 printf语句中,我们使用了 %20.18f 这样的格式符号,这指示 printf 语句在输出 a 时总长度应为 25 位,小数点位数占 20 位。输出的结果显然显示了 25 位数,但只有 6.152367864359046 共 16 位有效数字被正确显示出来,后面的数字是一些无效的数值。这就表明 double 型的数据只接收 15~16 位有效数字。
第二讲 基本数据类型及数据输入输出
2.2.3 字符类型 整型、实型都是数值型,是大家比较熟悉的。除数值型外,还有一类数据是计算机经常处理的数据,这就是字符型。
字符型数据包含的是一个字符集。一般用的是ASCII码字符集见附录 A(p249) 。
字符集中的每一个字符都有一个序号,称为 ASCII码。 ASCII码大的字符比 ASCII码小的字符值大。
字符类型的标识符是 char。
第二讲 基本数据类型及数据输入输出 字符常量定义 : 用单引号括起来的单个普通字符或转义字符 .
字符常量的值:该字符的 ASCII码值
<
转义字符及其含义:转义字符 含义
\n
\v
\r
\a
\‘
\ddd
\t
\b
\f
\\
\“
\xhh
转义字符 含义
换行垂直制表
回车
响铃单引号
3 位 8 进制数代表的字符
水平制表退格
换页
反斜线
双引号2 位 16 进制数代表的字符
如 ‘ \101’ -----------‘A’ ‘\012’ -----------’\n’ ‘\376’ -----------’’ ‘\x61’ -----------’a’ ‘\60’ -----------’0’ ‘\483’ ----------()
例 :‘A’-------’\101’-------’\x41’--------65
如 ‘ A’——65, ‘ a’——97, ‘0’——48 , ‘\n’——10
如 ‘ a’ ‘A’ ‘?’ ‘\n’ ‘\101’转义字符 :反斜线后面跟一个字符或一个代码值表示
例 转义字符举例 (ch2_001.c,ch2_004.c) main()
{ printf("\101 \x42 C\n");
printf("I say:\"How are you?\"\n"); printf("\\C Program\\\n");
printf("Turbo \'C\'");}
运行结果: ( 屏幕显示 )A B C
Isay:”How are you?”\C Program\
Turbo ‘C’
例 main() { printf(“Y\b=\n”);
}
运行结果:屏幕显示: =
打印机输出: ¥
第二讲 基本数据类型及数据输入输出
字符型变量char 变量名 1 , [ 变量名 2 ,......变量
名 n]; 如: char c1,c2 ;一个字符型变量的值只能是一个单个字符;在内存中占一个字节 ;
字符变量存放的是字符的 ASCII码 ;char与 int数据间可进行算术运算 ; 由于字符型变量在内存中是以字符的 ASCII码—一个无符号整数的形式来存放的,所以在一定范围内,字符型数据和整型数据是可以互相通用的,二者的区别仅在于:字符型常量占一个字节,而整型常量占两个字节。
例 a=‘D’; /* a=68; */ x=‘A’+5; /* x=65+5; */ s=‘!’+‘G’ /* s=33+71; */
第二讲 基本数据类型及数据输入输出【例 2.3 】将小写字母转化为大写字母。main( ){char c1,c2; c1='x';c2='y'; c1=c132; c2=c232; printf("\n%c,%c",x1,x2);}程序的输出结果是: X,Y 这个例子是将小写字母转化为大写字母的程序。我们在
对 ASCII码字符表进行观察后会发现,大小写对应的字母,它们之间的 ASCII码正好相差 32。利用这个特性和上一个特性,我们可以编写出非常简单的大小写字母转换程序。
第二讲 基本数据类型及数据输入输出
字符常量与字符串常量不同
字符串常量定义:用双引号 (“”) 括起来的字符序列存储:每个字符串尾自动加一个 ‘ \0’ 作为字符串结束标志
h e l l o \0例 字符串“ hello” 在内存中
a a \0例 ‘ a’ “a”
例 空串 “” \0
例 : char ch; ch=“A”;
例 : char ch; ch=‘A’;
没有字符串变量,用字符数组存放
第二讲 基本数据类型及数据输入输出基本数据类型
类型符号 关键字
数的表示范围所占位数
整型
字符型
实型
有
无
(signed)int 16 -32768~32767(signed)short 16 -32768~32767
(signed)long 32 -2147483648~214748364716unsigned
int0~65535
32 0~4294967295unsigned long
unsigned short 16 0~65535
有 float 32 3.4e-38~3.4e38有 double 64 1.7e-308~1.7e308
有 char 8 -128~127
无 unsigned char 8 0~255
说明 : 数据类型所占字节数随机器硬件不同而不同 , 上表以 IBM PC 机为例 :
第二讲 基本数据类型及数据输入输出
例 /*ch2_003.c*/ #define PRICE 12.5 main() { int num=3; float total; char ch1,ch2=‘D’;
total=num*PRICE; ch1=ch2-‘A’+‘a’; printf(“total=%f,ch1=%c\n”,total,ch1); }
宏定义
变量定义
输出结果
运行结果:total=37.500000, ch1=d
第二讲 基本数据类型及数据输入输出
2.3 常用输入与输出函数
C 语言无 I/O 语句, I/O 操作由函数实现 #include <stdio.h>
第二讲 基本数据类型及数据输入输出
格式: printf(“ 格式控制串”,输出表列 ) ;功能:按指定格式向显示器输出数据返值:正常,返回输出字节数;出错,返回 EOF(-1)
2.3.1 格式输出函数
输出表列:要输出的数据 ,通常是表达式,可以没有,多个时以“ ,” 分隔)
格式控制串:包含两种信息:格式说明: %[修饰符 ] 格式字符 --- 用于指定所输出的表达事的格式;
普通字符或转义序列:原样输出;格式字符
第二讲 基本数据类型及数据输入输出d,ix,Xoucs
e,Efg
%%
格式字符:
十六进制无符号整数
不带符号十进制整数
十进制整数
指数形式浮点小数
单一字符字符串
八进制无符号整数
小数形式浮点小数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
%
说明格式字符要用小写格式字符与输出项个数应相同,按先后顺序一一对应输出转换 : 格式字符与输出项类型不一致 ,自动按指定格式输出
例 main() { unsigned int u=65535; printf(”u=%d\n",u); } 输出结果: u=-1
例 int a=3,b=4; printf(“%d %d\n”,a,b); printf(“a=%d , b=%d\n”,a,b);
例 int a=3,b=4; printf(“%d %d\n”,a,b); printf(“a=%d , b=%d\n”,a,b);输出结果 : 3 4 a=3, b=4
11 11 11 11 11 11 11 11 65535
第二讲 基本数据类型及数据输入输出• 附加格式说明符(修饰符)
.n对实数 , 指定小数点后位数 (四舍五入 )对字符串 , 指定实际输出位数
修饰符 功 能m 输出数据域宽 , 数据长度 <m, 左补空格 ;否则按实际输出
输出数据在域内左对齐(缺省右对齐 )
-
指定在有符号数的正数前显示正号(+)
+
输出数值时指定左面不使用的空位置自动填0
0
在八进制和十六进制数前显示前导 0 ,0x
#
在 d,o,x,u前,指定输出精度为long型在 e,f,g前,指定输出精度为double型
l
第二讲 基本数据类型及数据输入输出例 2.4 main(){
int n1,n2; float f1,f2,sum; char ch; n1=65; n2= 3; f1=234.5; f2=18.75; sum=f1+f2; ch='A'; printf("%d ,%c ,%d,%o ,%f ,%c, %d ",n1,n1,n2,n2,sum,ch,ch); printf("%s","Very good!"); }
运行结果: 65, A ,–3 ,177775, 253.250000 ,A ,65 ,Very good!
例 static char a[]=“Hello,world!” printf(“%s\n%15s\n%10.5s\n%2.5s\n%.3s\n”,a,a,a,a,a);
运行结果: Hello,world! Hello,world!��� Hello����� Hello Hel
第二讲 基本数据类型及数据输入输出
例 int a=1234; float f=123.456; static 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);
运行结果: ����1234 , 1234���� 123.46,123.5���� ����� Hello,Hel����� �������
例 -
第二讲 基本数据类型及数据输入输出例 int a=1234; float f=123.456; printf(“%08d\n”,a); printf(“%010.2f\n”,f); printf(“%0+8d\n”,a); printf(“0+10.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//000+1234//000+123.56
//173,0173,7B,0X7B
//0, 65536���
第二讲 基本数据类型及数据输入输出2.3.2 格式输入函数
格式 : scanf(“ 格式控制串”,地址表)功能:按指定格式从键盘读入数据,存入地址表指定的 存储单元中 , 并按回车键结束返值:正常,返回输入数据个数
地址表:变量的地址,常用取地址运算符 &格式字符 :d,i,o,x,u,c,s,f,e
例 scanf(“%d”,&a); 输入: 10 则 a=10
例 scanf(“%x”,&a); 输入: 11 则 a=17
第二讲 基本数据类型及数据输入输出• 附加格式说明符(修饰符)
l
修饰符 功 能h
m
*
用于 d,o,x前,指定输入为 short型整数用于 d,o,x前,指定输入为 long型整数用于 e,f前,指定输入为 double型实数
指定输入数据宽度,遇空格或不可转换字符则结束抑制符,指定输入项读入后不赋给变量
例 scanf(“%4d%2d%2d”,&yy,&mm,&dd);
输入 19991015
则 1999yy, 10 mm, 15 dd
例 scanf(“%3d%*4d%f”,&k,&f); 输入 12345678765.43 则 123k, 8765.43f
例 scanf(“%2d �%*3d �%2d”,&a,&b); 输入 12 �345 �67 则 12a, 67b
例 scanf(“%3c%2c”,&c1,&c2);
输入 abcde
则‘ a’c1, ‘d’ c2
第二讲 基本数据类型及数据输入输出
• 输入分隔符的指定– 一般以空格、 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 则 3a, 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 则 ac1, � c2, b c3
输入数据时,遇以下情况认为该数据结束:遇空格、 TAB 、或回车遇宽度结束遇非法输入如 scanf(“%d%c%f”,&a,&b,&c);
若输入 1234a123o.26
则 1234 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
例 int x; char ch; scanf(“%d”,&x); scanf(“%c”,&ch); printf(“x=%d,ch=%d\n”,x,ch);执行: 123输出: x=123,ch=10
解决方法:( 1 )用 getchar()清除( 2)用函数 fflush(stdin)清除全部剩余内容 (3) 用格式串中空格或“ %*c”来“吃掉”
例 int x; char ch; scanf(“%d”,&x); scanf(“ %c”,&ch);或 scanf(“%*c%c”,&ch);
第二讲 基本数据类型及数据输入输出
#include <stdio.h>main(){ int c; char a; c=65; a='B'; putchar(c); putchar('\n'); putchar(a);}
运行结果: A B
2.3.3 字符输出函数 ------putchar()
格式 : putchar( c )参数 : c 为字符常量、变量或表达式功能:把字符 c 输出到显示器上返值:正常,为显示的代码值;出错,为 EOF(-1)
第二讲 基本数据类型及数据输入输出
格式 :getchar( )功能:从键盘读一字符返值:正常,返回读取的代码值;出错 , 返回 EOF(-1)
2.3.4 字符输入函数 ------getchar()
例 #include <stdio.h>main(){ int c; printf("Enter a character:"); c=getchar(); printf("%c--->hex%x\n",c,c);}
运行结果:Enter a character:AA--->hex41