【文档说明】《C语言程序设计2》课件.ppt,共(92)页,1.048 MB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-44448.html
以下为本文档部分文字说明:
语言处理程序和联接程序源程序可执行程序目标程序编辑程序汇编或编译程序联接程序例如,计算A=15+10的机器语言程序如下:1011000000001111:把15放入累加器A中0010110000001010:10与
累加器A的值相加,结果仍放入A中11110100:结束,停机编程工作量大,难学、难记、难修改,只适合专业人员使用;由于不同的计算机,其指令系统不同,机器语言随机而异,通用性差,是面向机器的语言。机器语言优点:程序代
码不需要翻译,所占空间少,执行速度快。现在已经没有人用机器语言直接编程了。2.程序设计语言与语言处理程序机器语言汇编语言将机器指令的代码用英文助记符来表示,代替机器语言中的指令和数据。例如用ADD表示加、SUB表示减、JMP表示程序跳
转等等,这种指令助记符的语言就是汇编语言。例如,计算A=15+10的汇编语言程序:MOVA,15:把15放入累加器A中ADDA,10:10与累加器A相加,结果存入A中HLT:结束,停机汇编语言克服了机器语言难读等缺点,保持了其编程质量高,占存储空间少,执行速度快的优点。常用于过程控制等
编程。汇编语言面向机器,使用者需要专业知识。汇编语言编写的程序,必须翻译成机器语言,才能被计算机执行。高级语言高级语言是由表达各种意义的词和数学公式按照一定的语法规则来编写程序的语言。高级语言使程序员可以完全不用与计算机的硬件打交道,可以不必了解机器的指令系统,是面向过程的
语言。这样,程序员就可以集中精力来解决问题本身而不必受机器制约,编程效率高;由于与具体机器无关,因此程序的通用性强。例如,计算A=15+10的BASIC语言程序如下:A=15+10„15与10相加的结果放入A中PRINTA„输出AEND„程序结束
常用高级语言Fortran语言1954年推出,适用于科学和工程计算。COBOL语言是面向商业的通用语言,1959年推出,主要用于数据处理,随着数据库管理系统的迅速发展,很少使用。Pascal语言结构化程序设计语言,1968年推出,适用于教学、科学计算、数据处理和系统软件等
开发,目前已被C语言取代.C与C++语言1972年推出C语言,1983年加入面向对象的概念,改名为C++。语言简练、功能强,适用面广。BASIC语言初学者语言,1964年推出;1991年微软推出可视化的、基于对象的VisualBasic开发环境,
发展到现在的VB.NET开发环境,则是完全面向对象、功能更强大。Java语言一种新型的跨平台的面向对象设计语言,1995年推出,适用于网络应用.语言处理程序在所有的程序设计语言中,除了用机器语言编制的程序能够被计算机直接理解和执行外,其他的程序设计语言编
写的程序都必须经过一个翻译过程才能转换为计算机所能识别的机器语言程序,实现这个翻译过程的工具是语言处理程序,即翻译程序。用非机器语言写的程序称为源程序;通过翻译程序翻译后的程序称为目标程序。翻译程序也称为编译器。针对不同的程序设计语言编写出的程序,有各自的翻译程序,互相不通
用。语言处理程序——汇编程序汇编程序是将汇编语言编制的程序(源程序)翻译成机器语言程序(目标程序)的工具。汇编语言源程序汇编程序机器语言程序汇编程序的具体翻译工作步骤:①用机器操作码代替符号化的操作符。②用数值地址代替符号名称。③将
常数翻译为机器的内部表示。④分配指令和数据的存储单元。语言处理程序——高级语言翻译程序1)解释方式解释方式的翻译工作由解释程序来完成。解释程序对源程序进行逐句分析,若没有错误,将该语句翻译成一个或多个机器语言指令,然后立即执行这些指令;若解释时发现错误,会立即停止,报错并提醒用
户更正代码。解释方式不生成目标程序。数据高级语言源程序解释程序计算结果高级语言程序到运行结果的过程编译执行链接源程序目标程序可执数行程据序程序库高级语言翻译程序——编译方式翻译工作由编译程序完成。如同笔译在纸上记录翻译后的结果。编译程序对整个源程序经过编译处理,产生一个与源
程序等价的目标程序;目标程序还可能要调用一些其他语言编写的程序和程序库中的标准子程序,通过连接程序将目标程序和有关的程序库组合成一个完整的可执行程序。执行速度快,修改源程序后都必须重新编译。一般高级语言(C/C++、PASCAL、FO
RTRAN、COBOL等)都是采用编译方式。目标程序源程序可执行程序编译程序连接程序数据计算结果.C.OBJ.EXE[例1.1]求两个数的和。main(){inta,b,sum;a=3;b=4;sum=add(a,b);printf("sum=a
+b=%d\n",sum);}intadd(intx,inty){intz;z=x+y;return(z);}不引入函数的方案:[例1.1]求两个数的和。#include<stdio.h>main()
{inta,b,sum;a=3;b=4;sum=a+b;printf("sum=a+b=%d\n",sum);}1.3程序设计方法简介算法的概念一、算法:广义地说,为解决一个问题方法和步骤。算法是计算机所能执行的解题方法步骤的精确描述,有两大要素:计算机所
能执行的操作:算术运算、逻辑运算、关系运算、函数运算、位运算、I/O操作等。控制结构:即各种操作的执行顺序。二、算法分类:数值算法和非数值算法。三、学习程序设计的要领:为了有效地进行程序设计,应至少具有两方面的知识:
(1)掌握一门语言的语法规则;(2)掌握解题的方法和步骤。算法分类四、程序:程序=算法+数椐结构+程序设计方法+语言工具和环境概括地说一个程序应包括两方面的内容:(1)对数椐的描述。数椐类型和数椐的组织形式;(2)对操作的描述。即操作步骤,也就是算法(algorithm)。程序设计的概念程
序设计就是用计算机语言来编写程序的过程。什么是程序?著名计算机科学家沃思提出有名的公式:算法+数据结构=程序算法即问题的求解过程、计算机的工作步骤。数据结构即对参与运算的数据怎样进行合理的组织、安排,以提高程序运行的效率
和求解的精确性。程序的两大要素:数据结构、算法例1、A,B两个变量的内容交换,需要引入中间量C1、C←A;2、A←B;3、B←C;算法举例例2、求1+2+3+·····+100的值。第一步:sum←0;第二步:i←0;第三
步:i←i+1;第四步:sum←sum+i;第五步:如果i<100,则转入第三步;第六步:输出sum的值;第七步:结束。例3_1、求1/1+1/2+1/3+················+1/99+1/100的值。算法如下:1、sum=0;2、i=0;3、i=i+
1;//循环4、sum=sum+(1/i);//循环5、if(i<100)goto3、;6、end.算法举例例3_1、求1/1-1/2+1/3-················+1/99-1/100的值。算法如下:1、sign=-1;2
、sum=0;3、i=0;4、i=i+1;//循环5、sign=(-1)*sign;//循环6、sum=sum+sign*(1/i);//循环7、if(i<100)goto4;8、end.算法举例例4、判M是否为素数。逐步求精算法如下:用2·····M-1去除以M,
都除不尽则M必为素数用2·····M的平方根去除以M,都除不尽则M必为素数算法举例例5、判闰年。地球绕太阳一周需要:365天5小时48分46秒一年定为:365天,每年余下5小时48分46秒,累计4年为:23小时15分4秒,计为一天
加在2月为29天,但4年加一天又少44分56秒,积满400年恰好三天。因此,规定每4年加一天外,还规定公圆世纪的整数能用100除尽且能用400除尽的归闰年,否则为非闰年。能够被4整除而不能够被100整除的年份,或者能够被400整除的年份。算法举例1·
有穷性(有限步内终止)2·确定性(每一步无二义性)3·有零个或多个输入4·有一个或多个输出5·有效性(每一步能有效执行).算法特性自然语言传统的程序流程图N-S流程图算法表示自然语言表示法例如:求两数之和(1)输入a,b两数(2)求
和s=a+b(3)输出两数之和注意:用自然语言表示的每一步骤必须使计算机能实现的,否则便是错误的算法。特点:简单易写,内容较长,理解有异,较少使用。传统的程序流程图名称符号含义箭头流向或路径矩形处理功能圆形连接点平行四边形输入或输出菱形判断圆弧边
框流程的起点或终点尖头框循环双边矩形框调用子程序0.4程序设计和算法传统的程序流程图例图(求三数中最大值)结束输入a,b,ca>b?b>c?a>c?输出c输出b输出c输出a开始tfttff传统的程序流程图特点:绘制简单,描述
直观,之前广泛使用。缺点:1.程序流程图不易表示算法或程序的层次结构。2.用箭头表示的控制流可能引起随意的转移控制。3.可能诱使人们过早地考虑局部程序的控制结构而忽视全局的程序结构。4.不易表示数据结构和程序模块之间的关系。N-S图即结构化程序设计流程图,提供了描述三
种基本逻辑结构的图形工具,与传统的程序流程图对照描述如下:1、顺序结构A模块B模块A模块B模块(a)(b)图1.3顺序结构N-S图2、选择结构(分支结构)(a)流程图表示(b)N-S图表示A模块B模块判断条件成立
吗?判断条件成立吗?成立不成立A模块B模块图1.4选择结构成立不成立N-S图由分支结构派生出来的多分支结构(a)流程图表示(b)N-S图表示图1.5多分支结构A1块k=A2块An块K=?K1K2…KnA1块A2块…An块…k1k2kn……..3.循环结构(a)流程
图表示(b)N-S图表示图1.6当型循环结构当型循环结构:先判断循环条件是否满足,当条件满足,执行一遍循环体,再判断循环条件,仍满足再执行一遍循环体……直到不满足条件,则退出循环,执行循环体后的下一语句。若第一次判断条件就不满足,则一次也不执行循环体。循环条
件满足吗?循环体循环体循环条件满足吗?不满足满足N-S图N-S图(a)流程图表示(b)N-S图表示图1.7直到型循环结构直到型循环结构:先执行一遍循环体,再判断循环条件是否满足,如不满足再执行一遍循环体……直到条件满足,则退出循环,执行循环体后的下一语句。
这种循环结构至少要执行一遍循环体。循环体直到循环条件满足为止不满足满足循环体循环条件满足吗?常用算法描述下面给出一个算法的N-S图举例描述求n!的值的算法F=n!=1*2*3*….*(n-1)*n开始F=1,i=0输入ni<n?i=i+1F=F*
i输出F结束图1.8求n!的值的N-S图常用算法描述描述求的算法。设a≠0开始输入a、b、cd=b2-4ac输出x1、x2输出两个虚根x1、x2结束d≥0?TTFFd>0?adbx21+-=adbx22--=02=++cbxaxabx21-=12xx=iadabx221-+-=iadabx222
---=荷兰学者E.W.dijkctra提出了结构化程序设计(structuredprogramming)的理论,成为70年代中期至90年代初的程序设计主流。结构化程序设计方法提出了一些大家都要遵循的原则,这些原则归纳为32个字:"自顶向下,逐步细化。基本结构,组合而
成。清晰第一,效率第二。书写规范,缩进格式。"三种基本控制结构一、goto语句的危害二、三种基本结构1、顺序结构2、选择结构:单分枝、双分枝、多分枝3、循环结构:当型、直到型三种基本控制结构顺序结构:按语句书写的先后次序执行的程序结构。选择结构:又称分支结构。根据判断的结果在两个
分支路径中选取其中的一条执行。(多分支结构)循环结构:又称重复结构。它是根据给定的条件是否满足,以决定是否继续执行程序的某一模块(循环体)的操作。三种基本控制结构三、三种基本结构的特点:1、结构内每一部分都有机会被执行到
2、结构内不存在"死循环"三种基本控制结构三种控制结构流程图ABAB流线式NS式顺序结构流程图TFPAB选择结构流程图PABTFAPFTAPAPTFAP循环结构流程图当型循环结构直到循环结构结构化程序设计方法(1)top→down及down→top(2)逐步求精(3)模块化设计(4)结构化编码
开始定义问题建立数学模型确定算法绘制框图编写程序上机调试成功否?试运行书写程序文档结束成功否?计算机解题步骤YYNN结构化程序三种基本逻辑结构N-S图顺序结构分支结构循环结构a块b块条件成立?成立不成立a块b块当型:条件成立直到条件成立直到型:a块a块结构化程序流程图(也称N-S图)格式
功能if(表达式)语句if(表达式)语句1else语句2if(表达式1)语句1elseif(表达式2)语句2elseif((表达式n)语句nelse语句n+1--表达式值非0?表达式值非0?表达式值非0?表达式值非0?表达式1值非0?表达式2值非0?表达式3值非0?表达式n值非0?
语句语句语句1语句2语句1语句2语句2语句n+1语句3语句n语句1YNYYYYYYYNNNNNN...条件语句70年代后,软件开发的手段和方法越来越不能适应开发大型系统软件的要求,因而出现了"软件危机",由此产生了面向对象的程序设计语言。1983年美国Bell实验
室的B.Stroustrup在C语言基础上,扩充引进了面向对象的概念,推出了C++语言。它与C语言完全兼容,是目前使用最为广泛的一种面向对象的程序设计语言。面向对象的程序设计中的一些基本概念数据类型、运算
符和表达式第二章2.1C语言数据类型简介2.2常量2.3变量2.4运算符和表达式退出2.1C语言数据类型简介基本类型构造类型派生类型整型int结构体struct数组类型字符型char共用体(联合)型union
指针类型实型float枚举型enum双精度型double用户定义类型typedef空值型void返回数据类型决定:1.数据占内存字节数2.数据取值范围3.其上可进行的操作2.2常量常量是指在程序运行过程中其值不能被改变的量。2.2.1数值常量2
.2.2字符常量和字符串2.2.3标识符命名的常量2.2.4换码序列常量返回2.2.1数值常量1、整型常量(简称为整数)三种形式:十进制整型常量、八进制整型常量(以0开头的0~7数字串)、十六进制整型常量(以0X或
0x开头的0~9/a~f/A~F字符串);每种形式常量可表示成短常量和长常量(在整型常量后面紧跟L或l)。2、实型常量(简称为浮点常量或实数)两种形式:十进制小数形式和指数形式(用E或e表示)返回例:1230例:01230400例:0X1
23-0x11例:12L-9l例:0.123123.例:345e+2.5e-22.2.2字符常量和字符串1、字符常量用单引号括起来,可以用作整数常量,可参与算术运算。特例:单引号’\‟‟,反斜线’\\‟2、
字符串用双引号括起来的零个或多个字符序列。特例:字符串中的双引号\",字符串中的反斜线\\存储:编译时自动在字符串结尾加一个转义字符’\0‟作为字符串结束标志,即长度为n个字符的字符串占n+1个字节空间。[例2.2]字符常量和字符串输出举例。main(){p
rintf("%c,%s\n",'a',"a");}[例2.1]字符常量举例。main(){charch;ch='b';printf("%c,%d",ch,ch);}返回显示器b,98显示器a,a2.2.3标识符命名的常量(符号常量)
一般用大写字母表示,而变量一般用小写字母表示。符号常量使用之前必须预先定义,其定义格式为#define标识符常量例:#definePI3.14159注:不是语句,后无;优点:①清晰易懂;②易于修改。[例2.3
]标识符命名的常量举例。#definePI3.1415926main(){floatradius,circum,area;scanf("%f",&radius);circum=2*PI*radius;area=PI*radius*radius;printf("cir
cumferenceis%f\n",circum);printf("areais%f\n",area);}返回键盘显示器32.2.4换码序列常量(转义字符)是特殊字符常量。以一个反斜杠"\"开头的字符序列,只代表某个
特定的ASCII码字符。用单引号括起。<常见的转义字符常量表(p27表2.2):转义字符含义\n\v\r\0\„\ddd\t\b\f\\\"\xhh转义字符含义换行垂直制表回车空字符单引号3位8进制数代表的字符水平制表退格换页反斜线双引
号2位16进制数代表的字符[例2.4]转义字符举例。main(){printf("\tHello!");printf("\n1234567890");printf("\bHello!");}Hello!123456789Hello!显示器返回2.3变量变量:是指程序执行过程中,其
值可以改变的量。2.3.1变量说明和变量地址2.3.2变量的初始化2.3.3数据类型2.3.4存储类型和变量的作用域返回2.3.1变量说明和变量地址1、变量说明"先定义,后使用。"变量名:变量的名字,用标识符表示,不能与保留字(语句名、类型名)重名。变量说明:存储类型数据类型变量名;2、
变量的地址:存储某变量的内存空间的首地址,用&变量名表示。注:&-取地址运算,地址值可用十进制或十六进制表示。例:内存地址变量值变量名0x840010a………0x850020b………返回2.3.1变量说明和变量地址返回编译程序根据变量说明为其分配指定字节的内存单元…...地址0x84
00inta=10,b=-20,c;abc2字节2字节2字节地址0x8402地址0x8404…...内存10-20随机数定义变量的同时给变量赋初值。例:inta=10;charc=‟A‟;[例2.5
]变量的初始化.main(){charc1='a';charc2='b';charc3,c4;c3=c1-('a'-'A');c4=c2-('a'-'A');printf("%c,%c\n",c3,c4);}A,B返回2.3.2变量的初始化整型变量占字节
数随机器不同而不同,一般占两个字节分为基本型-int-2字节、短整型-short-2、长整型-long-4和无符号型-unsigned-2、unsigenedshort-2、unsignedlong-4
。可用sizeof(类型标识符)测量实型变量float:占4字节,提供7位有效数字double:占8字节,提供15~16位有效数字字符型变量字符变量存放字符ASCII码char与int数据间可进行算术运算例floata;a=111111.111;/*a
=111111.1*/doubleb;b=111111.111;/*b=111111.111*/例a=„D‟;/*a=68;*/x=„A‟+5;/*x=65+5;*/s=„!‟+„G‟/*s=33+71;*/
没有字符串变量,用字符数组存放2.3.3数据类型[例2.6]测试所用计算机的基本数据类型所占内存的字节数。P23main(){printf("int:%d\n",sizeof(int));printf("short:%d\n",sizeof(short));printf("long:
%d\n",sizeof(long));printf("unsigned:%d\n",sizeof(unsigned));printf("unsignedshort:%d\n",sizeof(unsignedshort));printf("unsi
gnedlong:%d\n",sizeof(unsignedlong));printf("char:%d\n",sizeof(char));printf("unsignedchar:%d\n",sizeof(unsignedchar));printf("float:%d\n",s
izeof(float));printf("double:%d\n",sizeof(double));}注:sizeof()求括号中的变量或数据类型的长度(字节数)。2、数据类型间的转换按较低类型向较高类型转换的原则:-字符型->整型
(短整型)->长整型->实型->双精度型-有符号型->无符号型返回intintfloatfloatdoubledoublefloatdouble10+‘a’+f*i-d/e例inti;floatf;doubled;longe;强制转换类型:(数据类型
名)表达式例:(double)a(int)x+y2.3.4存储类型和变量的作用域1、局部变量和全局变量局部变量(内部变量):在函数内部或复合语句内部定义的变量,作用域是从定义的位置起到函数体或复合语句结束止。全局变量(外部变量):在函数外部定义的变量。作用域是从变量定义的位置起
到本源文件结束止。注:同一源文件中,若局部变量与全局变量同名,则全局变量被屏蔽。2、存储类型自动变量(auto):auto可省略,局部变量,内存的堆栈区,不能赋初值。寄存器变量(register):保存在寄存器中,可说明局部变量和形
式参数,使用最频繁,只能是int或char。静态变量(static):内存的数据区,可说明局部变量和全局变量,随文件存在而存在。外部变量(extern):内存的应用程序区,只能说明全局变量,随程序存在且活动。注:内存分为堆栈区(auto)、系统程序区、应用程序
区(extern)和数据区(static)。[例2.7]存储类型和作用域举例。#include"file2.c"inta=10;externintadd();main(){intb,c;scanf("%d",&b);c=add(b);printf("%d+%d=%d\n",a,b,c);}返
回显示器键盘2010+20=30externinta;intadd(x)registerintx;{inty;y=a+x;return(y);}file1.cfile2.c全局变量局部变量自动变量全局变量外部变量局部变量寄存器变量局部变量自动变量2.4运算符和表达式2.4.1运算符和表达式2
.4.2赋值运算符和表达式2.4.3算术运算符和表达式2.4.4逗号运算符和表达式2.4.5关系运算符和表达式2.4.6逻辑运算符和表达式2.4.7条件运算符和表达式2.4.8位运算符和表达式2.4.9运算符的结合
律和优先级返回2.4.1运算符和表达式1、C运算符算术运算符:+-*/%-(取负)++--关系运算符:>>=<<===!=位运算符:~&|^<<>>逻辑运算符:!&&||赋值运算符:=复合赋值符号+=-=*=/=%=条件运算符:?:逗号运算
符:,指针运算符:*&求字节数运算符:sizeof强制类型转换运算符:类型分量运算符:.->下标运算符:[]其他:()函数调用运算符学习运算符应注意(1)运算符功能(2)与运算量关系--要求运算量个数:单目、双目
、三目--要求运算量类型(3)运算符优先级别:15个级别(4)结合方向:自左至右、自右至左(5)结果的类型-(负号)&+-*%?:2、表达式:是由数据和运算符组合而成的式子。是一种复合数据,定义如下:①常量、变量和函数是一个表
达式;②运算符与表达式的组合是一个表达式。返回优先级运算符结合规则1[]()->.从左至右2!~++---*&sizeof从右至左3*/%从左至右4+-从左至右5<<>>从左至右6<<=>>=从左至右7=
=!=从左至右8&从左至右9^从左至右10|从左至右11&&从左至右12||从左至右13?:从右至左14=+=-=*=/=%=&=^=|=>>=<<=从右至左15,从左至右3*5/6a=b=c=5//自左至右//自右至左赋值运算符:=把
其右侧表达式的值赋给左侧的变量。赋值表达式:赋值运算符连接变量和表达式而得到的式子。变量=表达式--注:右边的数据类型转换成左边变量的数据类型。赋值表达式的值是左部变量的值和类型。赋值语句:赋值表达式加上分号。变量=表达式;2.4.2赋值运算符、赋值表达式和赋值语句返回a
=2a=2+3;优先级运算符结合规则1[]()->.从左至右2!~++---*&sizeof从右至左3*/%从左至右4+-从左至右5<<>>从左至右6<<=>>=从左至右7==!=从左至右8&从左至右9^从左至右1
0|从左至右11&&从左至右12||从左至右13?:从右至左14=+=-=*=/=%=&=^=|=>>=<<=从右至左15,从左至右算术运算符:+-*/%-(取负)++----优先级:()++---*/%+---注:①其中%
++--只能用于整型。②两个整数相除为整数,向零取整。③%:余数与被除数符号相同。算术表达式:由运算对象(常量、变量和函数等)、圆括号和算术运算符组成。表达式中所字符写在一行上。2.4.3算术运算符和算术表达式-5/3=-
1-4%-3=1--a/(b1+5)-11%7*'a'的运算次序优先级运算符结合规则1[]()->.从左至右2!~++---*&sizeof从右至左3*/%从左至右4+-从左至右5<<>>从左至右6<<=>>=从左至右7==!=从左至右8&从左至右9^从左至右10|从左至右11&&从左
至右12||从左至右13?:从右至左14=+=-=*=/=%=&=^=|=>>=<<=从右至左15,从左至右[例2.8]自增运算符举例。main(){inti=2;printf("%d\n",-i++);printf("%d\n",i);}注意:这里的关键是“引用”.printf(“%
d\n”,-i++);中的-i并没有改变i的值,仍然保持原值2;-23自增、自减表达式:++i(先加1再引用)i++(先引用再加1)复合赋值运算:+=-=*=/=%=[例2.9]复合赋值运算符举例。main(){inta=3,b=9,c=-7;a+=b;c+=b;b+=(a+c);pr
intf("a=%d,b=%d,c=%d\n",a,b,c);a+=b=c;printf("a=%d,b=%d,c=%d\n",a,b,c);a=b=c;printf("a=%d,b=%d,c=%d\n",a,b,
c);}a=12,b=23,c=2a=14,b=2,c=2a=2,b=2,c=2返回逗号运算符:,--优先级别最低。逗号表达式:用逗号运算符把两个或多个算术表达式连接起来构成逗号表达式。表达式1,表达式2,……--注:①求值过程从左到右,逐个求表达式的值,最后整个表达
式的值取最右侧的表达式的值。②for循环语句中常用。2.4.4逗号运算符和逗号表达式返回y=(b=2,3*2)(y=b=3,3*b)a=(b=2,++b,b+5)//y值为3,表达式值为9//y值为6,表达式值为6//a值为8,表达式值为8优先级运算符结合规则1[](
)->.从左至右2!~++---*&sizeof从右至左3*/%从左至右4+-从左至右5<<>>从左至右6<<=>>=从左至右7==!=从左至右8&从左至右9^从左至右10|从左至右11&&从左至右12||从左至右13?:从右至左14=+=-=*=/=%=&=^=|=>>=<<=从右至左
15,从左至右关系运算符:>>=<<===!=--优先级:算术>关系>赋值运算符>>=<<===!=关系表达式:用关系运算符将两个表达式连接起来的式子。值是1或0。表达式1关系运算符表达式22.4.5关系运算符和关系表达式a+b<=c+di=(j+k)!=0优先级运算符
结合规则1[]()->.从左至右2!~++---*&sizeof从右至左3*/%从左至右4+-从左至右5<<>>从左至右6<<=>>=从左至右7==!=从左至右8&从左至右9^从左至右10|从左至右11&&从左至右12||从左至右13?:从右至左14=+=-=*=/=%=&=^=|=>
>=<<=从右至左15,从左至右[例2.11]关系运算符举例。main(){inta,b;scanf("a=%d,b=%d",&a,&b);printf("a>b:%d\n",a>b);printf("a<b:%d\n",a<b);printf("a==b:%d\n",a==b);printf
("a>=b:%d\n",a>=b);printf("a<=b:%d\n",a<=b);printf("a!=b:%d\n",a!=b);}返回显示器a>b:0a<b:1a==b:0a>=b:0a<=b:1a!=b:1键盘a=3,
b=5逻辑运算符:||&&!--优先级:!=算术>关系>&&>||>赋值--逻辑运算真值表(p43表2.11)2.4.6逻辑运算符和逻辑表达式ab!a!ba&&ba||b真假真假假假真真真假假假假假真真假假真真真假真真优先级运算符结合规则1[]()
->.从左至右2!~++---*&sizeof从右至左3*/%从左至右4+-从左至右5<<>>从左至右6<<=>>=从左至右7==!=从左至右8&从左至右9^从左至右10|从左至右11&&从左至右12||从左至右13?:从右至左14=+=-=
*=/=%=&=^=|=>>=<<=从右至左15,从左至右返回inta=1,b=2,c=3,d=4,m=1,n=1;(m=a>b)&&(n=c>d)//m值为0,n值为1逻辑表达式:用逻辑运算符连接运算量,并产生一个逻辑值。逻辑值是1或0。注:①逻辑运算结果中,1表
示真,0表示假;而判断时,非0表示真,0表示假。②&&和||一旦能够确定表达式的值,就不再继续运算下去。条件运算符:?:条件表达式:含有条件运算符的表达式。三目运算符。表达式1?表达式2:表达式3--执行过程:先表达式1,为非0,则执行表达式2;为0,表达式3。2
.4.7条件运算符和条件表达式a>b?a:ba=(b==0)?c*d:c/d;if(b==0)a=c*d;elsea=c/d;[例2.13]用条件表达式求出输入的两个整型数中较小者。main(){inta,b;scanf("a=%d,b=%d",&a,&b);print
f("Theminis%d",(a<b)?a:b);}返回键盘a=3,b=4显示器Theminis3位运算表达式:用位运算符连接运算量而组成的表达式。对运算量以二进制位为单位操作。位运算符:~&|^<<>>2.4.8位运算符和位运算表达式逻辑位运算符移位位运算符优先
级运算符结合规则1[]()->.从左至右2!~++---*&sizeof从右至左3*/%从左至右4+-从左至右5<<>>从左至右6<<=>>=从左至右7==!=从左至右8&从左至右9^从左至右10|从左至右11&&从左至右12||从左至右13?:从右至左14=+=-=*=/=%=&=^=|
=>>=<<=从右至左15,从左至右ab~aa&ba|ba^b000110111、逻辑位运算~&|^逻辑位运算真值表(p45表2.12)1100000101110110[例2.14]逻辑位运算。main(){inta,b;scanf("a=%x,b=%x",&a,&b);printf("~a=%
x\n",~a);printf("a&b=%x\n",a&b);printf("a|b=%x\n",a|b);printf("a^b=%x",a^b);}键盘a=0xb9,b=0x83显示器~a=0xff46a&b=0x81a|b=0xbba^b=0x3
a2、移位位运算<<>><<:右补0>>:有符号数,左复制符号位无符号数,左补0例:a=0x1b;b=a<<2;0x6c即1080110110000011011补0舍去例:a=-8;a=a>>2;0xfe即-21111111011111000补1舍去例:b=248;b=b>>2;
0x3e即62舍去0011111011111000补0[例2.15]移位位运算。#defineS11#defineS23main(){inta;scanf("a=%d",&a);printf("%d>>%d=%d\n",a,S1,a>>S1);printf("%d>>%d=%d\n"
,a,S2,a>>S2);printf("%d<<%d=%d\n",a,S1,a<<S1);printf("%d<<%d=%d\n",a,S2,a<<S2);}返回键盘a=3显示器3>>1=13>>3=03<<1=63<<3=24
2.4.9运算符的结合律和优先级(p49-表2.15)优先级运算符结合规则1[]()->.从左至右2!~++---*&sizeof从右至左3*/%从左至右4+-从左至右5<<>>从左至右6<<=>>=从左至右7==!=从左至右8&从左至右9^从左至右10|从左至右11&&从左至右
12||从左至右13?:从右至左14=+=-=*=/=%=&=^=|=>>=<<=从右至左15,从左至右返回Thankyou!