1 / 79

二、数据类型、运算符、表达式 和常用输入输出函数

二、数据类型、运算符、表达式 和常用输入输出函数. C 语言的基本数据类型有: • char (字符型) • int (整型) • float (实型或浮点型) • double (双精度实型) 2.1 常量 • 常量:程序运行过程中其值不能被改变的量称。 • 常量 分为:整型常量、实型常量、字符常量、 字符串常量、符号常量. 2.1.1 整型常量. 整型常量即整常数 1 . 整数 • 取值范围:一般占一个机器字,如字长两字节, 则为 -32768 ~ +32767 • 表示形式:

Download Presentation

二、数据类型、运算符、表达式 和常用输入输出函数

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. 二、数据类型、运算符、表达式和常用输入输出函数二、数据类型、运算符、表达式和常用输入输出函数 C语言的基本数据类型有: • char(字符型) • int(整型) • float (实型或浮点型) • double (双精度实型) 2.1 常量 • 常量:程序运行过程中其值不能被改变的量称。 • 常量分为:整型常量、实型常量、字符常量、 字符串常量、符号常量

  2. 2.1.1 整型常量 整型常量即整常数 1.整数 • 取值范围:一般占一个机器字,如字长两字节, 则为 -32768 ~ +32767 • 表示形式: 十进制整数 以非0开头的整数 八进制整数 以0开头的整数 十六进制整数 以0x或0X开头的整数 例:-123、456、0123、-0x123

  3. 2. 长整数  • 取值范围:占四字节  -2147483648 ~ +2147483647 • 表示形式:在整数后面加字母L或l 例:456l、-0456l、0x456l

  4. 2.1.2 实型常量 1. 实型常量又称浮点数常量,只使用十进制,有两种 表示形式: • 定点数形式  由正负号、整数部分、小数点、小数部分组成 例:0.0、12.34、0.123、.123、-123.0 、-123. • 指数形式  由正负号、整数部分、小数点、小数部分、E(e) 后带或不带正负号的整数组成  合法:1e-5、-3.14157E+7、-28e-005、123.45E0 非法:E8、3E-5.6、.e2、4e、e 2. 实型常量不分单、双精度, 都按双精度double型处理

  5. 2.1.3 字符常量 1.字符常量是用一对单引号(作为定界符)括起来的 一个字符。 'A', 'a', '5', '?', '+', '!', '$'。 字符不能是单引号 '、双引号 "、反斜杠 \。 2.字符常量具有数值,即其 ASCII代码值。 C = 'A';与 C = 65;等价。 3.转义字符 一对单引号括起来,里面是 反斜线开头,后跟一个字符,如'\n'。或 反斜线开头,后跟一个一到三位八进制数,或 后跟一个一到二位x开头的十六 进制数。(表 2.2)

  6. 常用转义字符

  7. 2.1.4 字符串常量 1.字符串常量一对双引号括起来的字符系列。 例:"hello!", "program", "a", "123.45" 2.存储形式 字符串的每个字符占一个字节,在其尾部自动 追加一个字符'\0'。 h e l l o ! \0 104 101 108 108 111 33 0

  8. 2.1.5 符号常量 符号常量即用一个特定的符号来代表一个常量 • 定义:#define符号常量 常量(字符串) 例: #define R 5.179 • 符号常量须“先定义,后使用”,一般用大写字母 例: #definePRICE35 #defineNUM10 #defineSUM PRICE*NUM main( ) { printf("total=%d\n", SUM); } 结果:total=350

  9. 2.2 变量 • 变量:程序运行过程中其值可以改变的量。 • 变量名和变量值: 变量名 (标识符) a 变量值 98 变量存储单元地址 • 变量分为两类 普通变量:存放各种普通的数据 指针变量:存放地址

  10. 变量须“先定义,后使用”,一般用小写字母 • 普通变量定义的一般形式: 数据类型 变量名表; 例: int a; int a, b; • 定义普通变量时可以对它初始化 例: int a = 3, b = 2;

  11. 2.2 变量 2.2.1 整型变量 2.2.2 实型变量 2.2.3 字符变量 2.2.4 指针变量

  12. 2.2.1 整型变量

  13. • 例2: main() { long a; int b=1; a=32767+b; printf("%d\n",a); } 整型数据的溢出: • 例1: main() { int a,b; b=32767; a=b+1; printf("%d\n",a); } 32767: 0111111111111111 -32768: 1000000000000000

  14. 2.2.2 实型变量 例:main() { float x,y; x=111111.111; y=222222.222; printf("%f\n",x+y); } 运行结果为 333333.328125

  15. 2.2.3 字符变量 • 说明字符变量使用 char标识符 • 一个字符变量在内存中占一个字节 • 将一个字符常量赋值给一个字符变量,实际上 是把该字符的 ASCII 代码放到字符变量对应的 内存单元中去 • 字符数据与整型数据的存储形式相类似,可以 相互赋值或混合运算,一个字符数据既可以以 字符形式输出,也可以整数形式输出

  16. 例1: main() { char c1,c2; c1='a'; c2='b'; printf("%c %c\n",c1,c2); printf("%d %d\n",c1,c2); } 例2:main() { int c1 ; char c2; c1='a'; c2=98; printf("%c %c\n",c1,c2); printf("%d %d\n",c1,c2); } 运行结果:a b 97 98

  17. 2.2.4 指针变量 • 指针变量的内存单元中存放的是一个变量的地址 i j i j 变量j的地址赋给指针变量i指针变量i指向变量j 1000 1000 1000 1000

  18. 可在定义变量的同时,定义相应类型的指针变量; 指针变量定义的一般形式: 数据类型 *指针变量名; 例: int *p;/*定义p是指向整型变量的指针变量*/ float *y; /*定义y是指向实型变量的指针变量*/ char *s; /*定义s是指向字符型变量的指针变量*/ • 定义指针变量时可以对它初始化 int i,*p = &i;

  19. 2.3 运算符 2.3.1 算术运算符 2.3.2 关系运算符和逻辑运算符 2.3.3 位运算符 2.3.4 赋值运算符 2.3.5 其他运算符

  20. 2.3.1 算术运算符 1. 加、减、乘、除和取余运算符:+、-、*、/、% • 除号/ - 当两个整型数相除时,结果为整数(商的整数 部分) -当被除数和除数只要有一个是实型数时,结果 为实数的商。 • 取余号 % 只能对整型数运算。

  21. 2.自增、自减运算符:++、-- • 用法 - 前置运算: ++或--用在变量之前,先将变量的 值增1或减1,再将该变量的新值用于表达式中 - 后置运算: ++或--用在变量之后,先将变量的 值用于表达式中,再将该变量的值增1或减1 例: i=5+j--; i=5+--j; • 只能用于变量,不能用于常量和表达式 合法:i++; --j; i=(j++)*5; 非法:6--; i=(j*5)++;

  22. • 例:main() { int a=5,c; c = ++ a; /* a先增1,再运算 */ c = c + a ++; /* a先运算,再增1 */ printf ("a = %d \tc = %d\n",a,c); } 结果:a = 7 c = 12 3.取负运算符:- 4. 算术表达式 是用算术运算符和括号将运算对象(常量、变量 和函数等)连接起来的、符合C语法规则的式子。

  23. 2.3.2 关系运算符和逻辑运算符 1. 关系运算符(比较运算符) 用于比较两个表达式值的大小,有6种: >、>=、<、<=、= =、!= 2. 关系表达式 •是用关系运算符把两个表达式联系起来的式子 •关系表达式成立,其值为真,用1代表;否则为假, 用0代表。 如 int a = 4, b = 8; 则 关系表达式 a > b 的值为0, 而 关系表达式 a < b 的值为1。

  24. 这里的0和1 是逻辑值,它可以作为判断的条件, 也可以和其它的关系表达式做逻辑运算(与、或、 非等),也可以和其它的算术表达式做算术运算 • 运用关系表达式时的注意事项  判断两个实数是否相等时,必须考虑到计算机运 算时可能产生的误差。 例如:关系表达式 (2.0/3.6*3.6)==2.0 对于表达式 (2.0/3.6*3.6),计算机运算的结果可 能是2.000001或1.999999 ,因此,可把关系表达式 写成: fabs(2.0-2.0/3.6*3.6)<1e-5

  25. 关系表达式中字符型数据按其ASCII码值参加 比较运算 100 < 'a' 值为0 '3' > 30 值为1  运算符两边的表达式可以是算术、字符、赋值、 关系、或逻辑表达式。 例:(a+x)>(b+y) (x=4)<=y++  关系运算符运算时结合方向自左至右。 例: 若 a = 4, b = 3, c = 2 则 x = ( a < b < c ) x的值为 1; y = ( a > b > c ) y 的值为 0。

  26. 3. 逻辑运算符 用于对逻辑量进行运算,有3种: && 逻辑与 双目运算符 || 逻辑或 双目运算符 ! 逻辑非 单目运算符 4. 逻辑表达式 • 是用逻辑运算符联系起来的表达式。如: a && b; a || b; ! a ; • 逻辑运算符两边是逻辑值。非0为真,0为假。 •逻辑表达式的值也是逻辑值。真为 1,假为0。

  27. • 运用逻辑表达式的注意事项  判断数值是否为真时,非0代表真,0代表假  逻辑运算符两侧的操作数不仅可以是整数,也 可以是其他数据类型,只要该类型的数据值最 终能得到0或非0值  逻辑表达式中,不一定对逻辑运算符两侧的表达 式都求值 (&&、||)  数学上的数值区间不能直接用在C语言的判断条 件上 如数学上的 1<x≤10,不应写成:1<x<=10; 而应写成:(1<x)&&(x<=10)

  28. 例1:int x, y, z, w; x = y = z = -1; w = (+ + x || + + y) && + + z; printf ("%d, %d, %d, %d\n", x, y, z, w); 输出为何? &&前的操作数值若是假,则后面的表达式无需运算 ||前的操作数值若是真,则后面的表达式无需运算

  29. 例2:逻辑表达式(!E) 的值等价于_____。 A) E == 0 B) E != 1 C) E != 0 D)-E

  30. 例 3: main ( ) { int a,b,c = 241; a = c/100%9; b = ( -1)&&( -2); printf ("%d, %d \n", a, b); } 输出为何? 2, 1

  31. 例4: int x = 35; char z = 'A'; int B; B = ((x&15)&&(z<'a')); 执行上述程序段后, B =? 1

  32. 2.3.3 位运算符 位运算符用于对字节中的位进行运算,参加位运 算的操作数必须是整型常量或变量。

  33. y x 15 0 15 0 z 15 0 例1 : 将整数x的低字节作为整数z的低字节,将整数y的 低字节作为整数z的高字节。

  34. x=0x0532, y=0xabcd x y 00000101001100101010101111001101 && 0000000011111111 0000000011111111 0000000000110010 0000000011001101 | <<8 1100110100000000 z 1100110100110010 c d 3 2

  35. main () { unsigned x,y,z; x = 0x0532; y = 0xabcd; z = ( x&0x00ff ) | (y&0x00ff)<<8; printf ( "z = %x \n", z ); } 输出为: z = cd32

  36. 例2:① 100&200 =? 100 00000000 01100100 200 00000000 11001000 64 00000000 01000000 ② 100|200 =? 100 00000000 01100100 200 00000000 11001000 236 00000000 11101100 ③ 100^200 =? 100 00000000 01100100 200 00000000 11001000 172 00000000 10101100

  37. ④ -100>>8 =? 100 00000000 01100100 ~ 11111111 10011011 +1 -100 11111111 10011100 >>8 <<8 111111111 11111111 (-1) 10011100 00000000 (-25600) ⑤ ~3 =? 3 00000000 00000011 ~3 11111111 11111100 (-4) ~ 00000000 00000011 +1 00000000 00000100

  38. 例3:设有如下程序: #include <stdio.h> void main() { int x; printf("%d\t",x=12&7); printf("%d\t",x=6^9); printf("%d\t",x=012|5); printf("%d\t",x= 5|7&3); } 试写出其输出结果。 4 15 15 7

  39. 2.3.4 赋值运算符 1. 基本赋值运算符:= • 由“=”连接的式子称为赋值表达式。其一般形式为: 变量=表达式 功能是计算表达式的值再赋予左边的变量。 例如:a = 3 b = i+++--j c=sin(x)+sin(y) • 赋值运算符具有右结合性。 a=b=c=1 可理解为:a=(b=(c=1))

  40. 2. 复合赋值运算符: +=、 -= 、 *= 、 /= 、 %= 、 &= 、 |= 、 ^= 、>>= 、<<= • 复合赋值符是在赋值符“=”之前加上其它二目运算 符可构成,执行顺序是:先运算,再赋值。 • 复合赋值表达式的一般形式为: 变量 双目运算符 = 表达式 等价于: 变量 = 变量 双目运算符 表达式 例如: a + = 5 等价于 a = a + 5

  41. x %= 8 等价于 x = x % 8 n &= m n = n & m x * = y + 7 x = x * ( y + 7 ) x << = n + 1 x = x << ( n + 1) 注:赋值号右边是作为一个完整的表达式参加运算 例: int x=6; 执行x+=x-=x*x;后,x的值是? 执行x+=x-=x++;后,x的值是? -60 2

  42. 【例2.4】 复合赋值运算符示例 #include "stdio.h" main() { int a=2, b=3, c=4; a*=b/=c-=a; printf("%d,%d,%d\n",a,b,c); a-=b*=c+=3; printf("%d,%d,%d\n",a,b,c); a=b=c=1; c=(a*=2)+(b+=3)+2; printf("%d\n",c); } 运行结果: 2,1,2 -3,5,5 8

  43. 2.3.5 其他运算符 1. 求字节数(长度)运算符:sizeof 用于计算被运算对象所占字节数 使用格式:sizeof( 数据类型 )或 sizeof( 表达式 ) 例如: • sizeof(double) 值为8 • sizeof(char)   值为1 • float f; int i, a[10]; i=sizeof(f);     i的值将为4 i=sizeof(a); i的值将为20

  44. 2. 逗号运算符:, • 又称顺序运算符,用于把若干表达式组合成一个 表达式,称之为逗号表达式或顺序表达式。 如:3+5,7+9 • 逗号表达式的一般形式: 表达式1, 表达式2, 表达式3, ……, 表达式n 表示由左到右依次计算各表达式之值,逗号表达 式之值为表达式n之值。 如:a=3*5, a*6 之值为90

  45. T F 表达式1 取表达式2值 取表达式3值 3. 条件运算符(三目运算符): ? : • 条件表达式的一般形式: 表达式1 ? 表达式2 : 表达式3 • 条件表达式求值过程: • 三个表达式的类型可以不同,表达式1要能得到逻 辑值,整个表达式值类型取表达式2和表达式3中 较高的类型

  46. 例1:执行下列程序段后,变量a,b,c的值和 x,y的值 分别是什么? int x=10, y=9; int a, b, c; a=(--x==y++)?--x:++y; b=x++; c=y; 8,8,10 9,10

  47. 例2:请写出下列程序的运行结果 main() { int x=5,y=6; printf("%d\n",((++x==y++)||(x=8))?--x:--y); printf("%d,%d",x,y); } 结果:5 5,7

  48. 例3:请写出下列程序的运行结果 main() { int a,b; int x=1, y=2, z=3; a=x<y?y--<z?z++:y++:x++; b=x<y?x++:y--<z?z++:y++; printf("%d,%d\n",a,b); printf("%d,%d,%d\n",x,y,z); } 结果:3,4 1,0,5

  49. 4. 取地址运算符&和取内容运算符* • 取址运算符&:取出内存单元的地址 例:p = & i; 表示变量 i的地址赋给指针变量p,即指针 p 指向了变量 i • 取内容运算符* :取出指针所指向的变量的内容 例:y = *p; 表示指针 p 指向的变量值赋给变量 y *p = x; 表示变量x的值赋给指针所指向的变量

  50. 例1: 指针的概念 main ( ) { int x, *p; p = &x; x = 20; printf("x: %d \n ", x ); printf("*p: %d \n", *p); printf("&x: %x \n", &x); printf(" p: %x \n ", p ); printf("&p: %x \n", &p ); } 运行结果: x: 20 *p: 20 &x: ffe0 p: ffe0 &p: ffe2

More Related