1、中级语言中级语言C语言是国际上广泛使用的高级语言,是一种结构化的程序设计语言,它即具有高级语言的特性,又具低级语言的特性。因此,既能编写系统软件,又能编写应用软件。高级语言高级语言汇编语言汇编语言C C语言的特点语言的特点|语言简洁,灵活,关键字少(32个)个)|运算符丰富|数据结构丰富|结构化语言|语法限制不严格|能够对硬件和内存进行操作|代码质量和效率高|移植性好结构化语言结构化语言|C语言允许分割代码和数据|可以使用具有局部(临时)变量的函数或代码块来实现这种特性|代码块(程序块)是逻辑上连接在一起的一组程序语句,可以当作一个单元来使用int Sum(int a)int iSum=0;i
2、nt i=1;while(i=a)iSum=iSum+i;i+;return iSum;程序结构程序结构#include/*预处理命令预处理命令*/int count=0;/*全局变量声明全局变量声明*/int main(void)/*函数函数*/printf(Hello Worldn);return 0;|由一个或者多个.C文件构成|每一个.C文件可以由预处理命令、全局变量声明、函数和注释组成|C程序被分割成一个个的函数,有且仅有一个main函数|程序执行时先将控制权传递给main函数(主函数)|函数由函数的首部(函数第一行)和函数体(一对花括号中的内容)组成程序结构程序结构int max(
3、int a,int b)if(ab)return a;elsereturn b;|函数的首部:类型、名称、参数类型和参数名,圆括号内参数有无都可以,但括号不能省略|函数定义后面接一个大括号 叫分隔符|代表代码块开始,代表结束程序结构程序结构#include/*预处理命令预处理命令*/int max(int a,int b);/*函数原形声明函数原形声明*/int main(void)/*函数函数*/int num1,num2,result;printf(“请输入两个整数请输入两个整数:”);scanf(%d%d,&num1,&num2);result=max(num1,num2);printf
4、(“max=%dn“,result);return 0;|函数由声明部分和执行部分组成|C语言使用分号;表示语句结束|不识别回车、空格或制表符(这些符号使代码美观)|建议一行写一条语句,一条语句可以跨多行|注释用于描述特定的命令、函数或程序,增强程序的可读性|多行注释用/*开始,用*/结束(标准C语言)|一行注释用/标出C语言库语言库|C编译器都提供有标准函数库|DOS下的C编译器Turbo C 2.0大约有440个函数|BC+2.0大约有500多个函数|VC+除了标准的C运行库及C语言扩展外,还有600多个Windows API,以及VC+中的类库(MFC)|Linux下的C也有很多扩展及系
5、统函数|程序员编写的函数可以放在库中,然后在需要时使用|有些编译器允许将函数放在标准库中|有些编译器需要创建单独的库编译和运行程序编译和运行程序#include文件文件库文件库文件源文件源文件#编译器编译器目标目标文件文件链接器链接器可执行可执行文件文件其他用户生成其他用户生成的目标的目标文件文件程序文本用户程序文本用户可以阅读可以阅读将扩展的源代码将扩展的源代码转换成机器语言转换成机器语言将目标代码与函数链接将目标代码与函数链接成可执行代码成可执行代码C程序开发过程程序开发过程分析问题编制程序编译连接调试运行完成编译中发现错误,转回修改源程序连接中发现错误,转回修改源程序调试运行中发现问题,
6、表明分析本身有错误,重新分析问题变量变量15内存中的数据数据数据1515内存内存通过变量,可以为内通过变量,可以为内存中的位置提供一个存中的位置提供一个有意义的名称有意义的名称|程序要为每一项数据分配内存,通常使用变量来存储数据。使用变量可以引用存储在内存中的数据,并随时根据需要显示数据或执行数据操纵|需要多少内存|数据被存储在哪里|操作系统负责集注变量在内存中的地址|要引用内存空间中的值,只需指定变量名常量常量|常量就是一个保持不变的值|示例9 数字/整型常量9.3数字/浮点常量“NAME”字符串常量A字符常量|符号常量#define NUM 100提高代码的可读性,还可以做到一改全改|使用
7、const关键字const int iNum=100;标识符标识符|变量、函数、标签和其他各种用户定义的对象的名称都称为标识符(字母、数字和下划线,字母开头)(字母、数字和下划线,字母开头)正确的标识符名称Arena、s_count、marks40、class_one不正确的标识符示例1sttest、oh!god、start.end|标识符的长度可以是任何合适的数值,但是各种编译器能够识别的变量中的字符数目有所不同|C语言中的标识符区分大小写|系统内置的标识符指的是系统函数名称、系统定义的结构体名称、系统定义的符号常量名称等|例如:printf、FILE、date、RED等|以上各种标识符不要
8、用于用户定义的标识符上,防止发生不必要的错误关键字关键字autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotointiflongregistereturnshortsignedsizeofstaticstructswitchtypedefunionunsigned voidvolatilewhile|在一个特定语言的上下文中有特殊意义的单词。是标识符的一个特殊的集合。在C语言中有预先定义好的特殊意义。不能用于其他任何目的。|所有的数据类型都是保留的关键字|所有的关键字小写|C语言的关键字共32个:数据类型分
9、类数据类型分类变量的声明和初始化变量的声明和初始化|数据类型描述了变量中将存放的数据的种类|数据类型位于变量名的前面例如:数据类型 int 将位于变量名 varName 的前面|变量声明必须放在变量使用之前(先定义后使用)(先定义后使用)一般放在函数体的开头部分,可执行代码的前面变量声明也可以放在代码块的前面|程序中常常需要对一些变量预先设定初始值|定义时初始化变量 Datatype variablename=value;例如:int num1,num2=12;|定义后初始化变量variablename=value;例如:int num;num=12;变量的内存分配变量的内存分配void ma
10、in()int nNum=300;/0 x0000012Cchar cStr=A;/0 x41char cCh;printf(“%dn”,nNum);printf(“%cn”,cStr);printf(“%cn”,cCh);基本数据类型基本数据类型voidchardouble基本数据类型基本数据类型floatint单个或多个单个或多个数字系列数字系列存储含有小数位存储含有小数位超出超出float类型类型大小的值大小的值存放一个字符存放一个字符没有任何没有任何类型的数类型的数据据int类型类型|存储数字数据,不能存储类似于“Alan”或“abc”等任何其他类型的数据|声明方式:int num;|
11、分配32 位(4 个字节)的内存空间|int类型在16位系统中和在32位系统中,所占用字节数是不一样的(TC2.0下占2个字节)|十进制整型常量没有前缀,09的数字组成示例:12322、0、-232|八进制整型常量以打头,由07的数字组成示例:023、0101|十六进制整型常量以0X或0 x打头,由09、AF或af组成示例:0 xff、0X2Afloat类型类型|存储整数或包含小数位的值|声明方式:float num;|(小数点后)有效数字是 6 位|分配32 位(4 个字节)的内存空间 示例:23.05、56.5、32.0、3.14159double类型类型|存储超出float类型大小的限制
12、的值|声明方式:double num;|有效数字是 17 位|分配64 位(8 个字节)的内存空间 示例:123.45678901234567 char类型类型|存储一个字符信息|声明方式:char gender;gender=M;|分配8位(1 个字节)的内存空间 示例:a、m、$、%、1、5|实质是占一个字节的整型数(小整数)值值符号符号值值符号符号值值符号符号0空字符44,9132空格45-9233!46.933447/9435#48 570 9 95-36$58:9637%59;97 122a z38&6012541)63?12642*64127DEL(Delete键)43+65 90
13、A Z void类型类型|告诉编译器没有任何类型的值|不能像其它数据类型一样来声明变量例如:void num;/*这是错误的声明这是错误的声明*/但是void 可以用在指针声明中|void作用在函数声明中使用,代表不返回任何值与指针搭配使用派生数据类型派生数据类型intshortshort int 派生数据类型派生数据类型基本数据类型基本数据类型 数据类型修饰符数据类型修饰符int unsigned int unsignedint/doublelong int/long doublelong只允许只允许正数正数是是int所所占空占空间的一半间的一半和和int/double占占的内存空间一的内存
14、空间一样样 后缀字母后缀字母用途用途示例示例U或者u无符号整型123u、2345UL或者l长整型123L、-789lF或者f单精度浮点型0.123F、3.1415f控制台控制台|默认整个屏幕共有80列(或40列)25行的文本单元,每个单元包括一个字符和一个属性,字符即ASCII 码字符|控制台的注意事项:当输出超出屏幕的右边界时会自动转到下一行的开始处继续输出;当屏幕内填满内容仍没有结束输出时,屏幕将会自动逐行上卷直到输出结束为止头文件头文件stdio.h|#include|stdio.h 是一个文件,称为头文件包括对应于 C 语言程序中使用的输入/输出函数的宏|printf()用于带格式的输
15、出|scanf()用于带格式的输入printf()|功能:用于在标准输出设备控制台上显示数据|函数原型及参数控制字符串由三类项目中的一项或多项组成:文本字符:由可打印字符组成格式命令:以%符号开始,随后紧跟与数据项相应的格式代码非打印字符:包括制表符、空格和新行返回值:输出的字符数量,如果错误返回EOFint printf(control string,argument list);控制字符串控制字符串参数列表参数列表需要由需要由“”括起来。括起来。由文本字符、格式命令由文本字符、格式命令和非打印字符组成和非打印字符组成都需要一个格式命令都需要一个格式命令-与参数列表需要在数量、与参数列表需要
16、在数量、类型和顺序上匹配类型和顺序上匹配格式代码格式代码上表中,c、d、f、lf、e、g、u、s、o 和 x 都是类型说明符格式printf()scanf()单字符%c%c 字符串%s%s 带符号的十进制整数%d%d 浮点数(十进制记数法)%f%f 或%e 浮点数(十进制记数法)%lf%lf 浮点数(指数计数法)%e%f 或%e 浮点数(%f 或%e 中较短的一个)%g 不带符号的十进制整数%u%u 不带符号的十六进制整数(使用“ABCDEF”)%x%x 不带符号的八进制整数%o%o 格式代码格式代码格式代码输出约定%d 整数的数字位数%f 数字的整数部分如实输出。小数部分保留 6 位。如果小
17、数部分不是 6 位,末尾填零;否则,四舍五入取到 6 位%e 小数点左侧保留一位数字,右侧保留 6 位数字(与上面的%f 相同)转义系列转义系列转义序列转义序列名称名称描述描述a 警告产生一则警告。b 退格将光标回退一格。f 换页将光标移到下一页的第一格。n 换行将光标移到下一行的第一格。r 回车将光标移到当前行的第一格。t 水平制表 将光标移到下一个水平制表位置。v 垂直制表将光标移到下一个垂直制表位置。单引号产生一个单引号。双引号产生一个双引号。?问号产生一个问号。反斜线产生一条反斜线。0 空产生一个空字符。%百分号产生一个百分号printf()修饰符修饰符|字符宽度修饰符,例如:prin
18、tf(“%4d”,500);可以用于浮点型、双精度型和字符数组型(字符串)范围宽度修饰符是一个整数,定义了数据项的最大范围宽度。|“-”修饰符,例如:printf(“%-d”,500);数据项在范围内向左对齐,从范围最左侧的位置开始输出数据项|精度修饰符,例如:printf(“%.2f”,3.14159);用在浮点型、双精度型或字符数组型(字符串)中。如果用在浮点型或双精度型数据中,数字字符串表示小数右侧最多可输出的数字位数printf()修饰符修饰符|“0”修饰符(填充在数字左边,右边无效,保证数据准确性)字段的默认填充符是空格。如果用户希望用零作为填充符,需要使用此修饰符|“l”修饰符可以
19、借助于此修饰符将整数显示为长整型或双精度型参数。相应的格式代码为%ld|“h”修饰符此修饰符用于显示短整数,相应的格式代码为%hd|“*”修饰符如果用户不希望预先指定字段宽度,而希望程序来指定,则需要用到此修饰符 printf(%*.*f,8,2,123.456);scanf()|函数功能:用于接受数据|函数原型:|返回值:输入成功的参数数量,否则返回0int scanf(control string,argument list);控制字符串控制字符串参数列表参数列表printf()语句中的使用的格式极其语法同样适用与scanf()语句printf()和和scanf()参数的区别参数的区别|格
20、式代码的区别-没有%g选项-格式代码%f 和%e 在效果上是一样的|参数列表的区别-printf()使用变量名、常量、符号常量和表达式-scanf()使用变量指针,参数列表应遵循以下规则:如果希望读取基本数据类型变量的值,应在变量名的前面加上符号&当读取指针变量指向的值时,在变量名前不能使用&缓冲输入缓冲输入/输出输出|缓冲区(流)负责在输入/输出设备和程序之间建立联系。输入设备-内存缓冲区(stdin)-程序程序-内存缓冲区(stdout)-输出设备|是一块临时的存储区域,或在内存中,或在设备控制卡上缓冲输入缓冲输入/输出输出控制台输入控制台输入/输出输出缓冲文件输入缓冲文件输入/输出输出控
21、制台输入控制台输入/输出输出|控制台输入/输出函数将其操作指向系统的标准输入(键盘)和标准输出(显示器)|C语言中最简单的控制台输入/输出是:getchar()从键盘读取一个(且仅一个)字符 putchar()在屏幕上输出一个字符getchar()|函数原型:int getchar(void);/没有参数|函数功能:从终端输入一个字符。|返回值:返回输入字符的ASCII码,可以使用字符变量或者整型变量接收。|其它说明:getchar()函数没有参数,但仍然必须使用括号缓冲字符,直到用户按回车键。虽然可以输入多个字符,但函数只接受第一个字符。putchar()|函数原型:int putchar(
22、int c);|函数功能:从终端输出一个字符,且转换成ASCII码返回。|函数参数:其中c要输出的字符,可以是字符型常量、字符型变量、整型常量、整型变量表达式、转义序列等。|putchar()的选项和效果,如下表:参数参数函数函数效果效果字符变量putchar(c)显示字符变量 c 的内容字符常量putchar(A)显示字母 A数值常量putchar(65)显示字母 A字符常量putchar(5)显示数字 5转义序列putchar(t)在光标位置插入制表符转义序列putchar(n)在光标位置插入回车getch()#include#include /getch()的头文件的头文件void ma
23、in()int num=0;char ch=0;num=getch();/输入输入1printf(%d,num);fflush(stdin);ch=getch();printf(ch=%c,ch);/看一下有什么效果看一下有什么效果fflush(stdin);getch();printf(end);表达式表达式|用运算符和括号将操作数连接起来的、符合语言语法规则的式子,称为表达式|运算符和操作数的有效组合|操作数可以是变量、常量或者函数|在程序执行的过程中,变量的实际值和表达式中出现的常量一起使用|表达式可分为:算术表达式算术表达式 关系表达式关系表达式 逻辑表达式逻辑表达式 函数表达式函数表
24、达式操作数操作数运算符运算符2*y+5运算符运算符|根据操作数的数量可以分为:一元运算符、二元运算符和三元运算符|根据用途可以分为以下几类:赋值运算符算术运算符关系运算符逻辑运算符位运算符|运算符的优先级和结合方向 按运算符的优先级高低次序执行 如果在一个运算对象(或称操作数)两侧的运算符的优先级相同,则按语言规定的结合方向(结合性)进行算术运算符算术运算符一元运算符一元运算符操作操作二元运算符二元运算符操作操作-一元减+加+递增-减-递减*乘%模(取余)/除pow幂两边必须两边必须是整数是整数幂函数的示例:幂函数的示例:pow(9.0,2.0)9是底数,是底数,2是指数是指数结果是结果是9*
25、9=81+和和-运算符前置和运算符前置和后置有很大区别后置有很大区别算术运算符之间的优先级算术运算符之间的优先级|所谓结合性是指,当一个操作数两侧的运算符具有相同的优先级时,该操作数是先与左边的运算符结合,还是先与右边的运算符结合。|自左至右的结合方向,称为左结合性。反之,称为右结合性。运算符类型运算符类型运算符运算符结合方向结合方向一元-+-从右向左二元 */%从左向右 二元 +-从左向右 计算计算-i+赋值运算符赋值运算符|赋值符号“=”就是赋值运算符,它的作用是将一个表达式的值赋给一个变量。|通用的形式:变量名=表达式|将同一个值赋给多个变量的操作叫做多重赋值a=b=c=10int a=
26、int b=int c=10但是,不能像下面的语句中那样赋值但是,不能像下面的语句中那样赋值:复合赋值运算符复合赋值运算符运算符运算符表达式表达式计算计算结果(假设结果(假设 X=10X=10)+=X +=5X=X+515-=X -=5X=X-55*=X*=5X=X*550/=X /=5X=X/52%=X%=5X=X%50还可以与位运算符构成复合赋值运算符,如:还可以与位运算符构成复合赋值运算符,如:=、=、&=、|=赋值运算符之间的优先级赋值运算符之间的优先级|所有的赋值运算符的优先级相同|始终按从右向左顺序进行计算(a=b=c=5)|赋值运算符的优先级低于算术运算符,仅高于逗号运算|赋值表
27、达式 由赋值运算符或复合赋值运算符,将一个变量和一个表达式连接起来的表达式,称为赋值表达式。赋值表达式的值:任何一个表达式都有一个值,赋值表达式也不例外。被赋值变量的值,就是赋值表达式的值。关系运算符及之间的优先级关系运算符及之间的优先级|用于测试两个操作数或两个表达式之间的关系,其中操作数可以是变量、常量和表达式运算符运算符关系运算关系运算大于=大于等于小于=小于等于=等于!=不等于关系表达式的计算结果关系表达式的计算结果 =逻辑值(真逻辑值(真-非非0 0或假或假-0-0)注意:注意:1、if(a=1)不要写成不要写成 if(a=1)最好写成最好写成if(1=a)因为如果写成因为如果写成i
28、f(1=a),编译器会报错编译器会报错2、不能写成、不能写成if(1a5)运算符类型运算符类型运算符运算符结合方向结合方向二元 =从左向右二元 =!=从左向右 逻辑运算符逻辑运算符|逻辑运算符用于对包含关系运算符的表达式进行合并或取非|使用逻辑运算符的表达式,返回 0 表示假,返回 1 表示真|示例:if(a10)&(a20)运算符运算符逻辑运算逻辑运算说明说明&与当且仅当两个运算量的值都为“真”时,运算结果为“真”,否则为“假”。|或当且仅当两个运算量的值都为“假”时,运算结果为“假”,否则为“真”。!非当运算量的值为“真”时,运算结果为“假”;当运算量的值为“假”时,运算结果为“真”。逻辑
29、表达式计算有时会出现部分表达式不参加运算的情况(短路现象)逻辑表达式计算有时会出现部分表达式不参加运算的情况(短路现象)例子:例子:int a=1,b=2;if(a5|(b=10)printf(“b=%dn”,b);观察观察b的值的值位运算符位运算符|位运算符将数字视为二进制值,并按位进行相应运算,运算完成后再重新转换为数字运算符运算符描述描述按位与 (x&y)如果两个操作数的相应位均为 1,则该位的结果值为 1按位或 (x|y)如果两个操作数的相应位有一个为 1,则该位的结果值为 1 按位取反(x)将操作数按位取反(0 到 1 和 1 到 0)按位异或(xy)如果参加运算的两个操作数的相应位
30、同号,则结果为 0,异号则为 1左移(x2)右端(低位)移出部分舍弃,左端(高位)根据符号位补0或者1,无符号或正数补0,负数补1类型转换类型转换|运算符的操作数属于不同的数据类型,运算时通常会将这些操作数转换为同一类型,由编译系统自动完成。char ch;int i,result;float f;double d;result=(ch/i)+(f*d)-(f+i);int double float double double|在赋值表达式中,自动将赋值运算符右边表达式的值的类型转换成左边变量的类型|级别高低char-short-int(long)-unsigned int-float-dou
31、ble(long double)强制类型转换强制类型转换|通过使用转换可以将一个表达式强制转换成某一种类型,是一元运算符。|转换的通用语法是:(type)cast type 任意有效的 C 数据类型|示例:经过赋值运算后,经过赋值运算后,(int)f 返回的整型返回的整型值重新转换为浮点数,值重新转换为浮点数,f 本身的值不本身的值不变。变。float x,f;f=3.14159;x=(int)f;运算符优先级示例运算符优先级示例2*3+4/23&35|103&35|103&35|103&35|103)&35|109(1&35)|109(1&1)|1091|10,圆括号自左向右!,+,-,si
32、zeof逻辑非,递增,递减,求数据类型的大小自右向左*,/,%乘法,除法,取余自左向右+,-加法,减法自左向右,=小于,小于等于,大于,大于等于自左向右=,!=等于,不等于自左向右&逻辑与自左向右|逻辑或自左向右=,+=,*=,/=,%=,-=赋值运算符,复合赋值运算符自右向左一般来说,算术运算符优先级高于比较运算符高于逻辑运算符高于赋值运算符一般来说,算术运算符优先级高于比较运算符高于逻辑运算符高于赋值运算符if语句语句|通过条件为真还是为假来决定|常规格式:常规格式:if(表达式)语句;|表达式是要判断的条件,跟在后面的是一个或一组语句|在if后的语句不止一个,应用大括号将他们组织起来。这
33、样的组会称为“复合语句”或“代码块”。如果只有一个语句,大括号可以省略,但不建议。ifelse语句语句|可以选择两个语句中的一个来执行|语法形式:语法形式:if(表达式)语句-1;else语句-2;|如果 if 表达式的值为true(非0),将执行 if 语句(一个或一组)后的语句块|如果 if 表达式的值为false(0),那么控制权将交给else 表达式后面的语句|else语句是可选的.仅当 if 表达式的值为false时,才会执行else后的语句或语句序列ifelse if语句语句|if-else-if 语句也称为 if-else-if 台阶或if-else-if 阶梯|条件的计算是自顶
34、向下的|建议书写格式:建议书写格式:if(表达式)语句;else if(表达式)语句;else if(表达式)语句;else 语句;嵌套的嵌套的if语句语句|嵌套的 if 语句就是在 if 或 else 语句中包含另一个 if 语句|在 C 语言中,else 语句通常与同一块中距离它最近且未与 else 关联的 if 语句相匹配,与书写格式无关|语法示例:if(表达式-1)if(表达式-2)语句-1;if(表达式-3)语句-2;else 语句-3;/*与if(表达式-3)相匹配*/else 语句-4;/*与if(表达式-1)相匹配*/switch语句语句|switch 语句是一种多路判定语句,
35、它判断表达式的值是否与整数或字符常量列表中的某个值相匹配|若找到了相应的匹配,就会执行与常量关联的语句|通用语法:通用语法:switch(表达式)case 常量1:语句集;break;case 常量2:语句集 break;default:语句集;break;switch语句语句|switch、case、和default都是关键字,语句可以是简单或复合语句。|switch后的表达式需要用圆括号括起来,而且switch语句的主题用 括起来|计算表达式的数据类型要与指定的case常量的数据类型匹配。|switch后的表达式可以包含任何变量名,也可以是常量。|case后面只能是常量(整型和字符型)。s
36、witch语句语句switch语句执行过程:语句执行过程:计算表达式的值计算表达式的值与与case的值比较的值比较执行相匹配的执行相匹配的case标记后的语句标记后的语句不符合不符合case语句就语句就执行执行default后的语句后的语句遇到遇到break语句终止执行语句终止执行条件运算符条件运算符|条件运算符是C语言中唯一的三目运算符|表达式1?表达式2:表达式3|条件运算符的优先级高于赋值运算,低于关系和算术运算符|结合方式:从右向左|计算:a=3,b=30;a20?(c=8):(c=9)for循环循环|for循环的通用语法:循环的通用语法:for(初始化计数;条件测试;再求值参数)语句
37、;/如果是复合语句,不能省略|初始化计数是一个赋值语句,它在进入循环前设置循环控制变量|条件测试是一个关系表达式,它决定何时退出循环|再求值参数定义每次执行循环时,循环控制变量如何变化|for 循环的三个部分必须用分号;隔开|组成循环体的语句可以是单个语句,也可以是复合语句分号;不能省略for循环循环|要正确表达循环结构应注意三方面的问题:控制变量的初始化,循环的条件和控制变量的更新。|工作原理:1、初始化计数,给循环变量赋初始值。2、条件测试,求值结果为 true,就执行循环体内的代码执行。当条件变为 false时退出循环,程序将继续执行 for 循环后面的语句 3、循环变量变化计算 4、重
38、复第二步条件测试逗号运算符逗号运算符|格式是:exprn1,exprn2;|逗号运算符优先级最低|表达式被逗号运算符隔开,从左向右求值。但只有其最右端的表达式的结果,作为整个逗号表达式的结果|通过在for循环中包含多个初始化表达式或增量表达式,可以丰富for循环中表达式for循环循环|使用for循环可以包含部分定义,或不包含任何定义for(;num 100;)或 for(;)|使用for循环可以不包含任何循环体(语句),有助于提高某些算法的效率和创建时间延迟循环 for(i=0;ixyz_value;i+)while循环循环|表达式一般为关系表达式或者逻辑表达式|语句可以是空语句、一个简单的语
39、句或语句块|如果while循环中包含一组语句,必须用括起来|只要条件为真循环就会迭代通用语法:通用语法:while(表达式表达式)语句语句;dowhile循环循环|while后面的分号不能省略|do.while 循环中,循环体中的代码在条件测试执行前执行一次|条件为 False 时,do while 循环终止;控制权传递给紧跟在 while 语句之后的语句do语句语句;while(条件条件);通用语法:通用语法:3种循环的区别和总结种循环的区别和总结|while和for语句先判断循环控制条件,do-while语句后判断循环控制条件,所以,while和for语句的循环体可能一次也不执行,而do-
40、while语句的循环体至少也要执行一次。|三种循环可以处理同一问题,一般情况可以互相代替。但在实际应用中,我们要根据具体情况来选用不同的循环语句。选用的一般原则如下:如果循环次数在执行循环体之前就已确定,一般用for语句;如果循环次数是根据循环体的执行情况确定的,一般用while语句或者do-while语句。当循环体至少执行一次时,用do-while语句;反之,如果循环体可能一次也不执行时,用while语句。嵌套循环嵌套循环|如果一个循环出现在另一个循环中,则称它为嵌套循环。|三种循环都可以相互嵌套,自由组合for(i=1;i max1;i+)for(j=0;j=max2;j+)return语
41、句语句|表达式是可选的|return 语句用于从函数中返回|return 语句可以带有值,该值将返回给调用程序它使执行返回到调用函数的位置|一个函数中可以使用多个return语句,但是遇到第一个return语句时返回return expression;通用语法:通用语法:goto语句语句|需要在函数中某行代码处,定义一个标签|goto 语句将控制权传递给C程序中同一函数内的其他语句|它实际上违背了严格的结构化程序设计语言的原则|它们降低了程序的可靠性,并使得程序难以维护goto label;通用语法:通用语法:break语句语句break;通用语法:通用语法:|用于在 switch 语句中终止
42、case|也可以用于在循环中突然终止循环|当循环中遇到 break 语句时,循环立即终止,控制权传递给循环之后的语句|多层循环中,break只向外跳一层continue语句语句|continue 语句,只能在循环中使用让封闭循环进行下一次迭代|遇到该语句时,跳过循环体中剩余的语句,控制权传递给重新初始化步骤|在while循环和dowhile循环中,程序控制权传递个条件测试语句|在for循环中,continue影响循环的增量部分,然后执行条件测试continue;通用语法:通用语法:exit()函数函数|exit()用于跳出一个程序|是一个标准库函数|该函数的用途是立即终止程序,控制权交给操作系
43、统exit(int return_code);通用语法:通用语法:数组及相关概念数组及相关概念|为什么需要使用数组?|数组是一组有序的、类型相同的数据的集合,这些数据被称为数组的元素。|每个数组都有一个名字,我们称之为数组名。数组名代表数组的起始地址。|数组元素由索引或下标标识,索引或下标从0开始player0player1player2 player10一个包含 11 个元素的数组定义数组定义数组|数组的特性必须在使用前定义 存储类型 数据类型 数组名 数组大小|数组定义的语法:存储类型 数据类型 数组名数组长度;例如:int player11;数组名后接一个或多个括在方括号内的表达式,用以
44、指定数组的维数 数组长度只能是常量和常量表达式(大于0)数组的规范数组的规范|所有数组元素具有相同的类型|允许使用变量的地方都可以使用数组元素|可以使用整型表达式引用数组的元素:数组名整型表达式一维数组的定义一维数组的定义每个数据元素占用每个数据元素占用的字节数,就是的字节数,就是基基类型类型的字节数的字节数一个元素占一个元素占4个个字节字节一维数组:一维数组:floatfloat markmark100;100;mark0mark1mark2mark3.mark9986.592.077.552.0.94.0低地址低地址 高地址高地址一维数组的初始化一维数组的初始化|自动数组中的元素需要分别初
45、始化|extern和static数组元素自动初始化为 0|数组初始化是在数组定义时给元素赋初值|初始化赋值的一般形式:类型 数组名常量表达式=值,值;例如:int ary10=0,1,2,3,4,5,6,7,8,9;|初始化的几点规定:元素之间用逗号隔开 可以只给部分元素赋值,剩余元素赋0值 给全部元素赋值时,可以不说明元素的个数一维数组初始化示例及注意示例一维数组初始化示例及注意示例1、int ary110=1,2,3,4,5,6,7,8,9,10;2、int ary1 =1,2,3,4,5,6,7,8,9,10;/*隐式指定数组的元素个数为10*/3、ary10=1;ary11=2;ary
46、12=3;4、int ary210=1,2,3,4,5;初始化的数据个数允许少于数组的长度,但不能多于数组的长度,想想ary25=?5、int ary35;ary30=1;ary31=2;思考ary32=?6、int ary4;/*错误不允许*/|C编译器不会检查下标的越界|即使两个数组的类型和大小相同,也不能检验是否相等|不能直接将一个数组赋给另一个数组|不能为数组整体赋值二维数组二维数组|最常用的多维数组|可以看成是由两个一维数组组成的数组|类似于一个由行和列组成的表格|二维数组的声明方式:类型说明符 数组名常量表达式1常量表达式1;例如:int temp43;|问题:二维数组的数组名可以
47、代表什么?二维数组的定义二维数组的定义b b0000b b0101b b0202b b1010b b1111b b1212b b2020b b2121b b22223003000 0H H3003002 2H H3003004 4H H3003006 6H H3003008 8H H300300A AH H300300C CH H300300E EH H30301010H H123456789二维数组的初始化二维数组的初始化 可以用下面可以用下面4 4种方法对二维数组初始化种方法对二维数组初始化数据类型数据类型 数组名数组名 常量表达式常量表达式1 1常量表达式常量表达式2 2 初始化数据初始
48、化数据(1)(1)分行给二维数组赋初值。分行给二维数组赋初值。如:如:int a34=1,2,3,4,5,6,7,8,9,10,11,12;(2)(2)可以将所有数据写在一个花括弧内,按数组排列的顺序对可以将所有数据写在一个花括弧内,按数组排列的顺序对各元素赋初值。各元素赋初值。如:如:int aint a3 34 4=1=1,2 2,3 3,4 4,5 5,6 6,7 7,8 8,9 9,1010,1111,12;12;二维数组的初始化二维数组的初始化(3)(3)可以对部分元素赋初值。可以对部分元素赋初值。如如 int a34=1,5,9;也可以对各行中的某一元素赋初值,如int a34=1
49、,0,6,0,0,11;1 0 0 01 0 0 05 0 0 0 5 0 0 0 9 0 0 01 0 0 01 0 0 00 6 0 00 6 0 00 0 0 11 00 11 0 1 0 0 01 0 0 05 6 0 0 5 6 0 0 0 0 0 0也可以只对某几行元素赋初值。如:也可以只对某几行元素赋初值。如:int a34=1,5,6;二维数组的初始化二维数组的初始化(4)(4)如果对全部元素都赋初值,则定义数组时对第一维的长度可如果对全部元素都赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。以不指定,但第二维的长度不能省。如:如:int a34=1,2,3
50、,4,5,6,7,8,9,10,11,12;它等价于:它等价于:int a 4=1,2,3,4,5,6,7,8,9,10,11,12;int b 4=0;思考思考b有几个字节?有几个字节?在定义时也可以只对部分元素赋初值而省略第一维的在定义时也可以只对部分元素赋初值而省略第一维的长度,但应分行赋初值。如:长度,但应分行赋初值。如:int a 4=0int a 4=0,0 0,33,00,10;10;0 0 3 00 0 0 00 10 0 0二维数组的引用二维数组的引用|存储形式:二维数组在内存中是按行的顺序存放的,即先存放第一行的元素,再存放第二行的元素。|二维数组元素的引用:数组名行下标列