zjc03
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
x+y的值强制转换为整型 (int)(x+y) 将x+y的值强制转换为整型
3.8 算术运算符和算术表达式
一、*运算符和表达式 、*运算符和表达式 1。基本算术运算符 + 加 - 减 * 乘 /除
% 模 (求余) 求余)
说明:(1)求余(%)运算只适用于整型 只适用于整型,9%4 求余( 说明 结果为1, 若非整数,应先强制转换为整数。 结果为 若非整数,应先强制转换为整数 注意: 运算对象有负数时, 注意:%运算对象有负数时,结果的符号同左边 一致。 一致。 (2)两整数相除结果为整数:8/3 结果为2(舍去 两整数相除结果为整数: 结果为2 两整数相除结果为整数 小数) 截尾取整。 小数),截尾取整。 再如: int)9.6/4 9.6/4, 9/4。 再如: (int)9.6/4,先截尾取整为 9/4。 (3)算术运算的数中有一个为实数,结果为 算术运算的数中有一个为实数, 算术运算的数中有一个为实数 double型。 型
必转
二、强制转换
例:main( ) { int a=300,b=200; long c; c=a*b; printf("%ld\n",c); getch( ); }
运行: 运行:-5536 出错原因:虽然c定义为长整型 计算a*b 定义为长整型, 出错原因:虽然 定义为长整型,计算 已超出范围(32767)溢出 溢出。 时,已超出范围 溢出 60000的二进制1110101001100000
二、字符变量
字符变量可以存放字符常量。 字符变量可以存放字符常量。 字符变量的定义: 字符变量的定义: char c1, c2; c1=‘x’ ; c2= ‘Y’ ; c1,c2 为字符变量,各可放一个字符。 为字符变量,各可放一个字符。 一个字符占一个字节。 一个字符占一个字节 问:C1=‘ab’; C2=“a”; 可以吗? 编译) 可以吗?(编译)
3.5 字符型数据
一、字符常量
用单引号括起来的一个字符。 用单引号括起来的一个字符。‘a’, ‘E’,‘?’,‘#’,’6’等。 #’, , 注意:‘a’≠’A’,其ASCII值是不同的. II值是不同的 注意 ≠ 其 II值是不同的. 特殊字符: 开头的字符。 特殊字符: 以“\”开头的字符 见P48表3.3 代表换行符。 如: \n 代表换行符。 \ r 代表回车,不换行,光标移行首。 代表回车,不换行,光标移行首。 后面的字符称为转义字符 转义字符。 其中 \后面的字符称为转义字符。
2. 可用字符的 可用字符的ASCII码值给变量赋值. 码值给变量赋值. 码值给变量赋值
比如: 比如: char x; x=97 与 x =‘a’等价,在内存形式一样。 等价, 等价
例3: main() { char x 1 , y1,x2, y2 , x3, y3;
x1=97; y1=98; printf(“x1=%c,y1=%c\n”,x1,y1); \* %C,以字符形式输出*\ 以字符形式输出 x2=‘a’; y2=‘b’; printf(“x2 =% c, y2 =%c\n”,x2,y2); x3=x1-32; y3=y2-32; printf(“x3=%c, y3=%c\n”, x3 , y3);
以下程序的功能是: 输入数据后计算半径为 输入数据后计算半径为r 以下程序的功能是:给r输入数据后计算半径为 的圆面积s。程序在编译时出错。 的圆面积 。程序在编译时出错。 main() /* Beginning */ { int r; float s; scanf("%d",&r); s=pi*r*r; printf("s=%f\n",s); } 出错的原因是 A)注释语句书写位置错误 ) B)存放圆半径的变量 不应该定义为整型 )存放圆半径的变量r不应该定义为整型 C)输出语句中格式描述符非法 ) D)计算圆面积的赋值语句中使用了非法变量 )
2。算术表达式与运算符的优先级
用算术运算符和括号将运算对象(操作数) 用算术运算符和括号将运算对象(操作数) 连接起来,符合C 连接起来,符合C语言的规则的式子叫算 术表达式。 术表达式。 运算对象:常量、变量、函数等。 运算对象:常量、变量、函数等。 x+y/5如:x=8;y=14; 问:x*x+y/5-’b’ ?
例4: main() { int i ; char c ; i=‘a’ ; c=97 ; printf ( “%c, %d\n”, i, i ); printf ( “%c, %d\n”, c,c ); 运行结果是什么? 运行结果是什么? 运行: 运行: a , 97 a ,97
四、字符串常量: :
C H I N A \0 ‘a’ 与“a”是不同的, 一个字符变量中只能放一 是不同的, 是不同的
个ASCⅡ码值。 Ⅱ码值。 char c; c=‘a’ ;正确,c=“a”;错误 正确, 正确 错误 C 语言中没有字符串变量,只能用字符型数组存 语言中没有字符串变量, 放字符串。( 。(第 章再讲 章再讲)。 放字符串。(第7章再讲)。
功能:将表达式的值赋给变量 功能 将表达式的值赋给变量。 x+1 将表达式的值赋给变量 如:x=5; x=x+1; a=(b+c)*3; a1=‘k’;
说明: 说明:
(1)“=”号是赋值号,不是数学中等号。 ) =”号是赋值号,不是数学中等号。 号是赋值号 (2)若“=”号两边类型不一致,在赋值时,要进 进 行类型转换(以左为准) 行类型转换(以左为准)。 比如: 为整型: 值为14舍去小数。 14舍去小数 比如:i为整型:i=14.6 -- i值为14舍去小数。 再如: 为单精度数(float), 再如:i为单精度数(float), 值为38.00000 七位) i=38 -- i值为38.00000 (七位) i为双精度数 为双精度数(double), 为双精度数 i=38---值为38.00000000000000 (十六位 ---值为 十六位) i=38---值为38.00000000000000 (3)赋值表达式的值就是被赋的变量值。 赋值表达式的值就是被赋的变量值 赋值表达式的值就是被赋的变量值。 X=5 , 5就是赋值表达式的值,当然也是 的值 就是赋值表达式的值, 的值。 就是赋值表达式的值 当然也是x的值 a=b=8相当于 相当于b ?a为 问:如a=b=8相当于b为?a为? 8,8
• 实型数据的舍入误差例: 实型数据的舍入误差例: • 查看下面程序的输出结果。 查看下面程序的输出结果。 main() {float a,b; a=123456.789e5; b=a+20; printf("%f",b); } 理论上应为:12345678920 结果为:12345678848.000000 分析:float型数据的有效数字为6-7
解决方法:
句改为c=(long)a*b,先将 强制转 先将a强制转 将4句改为 句改为 先将 为长整型, 就为长整型 就为长整型。 为长整型,a*b就为长整型。
强制转换的一般形式: 强制转换的一般形式: 类型名)(表达式) )(表达式 (类型名)(表达式) double) 如:(double)a 将a的值强制转换为双精度型
三、字符的存储形式:
一个字符常量赋给一个字符变量, 一个字符常量赋给一个字符变量Hale Waihona Puke Baidu内存中怎 样存储? 样存储? 1.字符以其ASCII码值存储 实际是以 ASCII的二进 字符以其 码值存储,实际是以 字符以 ASCII码值存储 的二进 制形式存储. 制形式存储. x y 如:x=‘a’; y=‘ b’. a的ASCII: 97 98 的 (97)10、(01100001)2 b的ASCII: 的 x y (98)10、(01100010)2 01100001 01100010
定义时几个变量 几个变量不 同时赋同一初值 2. 定义时几个变量不可同时赋同一初值:
int a=b=c=15; 但可以: 但可以: int a=15,b=15,c=15; a=20;c=a-10+b; ; printf(“%d,%d,%d”,a,b,c);
输出时,a,b,c的值是多少?
3.7 各类型数据的混合运算
3.6 给变量赋初值
变量可以在定义时赋初值 1. 变量可以在定义时赋初值,如:
int x=8; 相当于:int x; x=8; 相当于: float y,z=3.78; 相当于:float y,z; z=3.78; 相当于: char c1=‘p’,c2=‘w’; 相当于: 相当于:char c1,c2; c1=‘p’;c2=‘w’;
1. 用“双引号”引起来的一串字符。 双引号”引起来的一串字符。
如:“CHINA”, “2005年”,“$123.4”,“a”. 年 ,
2、字符串的存储形式: 、字符串的存储形式:
各字符的ASCⅡ码 + 字符串结束标志“\0”, Ⅱ 字符串结束标志“ 各字符的 ‘0’是空操作的 是空操作的ASCⅡ--0。 是空操作的 Ⅱ 。
复习
1。整型变量有哪六种? 整型变量有哪六种?
int, short, long, Unsigned, Unsigned short , Unsigned long
2。实型变量分几类? 实型变量分几类?
1 单精度型 1)单精度型 float 32 , 6~7位 单精度型:float,32位 6~7 2)双精度型: double,64位 ,15~16位 双精度型: 双精度型 长双精度型:long double 128位, 18~19位 3)长双精度型 长双精度型
转换规则: 转换规则:
低类型转为高类型,结果为高类型 低类型转为高类型,结果为高类型。 (1)float 必转为double. 必转 (2)char和short必转为int. Float double (3)纵向箭头不是必转, 高 只表示方向。 long unsigned Char,short int 低
}
问:运行结果? 运行结果?
每个小写字母比大写字母大32 每个小写字母比大写字母大32 ‘A’的ASCII码为 码为65. 97‘A’的ASCII码为65. 97-32=65 运行: 运行: x1=a , y1=b x2=a, y2=b x3=A, y3=B
3.字符数据与整型数据可以互相赋值 3.
前面介绍了C语言中三种基本数据类型: 前面介绍了 语言中三种基本数据类型: 语言中三种基本数据类型 整型、实型和字符型。 整型、实型和字符型。 C语言中不同类型数据在同一表达式中可 语言中不同类型数据在同一表达式中可 以混合运算,运算时要进行类型转换。 以混合运算,运算时要进行类型转换。 即不同类型的数据要先转换成同类型再运算。 即不同类型的数据要先转换成同类型再运算 转换有两种: 转换有两种: 自动(隐示) 一、自动(隐示)转换 是由系统自动按规则进行的转换。 是由系统自动按规则进行的转换。
-32
b当成98(按其ASCII值) 当成98(按其ASCII值 98 ASCII 优先级: 的优先级高于+、- , 优先级:*、/、%的优先级高于 结合性: 同级从左至右执行(先左后右) 结合性 同级从左至右执行(先左后右
3.9 赋值运算符与赋值表达式
一、*赋值表达式: 、*赋值表达式
形式:<变量>=<表达式> 形式 <变量>=<表达式> >=<表达式 赋值运算符 x 5 x 6
上机练习: 上机练习:从三个整数中选出最大值输出
#include <stdio.h> main() { int a,b,c,max; printf("input :\n"); scanf("%d,%d,%d",&a,&b,&c); if(a<b)max=b; else max=a; if(max<c)max=c; printf("output:max=%d\n",max); getch(); }
、*复合的赋值运算符 二 、*复合的赋值运算符
在“=”号前加上其他运算符, 构成复合运算符。 =”号前加上其他运算符, 构成复合运算符。 号前加上其他运算符 +=、-=、*=、/=、%=,还有其他一些 a+=b 相当于 a=a+b a+= b a-=b 相当于a=a-b a*=b --->a=a*b a%=b 相当于a=a%b a/=b --->a=a/b a=a + b 练习: x=x+15 练习: x+=15 a*=ba=a*(b-6)不要看成a=a*b不要看成a=a*b a*=b-6 a=a*(b-6)不要看成a=a*b-6 a=a+(a-=a*a) a=a%(4+b)不要写成 不要写成a=a%4+b a%=4+b a=a%(4+b)不要写成a=a%4+b a=a+(a=a-a*a) 优点:使程序简练, 优点:使程序简练,提高编译效率。 -112 a= 练习: 练习:a=8, 求: a+=a-=a*a; 见P63 ,a=-112
3.8 算术运算符和算术表达式
一、*运算符和表达式 、*运算符和表达式 1。基本算术运算符 + 加 - 减 * 乘 /除
% 模 (求余) 求余)
说明:(1)求余(%)运算只适用于整型 只适用于整型,9%4 求余( 说明 结果为1, 若非整数,应先强制转换为整数。 结果为 若非整数,应先强制转换为整数 注意: 运算对象有负数时, 注意:%运算对象有负数时,结果的符号同左边 一致。 一致。 (2)两整数相除结果为整数:8/3 结果为2(舍去 两整数相除结果为整数: 结果为2 两整数相除结果为整数 小数) 截尾取整。 小数),截尾取整。 再如: int)9.6/4 9.6/4, 9/4。 再如: (int)9.6/4,先截尾取整为 9/4。 (3)算术运算的数中有一个为实数,结果为 算术运算的数中有一个为实数, 算术运算的数中有一个为实数 double型。 型
必转
二、强制转换
例:main( ) { int a=300,b=200; long c; c=a*b; printf("%ld\n",c); getch( ); }
运行: 运行:-5536 出错原因:虽然c定义为长整型 计算a*b 定义为长整型, 出错原因:虽然 定义为长整型,计算 已超出范围(32767)溢出 溢出。 时,已超出范围 溢出 60000的二进制1110101001100000
二、字符变量
字符变量可以存放字符常量。 字符变量可以存放字符常量。 字符变量的定义: 字符变量的定义: char c1, c2; c1=‘x’ ; c2= ‘Y’ ; c1,c2 为字符变量,各可放一个字符。 为字符变量,各可放一个字符。 一个字符占一个字节。 一个字符占一个字节 问:C1=‘ab’; C2=“a”; 可以吗? 编译) 可以吗?(编译)
3.5 字符型数据
一、字符常量
用单引号括起来的一个字符。 用单引号括起来的一个字符。‘a’, ‘E’,‘?’,‘#’,’6’等。 #’, , 注意:‘a’≠’A’,其ASCII值是不同的. II值是不同的 注意 ≠ 其 II值是不同的. 特殊字符: 开头的字符。 特殊字符: 以“\”开头的字符 见P48表3.3 代表换行符。 如: \n 代表换行符。 \ r 代表回车,不换行,光标移行首。 代表回车,不换行,光标移行首。 后面的字符称为转义字符 转义字符。 其中 \后面的字符称为转义字符。
2. 可用字符的 可用字符的ASCII码值给变量赋值. 码值给变量赋值. 码值给变量赋值
比如: 比如: char x; x=97 与 x =‘a’等价,在内存形式一样。 等价, 等价
例3: main() { char x 1 , y1,x2, y2 , x3, y3;
x1=97; y1=98; printf(“x1=%c,y1=%c\n”,x1,y1); \* %C,以字符形式输出*\ 以字符形式输出 x2=‘a’; y2=‘b’; printf(“x2 =% c, y2 =%c\n”,x2,y2); x3=x1-32; y3=y2-32; printf(“x3=%c, y3=%c\n”, x3 , y3);
以下程序的功能是: 输入数据后计算半径为 输入数据后计算半径为r 以下程序的功能是:给r输入数据后计算半径为 的圆面积s。程序在编译时出错。 的圆面积 。程序在编译时出错。 main() /* Beginning */ { int r; float s; scanf("%d",&r); s=pi*r*r; printf("s=%f\n",s); } 出错的原因是 A)注释语句书写位置错误 ) B)存放圆半径的变量 不应该定义为整型 )存放圆半径的变量r不应该定义为整型 C)输出语句中格式描述符非法 ) D)计算圆面积的赋值语句中使用了非法变量 )
2。算术表达式与运算符的优先级
用算术运算符和括号将运算对象(操作数) 用算术运算符和括号将运算对象(操作数) 连接起来,符合C 连接起来,符合C语言的规则的式子叫算 术表达式。 术表达式。 运算对象:常量、变量、函数等。 运算对象:常量、变量、函数等。 x+y/5如:x=8;y=14; 问:x*x+y/5-’b’ ?
例4: main() { int i ; char c ; i=‘a’ ; c=97 ; printf ( “%c, %d\n”, i, i ); printf ( “%c, %d\n”, c,c ); 运行结果是什么? 运行结果是什么? 运行: 运行: a , 97 a ,97
四、字符串常量: :
C H I N A \0 ‘a’ 与“a”是不同的, 一个字符变量中只能放一 是不同的, 是不同的
个ASCⅡ码值。 Ⅱ码值。 char c; c=‘a’ ;正确,c=“a”;错误 正确, 正确 错误 C 语言中没有字符串变量,只能用字符型数组存 语言中没有字符串变量, 放字符串。( 。(第 章再讲 章再讲)。 放字符串。(第7章再讲)。
功能:将表达式的值赋给变量 功能 将表达式的值赋给变量。 x+1 将表达式的值赋给变量 如:x=5; x=x+1; a=(b+c)*3; a1=‘k’;
说明: 说明:
(1)“=”号是赋值号,不是数学中等号。 ) =”号是赋值号,不是数学中等号。 号是赋值号 (2)若“=”号两边类型不一致,在赋值时,要进 进 行类型转换(以左为准) 行类型转换(以左为准)。 比如: 为整型: 值为14舍去小数。 14舍去小数 比如:i为整型:i=14.6 -- i值为14舍去小数。 再如: 为单精度数(float), 再如:i为单精度数(float), 值为38.00000 七位) i=38 -- i值为38.00000 (七位) i为双精度数 为双精度数(double), 为双精度数 i=38---值为38.00000000000000 (十六位 ---值为 十六位) i=38---值为38.00000000000000 (3)赋值表达式的值就是被赋的变量值。 赋值表达式的值就是被赋的变量值 赋值表达式的值就是被赋的变量值。 X=5 , 5就是赋值表达式的值,当然也是 的值 就是赋值表达式的值, 的值。 就是赋值表达式的值 当然也是x的值 a=b=8相当于 相当于b ?a为 问:如a=b=8相当于b为?a为? 8,8
• 实型数据的舍入误差例: 实型数据的舍入误差例: • 查看下面程序的输出结果。 查看下面程序的输出结果。 main() {float a,b; a=123456.789e5; b=a+20; printf("%f",b); } 理论上应为:12345678920 结果为:12345678848.000000 分析:float型数据的有效数字为6-7
解决方法:
句改为c=(long)a*b,先将 强制转 先将a强制转 将4句改为 句改为 先将 为长整型, 就为长整型 就为长整型。 为长整型,a*b就为长整型。
强制转换的一般形式: 强制转换的一般形式: 类型名)(表达式) )(表达式 (类型名)(表达式) double) 如:(double)a 将a的值强制转换为双精度型
三、字符的存储形式:
一个字符常量赋给一个字符变量, 一个字符常量赋给一个字符变量Hale Waihona Puke Baidu内存中怎 样存储? 样存储? 1.字符以其ASCII码值存储 实际是以 ASCII的二进 字符以其 码值存储,实际是以 字符以 ASCII码值存储 的二进 制形式存储. 制形式存储. x y 如:x=‘a’; y=‘ b’. a的ASCII: 97 98 的 (97)10、(01100001)2 b的ASCII: 的 x y (98)10、(01100010)2 01100001 01100010
定义时几个变量 几个变量不 同时赋同一初值 2. 定义时几个变量不可同时赋同一初值:
int a=b=c=15; 但可以: 但可以: int a=15,b=15,c=15; a=20;c=a-10+b; ; printf(“%d,%d,%d”,a,b,c);
输出时,a,b,c的值是多少?
3.7 各类型数据的混合运算
3.6 给变量赋初值
变量可以在定义时赋初值 1. 变量可以在定义时赋初值,如:
int x=8; 相当于:int x; x=8; 相当于: float y,z=3.78; 相当于:float y,z; z=3.78; 相当于: char c1=‘p’,c2=‘w’; 相当于: 相当于:char c1,c2; c1=‘p’;c2=‘w’;
1. 用“双引号”引起来的一串字符。 双引号”引起来的一串字符。
如:“CHINA”, “2005年”,“$123.4”,“a”. 年 ,
2、字符串的存储形式: 、字符串的存储形式:
各字符的ASCⅡ码 + 字符串结束标志“\0”, Ⅱ 字符串结束标志“ 各字符的 ‘0’是空操作的 是空操作的ASCⅡ--0。 是空操作的 Ⅱ 。
复习
1。整型变量有哪六种? 整型变量有哪六种?
int, short, long, Unsigned, Unsigned short , Unsigned long
2。实型变量分几类? 实型变量分几类?
1 单精度型 1)单精度型 float 32 , 6~7位 单精度型:float,32位 6~7 2)双精度型: double,64位 ,15~16位 双精度型: 双精度型 长双精度型:long double 128位, 18~19位 3)长双精度型 长双精度型
转换规则: 转换规则:
低类型转为高类型,结果为高类型 低类型转为高类型,结果为高类型。 (1)float 必转为double. 必转 (2)char和short必转为int. Float double (3)纵向箭头不是必转, 高 只表示方向。 long unsigned Char,short int 低
}
问:运行结果? 运行结果?
每个小写字母比大写字母大32 每个小写字母比大写字母大32 ‘A’的ASCII码为 码为65. 97‘A’的ASCII码为65. 97-32=65 运行: 运行: x1=a , y1=b x2=a, y2=b x3=A, y3=B
3.字符数据与整型数据可以互相赋值 3.
前面介绍了C语言中三种基本数据类型: 前面介绍了 语言中三种基本数据类型: 语言中三种基本数据类型 整型、实型和字符型。 整型、实型和字符型。 C语言中不同类型数据在同一表达式中可 语言中不同类型数据在同一表达式中可 以混合运算,运算时要进行类型转换。 以混合运算,运算时要进行类型转换。 即不同类型的数据要先转换成同类型再运算。 即不同类型的数据要先转换成同类型再运算 转换有两种: 转换有两种: 自动(隐示) 一、自动(隐示)转换 是由系统自动按规则进行的转换。 是由系统自动按规则进行的转换。
-32
b当成98(按其ASCII值) 当成98(按其ASCII值 98 ASCII 优先级: 的优先级高于+、- , 优先级:*、/、%的优先级高于 结合性: 同级从左至右执行(先左后右) 结合性 同级从左至右执行(先左后右
3.9 赋值运算符与赋值表达式
一、*赋值表达式: 、*赋值表达式
形式:<变量>=<表达式> 形式 <变量>=<表达式> >=<表达式 赋值运算符 x 5 x 6
上机练习: 上机练习:从三个整数中选出最大值输出
#include <stdio.h> main() { int a,b,c,max; printf("input :\n"); scanf("%d,%d,%d",&a,&b,&c); if(a<b)max=b; else max=a; if(max<c)max=c; printf("output:max=%d\n",max); getch(); }
、*复合的赋值运算符 二 、*复合的赋值运算符
在“=”号前加上其他运算符, 构成复合运算符。 =”号前加上其他运算符, 构成复合运算符。 号前加上其他运算符 +=、-=、*=、/=、%=,还有其他一些 a+=b 相当于 a=a+b a+= b a-=b 相当于a=a-b a*=b --->a=a*b a%=b 相当于a=a%b a/=b --->a=a/b a=a + b 练习: x=x+15 练习: x+=15 a*=ba=a*(b-6)不要看成a=a*b不要看成a=a*b a*=b-6 a=a*(b-6)不要看成a=a*b-6 a=a+(a-=a*a) a=a%(4+b)不要写成 不要写成a=a%4+b a%=4+b a=a%(4+b)不要写成a=a%4+b a=a+(a=a-a*a) 优点:使程序简练, 优点:使程序简练,提高编译效率。 -112 a= 练习: 练习:a=8, 求: a+=a-=a*a; 见P63 ,a=-112