1 / 63

第 2 章 数据类型、运算符与表达式

第 2 章 数据类型、运算符与表达式. 2.1 数据类型 2.2 常量 和变量 2.3 运算符 与 表达式 2.4 不同 数据 类型间的转换 2.5 数据 的输入与输出. § 2-1 数据类型. 短整型. 整型. 整型. 基本类型. 字符型. 长整型. 单精度型. 实型 ( 浮点型 ). 数据类型. 双精度型. 枚举型. 数组类型. 构造类型. 结构体类型. 共用体类型. 指针类型. 空类型. C 语言的数据类型. C 语言提供的数据结构,是以数据类型形式出现的。具体分类如下: 1. 基本类型

brynn-haney
Télécharger la présentation

第 2 章 数据类型、运算符与表达式

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第2章 数据类型、运算符与表达式 2.1数据类型 2.2常量和变量 2.3运算符与表达式2.4 不同数据类型间的转换2.5 数据的输入与输出

  2. § 2-1 数据类型 短整型 整型 整型 基本类型 字符型 长整型 单精度型 实型(浮点型) 数据类型 双精度型 枚举型 数组类型 构造类型 结构体类型 共用体类型 指针类型 空类型

  3. C语言的数据类型 C语言提供的数据结构,是以数据类型形式出现的。具体分类如下: 1.基本类型 分为整型、实型(又称浮点型)、字符型和枚举型四种。 2.构造类型 分为数组类型、结构类型和共用类型三种。 3.指针类型。在第9章中介绍。 4.空类型 C语言中的数据,有常量和变量之分,它们分别属于上述这些类型。 本章将介绍基本类型中的整型、实型和字符型三种数据。 [Return]

  4. 2.1.1数值的定点表示形式与浮点表示形式 0.314159 +1 00000000 00001010 以指数形式表示一个数,由于指数的存在以及它的大小不同而使数字部分的小数点位置不同,也就是说,小数点的位置是“浮动的”,这种形式称为浮点数形式。在计算机内部,凡实数(小数)都以浮点形式存储,一个实数一般用四个字节存储,其中三个存数字,一个存指数。 凡不带指数部分的数称为定点数,例如: 3.14159,10,-20,1996。显然整数都属于定点数,在计算机内部整数以简单的不带指数部分的若干个0和1表示,如整数10的16位存储形式为 C语言将实数一律以浮点形式存储。

  5. 2.1.2字符类型数据的表示和存储形式 • 字符类型的数据在内存中以相应的ASCII代码存放,占用一个字节,因此在一定范围内,字符型数据和整数是互相通用的。

  6. C 语言程序设计 第二章数据描述 类型 符号 关键字 数的表示范围 所占位数 (signed)int 16 -32768~32767 16 (signed)short -32768~32767 32 (signed)long -2147483648~2147483647 unsignedint 16 0~65535 unsignedshort 16 0~65535 unsignedlong 32 0~4294967295 32 float 有 3.4e-38~3.4e38 64 有 double 1.7e-308~1.7e308 8 有 char -128~127 无 8 0~255 unsigned char 2.1.3数据的存储空间长度及取值范围 有 整型 无 实型 字符型 说明:数据类型所占字节数随机器硬件不同而不同,上表以IBM PC机为例: < >

  7. 2.1.4带符号的数据类型与无符号的数据类型 • 在内存中存储整数时,一般以其最高位表示数的符号,以0表示正,以1表示负。数值是以补码形式存放的。 • C语言还允许使用无符号整数,它将二进制形式的最左位不作为符号,而与右面各位一起用来表示数值。 • C语言提供了一个测定某一种数据类型所占存储空间长度的运算符”sizeof”,它的格式为:sizeof(类型标志符)。

  8. 2.2常量与变量 标识符 定义:用来标识变量、常量、函数等的字符序列 组成: 只能由字母、数字、下划线组成,且第一个字母必须是字母或下划线 大小写敏感 不能使用关键字 长度:最长32个字符 命名原则: 见名知意 不宜混淆 如l与I, o与0 语言程序设计 第二章数据描述 C • 例:判断下列标识符号合法性 • 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 a>b $123 < >

  9. 语言程序设计 第二章数据描述 C • 常量 • 定义:程序运行时其值不能改变的量(即常数) • 分类: • 符号常量:用标识符代表常量 • 定义格式: #define符号常量 常量 • 一般用大写字母 • 是宏定义预处理命令,不是C语句 • 直接常量: • 整型常量 • 实型常量 • 字符常量 • 字符串常量 例 符号常量举例(ch2_1.c) #define PRICE 30 main() { int num,total; num=10; total=num*PRICE; printf("total=%d",total); } 如 #define PRICE 30 > 运行结果:total=300 > > > < >

  10. 语言程序设计 第二章数据描述 C 问题: 0123 = ( )10 0x123 = ( )10 0Xff = ( )10 83 291 255 • 整型常量(整常数) • 三种形式: • 十进制整数:由数字0~9和正负号表示.如 123,-456,0 • 八进制整数:由数字0开头,后跟数字0~7表示.如0123,011 • 十六进制整数:由0x开头,后跟0~9,a~f,A~F表示. 如0x123,0Xff • 整型常量的类型 • 根据其值所在范围确定其数据类型 • 在整常量后加字母l或L,认为它是long int型常量 问题: 0123 = ( )10 0x123 = ( )10 0Xff = ( )10 例 30000 为int型 65536 为long int 型 例 12 与 12L <

  11. 语言程序设计 第二章数据描述 C • 实型常量(实数或浮点数) • 表示形式: • 十进制数形式:(必须有小数点) 如0.123, .123, 123.0, 0.0, 123. • 指数形式:(e或E之前必须有数字;指数必须为整数)如12.3e3 ,123E2, 1.23e4 , e-5 , 1.2E-3.5 • 实型常量的类型 • 默认double型 • 在实型常量后加字母f或F,认为它是float 型 <

  12. 转义字符及其含义: 转义字符 含义 转义字符 含义 \t \n 换行 水平制表 垂直制表 \b 退格 \v \r 回车 \f 换页 \a 响铃 \\ 反斜线 \‘ 单引号 \“ 双引号 < 2位16进制数代表的字符 \ddd 3位8进制数代表的字符 \xhh • 字符常量 • 定义:用单引号括起来的单个普通字符或转义字符. 如 ‘a’ ‘A’ ‘?’ ‘\n’ ‘\101’ • 字符常量的值:该字符的ASCII码值 • 转义字符:反斜线后面跟一个字符或一个代码值表示 如 ‘A’——65, ‘a’——97, ‘0’——48 , ‘\n’——10 例 转义字符举例(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’-------’\101’-------’\x41’--------65 如 ‘\101’ -----------‘A’ ‘\012’ -----------’\n’ ‘\376’ -----------’’ ‘\x61’ -----------’a’ ‘\60’ -----------’0’ ‘\483’ ----------() 运行结果:(屏幕显示) A B C Isay:”How are you?” \C Program\ Turbo ‘C’ 例 main() { printf(“Y\b=\n”); } 运行结果: 屏幕显示:= 打印机输出:¥ < aaa

  13. 语言程序设计 第二章数据描述 C h e l l o \0 例 字符串“hello”在内存中 例 空串 “” \0 例 ‘a’ “a” a a \0 例: char ch; ch=‘A’; • 字符串常量 • 定义:用双引号(“”)括起来的字符序列 • 存储:每个字符串尾自动加一个 ‘\0’ 作为字符串结束标志 • 字符常量与字符串常量不同 例: char ch; ch=“A”; <

  14. 变量 概念:其值可以改变的量 变量名与变量值 变量定义的一般格式: 数据类型 变量1[,变量2,…,变量n]; 语言程序设计 第二章数据描述 C int a=1, b=-3,c; 地址 地址 地址 …... main() { int a,b=2; a=1; float data; data=(a+b)*1.2; printf(“data=%f\n”,data); } 1 a 2字节 变量定义 b -3 可执行语句 2字节 main() { int a,b=2; float data; a=1; data=(a+b)*1.2; printf(“data=%f\n”,data); }  c 2字节 …... 随机数 内存 编译程序根据变量定义为其 分配指定字节的内存单元 Ch2_005.c • 变量初始化:定义时赋初值 例: int a,b,c; float data; • 变量的使用:先定义,后使用 决定分配字节数 和数的表示范围 合法标识符 例: 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; • 变量定义位置:一般放在函数开头 例1 int student; stadent=19; //Undefined symbol ‘statent’ in function main 例2 float a,b,c; c=a%b; //Illegal use of floating point in function main < >

  15. 整型变量 占字节数随机器不同而不同,一般占一个机器字 short≤int≤long 可用sizeof(类型标识符)测量 语言程序设计 第二章数据描述 C • 实型变量 • float:占4字节,提供7位有效数字 • double:占8字节,提供15~16位有效数字 例 float a; a=111111.111; /* a=111111.1*/ double b; b=111111.111; /* b=111111.111*/ • 字符型变量 • 字符变量存放字符ASCII码 • char与int数据间可进行算术运算 例 a=‘D’; /* a=68; */ x=‘A’+5; /* x=65+5; */ s=‘!’+‘G’ /* s=33+71; */ 没有字符串变量,用字符数组存放 < > Ch2_006.c

  16. 语言程序设计 第二章数据描述 C 宏定义 变量定义 输出结果 例 /*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

  17. 2.3不同类型数据间的转换 隐式转换 什么情况下发生 运算转换------不同类型数据混合运算时 赋值转换------把一个值赋给与其类型不同的变量时 输出转换------输出时转换成指定的输出格式 函数调用转换------实参与形参类型不一致时转换 运算转换规则:不同类型数据运算时先自动转换成同一类型 语言程序设计 第二章数据描述 C < >

  18. double float 说明: 高 必定的转换 long 运算对象类型不同时转换 unsigned 例 int i; float f; double d; long l; int char,short 低 10+‘a’ +i*f - d/l ch/i + f*d - (f+i) 例 char ch; int i; float f; double d; int double double double double int int double double double double double int double double double < >

  19. 显式转换(强制转换) 一般形式:(类型名)(表达式) 例 (int)(x+y) (int)x+y (double)(3/2) (int)3.6 说明:强制转换得到所需类型的中间变量,原变量类型不变 语言程序设计 第二章数据描述 C 较高类型向较低类型转换时可能发生 Ch2_007.c Ch2_008.c 精度损失问题 例 main() { float x; int i; x=3.6; i=(int)x; printf(“x=%f,i=%d”,x,i); } 结果:x=3.600000,i=3 < >

  20. 2.4运算符和表达式 语言程序设计 第二章数据描述 C 算术运算符:(+ - * / % ++ --) 关系运算符:(< <= == > >= !=) 逻辑运算符:((! && ||) 位运算符 :(<< >> ~ | ^ &) 赋值运算符:(= 及其扩展) 条件运算符:(?:) 逗号运算符:(,) 指针运算符:(* &) 求字节数 :(sizeof) 强制类型转换:(类型) 分量运算符:(. ->) 下标运算符:([]) 其它 :(( ) -) C 运 算 符 < >

  21. 学习运算符应注意: 运算符功能 与运算量关系 要求运算量个数 要求运算量类型 运算符优先级别 结合方向 结果的类型 语言程序设计 第二章数据描述 C < >

  22. 算术运算符和表达式 基本算术运算符: + - * / % 结合方向:从左向右 优先级: - ---->* / % -----> + - (2) (3) (4) 说明: “-”可为单目运算符时,右结合性 两整数相除,结果为整数 %要求两侧均为整型数据 语言程序设计 第二章数据描述 C 例 5%2 = 1 -5%2 = -1 1%10 =1 5%1 =0 5.5%2 () 例 5%2 = -5%2 = 1%10 = 5%1 = 5.5%2 例 5/2 = 2 -5/2.0 = -2.5 例 5/2 = -5/2.0 = < >

  23. 自增、自减运算符++ -- 作用:使变量值加1或减1 种类: 前置 ++i, --i (先执行i+1或i-1,再使用i值) 后置 i++,i-- (先使用i值,再执行i+1或i-1) 语言程序设计 第二章数据描述 C 例 j=3; k=++j; j=3; k=j++; j=3; printf(“%d”,++j); j=3; printf(“%d”,j++); a=3;b=5;c=(++a)*b; a=3;b=5;c=(a++)*b; //k=4,j=4 //k=3,j=4 //4 //3 //c=20,a=4 //c=15,a=4 < >

  24. 语言程序设计 第二章数据描述 C 例 j+++k; (j++)+k; • 自增、自减运算符++ -- • 作用:使变量值加1或减1 • 种类: • 前置 ++i, --i (先执行i+1或i-1,再使用i值) • 后置 i++,i-- (先使用i值,再执行i+1或i-1) • 说明: • ++ -- 不能用于常量和表达式,如5++,(a+b)++ • ++ --结合方向: 自右向左 • 优先级:- ++ -- ------>* / % ----->+ - (2) (3) (4) • 例 -i++  -(i++) • i=3; printf(“%d”,-i++); //-3 • 例 -i++ • i=3; printf(“%d”,-i++); Ch2_009.c

  25. 赋值运算符和表达式 简单赋值运算符 符号: = 格式: 变量标识符=表达式 作用:将一个数据(常量或表达式)赋给一个变量 语言程序设计 第二章数据描述 C a+=3 a=a+3 x*=y+8 x=x*(y+8) x%=3 x=x%3 例 a=3; d=func(); c=d+2; • 复合赋值运算符 • 种类:+= -= *= /= %= 《= 》= &= ^= |= • 含义: exp1 op= exp2exp1 = exp1 op exp2 < >

  26. 说明: 结合方向:自右向左 优先级: 14 左侧必须是变量,不能是常量或表达式 语言程序设计 第二章数据描述 C • 例 3=x-2*y; • a+b=3; • 赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型 • 赋值表达式的值与变量值相等,且可嵌套 • 例float f; • int i; • i=10; • f=i; • 则f=10.0 例 int i; i=2.56; //结果i=2; 例: a=b=c=5 a=(b=5) a=5+(c=6) a=(b=4)+(c=6) a=(b=10)/(c=2) //表达式值为5,a,b,c值为5 // b=5;a=5 //表达式值11,c=6,a=11 //表达式值10,a=10,b=4,c=6 //表达式值5,a=5,b=10,c=2 < >

  27. 语言程序设计 第二章数据描述 C • 说明: • 结合方向:自右向左 • 优先级: 12 • 左侧必须是变量,不能是常量或表达式 • 赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型 • 赋值表达式的值与变量值相等,且可嵌套 例: a=12; a+=a-=a*a //a=-264 等价于a=a+(a=a-(a*a)) 例: int a=2; a%=4-1; a+=a*=a-=a*=3; //a=0 等价于a=a+(a=a*(a=a-(a=a*3))) < >

  28. 逗号运算符和表达式 形式:表达式1,表达式2,……表达式n 结合性:从左向右 优先级: 15 逗号表达式的值:等于表达式n的值 用途:常用于循环for语句中 语言程序设计 第二章数据描述 C //a=15,表达式值60 • 例 a=3*5,a*4 • a=3*5,a*4,a+5 • 例 x=(a=3,6*3) • x=a=3,6*a • 例 a=1;b=2;c=3; • printf(“%d,%d,%d”,a,b,c); • printf(“%d,%d,%d”,(a,b,c),b,c); //a=15,表达式值20 //赋值表达式,表达式值18,x=18 //逗号表达式,表达式值18,x=3 //1,2,3 //3,2,3 < >

  29. 语言程序设计 第二章数据描述 C • 逗号运算符和表达式 • 形式:表达式1,表达式2,……表达式n • 结合性:从左向右 • 优先级: 15 • 逗号表达式的值:等于表达式n的值 • 用途:常用于循环for语句中 例: /*ch2_6.c*/ #include <stdio.h> main() { int x,y=7; float z=4; x=(y=y+6,y/z); printf("x=%d\n",x); } 运行结果:x=3 < >

  30. 关系运算符和表达式 关系运算符 种类:< <= == >= > != 结合方向:自左向右 优先级别: 语言程序设计 第二章数据描述 C < <= > >= == != 优先级6(高) 优先级7(低) • 例 c>a+b //c>(a+b) • a>b!=c //(a>b)!=c • a==b<c //a==(b<c) • a=b>c //a=(b>c) • 关系表达式的值:是逻辑值“真”或“假”,用1和0表示 例 int a=3,b=2,c=1,d,f; a>b (a>b)==c b+c<a d=a>b f=a>b>c //表达式值1 //表达式值1 //表达式值0 //d=1 //f=0 < >

  31. 语言程序设计 第二章数据描述 C 例 若a=0; b=0.5; x=0.3; 则 a<=x<=b的值为 0 例 5>2>7>8在C中是允许的, 值为 • 关系运算注意: 0 例 int i=1, j=7,a; a=i+(j%4!=0); 则a= 2 例 ‘a’>0 结果为 ‘A’>100 结果为 1 0 < >

  32. 语言程序设计 第二章数据描述 C • 关系运算注意: 例 应避免对实数作相等或不等的判断 如 1.0/3.0*3.0==1.0 结果为 可改写为:fabs(1.0/3.0*3.0-1.0)<1e-6 0 例 注意区分“=”与“==” int a=0,b=1; if(a=b) printf(“a equal to b”); else printf(“a not equal to b”);

  33. C 语言程序设计 第二章数据描述 逻辑运算符和表达式 逻辑运算符 种类: ! && || 逻辑运算真值表 a b !a !b a&&b a||b 真 真 假 假 真 真 真 假 假 真 假 真 假 真 真 假 假 真 假 假 真 真 假 假 • C语言中,运算量: 0表示“假”, 非0表示“真”, 运算结果: 0表示“假”, 1表示“真”, < >

  34. 语言程序设计 第二章数据描述 C ! :从右向左 && :从左向右 || :从左向右 ! (2) && (11) || (12) 高 低 • 优先级: • 结合方向: • 例 a<=x && x<=b • a>b&&x>y • a==b||x==y • !a||a>b // (a<=x) && (x<=b) //(a>b)&&(x>y) //(a==b)||(x==y) //(!a)||(a>b) < >

  35. C 语言程序设计 第二章数据描述 ! :从右向左 && :从左向右 || :从左向右 ! (2) && (11) || (12) 高 低 • 优先级: • 结合方向: 例 a=4;b=5; !a a&&b a||b !a||b 4&&0||2 5>3&&2||8<4-!0 ‘c’&&‘d’ 值为0 值为1 值为1 值为1 值为1 //(5>3)&&2||(8<(4-(!0))) 值为1 值为1 < >

  36. 语言程序设计 第二章数据描述 C ! :从右向左 && :从左向右 || :从左向右 ! (2) && (11) || (12) 高 低 • 优先级: • 结合方向: • 短路特性:逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符 • 例 a&&b&&c //只在a为真时,才判别b的值; • 只在a、b都为真时,才判别 c的值 • 例 a||b||c //只在a为假时,才判别b的值; • 只在a、b都为假时,才判别 c的值 • 例 a=1;b=2;c=3;d=4;m=1;n=1; • (m=a>b)&&(n=c>d) //结果m=0,n=1 < >

  37. C 语言程序设计 第二章数据描述 非0 =0 expr1 例 if (a>b) printf(“%d”,a); else printf(“%d”,b); printf(“%d”,a>b?a:b); 取expr2值 取expr3值 • 条件运算符与表达式 • 一般形式: expr1 ? expr2 : expr3 • 执行过程 • 功能:相当于条件语句,但不能取代一般if语句 例 求 a+|b| printf(“a+|b|=%d\n”,b>0?a+b:a-b); • 条件运算符可嵌套 如 x>0?1:(x<0?-1:0) • 优先级: 13 例 (a==b)?’Y’:’N’ (x%2==1)?1:0 (x>=0)?x:-x (c>=‘a’ && c<=‘z’)?c-’a’+’A’:c • 结合方向:自右向左 如 a>b?a:c>d?c:d  a>b?a:(c>d?c:d) • expr1、expr2、expr3类型可不同,表达式值取较高的类型 例 x?‘a’:‘b’ //x=0,表达式值为‘b’; x‡0,表达式值为‘a’ x>y?1:1.5 //x>y ,值为1.0; x<y ,值为1.5 < >

  38. 语言程序设计 第二章数据描述 C int型: 最大:32767 01 11 11 11 11 11 11 11 10 00 00 00 00 00 00 00 11 11 11 11 11 11 11 11 最小:-32768 unsigned int型: 最大:65535 00 00 00 00 00 00 00 00 最小:0

  39. C 语言程序设计 第二章数据描述 十六进制数 数制 十进制数 二进制数 八进制数 数码 0~9 0~1 0~7 0~9,A~F,a~f 基 10 2 8 16 权 10º,10¹,10²,… 2º,2¹,2²,… 8º,8¹,8²,… 16º,16¹,16²,… 表示 特点 逢十进一 逢二进一 逢八进一 逢十六进一 十六进制:81AE=816³+116² +1016¹+1416º 八进制:4275=48³+28² +78¹+58º 十进制:4956= 410³+910² +510¹+610º 二进制:1011=12³+02² +12¹+12º

  40. 2.5数据的输入与输出2.5.1 格式化输出——printf()函数 printf()函数的作用:向计算机系统默认的输出设备(一般指终端或显示器)输出一个或多个任意类型的数据。 printf()函数的一般格式 已知圆半径radius=1.5,求圆周长和圆面积。/*案例代码文件名:AL3_1.C。*/main() {float radius,length,area,pi=3.1415926; radius=1.5; length=2*pi*radius; /*求圆周长*/ area=pi*radius*radius; /*求圆面积*/ printf(“radius=%f\n”,radius); /*输出圆半径*/ printf(“length=%7.2f,area=%7.2f\n”,length,area); /*输出圆周长、面积*/ }

  41. 程序运行结果如下: radius=1.500000 length= 9.42,area= 7.07 printf()函数的一般格式如下: printf("格式字符串" [,输出项表]); 1.格式字符串。“格式字符串”也称“转换控制字符串”,可以包含三种字符: (1)格式指示符。格式指示符的一般形式如下: %[标志][宽度][.精度][F|N|h|L][类型] 常用的标志字符如表3-1所示,常用的宽度指示符如表3-2所示,常用的精度指示符如表3-3所示,长度修饰符如表3-4所示,类型转换字符如表3-5所示。

  42. (2)转义字符 例如,[案例3.1]中printf()函数中的'\n'就是转义字符,输出时产生一个“换行”操作。 (3)普通字符──除格式指示符和转义字符之外的其它字符。格式字符串中的普通字符,原样输出。 例如,[案例3.1]中“printf("radius=%f\n", radius);”语句中的“radius=”,“printf("length=%7.2f,area=%7.2f\n", length,area);”语句中的“length=”、“area=”等都是普通字符。 2.输出项表 输出项表是可选的。如果要输出的数据不止1个,相邻2个之间用逗号分开。下面的printf()函数都是合法的: (1)printf("I am a student.\n"); (2)printf("%d",3+2); (3)printf("a=%f b=%5d\n", a, a+3); 必须强调:“格式字符串”中的格式指示符,必须与“输出项表”中、输出项的数据类型一致,否则会引起输出错误。

  43. 格式指示符 输出不同类型的数据,要使用不同的类型转换字符。 1.类型转换字符d──以带符号的十进制整数形式输出。 [案例] 类型转换字符d的使用。 /*案例代码文件名:AL3_2.C。*/ main() {int num1=123; long num2=123456; /*用3种不同格式,输出int型数据num1的值*/ printf("num1=%d,num1=%5d,num1=%-5d,num1=%2d\n", num1,num1,num1,num1); /*用3种不同格式,输出long型数据num2的值*/ printf("num2=%ld,num2=%8ld,num2=%5ld\n",num2,num2,num2); printf("num1=%ld\n",num1); }

  44. 程序运行结果如下: num1=123,num1=□□123,num1=123□□,num1=123 num2=123456,num2=□□123456,num2=123456 num1=16908411 对于整数,还可用八进制、无符号形式(%o(小写字母o))和十六进制、无符号形式(%x)输出。对于unsigned型数据,也可用%u格式符,以十进制、无符号形式输出。 所谓无符号形式是指,不论正数还是负数,系统一律当作无符号整数来输出。例如,printf("%d,%o,%x\n",-1,-1,-1);

  45. 2.类型转换字符f──以小数形式、按系统默认的宽度,输出单精度和双精度实数。 [案例] 类型转换字符f的使用。 /*案例代码文件名:AL3_3.C。*/ main( ) {float f=123.456; double d1,d2; d1=1111111111111.111111111; d2=2222222222222.222222222; printf("%f,%12f,%12.2f,%-12.2f,%.2f\n",f,f,f,f,f); printf("d1+d2=%f\n",d1+d2); } 程序运行结果如下: 123.456001,□□123.456001,□□□□□□123.46,123.46□□□□□□,123.46 d1+d2=3333333333333.333010

  46. 本案例程序的输出结果中,数据123.456001和3333333333333.333010中的001和010都是无意义的,因为它们超出了有效数字的范围。本案例程序的输出结果中,数据123.456001和3333333333333.333010中的001和010都是无意义的,因为它们超出了有效数字的范围。 对于实数,也可使用格式符%e,以标准指数形式输出:尾数中的整数部分大于等于1、小于10,小数点占一位,尾数中的小数部分占5位;指数部分占4位(如e-03),其中e占一位,指数符号占一位,指数占2位,共计11位。 也可使用格式符%g,让系统根据数值的大小,自动选择%f或%e格式、且不输出无意义的零。

  47. 3.类型转换字符c──输出一个字符(只占一列宽度)。3.类型转换字符c──输出一个字符(只占一列宽度)。 [案例] 类型转换字符c的使用。 /*案例代码文件名:AL3_4.C。*/ main() {char c='A'; int i=65; printf("c=%c,%5c,%d\n",c,c,c); printf("i=%d,%c",i,i); } 程序运行结果如下: c=A,□□□□A,65 i=65,A 需要强调的是:在C语言中,整数可以用字符形式输出,字符数据也可以用整数形式输出。将整数用字符形式输出时,系统首先求该数与256的余数,然后将余数作为ASCII码,转换成相应的字符输出。

  48. 4.类型转换字符s──输出一个字符串。 [案例] 类型转换字符s的使用。 /*案例代码文件名:AL3_10.C。*/ main() {printf("%s,%5s,%-10s","Internet","Internet","Internet"); printf("%10.5s,%-10.5s,%4.5s\n","Internet","Internet","Internet"); } 程序运行结果如下: Internet,Internet,Internet□□,□□□□□Inter,Inter□□□□□,Inter 注意:系统输出字符和字符串时,不输出单引号和双引号。

  49. 使用说明 (1)printf()可以输出常量、变量和表达式的值。但格式控制中的格式说明符,必须按从左到右的顺序,与输出项表中的每个数据一一对应,否则出错。 例如,printf("str=%s, f=%d, i=%f\n", "Internet", 1.0 / 2.0, 3 + 5, "CHINA");是错误的。 (2)格式字符x、e、g可以用小写字母,也可以用大写字母。使用大写字母时,输出数据中包含的字母也大写。除了x、e、g格式字符外,其它格式字符必须用小写字母。 例如,%f不能写成%F。 (3)格式字符紧跟在“%”后面就作为格式字符,否则将作为普通字符使用(原样输出)。 例如,“printf(”c=%c, f=%f\n“, c, f);”中的第一个c和f,都是普通字符。 [Return]

  50. 2.5.2 格式化输入——scanf()函数 scanf()函数是用来从外部输入设备向计算机主机输入数据的。 scanf()函数的一般格式 [案例] 已知圆柱体的底半径radius=1.5,高high=2.0,求其体积。/*案例代码文件名:AL3_6.C。*/main() { float radius=1.5, high=2.0, pi=3.14159, vol; vol=pi*radius*radius*high; /*求体积*/ printf(“vol=%7.2f\n”,vol); /*输出求出的体积*/ } [案例3.7] 已知圆柱体的底半径为radius,高为high,求其体积。 /*案例代码文件名:AL3_7.C。*/ /*功能:说明函数scanf()的格式及作用。*/

More Related