C语言程序设计配套课件_第1页
C语言程序设计配套课件_第2页
C语言程序设计配套课件_第3页
C语言程序设计配套课件_第4页
C语言程序设计配套课件_第5页
已阅读5页,还剩323页未读 继续免费阅读

下载本文档

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

文档简介

C语言程序设计教程第1章程序设计基本概念第2章数据类型、运算符与表达式第3章顺序结构程序设计第4章选择结构程序设计第5章循环控制第6章数组第7章函数第8章指针第9章结构体与共用体第10章编译预处理与位运算第11章文件C语言程序设计教程第1章程序设计基本概念1第1章程序设计基本概念1.1程序和程序设计

1.2算法

1.3简单的C程序

1.4TurboC程序设计环境的上机步骤

返回第1章程序设计基本概念返回21.1.1程序1.1.2程序设计返回1.1程序和程序设计1.1.1程序返回1.1程序和程序设计31.1.1程序要使计算机能完成人们预定的工作,就必须把完成工作的具体步骤编写成计算机能执行的一条条指令,在计算机执行这个指令序列后,就能完成人们预定的功能,这样的指令序列就是程序。一个计算机程序应对所要解决的问题的每个对象和处理规则给出正确详尽的描述。对象的描述是问题所涉及的数据结构的内容,数据结构包含两个方面的内容:问题所包含的数据对象和数据对象之间的关系;而处理规则是解决问题的算法,算法集中反映计算机的执行过程。针对问题所处理的对象,设计合理的数据结构可有效地简化算法,算法和数据结构是程序的两个重要方面。一个计算机程序有以下共同的性质:目的性:程序有明确的目的,程序运行时能正确完成赋予它的功能。分步性:程序为完成其复杂的功能,由一系列计算机可执行的步骤组成。有序性:程序的执行步骤是有序的,不可随意改变程序步骤的执行顺序。有限性:程序是有限的指令序列,程序所包含的步骤是有限的。操作性:有意义的程序总是对某些对象进行操作,完成其有意义的功能。返回1.1.1程序要使计算机能完成人们预定的工作,就必须4程序设计就是根据计算机要完成的任务,提出需求,设计数据结构和算法,编制程序和调试程序,使计算机程序能正确完成所设定的任务。简单地说,程序设计是设计和编制程序的过程。简单的程序设计一般包含以下几个部分。1、确定数据结构。根据任务书提出的要求、指定输入数据和输出的结果,确定存放数据的数据结构。2、确定算法。针对存放数据的数据结构来确定解决问题、完成任务的一步一步的步骤。3、编码。根据确定的数据结构和算法,使用选定的计算机语言编写程序代码,输入到计算机并保存在磁盘上,简称编程。4、在计算机上调试程序。消除由于疏忽而引起的语法错误或逻辑错误;用各种可能的输入数据对程序进行测试,使之对各种合理的数据都能得到正确的结果,对不合理的数据能进行适当的处理。5、整理并写出文档资料。一个好的程序应满足准确性、可靠性、易读性、可维护性等要求,要成为一名合格的程序设计者,就要熟练掌握几种程序设计语言,学会使用结构化的控制结构来设计算法和程序,能灵活运用程序设计的方法和技巧。要达到这个目标,必须进行大量的程序设计的实践,多阅读、多设计程序,学习有关计算机知识,通过实践和学习,不断总结经验,提高程序设计能力。1.1.2程序设计

返回程序设计就是根据计算机要完成的任务,提出需求,设计数据结构和51.什么是算法算法是指为解决某个特定问题而采取的确定且有限的步骤。一个算法有多个输入量,它是由问题给出的初始数据,经过算法的实现(一系列操作),它有一个或多个输出量,即问题的解答。2.算法的特性一个算法具有如下的特性:有穷性。一个算法应包含有限个操作步骤。也就是说,在执行若干个操作步骤之后,算法将结束,而且每一步都在合理的时间内完成。确定性。算法中每一条指令必须有确切的含义,不能有二义性,对于相同的输入必能得出相同的执行结果。可行性。算法中指定的操作,都可以通过已经实现的基本运算执行有限次后实现。有零个或多个输入。在计算机上实现的算法,是用来处理数据对象的,在大多数情况下这些数据对象需要通过输入来得到。有一个或多个输出。算法的目的是为了求“解”,这些“解”只有通过输出才能得到。1.2算法

返回1.什么是算法1.2算法

返回61.3.1简单的C程序举例1.3.2书写程序时应遵循的规则

1.3.3注释符的用法

1.3简单的C程序返回1.3简单的C程序返回71.3.1简单的C程序举例【例1-1】在屏幕上显示当“a=7,b=8”时,a+b的计算结果。#include<stdio.h>/*标准输入输出头文件*/voidmain(){inta,b,sum;/*定义变量*/a=7;b=8;/*给变量赋值*/sum=a+b;printf(“a+b=7+8=%d\n”,sum);}

程序分析:由上面的C语言代码中可以看出:所有的C语言程序都必须包含一个函数main(),表示主函数;函数main()后面由一对花括号“{}”括起来的部分为程序的主体,程序从函数main()的第一个可执行语句开始执行。程序中第3行是计算a与b的和并赋值给变量sum;第4行是输出语句,在屏幕上显示“a+b=7+8=15”这一行信息。/*……*/表示注释部分(也可用//……),用于对程序进行说明,增强代码的可读性,但对编译和运行不起作用。注释可以放在程序的任何地方,一条语句的注释可以是多行,但不可插入到关键字或标志符的中间,否则会引起程序编译错误,因为此时关键字或标志符会被当作不可识别的错误字符串。printf()是C语言中标准库函数的输出函数,其功能是输出双引号内的字符串,而“\n”是换行控制符,即输出完毕后自动换行。由于printf()是C语言中的库函数,所以在程序的开始必须引用库函数的接口说明文件stdio.h,此文件中包含函数printf()的原型说明。不仅仅是函数printf(),任何函数在使用时,必须指出其函数名,形参个数、类型和函数的返回类型。这样可以大大提高程序的可靠性,也更加方便调试和维护程序代码。主函数前的关键字void表示该函数不返回任何结果,缺省时表示返回整型变量值。返回1.3.1简单的C程序举例【例1-1】在屏幕上显示当“a=8通过上例可以看到,C语言程序具有以下的特点:程序一般使用小写字母书写;分号是C语句的必要组成部分,每个语句的结尾必须使用“;”作终结符,表示语句的结束;C语言程序由函数组成,可以有多个用户的自定义函数,但有且仅有一个主函数;一个函数由两部分构成:(1)函数的说明部分,包括:函数名、函数类型(返回值类型)、函数属性(前面的例子中未使用函数的属性。属性包括near和far)、形式参数名、形式参数类型。(2)函数体,大括号{}中的部分。函数体中包含变量定义部分和执行部分。例:int max(x,y)int x,y;{

} 一个C程序总是从main()函数开始执行的,main()函数可以放在程序最前、最后、或在一些函数之前、在另一些函数之后。C程序书写格式自由,一行内可以写几个语句,一个语句可以分写在多行上。注释部分用/*……*/与代码部分隔开,并不参与代码的编译。1.3.2书写程序时应遵循的规则

返回1.3.2书写程序时应遵循的规则返回9注释符是用来标识注释或提示信息的。程序中的注释不被编译也不被执行,其用途在于增加程序的可读性,起到说明或备忘的作用。C语言的注释符是以/*开头,并以*/结尾。在/*和*/之间的信息为注释信息。注释符可以出现在程序中任意行的位置,既可在程序头,也可在程序尾,还可在程序中间的任意行。有时注释行写在一条语句的后边,甚至在中间也可以。注释信息可以占一行也可以占多行。下面的注释符的用法都是正确的:/*astring*//***求m的n次方***//*countblanks,digits,letters,newlines,andothers*/1.3.3注释符的用法

返回1.3.3注释符的用法返回101.4.1C程序的调试步骤1.4.2上机步骤介绍1.4TurboC程序设计环境的上机步骤

返回1.4TurboC程序设计环境的上机步骤

返回111.4.1C程序的调试步骤

计算机并不能直接执行用高级语言编写的程序。计算机要执行高级语言源程序,必须先用一种称为“编译程序”的软件,把源程序翻译成二进制形式的“目标程序”,然后将该目标程序与系统的函数库和其他目标程序连接起来,形成可执行的目标程序。要完成一个C程序的调试,必须经过编辑源程序、编译源程序、连接目标程序和运行可执行程序四个步骤。C语言的源程序是符合C语言语法的程序文本文件,扩展名为.c。许多文本编辑器都可以用来编辑源程序,例如记事本、WORD以及DOS的Edit等。编辑完成以后是编译,编译程序的任务是对源程序进行语法和语义分析和检查,若源程序的语法和语义都是正确的,才能生成目标程序,否则,应该重新回到编辑阶段修改源程序。目标程序的文件名与源程序的文件名相同,扩展名是.obj编译成功以后,将目标程序与系统的函数库和其他目标程序连接起来,形成可执行的目标程序。可执行的目标程序文件名不变,扩展名是.exe。如果执行程序达不到预期的结果,我们必须重复“编辑、编译、连接、运行”这四个步骤。返回1.4.1C程序的调试步骤

12

1.4.2上机步骤介绍

TurboC2.0是DOS环境下的调试程序,因此首先要进入DOS命令行环境,然后进入到TurboC编译程序所在的子目录(例如TC子目录),下面就介绍进入Tc操作的步骤。(1)设TurboC安装在C盘上,键入以下命令:C:\>TC回车后,即可启动TurboC。在屏幕上出现如图所示的画面。从图可以看到在集成环境的上部,有一行“主菜单”,其中包括下面8个菜单项:FileEditRunCompileProjectOptionDebugBreak/watch分别代表:文件操作、编辑、运行、编译、项目文件、选项、调试、中断/观察等功能。用户可通过以上菜单项来选择使用TurboC集成环境所提供的各项主要功能。

1.4.2上机步骤介绍TurboC2.13(2)编辑源程序。在File菜单下选择NEW子菜单项命令,系统的光标处于等待输入C源程序状态。输入完源程序后,选择File菜单下选择Save子菜单项命令进行保存,在随后弹出的保存文件对话框中,输入文件名*.c后按“↙”(3)编译源程序选择Compile主菜单项并在其下拉子菜单中选择CompiletoOBJ命令,则进行编译。若源程序无语错误,生成可执行文件EXE;若源程序有语法错误,在Message窗口显示错误信息,此时没有生成可执行文件,应回到第2步,修改程序的错误,直到无语法错误、生成可执行文件。(4)连接程序在Compile菜单中,选择Link子菜单项命令,程序将被连接成可执行程序。注:按F9键,可一次完成编译和连接。(5)执行程序。选择Run子菜单命令,或按快捷键Ctrl+F9。程序运行后必须按快捷键Alt+F5,才能看到运行的结果。如程序未得到预期的结果,应回到第2步,修改程序的错误。(6)退出TurboC,按Alt+X。返回返回14第2章

数据类型、运算符与表达式2.1C语言的字符集和词汇装2.2常量与变量2.3C语言的数据类型

2.4运算符与表达式返回第2章

数据类型、运算符与表达式2.1C语152.1C语言的字符集和词汇装2.1.1C语言字符集2.1.2C语言词汇返回2.1C语言的字符集和词汇装返回162.1.1C语言字符集

字符是组成语言的最基本的元素。C语言字符集是由字母,数字,空格,标点和特殊字符组成。在字符常量,字符串常量和注释中还可以使用汉字或其它可表示的图形符号。1.字母:小写字母a~z共26个,大写字母A~Z共26个2.数字:0~9共10个3.空白符:空格符、制表符、换行符等统称为空白符。空白符只在字符常量和字符串常量中起作用。在其它地方出现时,只起间隔作用,编译程序会对它们忽略。因此在程序中使用空白符与否,对程序的编译不发生影响,但在程序中适当的地方使用空白符将增加程序的清晰性和可读性。4.标点和特殊字符返回2.1.1C语言字符集

172.1.2C语言词汇

在C语言中使用的词汇分为标识符、关键字、运算符、分隔符、常量、注释符等。1.标识符在程序中使用的变量名、函数名、标号等统称为标识符。除库函数的函数名由系统定义外,其余都由用户自定义。C语言规定,标识符只能是字母(A~Z,a~z)、数字(0~9)、下划线(_)组成的字符串,并且其第一个字符必须是字母或下划线。以下标识符是合法的:a,x,3x,BOOK1,sum5以下标识符是非法的:3s以数字开头,s*T出现非法字符*,-3x以减号开头◆标准C不限制标识符的长度,但它受各种版本的C语言编译系统限制,同时也受到具体机器的限制。例如在某版本C中规定标识符前八位有效,当两个标识符前八位相同时,则被认为是同一个标识符。◆在标识符中,大小写是有区别的。例如BOOK和book是两个不同的标识符。◆标识符虽然可由程序员随意定义,但标识符是用于标识某个量的符号。因此,命名应尽量有相应的意义,以便阅读理解,作到“顾名思义”。

2.关键字关键字是由C语言规定的具有特定意义的字符串,通常也称为保留字。用户定义的标识符不应与关键字相同。C语言的关键字分为以下几类:(1)类型说明符用于定义、说明变量、函数或其它数据结构的类型。如int,double等。2.1.2C语言词汇

在C语言中使用的词汇分为标识符、关键18(2)语句定义符用于表示一个语句的功能。如ifelse就是条件语句的语句定义符。(3)预处理命令字用于表示一个预处理命令。如include。3.运算符C语言中含有相当丰富的运算符。运算符与变量、函数一起组成表达式,表示各种运算功能。运算符由一个或多个字符组成。4.分隔符在C语言中采用的分隔符有逗号和空格两种。逗号主要用在类型说明和函数参数表中,分隔各个变量。空格多用于语句各单词之间,作间隔符。在关键字、标识符之间必须要有一个以上的空格符作间隔,否则将会出现语法错误,例如把inta;写成inta;C编译器会把inta当成一个标识符处理,其结果必然出错。5.常量C语言中使用的常量可分为数字常量、字符常量、字符串常量、符号常量、转义字符等多种。6.注释符C语言的注释符是以“/*”开头并以“*/”结尾的串。在“/*”和“*/”之间的即为注释。程序编译时,不对注释作任何处理。注释可出现在程序中的任何位置。注释用来向用户提示或解释程序的意义。在调试程序中对暂不使用的语句也可用注释符括起来,使翻译跳过不作处理,待调试结束后再去掉注释符。返回(2)语句定义符返回192.2常量与变量

1.常量常量是指在程序运行过程中其值不能被改变的量。常量可分为不同的数据类型,如50、-100、0等为整型常量,’a’、’B’、’7’等为字符常量,5.78、27.63、-12.00等为实型常量。在C语言中,单引号与双引号所括起来的字符是两个完全不同的概念。’a’是一字符常量,而”a”是一字符串常量,需用字符型数组说明。字符型数组将在后面的章节中介绍。本节主要介绍符号常量在C语言中,经常使用#define命令加标识符来定义一个常量,即符号常量,一般出现在程序的首部,主要用来标志常量的具体含义,以便于阅读,也可用来表示需调整的常量,这样便于以后程序的修改。符号常量在使用之前必须先定义,其一般形式为:#define标识符常量其中#define是一条预处理命令,称为宏定义命令,其功能是把该标识符定义为其后的常量值。一经定义,以后在程序中所有出现该标识符的地方均代之以该常量值。习惯上符号常量的标识符用大写字母,变量标识符用小写字母,以示区别。注意:用define进行定义时,必须用#号作为一行的开头,在#define命令行的最后不得加分号。2.2常量与变量

1.常量20【例2-1】求圆的面积程序分析:本程序在主函数之前由宏定义命令定义PI为3.14159,在程序中即以该值代替PI。s=PI*r*r等效于s=3.14159*r*r。应该注意的是,符号常量不是变量,它所代表的值在整个作用域内不能再改变。也就是说,在程序中,不能再用赋值语句对它重新赋值。#definePI3.14159main(){floats,r;r=5;s=PI*r*r;printf("s=%f\n",s);}程序运行结果:s=78.539749程序分析:本程序在主函数之前由宏定义命令定义PI为3.14159,在程序中即以该值代替PI。s=PI*r*r等效于s=3.14159*r*r。应该注意的是,符号常量不是变量,它所代表的值在整个作用域内不能再改变。也就是说,在程序中,不能再用赋值语句对它重新赋值。C语言程序设计配套课件212.变量变量是指在程序运行过程中,其值可被改变的量。一个变量应该有一个名字即变量名。变量名由字母、数字和下划线3种字符组成,且第一个字符必须为字母或下划线,不允许使用C语言的保留字。C语言中区分大小写字母,例如b和B表示两个不同的变量名。变量根据其数据类型占据一定的存储单元,用于存放该变量的值。例如:程序中的变量a,就是指用a命名的某个存储单元,用户对变量a进行的操作就是对该存储单元进行的操作;给变量a赋值,实质上就是把数据存入该变量所代表的内存单元中。C语言规定,程序中所要用到的变量应该先定义后使用。通常,对变量的定义放在函数的开头部分,但也可以放在函数的外部或复合语句的开头。返回2.变量返回222.3C语言的数据类型

2.3.1整型数据2.3.2实型数据2.3.3字符型数据返回2.3C语言的数据类型返回232.3.1整型数据

整型数据包括整型常量、整型变量。1.整型常量整型常量即整常数。C语言中整型常数可用以下三种形式表示:(1)十进制整数十进制整常数没有前缀。其数码为0~9。以下各数是合法的十进制整常数:237-568655351627以下各数不是合法的十进制整常数:023(不能有前导0)23D(含有非十进制数码)(2)八进制整数用数字0开头(注意:不是字母o)的数是八进制数。数码取值为0~7。八进制数通常是无符号数。以下各数是合法的八进制数:015(十进制为13)0101(十进制为65)0177777(十进制为65535)以下各数不是合法的八进制数:256(无前缀0)03A2(包含了非八进制数码)-0127(出现了负号)(3)十六进制整数用数字0和字母x(或大写字母X)开头。其数码取值为0~9,A~F或a~f。以下各数是合法的十六进制整常数:0X2A(十进制为42)0XA0(十进制为160)0XFFFF(十进制为65535)以下各数不是合法的十六进制整常数:5A(无前缀0X)0X3H(含有非十六进制数码)2.3.1整型数据

整型数据包括整型常量、整型变量。242整型变量(1)整型变量的分类整型变量可分为:基本整型(int)、短整型(shortint)、长整型(longint)和无符号型(unsigned)四种。1)基本整型:类型说明符为int,在内存中占2个字节,其取值为基本整常数。2)短整型:类型说明符为shortint。所占字节和取值范围均与基本型相同。3)长整型:类型说明符为longint或long,在内存中占4个字节,其取值为长整型常数。4)无符号型:类型说明符为unsigned。无符号型又可与上述三种类型匹配而构成:无符号基本型类型说明符为unsignedint或unsigned。无符号短整型类型说明符为unsignedshort无符号长整型类型说明符为unsignedlong各种无符号类型量所占的内存空间字节数与相应的有符号类型量相同。但由于省去了符号位,故不能表示负数。(2)整型变量的说明变量说明的一般形式为:类型说明符变量名标识符1,变量名标识符2,…;例如:inta,b,c;(a,b,c为整型变量)longx,y;(x,y为长整型变量)unsignedp,q;(p,q为无符号整型变量)2整型变量25【例2-2】整数应用实例。main(){inta,b,c,d;/*指定变量a、b、c、d为整型*/

unsignedu;/*指定变量u为无符号整型*/

a=12;b=-24;u=10;

c=a+u;d=b+u;

printf("a+u=%d,b+u=%d\n",c,d);}

程序运行结果:a+u=22,b+u=-14【例2-2】整数应用实例。26(3)整型数据在内存中的字节分配各种无符号类型量所占的内存空间字节数与相应的有符号类型量相同。但由于省去了符号位,故不能表示负数。(4)整数在内存中的存储形式计算机中,内存储器的最小存储单位称为“位(bite)”,每一个位中或者存放0,或者存放1,因此称为二进制位。大多数计算机把8个二进制位组成一个“字节(byte)”,并给每个字节分配一个地址。若干字节组成一个“字(word)”,用一个字来存放一条机器指令或一个数据。一个字含多少个字节随机器而不同。如果一台计算机系统以两个字节(16个二进制位)来存放一条机器指令,就称这台计算机的字长为16位;例如,16位微机,就是指以16位二进制位作为一个字的微型计算机。一个字节一般有8个二进制位,本书中把最右边的一位称为最低位,把最左边的一位称为最高位。在C语言中,一个int整数通常用两个字节存放;其中最高位(最左边的一位)用来存放整数的符号,若是正整数,最高位放置0,若是负整数,最高位放置1。因此,从最高位就立刻能判别出存放的一个整数是正整数还是负整数。返回(3)整型数据在内存中的字节分配返回272.3.2实型数据

1.实型常量实型也称为浮点型。实型常量也称为实数或者浮点数。在C语言中,实数只采用十进制,实型常量有二种表示形式:十进制数形式和指数形式。(1)十进制数形式(小数形式)由数字0~9和小数点组成(注意:必须要有小数点)。例如:0.0,.25,5.789,0.13,5.0,300.,267.8230等都是合法的实数。(2)指数形式由十进制数,加阶码标志“e”或“E”以及阶码(只能为整数,可以带符号)组成。类似数学中的指数形式。在C语言中,则以“e”或“E”后跟一个整数来表示以10为底的幂数。其一般形式为aEn(a为十进制数,n为十进制整数,E可为E或e)其值为a*10n如:形式为2.3058的数可以表示为0.23058E1、2.3058e0、23.058e-1。2.1E5(等于2.1*105),3.7E-2(等于3.7*10-2),0.5E7(等于0.5*107),-2.8E-2(等于-2.8*10-2)。以下是不合法的实数:345(无小数点),E7(阶码标志E之前无数字),-5(无阶码标志),53.-E3(负号位置不对),2.7E(无阶码)说明:

C语言的语法规定,字母e(或E)之前必须要有数字,且e或E后面的指数必须为整数。如果写成e4、.5e4.2、.e2、e等都是不合法的指数形式。注意,在字母e(或E)的前后以及数字之间不得插入空格。标准C允许浮点数使用后缀。后缀为“f”或“F”即表示该数为浮点数。如356f和356是等价的。

2.3.2实型数据

1.实型常量282.实型变量

C语言中实型变量分为单精度型和双精度型两类,分别用类型float和double进行定义。单精度型变量定义的形式如下:floata,b,c;(a,b,c为单精度实型变量)双精度型变量定义的形式如下:doublex,y,z;(x,y,z为双精度实型变量)在TurboC中单精度型占4个字节(32位)内存空间,其数值范围在-3.4E-38~3.4E+38,只能提供七位有效数字。双精度型占8个字节(64位)内存空间,其数值范围为1.7E-308~1.7E+308,可提供16位有效数字。因此double型变量中存放的数据要比float型变量中存放的数据要精确得多。实型常数不分单、双精度,都按双精度double型处理。实型的变量只能存放实型数;不能用整型变量存放一个实数,也不能用实型变量存放一个整数。技巧:在内存中,实数一律是以指数形式存放的。在计算机内存中可以精确地存放一个整数,不会出现误差,但整型数值的存放范围较小;使用实型数的范围大,但往往存在误差。返回2.实型变量返回292.3.3字符型数据

1.字符常量(1)字符常量字符常量是用单引号括起来的一个字符。例如'a','b','=','+','?'都是合法字符常量。’a’与a应该区别开,’a’是字符常量,a是变量。一个字符常量代表ASCII字符集中的一个字符。在C语言中,字符常量有以下特点:1)字符常量只能用单引号括起来,不能用双引号或其它括号。例如:”a”不是字符常量,而是一个字符串。2)字符常量只能是单个字符,不能是字符串。‘def’是非法的,不是字符常量。3)字符可以是字符集中任意字符。但数字被定义为字符型之后就不能参与数值运算。如'5'和5是不同的。'5'是字符常量,不能参与运算。4)单引号中的大写字母和小写字母代表不同的字符常量,例如:’B’和’b’是不同的字符常量。5)单引号中的空格符’凵’(用凵来代表一个空格)也是一个字符常量。但不能写成’’(两个连续的单引号)。字符常量在内存中占一个字节,存放的是字符的ASCII代码值。C语言规定,所有字符常量都作为整型量来处理,在计算机内部,其对应的整数值就是ASCII字符集中该字符的序号,即ASCII代码值。2.3.3字符型数据

1.字符常量30(2)转义字符常量转义字符又称反斜线字符,这些字符常量总是以一个反斜线开头后跟一个特定的字符,用来代表某一个特定的ASCII字符,这些字符常量也必须括在一对单引号内。转义字符具有特定的含义,不同于字符原有的意义,故称“转义”字符。转义字符主要用来表示那些用一般字符不便于表示的控制代码。说明:转义字符常量,如’\n’、’\101’、’\141’只代表一个字符。反斜线后的八进制数可以不用0开头。如:’\101’代表的就是字符常量’A’,’\141’代表字符常量’a’。即在一对单引号内,可以用反斜线后跟一个八进制数来表示一个ASCII字符。反斜线后的十六进制数只可由小写字母x开头,不允许用大写字母X,也不能用0x开头。如:’\x41’代表字符常量’A’,’\x6d’(也可写成’\x6D’)代表字符常量’m’。在一对单引号内,也可以用反斜线后跟一个十六进制数来表示一个ASCII字符。

(2)转义字符常量31(3)字符串常量字符串常量是由一对双引号括起来的一串字符。例如:”china”,”a”,"Cprogram","$12.5"都是合法的字符串常量,在printf和scanf中的”%d%d”也是字符串常量。在C语言中,系统在每个字符串的最后自动加入一个字符’\0’作为字符串的结束标志。字符常量和字符串常量的区别:1)字符常量由单引号括起来,字符串常量由双引号括起来。2)字符常量只能是单个字符,字符串常量则可以含一个或多个字符。3)可以把一个字符常量赋予一个字符变量,但不能把一个字符串常量赋予一个字符变量。在C语言中没有相应的字符串变量。4)字符常量在内存中只占一个字节,字符串常量占内存字节数等于字符串中字节数加1(增加的一个字节存放字符’\0’(ASCII码为0),这是字符串的结束标志)。例如:’\101’、’z’在内存中只占一个字节;字符串"Cprogram"在内存中所占的字节为:Cprogram\0。”abc\n”在内存中占五个字节,”z”占两个字节。两个连续的双引号:””也是一个字符串常量,称作“空串“。空串占一个字节的空间存放’\0’。(3)字符串常量322.字符变量C语言中,字符变量用关键字char进行定义;在定义的同时可以赋初值。格式:char字符串变量名表例如:charc1=‘*’,c2=‘7’,c3;说明:字符变量在内存中占一个字节,可以存放ASCII字符集中的任何字符。当把字符放入字符变量中时,字符变量中的值就是该字符的ASCII代码值。所以字符变量可以作为整型变量来处理,可以参与对整型变量所允许的任何运算。例如:x的十进制ASCII码是120,y的十进制ASCII码是121。对字符变量a,b赋予'x'和'y'值:a='x';b='y';实际上是在a,b两个单元内存放120和121的二进制代码:a:01111000b:01111001所以也可以把它们看成是整型变量。C语言允许对整型变量赋以字符值,也允许对字符变量赋以整型值。在输出时,允许把字符变量按整型变量输出,也允许把整型变量按字符变量输出。整型变量为二字节量,字符变量为单字节量,当整型变量按字符变量处理时,只有低八位字节参与处理。2.字符变量33【例2-5】字符的输出。main(){chara,b,c,d;a=120;b=121;c=’x’;d=’y’;c=c-32;d=d-32;printf("%c,%c\n%d,%d\n",a,b,a,b);printf("%c,%c\n%c,%c\n",c,d,c,d);}程序运行结果为:x,y120,121x,yx,y程序分析:本程序中说明a,b为字符变量,但在赋值语句中赋以整型值。从结果看,a,b值的输出形式取决于printf函数格式串中的格式符,当格式符为"c"时,对应输出的变量值为字符,当格式符为"d"时,对应输出的变量值为整数。返回返回342.4运算符与表达式2.4.1算术运算符与表达式2.4.2强制类型转换表达式2.4.3赋值运算符与表达式2.4.4自加、自减运算符与表达式2.4.5逗号运算符与表达式2.4.6运算符的优先级、结合性2.4运算符与表达式2.4.1算术运算符与表达式352.4.1算术运算符与表达式

1.算术运算符用于各类数值运算符主要有:+加法运算符:为双目运算符,即应有两个量参与加法运算;或作为正值运算符。如3+5、+3。-减法运算符:为双目运算符,如7-5;但“-”也可作负值运算符,此时为单目运算,如-x,-5。*乘法运算符:为双目运算符。如7*8。/除法运算符:为双目运算符。参与运算量均为整型时,结果也为整型,舍去小数。如果运算量中有一个是实型,则结果为双精度实型。【例2-6】算术运算符的应用实例。main(){printf("\n\n%d,%d\n",20/7,-20/7);printf("%f,%f\n",20.0/7,-20.0/7);}程序运行结果为:2,-22.857143,-2.8571432.算术表达式算术表达式是用算术运算符和一对圆括号将运算量(或称操作数)连接起来的、符合C语法的表达式。返回2.4.1算术运算符与表达式

1.算术运算符返回362.4.2强制类型转换表达式

强制类型转换表达式的形式如下:(类型说明符)(表达式)其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。这种转换是根据人为要求而进行的。例如,表达式(int)5.328把5.328转换成整数5;表达式(double)(10%3)所得结果把10%3所得结果1转换成双精度数1.0。在使用强制转换时应注意以下问题:1.类型说明符和表达式都必须加括号(单个变量可以不加括号),如把(int)(x+y)写成(int)x+y则成了把x转换成int型之后再与y相加了。2.无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的数据长度进行的临时性转换,而不改变数据说明时对该变量定义的类型。返回2.4.2强制类型转换表达式

强制类型转换表达式的形式如下372.4.3赋值运算符与表达式

1.简单的赋值运算符和赋值表达式简单赋值运算符记为“=”。由“=”连接的式子称为赋值表达式。其一般形式为:变量=表达式例如:x=a+bw=sin(a)+sin(b)y=i+++--j赋值表达式的功能是计算表达式的值再赋予左边的变量。赋值运算符具有右结合性。2.复合赋值运算符与表达式在赋值运算符“=”之前加上其它二目运算符可以构成复合赋值运算符。C语言规定可以使用10种复合赋值运算符,其中与算术运算有关的复合运算符是:+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=。(注意:两个符号之间不可以有空格)。构成复合赋值表达式的一般形式为:变量双目运算符=表达式它等效于变量=变量运算符表达式3.赋值运算中的类型转换在赋值运算中,只有在赋值号右侧表达式的类型与左侧变量类型完全一致时,赋值操作才能进行。如果赋值运算符两边的数据类型不一致,系统将自动进行类型转换,即把赋值号右边的类型换成左边的类型。返回2.4.3赋值运算符与表达式

1.简单的赋值运算符和赋值表达382.4.4自加、自减运算符与表达式

自加运算符“++”:其功能是使运算对象的值增1,如i++,相当于i=i+1;自减运算符“––”,其功能是使运算对象的值减1,如i––,相当于i=i–1。因此,自加或自减运算本身也是一种赋值运算。++、––运算符是单目运算符,运算对象可以是整型变量也可以是实型变量,不能是常量或表达式,因为不能给常量或表达式赋值;因此,如++3、(i+j)––等都是不合法的。自加、自减运算符既可做为前缀运算符,也可做为后缀运算符而构成一个表达式,如++i、––i、i++、i––等都是合法的表达式。假定x是一个可以在赋值号左边出现的C语言表达式,那么表达式++x使x的值增1,再用x的值作为表达式的值;x++用x的值作为表达式的值,然后使x的值增1;––x使x的值减1,再用x的值作为表达式的值;x––用x的值作为表达式的值,然后使x的值减1;返回2.4.4自加、自减运算符与表达式

自加运算符“++”:其功392.4.5逗号运算符与表达式

“,”是C语言提供的一种特殊运算符,称为逗号运算符,用逗号表达式连接起来的式子称为逗号表达式。逗号表达式的一般形式为:表达式1,表达式2,…,表达式n程序分析本例表明y等于整个逗号表达式的值,也就是表达式2的值,x是第一个表达式的值。【例2-10】逗号运算符应用实例。main(){inta=2,b=4,c=6,x,y;x=a+b,y=b+c;printf("y=%d,x=%d",y,x);}y=10,x=6

程序分析:本例表明y等于整个逗号表达式的值,也就是表达式2的值,x是第一个表达式的值。返回2.4.5逗号运算符与表达式

“,”是C语言提供的一种特殊运402.4.6运算符的优先级、结合性

C语言中,运算符的运算优先级共分为15级。1级最高,15级最低。在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符优先级相同时,则按运算符的结合性所规定的结合方向处理。C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。在课本中都会一一给大家讲到。返回2.4.6运算符的优先级、结合性C语言中,运算符的运41第3章顺序结构程序设计3.1结构化程序设计3.2赋值语句、复合语句和空语句3.3数据输出3.4数据输入3.5程序实例返回第3章顺序结构程序设计返回423.1结构化程序设计在结构化的程序设计中,程序由三种基本结构组成。它们分别是顺序结构,选择结构和循环结构。由三种基本结构组成的程序可以称为结构化程序。1.顺序结构赋值语句,输入、输出语句都可构成顺序结构。当执行由这些语句构成的程序时,将按这些语句在程序中的先后顺序逐条执行,没有分支,没有转移。2.选择结构if语句、switch语句都可构成选择结构。当执行到这些语句时,将根据不同的条件去执行不同分支中的语句。3.循环结构多种循环语句,将根据各自的条件,使同一组语句重复执行多次或一次也不执行。返回3.1结构化程序设计在433.2赋值语句、复合语句和空语句

3.2.1赋值语句3.2.2复合语句和空语句

返回3.2赋值语句、复合语句和空语句

返回443.2.1赋值语句

赋值语句由赋值表达式加上一个分号构成。赋值运算有三种形式,则相应的赋值语句也有3种形式。1.简单赋值语句格式:变量=表达式;例:c=5;d=9;max=a>b?a:b;2.多重赋值语句格式:变量1=变量2=…=变量n=表达式例:a=b=c=d=e=5;按照赋值运算符的右接合性,因此实际上等效于:e=5;d=e;c=d;b=c;a=b;3.自反赋值语句格式:变量双目操作符=表达式;例:b%=b+1;在赋值语句的使用中需要注意以下几点:在变量说明中给变量赋初值和赋值语句的区别。给变量赋初值是变量说明的一部分,赋初值后的变量与其后的其它同类变量之间仍必须用逗号间隔,而赋值语句则必须用分号结尾。在变量说明中,不允许连续给多个变量赋初值。如下述说明是错误的:inta=b=c=5必须写为inta=5,b=5,c=5;而赋值语句允许连续赋值。注意赋值表达式和赋值语句的区别。赋值表达式是一种表达式,它可以出现在任何允许表达式出现的地方,而赋值语句则不能。下述语句是合法的:if((x=y+5)>0)z=x;语句的功能是:若表达式x=y+5大于0则z=x。而下述语句是非法的:if((x=y+5;)>0)z=x;因为x=y+5;是语句,不能出现在表达式中。按规定if后的()内的条件可以用赋值表达式,但不能用赋值语句。返回3.2.1赋值语句赋值语句由赋值表达式加上一个分号构成。返453.2.2复合语句和空语句

1.复合语句把多个语句用括号{}括起来组成的一个语句称复合语句。在程序中应把复合语句看成是单条语句,而不是多条语句。格式:{语句序列}【例3-1】复合语句应用{x=y+z;a=b+c;printf(“%d%d”,x,a);}是一条复合语句。【例3-2】复合语句嵌套应用{t=7;{m=3;n=9;}}也是一条复合语句。说明:(1)复合语句运行时,各子语句依次顺序执行。其中,子语句不仅可以为说明语句、表达式语句等简单语句,也可以为构造语句。(2)复合语句在语法上等价于一个简单的语句。(3)复合语句内的各条语句都必须以分号“;”结尾,在括号“}”外不能加分号。2.空语句只有分号“;”组成的语句称为空语句。空语句不执行任何运算。在程序中空语句可用来作空循环体。例如while(getchar()!='\n');本语句的功能是从键盘输入的字符不是回车则重新输入。这里的循环体为空语句。返回3.2.2复合语句和空语句

返回463.3数据输出

3.3.1putchar函数(字符输出函数)3.3.2printf()函数的调用3.3.3printf()函数格式说明3.3.4调用printf()函数注意事项返回3.3数据输出

返回473.3.1putchar函数(字符输出函数)

putchar函数的作用是向终端输出一个字符:例如:putchar(c);是输出字符变量c的值。c可以是字符型变量或整型变量。【例3-3】输出字符串。#include“stdio.h”main(){chara,b,c,d,e;a=’C’;b=’H’;c=’I’;d=’N’;e=’A’;putchar(a);putchar(b);putchar(c);putchar(d);putchar(e);}运行结果:CHINA也可以输出控制字符,如putchar(‘\n’)输出一个换行符。也可以输出其它转义字符,如:putchar(‘\101’)(输出字符’A’)putchar(‘\’’)(输出单引号字符’)注意:在使用标准I/O库函数时,要用预编译命令”#include“stdio.h””将”stdio.h”文件包括到用户源文件中。即stdio.h是standardinput&output的缩写,它包含了与标准I/O库有关的变量定义和宏定义。在需要使用标准I/O库中的函数时,应在程序前使用上述预编译命令,但在用printf和scanf函数时,则可以不要(只有printf和scanf例外)。返回3.3.1putchar函数(字符输出函数)putcha483.3.2printf()函数的调用

printf函数是C语言提供的标准输出函数,其关键字最末一个字母f即为“格式”(format)之意,它的作用是在终端设备(或系统隐含指定的输出设备)上按指定格式进行输出(putchar只能输出字符,而且只能是一个字符,而printf可以输出多个数据,且为任意类型)。printf函数的一般调用形式如下:printf(格式控制,输出项表)如果在printf函数调用之后加上“;”,就构成了输出语句。返回3.3.2printf()函数的调用

printf函数是493.3.3printf()函数格式说明

每个格式说明都必须用“%”开头,以一个格式字符作为结束,在此之间可以根据需要插入“宽度说明”、左对齐符号“-”、前导零符号“0”等。(1)d格式符:按十进制格式输出。(2)c格式符:以字符形式输出。(3)s格式符:以字符串格式输出。(4)f格式符:按实数格式输出。(5)e格式符:以指数形式输出实数。(6)u格式符:用于输出unsigned类型数据。(7)若要直接输出字符%,在格式控制中使用两个连续的%。(8)使输出的数字总是带有+号或-号。(9)在输出数据前加前导0。(10)在输出的八进制数前添加0,在输出的十六进制数前添加0x。可在%号和格式字符o和x之间插入一个#号(注意:#号对其它格式字符通常不起作用)。返回3.3.3printf()函数格式说明

每个格式说明都必503.3.4调用printf()函数注意事项

在调用printf函数进行输出时需要注意:在格式控制串中,格式说明与输出项从左到右在类型上必须一一对应匹配。如不匹配,将导致数据不能正确输出,这时,系统并不报错。特别要提醒读者的是:在输出long整型数据时,一定要使用%ld格式说明,如果遗漏了字母l,只用了%d,将输出错误的数据。在格式控制串中,格式说明与输出项的个数应该相同。如果格式说明的个数少于输出项的个数,多余的输出项不予输出;如果格式说明的个数多于输出项的个数,则对于多余的格式将输出不定值(或0值)。在格式控制串中,除了合法的格式说明外,可以包含任意的合法字符(包括转义字符),这些字符在输出时将“原样照印”。在输出语句中改变输出变量的值,如:i=5;printf(“%d%d\n”,i,++i);则不能保证先输出i的值,然后再求i++,并输出。printf函数的返回值通常是本次调用中输出字符的个数返回3.3.4调用printf()函数注意事项

在调用prin513.4数据输入

3.4.1getchar函数(字符输入函数)3.4.2scanf()函数的调用3.4.3scanf()函数格式说明3.4.4通过scanf()函数从键盘输入数据返回3.4数据输入

返回523.4.1getchar函数(字符输入函数)

此函数的作用是从终端(或系统隐含指定的输入设备)输入一个字符。getchar函数没有参数,其一般形式为:getchar()函数的值就是从输入设备得到的字符。例如:#include“stdio.h”main(){charc;c=getchar();putchar(c);}在运行时,如果从键盘输入字符’m’;m↙(输入’m’后,按“回车键”,字符才送到内存)m(输出变量c的值’a’)在调用getchar()函数进行输入时需要注意:◆getchar()只能接收一个字符。getchar函数得到的字符可以赋给一个字符变量或整型变量,也可以不赋给任何变量,作为表达式的一部分。◆在在一个函数中要用getchar函数,应该在函数的前面(或本文件开头)用#includetdio.h”。返回3.4.1getchar函数(字符输入函数)

此函数的作用533.4.2scanf()函数的调用

scanf函数的一般调用形式如下:scanf(格式控制,地址列表)功能:从标准输入设备上读入不同类型的多个数据,并将它们按照指定格式进行转换后,存储于地址列表所对应的变量中。例如:scanf(“%d%c%d”,&a,&b,&c);说明:函数括号内包含两部分:格式控制和地址列表。格式说明由“%”和格式字符组成,其作用是以指定的数据格式将要输出的数据输出。地址列表是由若干个地址组成的列表,可以为变量的地址或字符串的首地址。返回3.4.2scanf()函数的调用

scanf函数的一般543.4.3scanf()函数格式说明

1.函数scanf()的“地址列表”必须为变量地址或字符串首地址;例:inta,b;scanf("%d,%d",a,b);是不合法的。scanf("%d,%d",&a,&b);是正确的。2.函数scanf()的“格式控制”中除格式说明外若存在其他的字符,则输入时必须对应输入相同的字符;例:scanf("%d,%d",&a,&b);输入:3,4↙(逗号与"%d,%d"中的逗号对应)scanf("%d□□%d",&a,&b);输入:3□□4↙(两个或以上空格)scanf("%d:%d:%d",&h,&m,&s);输入:12:23:36↙(与格式控制中的冒号对应)scanf("a=%d,b=%d,c=%d",&a,&b,&c);输入:a=12,b=24,c=36↙(a=,b=,c=及逗号与格式控制相对应)3.在格式控制中,格式说明的类型与地址列表中变量的类型,应该一一对应匹配。如果类型不匹配,系统并不给出出错信息,但不可能得到正确的数据;4.用域宽指定数据宽度时,系统将自动截取所需长度的数据;例:scanf("%3d%3d",&a,&b);输入123456↙系统自动将123赋给a,456赋给b。3.4.3scanf()函数格式说明

1.函数scan555.输入实数时不能规定精度;例:scanf("%7.2f",&a);是不合法的。6.用“%c”格式时,空格字符和转义字符都将被认为是有效字符读入;例:scanf("%c%c%c",&c1,&c2,&c3);输入:a□b□c↙结果:a→c1,□→c2,b→c3(其余被丢弃)7.在输入数据时,若遇空格、回车键和Tab键或已完成指定域宽或非法输入,认为输入结束;8.在格式控制串中,格式说明的个数应该与输入项的个数相同。若格式说明的个数少于输入项的个数时,scanf函数结束输入,多余的数据项并没从终端接受新的数据;若格式说明的个数多于输入项的个数时,scanf函数也结束输入;9.当输入的数据少于输入项时,程序等待输入,直到满足要求为止。当输入的数据多于输入项时,多余的数据并不消失,而是留作下一个输入操作时的输入数据;10.scanf函数在调用结束后将返回一个函数值,其值等于得到输入值的输入项的个数。返回5.输入实数时不能规定精度;返回563.4.4通过scanf()函数从键盘输入数据

当调用scanf函数从键盘输入数据时,最后一定要按下回车键,scanf函数才能接受从键盘输入的数据。1.输入数值数据当从键盘输入数值数据时,输入的数值数据之间用间隔符(空格符、制表符(Tab键)或回车符)隔开,间隔数量不限。如果在格式说明中人为指定宽度时,也同样用此方式输入。2.指定输入数据所占宽度可以在格式字符前加一个整数,用来指定输入数据所占宽度。3.跳过输入数据的方法可以在格式字符和“%”之间加一个“*”号,它的作用是跳过对应的输入数据。例如:inta,b,cscanf(“%d%*d%d%d”,&a,&b,&c)当输入以下数据时:10203040将把10赋给a,跳过20,把30赋给b,把40赋给c。4.输入的数据少于scanf函数要求输入的数据scanf函数将等待输入,直到满足要求或遇到非法字符为止。5.输入的数据多于scanf函数要求输入的数据多余的数据将留在缓冲区作为下一次输入操作的输入数据。3.4.4通过scanf()函数从键盘输入数据

当调用sc576.在格式控制串中插入其它字符若在scanf的格式控制串中插入了其它字符,则在输入时要求按一一对应的位置原样输入这些字符。【例3-9】从键盘输入三个数,并输出来。#include"stdio.h"main(){inta,b,c;

scanf("%d%d%d",&a,&b,&c);

printf("%d,%d,%d\n",a,b,c);}运行时按如下方式输入三个值:3□4□5↙(输入a,b,c的值)3,4,5(printf输出的a,b,c的值)程序分析:(1)&a、&b、&c中的&是地址运算符,分别获得这三个变量的内存地址。(2)"%d%d%d"是按十进值格式输入三个数值。输入时,在两个数据之间可以用一个或多个空格、tab键、回车键分隔。以下是合法输入方式:①3□□4□□□□5↙②3↙4□5↙③3(tab键)4↙返回6.在格式控制串中插入其它字符返回583.5程序实例【例3-10】由终端输入两个整数给变量x和y,然后输出x和y,在交换x和y中的值后,再输出x和y,验证两个变量中的数是否正确地进行了交换。#include“stdio.h”main(){intx,y,t;printf(“Enterx&y:\n”);scanf(“%d%d”,&x,&y);printf(“x=%dy=%d\n”,x,y);}程序运行情况:Enterx&y:123456x=123y=456x=456y=123【例3-11】输入一个double类型的数,使该数保留不数点后两位,对第三位小数进行四舍五入后处理,然后输出此数,以便验证处理是否正确。程序如下:#include“stdio.h”voidmain(){doublex;printf(“Enterx:”);scanf(“%lf”,&x);3.5程序实例【例3-10】由终端输入两个整数给变量x和y59printf(“(1)x=%f\n”,x);x=x*100;}x=x+0.5;x=(int)x;x=x/100;printf(“(2)x=%f\n”,x);}程序运行结果:Enterx:3.1415926(1)x=3.141593(2)x=3.140000注意:在scanf函数中给double类型变量输入数据时,应该使用%lf格式转换说明符,而输出时,对应的格式转换说明符可以是%lf,也可以是%f。返回printf(“(1)x=%f\n”,x);x=x60第4章

选择结构程序设计4.1关系运算符与表达式4.2逻辑运算符与表达式4.3if语句4.4switch语句第4章

选择结构程序设计614.1关系运算符与表达式

4.1.1C语言中的逻辑值4.1.2关系运算符4.1.3关系表达式4.1关系运算符与表达式

624.1.1

C语言中的逻辑值逻辑值只有两个,在很多高级语言中,用“真”和“假”来表示。在C语言中,没有专门的“逻辑值”,而是用非零值来表示“真”,用零表示“假”。因此,对于任意一个表达式,如果值为0时,就代表一个“假”值;只要值是非零,无论是正数还是负数,都代表一个“真”值。4.1.1

C语言中的逻辑值逻辑634.1.2关系运算符

在程序中经常需要比较两个量的大小关系,以决定程序下一步的工作。比较两个量的运算符称为关系运算符。C语言共有6种关系运算符:在C语言中有以下关系运算符:<小于<=小于或等于>大于>=大于或等于==等于!=不等于关系运算符都是双目运算符,其结合性均为左结合。在六个关系运算符中,<,<=,>,>=的优先级相同,高于==和!=,==和!=的优先级相同。关系运算符、算术运算符和赋值运算符之间,优先级的次序是:算术运算符优先级别最高,关系运算符次之,赋值运算符最低。4.1.2关系运算符

在程序中经常需要644.1.3关系表达式

由关系运算符组成的表达式,称为关系表达式。关系表达式的一般形式为:表达式关系运算符表达式关系运算符两边的运算对象可以是C语言中任意合法的表达式。例如:a+b>c-d,x>3/2,'a'+1<c,-i-5*j==k+1,a>(b>c),a!=(c==d)都是合法的关系表达式。关系表达式的值是“真”和“假”,用“1”和“0”表示。如:5>0的值为“真”,即为1。(a=3)>(b=5),由于3>5不成立,故其值为假,即为04.1.3关系表达式

由关系运算符组成的表达654.2逻辑运算符与表达式

4.2.1逻辑运算符4.2.2逻辑表达式4.2逻辑运算符与表达式

664.2.1逻辑运算符

C语言中提供了三种逻辑运算符:&&与运算、||或运算、!非运算与运算符&&和或运算符||均为双目运算符。具有左结合性。非运算符!为单目运算符,具有右结合性。三种逻辑运算符的优先级次序是:!非运算级别最高,&&与运算次之,||或运算最低。逻辑运算符与赋值运算符、算术运算符、关系运算符、条件运算符、逗号运算符之间从高到低的运算优先次序是:!非运算、算术运算、关系运算、&&与运算、||或运算、条件运算符、赋值运算、逗号运算符按照运算符的优先顺序可以得出:a>b&&c>d等价于(a>b)&&(c>d),!b==c||d<a等价于((!b)==c)||(d<a)逻辑运算的值为“真”和“假”两种,用“1”和“0”来表示。其求值规则如下:1.与运算&&:参与运算的两个量都为真时,结果才为真,否则为假。例如,5>0&&4>2,由于5>0为真,4>2也为真,相与的结果也为真。2.或运算||:参与运算的两个量只要有一个为真,结果就为真。两个量都为假时,结果为假。例如:5>0||5>8,由于5>0为真,相或的结果也就为真。3.非运算!:参与运算量为真时,结果为假;参与运算量为假时,结果为真。例如:!(5>0)的结果为假。说明:虽然C编译在给出逻辑运算值时,以“1”代表“真”,“0”代表“假”。但反过来在判断一个量是为“真”还是为“假”时,以“0”代表“假”,以非“0”的数值作为“真”。例如:由于5和3均为非“0”,因此5&&3的值为“真”,即为1。又如:5||0的值为“真”,即为1。4.2.1逻辑运算符

C语言中提供了三种逻辑运算符:&&674.2.2逻辑表达式

由逻辑运算符和运算对象所组成的表达式称为逻辑表达式。逻辑表达式的一般形式为:表达式逻辑运算符表达式其中的表达式可以是C语言中任意合法的表达式。例如:(a&&b)&&c根据逻辑运算符的左结合性,上式也可写为:a&&b&&c逻辑表达式的值是式中各种逻辑运算的最后值,以“1”和“0”分别代表“真”和“假”。例如:1)若a=8,则!a=0(假)2)若a=4,b=5,则a&&b=1(真)3)若a=4,b=5,则a||b=1(真)4)若a=4,b=5,则!a||b=1(真)5)4&&0||2的值为1。编译器在求解逻辑表达式的值时,采用“非完全求解”的方法,即:当求得表达式为真后,就结束求解;只有在需要执行下一个逻辑运算时,才继续运算。例如:1、a&&b&&c只有a为真时,才判别b的值;只有a和b均为真时,才判别c的值。只要a为假,就不再判别b和c的值,直接求得表达式的值为假。2、a||b||c只要a为真,就不再判别b和c的值,直接求得表达式的值为真。只有a为假时,才判别b的值;只有a和b均为假时,才判别c的值。4.2.2逻辑表达式

由逻辑运算符和运算对象所组成的表达式684.3if语句

4.3.1if语句4.3.2条件运算符和条件表达式4.3if语句

694.3.1if语句

用if语句可以构成分支结构。它根据给定的条件进行判断,以决定执行某个分支程序段。C语言的if语句有三种基本形式。1.if语句(1)语句格式如下:if(表达式)语句例如:if(a>b){t=a;a=b;b=t;}其中,if是C语言的关键字,表达式两侧的圆括号不可少,最后是一条语句,称为if语句。(2)if语句的执行过程首先计算表达式的值,如果表达式的值为非零(“真”),则执行其后的语句,然后去执行if语句后的下一个语句。如果表达式的值为零(“假”),跳过if语句,直接执行if语句后的下一个语句。【例4-1】输入两个整数,输出其中的大数。main(){inta,b,max;printf("\ninputtwonumbers:");scanf("%d%d",&a,&b);max=a;if(max<b)max=b;printf("max=%d",max);}程序运行结果:inputtwonumbers:78934max=789程序分析本例程序中,输入两个数a,b。把a先赋予变量max,再用if语句判别max和b的大小,如max小于b,则把b赋予max。因此max中总是大数,最后输出max的值。4.3.1if语句用if语句可以构成分支结构。它根据给定702.if-else语句(1)语句形式如下:if(表达式)语句1;else语句2;例如:if(a!=0)printf(“a!=0\n”);elseprintf(“a==0\n”);“语句1”称为if子句,“语句2”称为else子句,这些子句只允许是一条语句,若需要多条语句时,则应该使用花括号把这些语句括起来组成复合语句。注意:else不是一条独立的语句,它只是if语句的一部分,不允许有这样的语句:elseprintf(“******”);在程序中else必须与if配对,共同组成一条if-else语句。(2)if-else语句的执行过程首先计算if后面表达式的值,如果表达式的值为非零,执行if子句,然后跳过else子句,去执行if语句后的下一条语句;如果表达式的值为零,跳过if子句,去执行else子句,接着去执行if语句后的下一条语句。2.if-else语句71【例4-2】输入两个整数,输出其中的大数。改用if-else语句判别a,b的大小,若a大,则输出a,否则输出b。void

温馨提示

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

评论

0/150

提交评论