《C程序设计(第三版)谭浩强著》教材ppt课件共529张_第1页
《C程序设计(第三版)谭浩强著》教材ppt课件共529张_第2页
《C程序设计(第三版)谭浩强著》教材ppt课件共529张_第3页
《C程序设计(第三版)谭浩强著》教材ppt课件共529张_第4页
《C程序设计(第三版)谭浩强著》教材ppt课件共529张_第5页
已阅读5页,还剩524页未读, 继续免费阅读

下载本文档

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

文档简介

1,C语言程序设计,2,课程情况介绍,教材:C程序设计(第三版)谭浩强参考书:C语言大全(第四版)C程序设计试题汇编上机环境:TurboC2.0VisualC+6.0,3,本门课主要内容,C语言概述算法及其表示方法数据类型、运算符和表达式编写程序(简单程序设计,选择结构程序设计,循环结构程序设计)数组函数指针结构体文件,4,第一章语言概述,本章主要介绍C语言程序的结构和书写规则。,5,1、在C语言诞生以前,系统软件主要是用汇编语言编写的。2、语言是贝尔实验室于70年代初研制出来的,后来又被多次改进,并出现了多种版本。80年代初,美国国家标准化协会(ANSI),根据语言问世以来各种版本对语言的发展和扩充,制定了ANSIC标准(1989年再次做了修订)。本课程以ANSIC新标准来讲解!,一、C语言的发展历史,6,C语言的产生背景,7,Ada,ALGOL60,ALGOL68,Pascal,Modula-2,CPL,BCPL,B,C,C+,Java,LISP,PROLOG,COBOL,FORTRAN77,FORTRAN,PL/1,Simula67,Smalltalk80,BASIC,ANSI-BASIC,QBASIC,VB,FORTRAN90,8,(3)在微机上通常使用的语言编译系统有TurboC、BorlandC等。Visualc+6.0为了易于以后的c+过渡,本课程上机采用vc+6.0环境!,9,二、C语言的特点,C语言同时具有汇编语言和高级语言的优势。(1)语言简洁、紧凑,使用方便、灵活。(2)运算符和数据类型极其丰富。(3)生成的目标代码质量高,程序执行效率高。(4)可移植性好(较之汇编语言)。(5)可以直接操纵硬件。,10,32个关键字:(由系统定义,不能重作其它定义)autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunsignedunionvoidvolatilewhile,11,9种控制语句:if()elsefor()while()dowhile()continuebreakswitchgotoreturn,12,例C语言与Pascal语言比较C语言Pascal语言含义BEGIN.END复合语句if(e)s;IF(e)THENs条件语句inti;VARi:INTEGER定义i为整型变量inta10;VARa:ARRAY1.10OFINTEGER定义整型数组aintf();FUNCTIONf():INTEGER定义f为返值整型的函数int*p;VARp:INTEGER定义p为指向整型变量的指针i+=2;i=i+2赋值i+2ii+,+i;i=i+1i自增值结论:C比Pascal简练,源程序短。,=!=逻辑运算符:!,输出:Verygood!,17,例1.2,/*example1.1calculatethesumofaandb*/#include/*Thisisthemainprogram*/Voidmain()inta,b,sum;a=10;b=24;sum=add(a,b);printf(”sum=%dn,sum);/*Thisfunctioncalculatesthesumofxandy*/intadd(intx,inty)intz;z=x+y;return(z);,运行结果:sum=34,18,格式特点习惯用小写字母,大小写敏感不使用行号,无程序行概念可使用空行和空格常用锯齿形书写格式,main().,main()inti,j,sum;sum=0;for(i=1;i10;i+)for(j=1;jp步骤4:使i的值加1,表示为i+1=i步骤5:如果i不大于5,返回到步骤3继续向下执行;否则算法结束。p中的值即最后结果。想一想:采用此方法求123.100,如何?简练!,41,先设两个变量p和i,p代表被乘数,i代表乘数。并且将每一步乘积直接放入被乘数变量p中。用循环算法求结果。步骤1:令p=1步骤2:令i=3步骤3:使pi,并将乘积放入p中。通常表示为pi=p步骤4:使i的值加2,表示为i+2=i步骤5:如果i不大于13,返回到步骤3继续向下执行;否则算法结束。p中的值即最后结果。想一想:采用此方法求135.101,如何?,如果将题目改为求1x3x5x7x9x11x13,如何设计算法呢?,42,思考:求下式的值,怎么写算法?,提示:注意乘数大小的变化规律,重复相乘过程。,43,例2:有两个数a,b,按大小顺序打印它们。步骤1:输入a,b的值;步骤2:如果ab,则先打印a,再打印b;否则,先打印b,再打印a;算法结束。,44,例3:将2000-2500的闰年输出。,闰年条件:(1)能被4整除,但不能被100整除;(2)能被100整除,又能被400整除的年份是闰年。,45,步骤7:当yp步骤4:使i的值加2,表示为i+2=i步骤5:如果i不大于11,返回到步骤3继续向下执行;否则算法结束。p中的值即最后结果。,51,例2的算法用流程图来表示,有两个数a,b,按大小顺序打印它们。步骤1:输入a,b的值;步骤2:如果ab,则先打印a,再打印b;否则,先打印b,再打印a;算法结束。,52,步骤1:y=2000步骤2:如果y不能被4整除,输出“y不是闰年”,转到S6;步骤3:如果y能被4整除,且不能被100整除,输出“y是闰年”,转到S6;步骤4:如果y能被100,且能被400整除,输出“y是闰年”,转到S6;步骤5:输出“y不是闰年”;步骤6:y=y+1步骤7:当yp步骤4:使i的值加2,表示为i+2=i步骤5:如果i不大于101,返回到步骤3继续向下执行;否则算法结束。p中的值即最后结果。,这两个操作之间是顺序关系,这是一个循环结构,这是一个顺序结构,上述算法由基本结构组成,60,对例2算法的流程图的结构化分析,有两个数a,b,按大小顺序打印它们。步骤1:输入a,b的值;步骤2:如果ab,则先打印a,再打印b;否则,先打印b,再打印a;算法结束。,这是一个选择结构,上述算法由基本结构组成,61,用基本结构的组合表示算法,从而去掉了流程线。避免了随意的跳转。1973年两名美国学者提出了一种新的流程图形式,并用二人名字的第一个字母组合命名了该流程图。即N-S流程图,也称盒图。三种基本结构的表示:,(四)用N-S流程图表示算法,不成立,当条件P成立时,直到条件P1成立,62,前面的算法用N-S流程图来表示,计算1x3x5x.x11的值步骤1:令p=1步骤2:令i=1步骤3:使pxi,并将乘积放入p中。通常表示为pxi=p步骤4:使i的值加2,表示为i+2=i步骤5:如果i不大于11,返回到步骤3继续向下执行;否则算法结束。p中的值即最后结果。,这两个操作之间是顺序关系,这是一个顺序结构,这是一个循环结构,上述算法由基本结构组成,63,64,(五)用伪码表示算法,概念:伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法。特点:它如同一篇文章一样,自上而下地写下来。每一行(或几行)表示一个基本操作。它不用图形符号,因此书写方便、格式紧凑,也比较好懂,也便于向计算机语言算法(即程序)过渡。用处:适用于设计过程中需要反复修改时的流程描述。,65,IFxispositiveTHENprintxELSEprint-x也可以用汉字伪代码表示:若x为正打印x否则打印-x也可以中英文混用,如:IFx为正printxELSEprint-x,例:“打印x的绝对值”的算法可以用伪代码表示为:,66,开始置t的初值为1置i的初值为2当i=5,执行下面操作:使t=ti使i=i+1循环体到此结束输出t的值结束,也可以写成以下形式:BEGIN算法开始1t2iwhilei5titi+1iprinttEND算法结束,求5!。用伪代码表示算法:,67,输出50个学生中成绩高于80分者的学号和成绩。用伪代码表示算法:,BEGIN算法开始1iwhilei50inputniandgii+1i1iwhilei50ifgi80printniandgii+1iEND算法结束,68,(六)用计算机语言表示算法,概念:用计算机实现算法。计算机是无法识别流程图和伪代码的。只有用计算机语言编写的程序才能被计算机执行。因此在用流程图或伪代码描述出一个算法后,还要将它转换成计算机语言程序。特点:用计算机语言表示算法必须严格遵循所用的语言的语法规则,这是和伪代码不同的。用处:要完成一件工作,包括设计算法和实现算法两个部分。设计算法的目的是为了实现算法。,69,#includevoidmain()inti,t;t=1;i=2;while(i0)t=a;(错误),4.3数据输入输出的概念及在C语言中的实现,(一).所谓输入输出是以计算机主机为主体而言的输出:从计算机向外部输出设备(显示器,打印机)输出数据输入:从输入设备(键盘,鼠标,扫描仪)向计算机输入数据.,(二).C语言本身不提供输入输出语句,输入和输出操作是由C函数库中的函数来实现的例如:字符输入函数:getchar字符输出函数:putchar格式输入函数:scanf格式输出函数:printf字符串输入函数:gets字数穿输出函数:puts,(三).在使用系统库函数时,要用预编译命令“#include”将有关的“头文件”包括到用户源文件中.例如:在调用标准输入输出库函数时,文件开头应该有:#include“stdio.h”或:#include,头文件,格式:putchar(c)参数:c为字符常量、变量或表达式功能:把字符c输出到显示器上返值:正常,为显示的代码值;,4.4字符数据的输入输出字符输出函数,#includevoidmain()intc;chara;c=65;a=B;putchar(c);putchar(n);putchar(a);,运行结果:AB,例,格式:getchar()功能:从键盘读一字符返值:正常,返回读取的代码值;,字符输入函数,例,#includevoidmain()intc;printf(Enteracharacter:);c=getchar();printf(%c-hex%xn,c,c);,运行结果:Enteracharacter:AA-hex41,格式:printf(“格式控制串”,输出表)功能:按指定格式向显示器输出数据返值:正常,返回输出字节数;,4.5格式输入输出格式输出函数,输出表:要输出的数据(可以没有,多个时以“,”分隔)格式控制串:包含两种信息格式说明:%修饰符格式字符,用于指定输出格式普通字符或转义序列:原样输出格式字符,inta=567;printf(“%d”,a);,inta=255;printf(“%x”,a);,inta=65;printf(“%o”,a);,inta=567;printf(“%u”,a);,chara=65;printf(“%c”,a);,printf(“%s”,“ABC”);,floata=567.789;printf(“%e”,a);,floata=567.789;printf(“%f”,a);,floata=567.789;printf(“%g”,a);,printf(“%”);,567,ff,101,567,A,ABC,5.677890e+002,567.789000,567.789,%,说明格式字符要用小写格式字符与输出项个数应相同,按先后顺序一一对应输出转换:格式字符与输出项类型不一致,自动按指定格式输出,例inta=3,b=4;printf(“%d%dn”,a,b);printf(“a=%d,b=%dn”,a,b);,例inta=3,b=4;printf(“%d%dn”,a,b);printf(“a=%d,b=%dn”,a,b);输出结果:34a=3,b=4,附加格式说明符(修饰符),例inta=1234;floatf=123.456;charch=a;printf(“%8d,%2dn”,a,a);printf(“%f,%8f,%8.1f,%.2f,%.2en”,f,f,f,f,f);printf(“%3cn”,ch);,运行1234,1234结果:123.456001,123.456001,123.5,123.46,1.23e+002a,例staticchara=“Hello,world!”printf(“%sn%15sn%10.5sn%2.5sn%.3sn”,a,a,a,a,a);,运行结果:Hello,world!Hello,world!HelloHelloHel,例,例inta=1234;floatf=123.456;staticcharc=“Hello,world!”;printf(“%8d,%-8dn”,a,a);printf(“%10.2f,%-10.1fn”,f,f);printf(“%10.5s,%-10.3sn”,c,c);,运行结果:1234,1234123.46,123.5Hello,Hel,例-,例inta=1234;floatf=123.456;printf(“%08dn”,a);printf(“%010.2fn”,f);printf(“%+08dn”,a);printf(“%+010.2fn”,f);,例0、+,例inta=123;printf(“%o,%#o,%X,%#Xn”,a,a,a,a);,例#,/00001234,/0000123.46,/+0001234,/+000123.56,/173,0173,7B,0X7B,格式输入函数,格式:scanf(“格式控制串”,地址表)功能:按指定格式从键盘读入数据,存入地址表指定的存储单元中,并按回车键结束返值:正常,返回输入数据个数,地址表:变量的地址,常用取地址运算符scanf(%f,%f,%f,例输入三角形边长,求面积,输入:3,4,6输出:a=3.00,-b=4.00,-c=6.00,-s=6.50area=5.33,例从键盘输入大写字母,用小写字母输出,#includestdio.hvoidmain()charc1,c2;c1=getchar();printf(%c,%dn,c1,c1);c2=c1+32;printf(%c,%dn,c2,c2);,输入:A输出:A,65a,97,#include#includevoidmain()floata,b,c,disc,x1,x2,p,q;scanf(a=%f,b=%f,c=%f,输入:a=1,b=3,c=2输出:x1=-1.00 x2=-2.00,112,概念,其值可以改变的量称为变量。,(二)变量,要素,(1)变量名。每个变量都必须有一个名字变量名,变量命名遵循标识符命名规则。(2)变量值。在程序运行过程中,变量值存储在内存中。在程序中,通过变量名来引用变量的值。,113,标识符identifier,1、标识符就是一个名字(如常量名、变量名、函数名)。2、组成:只能由字母、数字、下划线组成。且第一个字符必须为字母或下划线。3、长度:标识符的有效长度随系统而异,如果超长,则超长部分被舍弃。VC+6.0中规定最大长度为247个字符。建议不超过8个字符。4、标识符命名的良好习惯见名知意。,例如,name(姓名)、age(年龄),114,下列标识符是否合法,为什么?suma1b2s_name123#ssa.b.c1a8bc,思考?,115,变量定义,数据类型变量名,变量名2;,习惯上,变量名用小写字母。常量名用大写字母。,116,1、程序中用到的变量必须“先定义(declare),后使用”。2、C语言的关键字不能用作变量名。3、C语言对英文字母的大小写敏感,即同一字母的大小写,被认为是两个不同的字符。,关于变量的几点说明,117,(一)整数类型(二)实数类型(三)字符类型(四)变量赋初值(五)不同类型数据间的转换,三、基本数据类型,118,整型数据在内存中是以二进制形式存放的,数值是以补码表示的。(参见教材P41),(一)整数类型存储方式,119,例如:求-10的补码表示(按16位存储)。,-10的原码,1000000000001010,除符号位外各位取反,1111111111110101,末位加1,1111111111110110,则得到-10的二进制补码的表示。,120,整数类型变量,分类及取值范围,121,122,类型类型说明符长度数的范围基本型int2字节-3276832767短整型short2字节-215215-1长整型long4字节-231231-1无符号整型unsigned2字节065535无符号短整型unsignedshort2字节065535无符号长整型unsignedlong4字节0(232-1),123,例如:整数13在内存中实际存放的情况:,124,思考?,13在内存中实际存放的情况?,125,表示方法,十进制:123,-456,0八进制:0123,-0456,十六进制:0 x123,-0 x456,以数字0开头,以0 x开头,整数类型常量,分类,基本整型(数据范围与int型一样)长整型(在数值后面加“L(l)”,数据范围与longint型一样)unsignedint如12345u,如123l,315L,类型匹配规则,一个整型常量,可以赋给能容纳下其值的整型变量,126,整数类型溢出举例(P44-例3.3),#includevoidmain()inta,b;a=32767;b=a+1;printf(%dn%d,a,b);,32767-32768,运行结果,127,计算机中数的表示及进制转换数码、基与权数码:表示数的符号基:数码的个数权:每一位所具有的值数制,128,各种进制之间的转换二进制、八进制、十六进制转换成十进制方法:按权相加,129,各种进制之间的转换(整数)二进制、八进制、十六进制转换成十进制方法:按权相加,十进制转换成二进制、八进制、十六进制原理:,方法:连续除以基,从低到高记录余数,直至商为0,130,二进制与八进制之间的转换二进制转换成八进制:从右向左,每3位一组(不足3位左补0),转换成八进制八进制转换成二进制:用3位二进制数代替每一位八进制数,例(1101001)2=(001,101,001)2=(151)8,例(246)8=(010,100,110)2=(10100110)2,00000011010201131004101511061117,131,二进制与十六进制之间的转换二进制转换成十六进制:从右向左,每4位一组(不足4位左补0),转换成十六进制十六进制转换成二进制:用4位二进制数代替每一位十六进制数,例(11010101111101)2=(0011,0101,0111,1101)2=(357D)16,例(4B9E)16=(0100,1011,1001,1110)2=(100101110011110)2,000000001100102001130100401015011060111710008100191010A1011B1100C1101D1110E1111F,132,数值的表示方法原码、反码和补码原码:最高位为符号位,其余各位为数值本身的绝对值反码:正数:反码与原码相同负数:符号位为1,其余位对原码取反补码:正数:原码、反码、补码相同负数:最高位为1,其余位为原码取反,再对整个数加1,133,负数补码转换成十进制数:最高位不动,其余位取反加1,例补码:11111001取反:10000110加1:10000111=-7,134,表示方法,十进制小数形式:123.34,-0.0045,0.0指数形式:E(e)如0.23e2,-0.45e-3,3.0+5,规范化指数形式,数字和小数点组成,(二)实数类型常量,关于分类,实型常量不分float型和double型。一个实型常量,可以赋给一个实型变量(float型或double型)。,135,指数形式(数符+小数部分+指数部分),小数部分占的位数越多,数的有效数字越多,精度越高.指数部分占的位数越多,表示的数值范围越大.,实数类型存储方式,实型数据在内存中是按指数形式存储的。(P46),规范化指数形式,举例:3.14159在内存中的存放形式为:,136,分类及取值范围,实数类型变量,137,表示方法,用单引号括起来的一个字符.aA9=?,不同的两个字符,转义字符,(三)字符类型常量,语言还允许使用一种特殊形式的字符常量,就是以反斜杠开头的转义字符。,将后面的字符转换为另外的意义.即是一种控制符号.,138,举例,#includevoidmain()printf(abcbdnxyz);printf(rlmntopqn);,abdlmnopq,实际中,不会这样使用!,#includevoidmain()printf(x4fx4bx21n);/*等价于printf(OK!n);*/,!,结果:,结果:,139,程序的结果是什么?,思考:,#includevoidmain()printf(abctden);printf(110111x21n);,140,字符类型变量,存储方式,以ASCII码存储,占一个字节(参见教材P50),类型及范围,char大小写英文字母,数字,运算符,标点符号等,注意:字符型数据与整型数据在存储方式上的相似性使得两者之间可以通用。但字符型数据的表示范围是:0255。,举例,字符变量ch中存放字符a,其ASCII码为97,在内存中以二进制形式存放,其格式如下:,01100001,ch,141,142,例字符变量的字符形式输出和整数形式输出。#includevoidmain()charch1,ch2;ch1=a;ch2=b;printf(ch1=%c,ch2=%cn,ch1,ch2);printf(ch1=%d,ch2=%dn,ch1,ch2);,字符类型举例1,ch1=a,ch2=bch1=97,ch2=98,程序运行结果:,143,字符类型举例2,允许对字符数据进行算术运算,此时就是对它们的ASCII码值进行算术运算,例字符数据的算术运算(参考教材P364的ASCII码表)。#includevoidmain()charch1,ch2;ch1=a;ch2=B;/*字母的大小写转换*/printf(ch1=%c,ch2=%cn,ch1-32,ch2+32);/*用字符形式输出一个大于256的数值*/printf(ch1+200=%dn,ch1+200);printf(ch1+200=%cn,ch1+200);printf(ch1+256=%dn,ch1+256);printf(ch1+256=%cn,ch1+256);,ch1=A,ch2=bch1+200=297ch1+200=)ch1+256=353ch1+256=a,程序运行结果:,144,概念,字符串常量,用一对双引号括起来的若干字符序列,字符串长度,字符串中字符的个数。长度为0的字符串(即一个字符都没有的字符串)称为空串,表示为(一对紧连的双引号)。,存储方式,C语言规定:在存储字符串常量时,由系统在字符串的末尾自动加一个0作为字符串的结束标志。,145,思考?,1、字符串常量Howdoyoudo和Goodmorning的长度分别是多少?,2、字符串C:msdosv6.22和Isay:Goodbye!在C语言中的字符串常量形式如何表示?,3、字符串CHINA在内存中的实际存储形式是怎样的?占用多少个字节的内存空间?,14和13,C:msdosv6.22和Isay:Goodbye!,占用字节而非字节内存空间,146,注意:1、a是字符,a是字符串。2、不能把一个字符串赋给一个字符变量。如c=a、c=Hello!都是错误的。3、C语言中没有字符串变量,可以用字符数组来表示。,?,请看教材52页,147,总结:字符与字符串的区别有哪些?,定界符不同:字符常量使用单引号,而字符串常量使用双引号;长度不同:字符常量的长度固定为1,而字符串常量的长度,可以是0,也可以是某个整数;存储要求不同:字符常量存储的是字符的ASCII码值,而字符串常量,除了要存储有效的字符外,还要存储一个结束标志0。,148,方式:1、定义变量的同时赋初值(也叫变量初始化)。格式:数据类型变量名=初值,变量名2=初值2;2、通过一个赋值语句给变量赋初值。格式:变量名=初值;,(四)变量赋初值,出现在函数体的声明部分,出现在函数体的执行部分,inta,b=3;,inta,b;b=3;,149,1、定义变量时,给几个变量赋相同的初值,应写成:inta=3,b=3,c=3;不能写成:inta=b=c=3;2、给变量赋值时,正常情况下应给变量赋相同类型的数据。若给变量赋与其类型不同的数据时,需进行类型转换。,关于变量赋初值的几点说明,150,变量举例,includevoidmain()intstudent,age;intif=adrress=1;floatscore=90;stadent=2;Age=20.7;printf(%d%d%d%f,if,student,age,score);,本程序中有几处错误?,undeclaredidentifier,151,(五)不同类型数据间的转换,(1)隐式转换(自动转换)(2)显式转换(强制转换),152,(1)隐式转换(自动转换),转换发生条件,运算转换-不同类型数据混合运算时赋值转换-把一个值赋给与其类型不同的变量时输出转换-输出时转换成指定的输出格式函数调用转换-实参与形参类型不一致时转换,先转换、后运算,153,转换规则,详见教材54页,1、纵向向上的箭头表示不同类型的转换方向(由低类型转化为高类型),不表示转换所经的步骤。2、横向向左的箭头表示必须的转换。,隐式转换(自动转换),154,inti;floatf;doubled;longe;i=2;f=2.5;d=3.9;e=3;,10+a+i*f-d/e,int,double,double,double,double,思考:根据已知变量定义及赋值语句,计算以下表达式的值,并说明每一步所得结果的数据类型。,155,(2)显式转换(强制转换),一般形式,(要转换成的数据类型)(被转换的表达式),举例,floatx,y;x=2.3;y=4.5;(int)(x+y)/6(int)(int)x+y/6.5(double),说明,强制转换得到的是所需类型的中间变量,原变量或表达式的类型不变。,156,#includevoidmain()floatx;inti;x=3.6;i=(int)x;printf(x=%f,i=%d,x,i);,思考:以下程序的输出结果是什么?,x=3.600000,i=3,程序运行结果:,结论:较高类型向较低类型转换时可能发生精度损失问题,157,举例:已知三角形的边长a、b、c,求三角形周长的一半。,#includevoidmain()floata,b,c,s;a=3;b=4;c=5;s=1/2*(a+b+c);printf(s=%8.2f,s);,s=0.00,程序运行结果:,?,s=6.00,程序运行结果:,改为:1.0/2(1/2.0)或(float)1/2(1/(float)2),158,(一)C运算符简介(二)算术运算符和算术表达式(三)赋值运算符和赋值表达式(四)逗号运算符和逗号表达式,四、运算符与表达式,159,(一)、C运算符简介,详见55页!,160,(二)、算术运算符和算术表达式,基本算术运算符,+-*/%,说明,例:5/3=1-5/3=-1,模运算符或求余运算符,算术表达式,用算术运算符和括号将运算对象(也称操作数)连接起来的、符合C语法规则的式子。,优先级和结合性,先乘除、后加减,有括号先算括号。自左至右,常量、变量、函数等,说明,如果一个运算符两侧的数据类型不同,先自动进行类型转换,使二者具有同一类型,然后进行运算。,两个整数相除的结果为整数,舍去小数部分。当商为负数时,多采用“向零取整”的方法。,求余运算的两侧均应为整数例:5%3=2,例:a*b/c-1.5+a,161,自增、自减运算符,作用:自增运算符()使单个变量的值增1;自减运算符()使单个变量的值减1。,例,i=3;A)j=+i;j=i+;j=-i+;,i=i+1,i=i-1,?j,i,A)j=4i=4j=3i=4j=-3,格式:前置:+i,-i(在使用i之前,使i的值加(减)1)后置:i+,i-(在使用i之后,使i的值加(减)1),+和-结合方向是“自右至左”,162,例,i=3;A)c=(i+)+(i+);B)a=i+;b=i+;c=a+b;,?c,i,A)c=6i=5B)c=7i=5,两处i值都为3,例,?i,j,i=4j=4表达式的值:7,自左而右组合,例,i=3;printf(“%d,%d”,i,i+),?,4,3,函数参数自右至左求值,163,(1)自增、自减运算是语言特有的,常用于循环语句中,使循环控制变量加(或减),以及指针变量中,使指针指向下(或上)一个地址。(2)自增、自减运算符,不能用于常量和表达式。例如,5+、-(a+b)等都是非法的。(3)+和-的结合方向为自右至左。(P57)(4)如果对一个变量的自增自减运算,单独构成语句,而不是作为表达式的一部分时,前置和后置运算效果一样,都是使变量自加。如i+;和+i;是一样的,都是使i加。(5)在表达式中,连续使用同一变量进行自增或自减运算时,很容易出错,所以最好避免这种用法。,说明,164,(三)、赋值运算符和赋值表达式,赋值运算符,简单赋值运算符:=复合赋值运算符:+=,-=,*=,/=,%=,简单赋值运算符的一般形式为:变量=表达式它的作用是将一个表达式的值赋给一个变量。,复合赋值运算的一般格式为:变量双目运算符=表达式复合赋值运算符它等价于:变量=变量双目运算符(表达式)。只有当表达式简化为一个变量或一个常数时,两边的括号可以省略。,165,例1,floata;intb;a=1.2;b=a*3;,?b,b=3,例2,a+=3;x*=y+8,a=a+3;x=x*(y+8),例3,a=b=5;a=7+(b=8),?a,b,a=5;b=5a=15;b=8,自右而左的结合性,赋值表达式,格式:赋值表达式的值:被赋变量的值,类型转换,转换条件:当赋值运算符两侧的数据类型不一致时转换原则:转换为被赋值变量的类型。具体见P59。,166,(四)、逗号运算符和逗号表达式,逗号运算符,,,逗号表达式,表达式1,表达式2,表达式n,说明,1、逗号表达式的求解过程为自左至右,依次计算各表达式的值,最后一个表达式的值即为整个逗号表达式的值;2、逗号运算符的优先级最低。3、使用逗号表达式的目的通常是想分别得到各个表达式的值,而并非一定要得到整个表达式的值。4、常用于for循环语句中,除此以外很少使用。,167,例1,a=3a=(3*5,a*4),?a,a=12,例2,a=3a=3*5,a*4,?a,a=15表达式的值为60,例3,(a=3*5,a*4),a+5,?a,a=15表达式的值为20,168,作业,P67:3.9,3.10,3.12,第五章选择结构程序设计,1.关系运算符和关系表达式2.逻辑运算符和逻辑表达式3.If语句4.条件运算符和条件表达式5.Switch语句6.程序举例,1.关系运算符和表达式关系运算符种类:=!=结合方向:自左向右优先级别:,例ca+b/c(a+b)ab!=c/(ab)!=ca=bc/a=(bc),关系表达式的值:是逻辑值“真”或“假”,用1和0表示关系运算符的优先级低于算术运算符关系运算符的优先级高于赋值运算符,例inta=3,b=2,c=1,d,f;ab(ab)=cb+cbf=abc,/表达式值1,/表达式值1,/表达式值0,/d=1,/f=0,关系运算注意:,例若a=0;b=0.5;x=0.3;则a78在C中是允许的,值为,0,例inti=1,j=7,a;a=i+(j%4!=0);则a=,2,例a0结果为A100结果为,1,0,关系运算注意:,例注意区分“=”与“=”inta=0,b=1;if(a=b)printf(“aequaltob”);elseprintf(“anotequaltob”);,例应避免对实数作相等或不等的判断如1.0/3.0*3.0=1.0可改写为:fabs(1.0/3.0*3.0-1.0)ya=b|x=y!a|ab,优先级:,结合方向:,/(ay)max=x;elsemax=y;,形式三:格式:,if(expr1)statement1elseif(expr2)statement2elseif(expr3)statement3.elsestatementn,执行过程:,例:if(salary1000)index=0.4;elseif(salary800)index=0.3;elseif(salary600)index=0.2;elseif(salary400)index=0.1;elseindex=0;,如:if(a=b,说明:if后面的表达式类型任意,语句可以是复合语句if(x)if(x!=0)if(!x)if(x=0),例考虑下面程序的输出结果:#includevoidmain()intx,y;scanf(“%d,%d”,CompileError!,#includevoidmain()intx,y;printf(Enteraninteger:);scanf(%d,例求一个数的绝对值,运行:Enteraninteger:-12integer:-12-absolutevalue:12,#includevoidmain()inta,b;printf(Enterintegera:);scanf(%d,例输入两个数并判断两数相等否,运行:Enterintegera:12Enterintegerb:12a=b,运行:Enterintegera:12Enterintegerb:9a!=b,#includevoidmain()charc;printf(Enteracharacter:);c=getchar();if(c=0,例判断输入字符种类,运行:Enterachara

温馨提示

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

评论

0/150

提交评论