C语言程序设计基础(微课版) 课件全套 张宁 第1-12章 概述、数据类型运算符和表达式-文件_第1页
C语言程序设计基础(微课版) 课件全套 张宁 第1-12章 概述、数据类型运算符和表达式-文件_第2页
C语言程序设计基础(微课版) 课件全套 张宁 第1-12章 概述、数据类型运算符和表达式-文件_第3页
C语言程序设计基础(微课版) 课件全套 张宁 第1-12章 概述、数据类型运算符和表达式-文件_第4页
C语言程序设计基础(微课版) 课件全套 张宁 第1-12章 概述、数据类型运算符和表达式-文件_第5页
已阅读5页,还剩417页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言程序设计

第1章概述什么是计算机计算机是一种工具,计算机的所有“智能”都是人类赋予的。人们必须详详细细地告诉计算机“做什么”、“怎么做”,这种指挥计算机工作的过程就是——计算机程序。没有程序,计算机就是一堆废铜烂铁,什么也不能做。计算机程序程序就是一系列的有序步骤。

洗菜

切菜

炒菜

出锅做菜的步骤——

计算机程序就是人类指挥计算机工作的有序步骤。

计算机程序是由一条条有序指令组成的,每条指令指挥计算机完成一个操作。指令指令指令指令何谓编写程序?打开微信群;查看第一条聊天信息;if(本条信息是红包){

点开本条信息;点“開”按钮;}

else{

略过此信息;}查看下一条信息,重复此过程;获得目的地坐标;获得当前位置坐标;搜索两点最短路径;将路径用颜色标注在地图上;计算两点距离;语音播报:导航开始,沿当前位置向西南方向直行,全程大约800米…获得当前位置坐标;if(正沿路线前行)

前方大约有200米直行道路…;if(偏离路线)正在为您重新规划路线…;if(计算距离小于50米)目的地在您右侧,本次导航结束;自动微信抢红包程序地图导航程序编写程序和计算机语言编写程序(编程)就是人们针对某个问题,事先设计操作步骤,并将操作步骤“告诉”计算机,“指挥”计算机如何工作的过程。如何将怎么做“告诉”计算机呢?计算机语言编写程序要依照某种计算机语言,即要通过计算机能听懂的语言来告诉它怎么做。计算机语言人类的语言有很多种,计算机的语言也有很多种。

机器语言MOVAX,XMOVDX,X+2ADDAX,YADCDX,Y+2……汇编语言高级语言W=X+Y+24-Z;最接近人类的思维习惯

仅由0和1组成(二进制代码)英文助记符但只能用与机器语言相对应的指令,难度很高高级语言又分很多种,如VisualBasic、Java、Fortran、Pascal、C

等。

计算机唯一能懂翻译计算机唯一能懂机器语言程序的编译和链接main(){ inta,b,c; a=10; b=20; c=a+b; printf("%d",c);}main(){

inta,b,c; a=10; b=20; c=a+b; printf("%d",c);}C程序的翻译过程C语言源程序xxx.c

文本文件ASCII码文件

人类可读懂计算机不能直接运行

xxx.obj可执行程序xxx.exe编译(compile)链接(link)二进制文件未包含库的机器语言程序人类不可读懂计算机不能直接运行

二进制文件机器语言程序人类不可读懂计算机可以直接运行

目标程序编译系统MicrosoftVisualC++main(){ inta,b,c; a=10; b=20; c=a+b; printf("%d",c);}可执行程序编译(compile)链接(link)目标程序编译和链接的过程是由谁来完成的呢?这是由编译程序(或称编译器、编译系统)完成的——MicrosoftVisualC++。MicrosoftVisualC++不仅可进行编译和链接,同时它还有编辑、修改、调试和运行程序等功能,也称集成开发环境。C语言源程序C语言程序的结构C程序的结构函数1(参数x){

语句;}main(){

语句;

语句;

语句;}函数2(参数x,参数y){

语句;

语句;}函数1函数2main函数……C程序语句1语句2语句3main函数预处理命令段落句子一篇文章main函数必须有,且只能有一个;main函数可位于程序函数间的任意位置;main函数是程序的入口和出口;其他函数是由main函数调用执行的函数1(参数x){

语句;}main(){

语句;

语句;

语句;}函数2(参数x,参数y){

语句;

语句;}main函数main函数主函数

错误的执行流程main必须小写;()不能省略。预处理命令正确的执行流程#include<stdio.h>main(){

inta,b,c; a=10; b=20; c=a+b; printf("%d",c);}简单C程序实例预处理命令main函数在学习之前,你能看出该程序的输出结果吗?程序的输出结果为:30

C程序的语句#include<stdio.h>main(){

inta,b,c; a=10; b=20; c=a+b; printf("%d",c);}每条语句“告诉”计算机要执行的一个操作(命令)每条语句结尾必须有一个“;”#include<stdio.h>main(){

inta,b,c;

a=10;b=20; c=a+b; printf("%d",c);}多条语句可写在一行中,一条语句也可写在多行#include<stdio.h>main(){

inta,b,c; a=10;

b=

20; c=a+b; printf("%d",c);}任何变量在使用前必须先定义

C程序格式自由,对程序中的空格、换行没有过分讲究但是坚持适当的缩进、空格、换行能使程序清晰易读,是我们提倡的#include<stdio.h>main(){

inta,b,c; a=10; b=20; c=a+b; printf("%d",c);}#include<stdio.h>main(){inta,b,c; a=10; b=20;c=a+b;printf("%d",c);}有些位置不能随便添加空格,如在单词之间。如main()写作main()显然是错误的。程序的注释注释main(){

inta,b,c; a=10; b=20; c=a+b; printf("%d",c);}/*本程序是计算一道小学生数学题的程序*/main(){

inta,b,c; a=10; /*小明有10支铅笔*/ b=20; /*小红有20支铅笔*/ c=a+b; /*求二人共有多少铅笔*/ printf("%d",c);}允许在程序中写语句外的任意内容,这些内容不是程序的一部分,不能被执行,称注释。/*到*/之间(可多行)注释:在运行程序时计算机会将/*到*/之间的内容全部忽略,有无注释对程序的运行没有丝毫影响。注释不能嵌套:c=a+b; /*求和(位于“/*”和“*/”之间的部分为注释)*/此处不是注释,为非法语句此处为注释

标识符、常量和变量标识符的命名规则标识符名很简单,字母数字下划线。字母区分大小写,非数打头非关键。yes? 有?234a 数字开头yes/no 有/w.a 有.x-y 有-π 希腊字母β 希腊字母int 是关键字x1

不能用角标非法的标识符

a x sum nve ab1a1b2c3 _to file_5_2 Int INT B3 b3合法的标识符

尽量做到

见名知意表示长度的变量名用length

表示面积的变量名用area表示分数的变量名用score

或chengji

C语言中的关键字:autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunionunsignedvoidvolatilewhile

常量#include<stdio.h>main(){

inta,b,c; a=10; b=20; c=a+b; printf("%d",c);}如10、20,它们在程序运行过程中值不会变化,故称常量。常量就是直接写在程序里的数据值。

不止限于数值型的数据值,以后要学习的许多非数值型的数据值,如: 字符'a'、'b'、 字符串"hello"、

等,这些也都是常量。符号常量#definem100常量还包括用#define定义的符号常量。

定义了常量m,则程序段:a=m-10;b=m+8;printf("%d",m);其中的m和100是一个意思a为90,b为108,输出100用#define命令可定义常量,因有#define的定义,m是常量,不是变量

使用常量的优点:提高可读性,方便程序的维护修改。a=100-10;b=100+8;printf("%d",100);而以上程序需逐条修改100为200。很麻烦!

如果希望用200,只要修改定义的一处就可以了。200200200其中的m和200是一个意思a为190,b为208,输出200m=200;200变量#include<stdio.h>main(){

inta,b,c; a=10; b=20; c=a+b; printf("%d",c);}程序例中的a、b、c都是变量。什么是变量呢?

a

10b

20c

30变量——盒子,可保存数据盒子的名字——变量名a、b、c

盒子里的内容——变量的值10、20、30

同一个盒子可先后存放不同的东西,变量的值也可在程序运行过程中发生变化,故称变量。变量实际是内存中的一块存储区域,存储区域的名称就是变量名,所存储的内容就是变量的值。变量的初始化(定义时赋初值)intsum=0; 变量定义时赋初值,sum立即为确定的值0intwidth,height; 一次定义多个变量,变量的值都不确定intprice,num=3; 仅num值为3,price的值不确定intsize=5+4; size值为9,可用表达式为变量赋初值intx=y=z=5;

intx=5,y=5,z=5;

在定义中不允许连续赋初值

inta,intb;

如果用逗号,后面不要再写int,直接写变量名

inta;intb;如果后面也写int应用分号,这实际是两条语句

C语言程序上机指导进制转换 1 0 1 1 1 0 1 1+) 0 0 1 0二进制

二进制

对应十进制

0

0 1

1 10

2 11

3 100

4 …

…计算机只能直接识别二进制二进制:0、1组成,逢二进一

十进制转换为二进制13(13)10=(

)2812411011101将十进制数看作重物的重量用8、4、2、1四种重量的砝码去“凑”出重物的重量。如果选用了一种砝码就用1表示,未选用就用0表示,依次写出1或0就是对应的二进制。(降幂法)8124十进制转换为二进制8(8)10=(

)21000(13)10=(

)211011000将十进制数看作重物的重量用8、4、2、1四种重量的砝码去“凑”出重物的重量。如果选用了一种砝码就用1表示,未选用就用0表示,依次写出1或0就是对应的二进制。(降幂法)十进制转换为二进制1178124(117)10=(

)2111010116326412801531211501510110二进制转换为十进制(1101)2=(

)1081241101?8148+4+1=13

13二进制转换为十进制(1010)2=(

)1081241010?8+2=10

1082八进制、十六进制与二进制、十进制的互换二进制~八进制的互换:3位并1位、1位拆3位;二进制~十六进制的互换:4位并1位、1位拆4位,其中10-15写作A-F(或a-f);十进制~八/十六进制、八进制~十六进制的互换:均先转换为二进制,以二进制数为中介转换即可,十进制二进制

八进制十六进制C语言程序设计

天津大学副教授张宁第2章数据类型运算符和表达式第2章数据类型、运算符和表达式2.算术运算1.基本数据类型1)整型和浮点型(实型)数据

2)整型和浮点型(实型)的转换3)字符型数据4)字符串型数据4.自增与自减运算

5.逗号运算6.位运算3.赋值运算

整型常量和浮点型常量泾渭分明整型常量浮点型(实型)常量整型常量表示法,十进制数直接打,数前添零进制八,十六进制再加叉(x或X)。浮点小数莫忘点。指数E(e)挑两边全,E(e)后必须是整数,前后两边紧相连。10

-247(十进制)

前加0: 八进制前加0x或0X: 十六进制(不能写为二进制)012100xA或0Xaa=018;八进制数由0-7组成,不能含8、9

只能十进制E(或e)代表×10小数形式:3.14-2.012..36指数形式:0.21E5-35.8e-21e011.01.a=0175;a=125;a=0x7d;5.6Ee38E1.5整型变量和浮点型变量泾渭分明整型变量浮点型(实型)变量int

变量名1,变量名2,…;float

变量名1,变量名2,…;double

变量名1,变量名2,…;1)单精度型2)双精度型1)基本型2)带修饰词short:短整型,占2字节(范围约±3万)long:长整型,占4字节signed:有符号型(signed

可省略)unsigned:无符号型,不能存负数

占4字节,范围±1038

,7位有效数字占8字节,范围±10308

,15位有效数字a:inta;a=1;1a=10000;10000

1.23E50b:floatb=1.5;1.5b=5.25e-8;5.25e-8doublex=2.0,y;y:b=0.001234567;0.001234567b=0.00123456789;0.001234568

y=1.23E50;x:2.0signedshortintm;shortintm;signedlongintn;longn;unsignedshortintd;unsignedintk;在VC2010中占4字节,可表示范围±21亿编程时应根据实际需要选用不同类型的变量应根据需要选用不同类型、不同规格的变量:既满足精度,又尽量避免大材小用。

定义变量保存地球到太阳之间的距离:

1.495978707x1011

doubleem=1.495978707e11;

定义变量保存全班同学平均成绩

floatscore;

定义变量保存宇宙间共有粒子数的估

计值:1080

doublennn=1E80;

定义变量保存某超市进货数量

intnumber;

定义变量保存人的年龄

unsignedintage;整型和实型数据在计算机中的存储计算机内存只能存储0和1

123588976345整数例:8存作8的二进制:

00000000…00001000实数小数×2指数转换为二进制存储(补码)3.142.08.122.5e-30.3E51.5小数部分和指数部分分别存储4字节或8字节指数部分

小数部分(固定为1.f)符号位正数:0

负数:1

例:8.0变为1.0×23

再分别存1.0和3的二进制存储方式截然不同第2章数据类型、运算符和表达式2.算术运算1.基本数据类型3)字符型数据4)字符串型数据4.自增与自减运算

5.逗号运算6.位运算3.赋值运算

1)整型和浮点型(实型)数据2)整型和浮点型(实型)的转换变量赋值的自动类型转换只能保存整数,不能保存实数。inta;a=2.8;a:doubley;y=3;整型变量实型变量float、doubleint(或有int的修饰词)只能保存实数,不能保存整数。

y:变量定空间,塑身再搬迁。若为空间窄,舍点也情愿。23.0inta=1.2,b,c;

b=3.4;c=a+b;c的值为________4floata=1.2,b;intc; b=3.4;c=a+b;c的值为________4floata=1.2,b,c;

b=3.4;c=a+b;c的值为________4.6常量的后缀L(或l)U(或u)F(或f)为了对应变量的类型,常量也有类型:-65u在程序中直接写不带小数点的整数,默认为基本型整型(int

型);带小数点或E(e)的常量,默认为双精度实型(double

型)。若要改变常量的类型,可在常量后加后缀:整数后加L(l)表示常量为长整型(long),实数后加L(l)表示常量为长双精度型(longdouble),二者在VC2010中与不加L(l)的效果都相同。

如:0L、125L、100000L、1.234567L只能加在整数后面,表示常量为无符号型,即非负:如0U、6U、65535u可既用L又用U,表示常量为无符号长整型,如:

0LU、6LU、65535lu表示常量为单精度型(float),加在整数后也表示为float型(不再为整数)。例如:1.23f、356f,即有后缀F(f)时,可不加小数点,也表示实数。

第2章数据类型、运算符和表达式2.算术运算1.基本数据类型3)字符型数据

4)字符串型数据4.自增与自减运算

5.逗号运算6.位运算3.赋值运算

1)整型和浮点型(实型)数据2)整型和浮点型(实型)的转换字符型量概述//类似QQ的程序main(){....;

发送"你好!";....;}现代计算机除能计算数值之外,还能处理文字。用QQ与好友聊天就是一个处理文字的例子。如何编写一个类似QQ的程序呢?文字型数据

用QQ收发消息时,消息是文字的,而不是数值的如何用C语言表示文字型数据呢(用C语言怎样说)?

先学习1个字符的文字——字符型数据;再学习多个字符组成的文字——字符串。字符型常量单引号必须为英文,不分左右;单引号内只能有字符,如'ab'错误!''也错误!每个字符常量占1个字节(8个bit位);单引号是定界符,它不属于字符内容;一个先考虑字符如何用C语言表示?例如要向好友发送一个字符‘a’,该如何做呢?main(){....;

发送a;....;}main(){....;

发送'a';....;}a为变量,发送的是a的值不是字符a本身用单引号括起,发送的才是字符a本身一个用单引号括起的一个

字符,是要处理的字符数据,不是变量名,这称字符型常量。'a'、'b'、'c'

'a'、'b'、'c'、'1'、'5'、'0'、','、'!'、'='、'+'、'#'、'$'、''(一个空格字符)

好友只能收到a,收不到单引号的哦!

字符型数据在计算机中如何存储?计算机内存由只能存储0和1的存储单元组成123588976345字符编号(整数)'a''b''-''5''0''=''*''#''c'字符型数据ASCII码(AmericanStandardCodeforInformationInterchange)例如:

'a'

编号为97,存作97的二进制;

']'编号为93,存作93的二进制。ASCII码0~31,127:控制字符(不可显示)32:空格字符''48~57:数字字符'0'~'9'按'0'-'9'的顺序依次递增排列;65~90:大写字母字符'A'~'Z'按字母表的顺序依次递增排列97~122:小写字母字符'a'~'z'按字母表的顺序依次递增排列标准ASCII码0~127

附录一*128~255为扩展字符。对应的大小写字母ASCII码差32。?已知字符'A'的ASCII码为65,则字符'B'的ASCII码是

,字符'd'的ASCII码是

。66100数字字符'0'的ASCII码是

0吗?数字字符'1'的ASCII码是

1吗?

字符型数据与整数的混用97整数'a'字符97的二进制or字符与整数是混用的字符变作对应的ASCII码

'C'+1 'D'-'C' '7'+'1' 'a' 'A' '' 'a' '1' 'A' 'a' 65

='D'=68=68-67=1=55+49=104='h';≠'8'97>6532<9749<6597>65><<>数字字符常量与整型常量的区别'5'

5

'5'的ASCII码不是5!字符型常量,ASCII码为53,存作53的二进制;整型常量,直接存作

5的二进制;完全不同'5'

-'0'='5'-48=+'0'=5+48=5

5

'5'

'9'

-'0'='9'-48=+'0'=9+48=9

9

'9'

'0'(48)字符对应的一位整数数字字符魔术棒——转义字符是唯一特殊的字符,并不表示\

本身,而是改变其后字符的原有含义转义字符\换行符:'\n'跳格符:'\t'响铃符:'\a'n换行符a响铃符t跳格符'普通单引号定界符'普通斜杠字符转义字符\'\' 错误'\\' 表示\字符''' 错误'\'' 表示'字符'\"' 表示"字符转义字符(3)转义字符用途

①可表示特殊字符(\'")。

②可表示不能显示的控制字符。③可通过ASCII码表示任意一个字符。ASCII码的八进制(1-3位)一个字符ASCII码的十六进制(1-2位)一个字符转义字符(4)'\61''1''\101''A''\x41''A''\19'这使得一种字符可以有多种表示方法,如字符A可表示为:'A'、'\101'、'\x41''\012'、'\xA'、'\12'、'\x0A'换行符除可写为'\n'外,还有哪些表示法呢?(已知换行符的ASCII码为10)八进制数不能有数符8、9'\ddd'ddd为1~3位八进制数。

表示ASCII码的八进制为ddd的字符。'\xhh'hh为1~2位十六进制数(x必须小写)。

表示ASCII码的十六进制为hh的字符。字符型变量字符型变量占1个字节,保存一个字符(保存字符的ASCII码)

c:charc;c='a';c=98;'a''b'

有符号

无符号

或省略signed

signedchar

变量名1,变量名2,…;可保存负数,范围:-128~127unsignedchar

变量名1,变量名2,…;不能保存负数,范围:0~255第2章数据类型、运算符和表达式2.算术运算1.基本数据类型3)字符型数据4)字符串型数据

4.自增与自减运算

5.逗号运算6.位运算3.赋值运算

1)整型和浮点型(实型)数据2)整型和浮点型(实型)的转换字符串型数据羊肉串"iPhone"双引号括起(英文双引号,不分左右),0~多个字符字符串:由一个个的单个字符组成——一串字符。字符串常量"BMWZ4""$12.5""a"""空串在内存中的存储方式每字符占1个字节连续存储,多占1个字节存'\0'。

"iPhone""BMWZ4""$12.5""a"""空串'B''M''W''''Z''4''\0''$''1''2''.''5''\0''a''\0''\0''i''P''h''o''n''e''\0'字符串的长度长度66510"m\n"2"m\\n"'m''\\''n''\0'3"m\\\n"'m''\\''\n''\0'3"iPhone""BMWZ4""$12.5""a"""空串'B''M''W''''Z''4''\0''$''1''2''.''5''\0''a''\0''\0''i''P''h''o''n''e''\0'所包含的字符个数(不含'\0',但计空格)'m''\n''\0'"m\\\n""m\\n""m\n"字符常量和字符串常量的区别字符常量字符串常量引号单引号双引号字符个数只能含1个字符(转义字符形式上多个实际仍为1个)可含0~多个字符能否能将值赋给char型变量)可以不可以有无对应变量有字符型变量无字符串型变量占用内存字节数一律1个字节字符串字符数(长度)+1没有字符串变量不能企图将字符串常量赋值给字符型的变量charc;c="abcde";字符串常量的简单输出#include<stdio.h>main(){ printf("*****\n"); printf("*****\n"); printf("*★*★**\n"); printf("*★**\n"); printf(">>>------Iloveyou!------>*\n"); printf("***\n"); printf("*★**\n"); printf("***\n"); printf("***\n"); printf("**\n");}printf("nihao!"); /*在屏幕原样输出nihao!*/printf("\101"); /*在屏幕输出A,即仅包含1个字符A的字符串*/注意先关闭当前的解决方案,或重新开启VS2010,再新建项目。程序中引号之内的空格不是可有可无的,引号之内空格的有无虽然都没有语法错误,但会影响输出结果。第2章数据类型、运算符和表达式2.算术运算

1.基本数据类型3)字符型数据4)字符串型数据4.自增与自减运算

5.逗号运算6.位运算3.赋值运算

1)整型和浮点型(实型)数据2)整型和浮点型(实型)的转换算术运算符17%5 值为23%10 值为30%10 值为0-5%3 值为-25%-3 值为2%:运算量必须为整型或字符型50.823%9+(加,或正号)-

(减,或负号)*(乘)/(除)%(取余数,求模)优先级先乘除,后加减

*/%优先级相同,高于+-

doubled=1.0;printf("%d",d%10);

求余%严,整符才能算。±×÷算术表达式表达式的大、中、小括号一律使用小括号(),如:c*(a/(b+c))(1+((2+3)*4-8)/2+5)*2其中最内层()表示小括号,向外逐层分别表示中括号、大括号…;还可继续在外层嵌套(),()的层数理论上没有限制。10+20(a*2)/b(x+r)*8-(a+b)/10sin(x)+sin(y)5a×b a•ba±b a÷b2ab 2(a+b)a2c*[a/(b+c)]运算符与数据组成表达式。如用单引号或双引号括起来的就不是运算符,也不是表达式了:'+'、'-'不是运算符,是字符型常量"5+2"不是表达式,是字符串常量第②类自动类型转换所有表达式都有一个值及类型。低类型转换为高类型:char→int→float

→double特殊:所有浮点数必然都转换为double再运算(即使两个float型量的运算也都先转换为double)表达式的值:就是表达式的运算结果;表达式的类型:两个运算量类型一致时,与两个运算量的类型一致。两个运算量类型不一致时,表达式的类型与其中较高类型运算量的类型一致(较低类型运算量先被自动转换为高类型再运算)。类型不怕乱,结果向高看。2.4+1.6

结果为double型4.0,结果不能为int型的42.4+3 结果为double型为5.4,结果不能为整数5area:

12两类自动类型转换综合练习类型不怕乱,结果向高看。变量定空间,塑身再搬迁。若为空间窄,舍点也情愿。第①类(变量赋值)第②类(运算过程中)两类自动类型转换:intv=2;doublet=2.8;ints;s=v*t;double:2.0double:5.6

s:

5①②就“变量”就“高”main(){

doublepai=3.14;

intarea,r=2;area=r*r*pai;printf("%d",area);}int:4

double:4.0double:12.56

①②12整数除法5/2 结果为2不是2.55.0/2 结果为2.55/2.0 结果为2.55.0/2.0 结果为2.51/2 结果为0不是0.51./2 结果为0.5-20/7 的结果为-2若有变量intx=3510;则表达式x/1000*1000的值是?如已定义float型的变量a,b,c,则表达式(a+b+c)/2与1/2*(a+b+c)等效吗?整数除法:两个整数相除,结果只取商的整数部分;只有两个运算数至少有一个为实数,结果才为实数。(答案:3000)5/2int:?int:25.0/2double:2.0double:2.5答案:不等效!后者必为0。但等效形式可写为:1.0/2*(a+b+c)或1/2.0*(a+b+c)或1.0/2.0*(a+b+c)整数整除商,小数门外拦。强制类型转换强制类型转换:floatx=4.5,y=2.1;(int)(x+y)的值为:6 先求和,再将“和”转换(int)x+y的值为:6.1 先把x转换后再求和(类型说明符)量类型说明符为int、long、unsigned、float、double、char等。功能是强制把“量”临时转换为类型说明符的类型(转换后精度可能会受损,如将实数强制转换为int、将double强制转换为float都受损)

。(int)3.8值为3floatf=5.75;则(int)f的值为

5,而f的值仍为5.75。括起类型字,临时强转换。算术运算小结和练习类型不怕乱,结果向高看。整数整除商,小数门外拦。求余%严,整符才能算。括起类型字,临时强转换。表达式(int)((double)(3/2)+0.5+(int)1.99*2)的值是_______表达式(int)((double)(3/2)+0.5+(int)1.99*2)

的值是_______311.0123.5四舍五入公式若x是实数(单精度或双精度),把x四舍五入保留小数点后d位的计算公式是:(int)(x*10d+0.5)/10d

除数的10d必须加“.0”若有floatx=123.4567,y;要将x四舍五入保留小数点后2位,将结果存入变量y中的表达式语句是:y=(int)(x*100+0.5)/100.0;y=(int)(x*100.0+0.5)/100.0;y=(int)(12345.67+0.5)/100.0;y=(int)12346.17/100.0;y=12346/100.0;y=12346.0/100.0;y=123.46;如将最后的除法写作“/100”,则y中的值为123.0是错误的。y=12346/100;y=123;y=123.0;取整数的个、十、百、千位……#include<stdio.h>main(){ intn=1234;

intge,shi,bai,qian; ge=n%10; shi=n/10%10; bai=n/100%10; qian=n/1000; printf("%d\n",ge); printf("%d\n",shi); printf("%d\n",bai); printf("%d\n",qian);}4321取一个整数x的个位:

x%10 如1234%10得到4取十位、百位、千位…都转换为“取个位”的问题。取十位:①先缩小10倍生成新数,原数的十位成为新数的个位②然后取新数的个位

(x/10)

%10 如1234/10%10得到3取百位:①先缩小100倍生成新数,原数的百位成为新数的个位②然后取新数的个位

(x/100)

%10 如1234/100%10得到2……取最高位时,生成的新数只有一位,不再

%10

也是可以的。取整数x的个位:x%10取整数x的十位:x/10%10取整数x的百位:x/100%10取整数x的千位:x/1000%10……取最高位时,/n后可不再%10。第2章数据类型、运算符和表达式2.算术运算1.基本数据类型3)字符型数据4)字符串型数据4.自增与自减运算

5.逗号运算6.位运算3.赋值运算

1)整型和浮点型(实型)数据2)整型和浮点型(实型)的转换赋值运算符a=10;a:10走,进去!①不同于数学上的等号,它没有相等的含义。=不是相等,而是赋值。②是把右边的内容赋予左边,而不是相反。③赋值后右边内容不变。例:intx=10,y=20;x=y;赋值后x、y均为20。④“=”左边必须是变量,不能是常量也不能是表达式。a=a+1;a+1求值

走,进去!a:x+1=3;3x+1求值

嘿,搞什么嘛,这里不能装东西!111011=走,进去!===赋值表达式+-*/%

运算符a+10a=10int:12a:2int:1010=

表达式5*(b=10+20)的值是

。=运算符的优先级相当低,排在C语言所有运算符的倒数第二位。150同时:b被赋值变为30表达式x=(a=5)+(b=8)的值是

。13赋值表达式也有表达式的值和类型,均与赋值后左边变量的值和类型相同。=的两个作用1表达式求值;

改变=左边变量的值。

2+、-、*、/、%的一个作用1表达式求值;

同时:a被赋值为5,b被赋值为8,x被赋值为133058赋值表达式(2)

同优先级运算符,从左到右运算——“从左到右”的结合性+-*/%

都是“从左到右”的1+2-3+4+5

同优先级运算符,从右到左运算——“从右到左”的结合性=

是“从右到左”的x=y=25;x=25;x、y均被赋值为25定义变量时赋初值不能写为连等的形式intx=y=25;25同时:y被赋值为2525同时:x被赋值为2525是刚才表达式计算的结果值已知整型变量n的值为8,求表达式n+=n*=n-2的值:

,表达式求值后n的值为

复合的赋值运算符

a+=5

a=a+5

r%=p

r=r%p

x*=y+7

x=x*(y+7)右边要加()复合的赋值运算符与赋值运算

符(=)相同:优先级倒数第二,

“从右到左”的结合性。n+=n*=n-2n+=n*=6n:848n*=6n=n*6n=4848n+=48n=n+48n=9696969696左边也必须是变量。+-*/%=运算符+=-=*=/=%=

48同时:n被赋值为96同时:n被赋值为48n+=n*=n-2复合的赋值运算符(2)a+=b+c+=12;b+c=b+c+12a+=b+c+=12;b+c+12

b+c求值嘿,搞什么嘛,这里不能装东西!走,进去!=a=7+1=b;a=7+1=b;b8

嘿,搞什么嘛,这里不能装东西!走,进去!=8=b第2章数据类型、运算符和表达式2.算术运算1.基本数据类型3)字符型数据4)字符串型数据4.自增与自减运算

5.逗号运算6.位运算3.赋值运算

1)整型和浮点型(实型)数据2)整型和浮点型(实型)的转换计数器按一次,计数+1

自增和自减运算+-*/%=+=-=*=/=%=

运算符++--

i=i+1;i:56

7i=i+1;j=j-1;j:109

8

j=j-1;自增运算符++:使变量的值自增1(结果仍存回该变量)自减运算符--:使变量的值自减1(结果仍存回该变量)单目运算优先级很高,仅次于括号()

i++;或

++i;

i++;或

++i;

j--;或

--j;

j--;或

--j;都使i自增1,这一点没有区别自增和自减运算设i=5;j=10;i:5j:10表达式i+j表达式的值计算表达式后变量的值15i仍为5j仍为10i++++i56i变为6i变为6j----j109j变为9 j变 为9i++

++i

j--

--j

表达式

表达式

表达式

表达式

i+j

表达式表达式的值区别表达式的值区别+1后i的值-1后j的值都使j自减1,这一点没有区别-1前j的值+1前i的值++在先,先加后用;++在后,后加先用;--在先,先减后用;--在后,后减先用。自增和自减运算(2)=的两个作用1表达式求值;

改变=左边变量的值。

2+、-、*、/、%的一个作用1表达式求值;

++、--也有两个作用1表达式求值;

改变变量的值。

2表达式i+j表达式的值计算表达式后变量的值15i仍为5j仍为10i++++i56i变为6i变为6j----j109j变为9 j变 为9+1后i的值-1后j的值-1前j的值+1前i的值++--

会改变运算量的值,也不能用于常量、表达式,只能用于变量!如5++错误--(a*b)错误自增和自减运算(3)inta=1,b;b=5-a++; 执行后,b值为

,a值为

。等价于b=5-a;a=a+1;

inta=1,b;b=5-++a; 执行后,b值为

,a值为

。a:1b:?a:1b:?1244222332inta=3,b=4;intx,y;x=a+++b++;y=a+++(++b);a:3b:43445x:?y:?7456610执行后,x值为7,y值为10等价于a=a+1;b=5-a;第2章数据类型、运算符和表达式2.算术运算1.基本数据类型3)字符型数据4)字符串型数据4.自增与自减运算

5.逗号运算6.位运算3.赋值运算

1)整型和浮点型(实型)数据2)整型和浮点型(实型)的转换5

逗号运算符和逗号表达式逗号运算符优先级最低(倒数第一),结合顺序为自左至右。表达式1,表达式2,表达式3逗号运算符① 依次从左到右分别计算各个表达式的值② 整个“逗号表达式”的值为其中最后一个表达式(上例为表达式3)的值。表达式1;表达式2;表达式3;取刚才表达式3的值;相当于一小段程序

1+1,2+3表达式的值为5x=5,5+2,x-3表达式的值为2(x被赋值为5,必须依次计算)x=(a=1,b=3,++b,a+b);此为赋值语句,x被赋值为5a:1b:341345x:53

如有inta=2,b=4,c=6,x,y;1)若执行y=((x=a+b),(b+c));

后,x值为

6

,y值为

10

;2)若执行y=(x=a+b),(b+c);

后,x值为

6

,y值为

6

。y=(6,10);y=10;y=((x=6),10);逗号表达式(2)y=6,10;6,10;10(被丢弃)y=(x=6),10;设变量已正确定义为整型,则表达式n=i=2,++i,i++的值为_______。n:2i:234

233第2章数据类型、运算符和表达式2.算术运算1.基本数据类型3)字符型数据4)字符串型数据4.自增与自减运算

5.逗号运算6.位运算3.赋值运算

1)整型和浮点型(实型)数据2)整型和浮点型(实型)的转换位在我心中——位运算二进制1001011010100110101001…位(bit)位运算就是在二进制位的基础上的运算①数据必须转换为二进制才能进行;②只能对整型数据和字符型数据进行。2个条件+-*/%=+=-=*=/=%=

++--运算符&

|^~<<>>6个运算①按位与&参与运算的两个数取二进制,然后将对应的各二进制位相“与”:只有对应的两个二进制位都为1时,结果位才为1,有一个为0结果位为0。

0000

1001

(9的二进制)

&)

0000

0101

(5的二进制)

“按位与&”

与“逻辑与&&”不同

9&5表达式的值为:1

0000

0001

(1的二进制)

按位与常用来将一个数的二进制的某些位清0或保留某些位。②按位或|

0000

1001

(9的二进制)

|)

0000

0101

(5的二进制)

9|5表达式的值为:13

0000

1101

(13的二进制)

按位或常用来将一个数的二进制的某些位强制设为1。“按位或|”

与“逻辑或||”不同

参与运算的两个数取二进制,然后将对应的各二进制位相“或”:对应的两个二进制位有一个为1,结果位就为1;都为0时结果位才为0。

0000

1001

(9的二进制)

^)

0000

0101

(5的二进制)

^)

0000

0101

(5的二进制)

③按位异或^参与运算的两个数取二进制,然后将对应的各二进制位相“异或”:对应的两个二进制位不同时结果位为1;相同时结果位为0。^性质1:任何数与它本身做按位异或,结果为0。^性质2:a^k^k=a。可根据这个性质对数据加密。9^5表达式的值为:12

0000

1100

(12的二进制)

0000

1001

(9的二进制)95

0000

1001

(9的二进制)

|)

0000

1001

(9的二进制)

0000

0000

(0的二进制)

9^9表达式的值为:0

④按位求反~~是单目运算符,类似于负号(-),它只能后面跟一个数据:

将数据转换为二进制后,将各二进制位“反过来”,即0变为1、1变为0。补码:计算机中的数据是转换为二进制后再转换为补码存储的,所有的位运算包括~都是以补码的形式进行的。正数的补码和原码相同;负数的补码为该数绝对值的二进制按位取反后再加1。将补码再按位取反后再加1又可得回该数的绝对值。

有符号数二进制的最高位为符号位(负数为1正数为0),因此上述~9的结果是个负数,关于补码的细节不必深究。~)

00001001

(9的二进制)

~9表达式的值为:-10

1111

0110

(-10的二进制补码)

⑤按位左移<<把<<左边的数的各二进制位整体左移若干位,由<<右边的数指定要移动的位数。移出的位(高位)将被丢弃,移进位(低位)补0。3<<4表达式的值为:48000000113的二进制000048的二进制一个数左移

i位,相当于乘以2的i次方x<<ix*2i例如3<<43*24。⑥按位右移>>把>>左边的数的各二进制位整体右移若干位,由>>右边的数指定要移动的位数,移出的位(低位)将被丢弃,移进的位(高位)一般补0。15>>2表达式的值为:30000111115的二进制003的二进制一个数右移

i位,相当于除以2的i次方(除不尽时直接舍去小数部分)x>>ix/2i例如15>>215/22。C语言程序设计

天津大学副教授张宁第3章顺序结构语句空语句看作一条语句,什么也不做,起占位作用

;

a=1; b=2; c=3;{

}有;无;复合语句由{}

括起的若干条语句组成,整体看作一条语句。main(){

inta,b,c; {

{a=1;b=2;c=3; } a++; b++; }

printf("%d%d%d",a,b,c);}

{ }

{

}一条语句一条语句一条语句一条语句一条语句一条语句一条语句一条语句一条语句233a:

b:c:

a:1b:2c:323输入和输出输出输入计算机主机键盘鼠标打印机显示器输入输出库函数和包含文件#include<stdio.h>#include"stdio.h"或:C语言程序的输入/输出操作,都要通过库函数完成。库函数,顾名思义,就是“仓库”里的函数

拿到仓库的“钥匙”在C语言要使用“库函数”,要首先用#include将一些文件包含到我们的程序中来,文件的后缀一般为.h,称头文件。

putchar()函数——单字符输出#include<stdio.h>main(){

}putchar();括号里写要输出的字符getchar()函数——单字符输入#include<stdio.h>main(){

}getchar();函数值(返回值)为读入的字符我有私人警察——格式输出函数printf()直接在printf函数的()内写出一个""引起的字符串,屏幕上就会原样输出该字符串。#include<stdio.h>main(){

}printf("想说啥就说啥");我有私人警察——格式输出函数printf()printf()函数的完整使用形式是:printf("格式控制字符串",数据1,数据2,数据3,...);#include<stdio.h>main(){

inta=65; /*a的值为十进制65,八进制101,十六进制41*/

printf("%d",a); /*屏幕输出:65

*/ printf("%c",a); /*屏幕输出:A*/ printf("%o",a); /*屏幕输出:101*/ printf("%#o",a); /*屏幕输出:0101*/ printf("%x",a); /*屏幕输出:41*/ printf("%#x",a); /*屏幕输出:0x41*/}printf()函数的完整使用形式是:printf("格式控制字符串",数据1,数据2,数据3,...);我有私人警察——格式输出函数printf()#include<stdio.h>main(){

inta=65;

printf("a");

/*屏幕输出:a*/ printf("我现有%d元",a);

/*屏幕输出:我现有65元*/}我有私人警察——格式输出函数printf()格式字串控全体,数据替换百分比(%)。字符c,整数d,小数f指数e,欧(o)八叉(x)六u无号,字串s要牢记。间数全宽点小数,负号表示左对齐。#include<stdio.h>main(){

char

a='C';

charb='V';

printf("%c%c++\n",b,a);

/*输出VC++*/ printf("%c%d++",b,a);

/*

输出V67++

*/}我是快乐的快递员——格式输入函数scanf

scanf()函数的完整使用形式是:scanf("格式控制字符串",变量1的地址,变量2的地址,变量3的地址,...);#include<stdio.h>main(){ inta,b,c; printf("inputa,b,c\n"); scanf("%d%d%d",&a,&b,&c); printf("a=%d,b=%d,c=%d", a,b,c);}scanf,键盘输入,后为地址,不能输出。间数宽度,%c全读,非格式符,麻烦用户。我是快乐的快递员——格式输入函数scanf

若有程序inta;charb;floatc;scanf("%d%c%f",&a,&b,&c);当程序运行后输入1234a1230.26<回车>则:a=

,b=

,c=

。1234'a'1230.26

C语言常用数学库函数(包含math.h)函数功能用法举例sqrt(x)求x的算术平方根,x≥0sqrt(2)abs(x)求x(整数)的绝对值abs(-5)fabs(x)求x(实数)的绝对值fabs(-2.5)log(x)求自然对数ln(x)log(2)exp(x)求ex的值exp(2)pow(x,y)求xy的值,注意x^y是“按位异或”不是求xypow(2,3)sin(x)求x的正弦值,x单位为弧度sin(30*3.14/180)cos(x)求x的余弦值,x单位为弧度cos(3.14)tan(x)求x的正切值,x单位为弧度tan(1.3)asin(x)求sin-1(x)的值(弧度),-1≤x≤1asin(1)acos(x)求cos-1(x)的值(弧度),-1≤x≤1acos(0)atan(x)求tan-1(x)的值(弧度)atan(-82.24)C语言程序设计

天津大学副教授张宁第4

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论