




已阅读5页,还剩324页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
主讲教师:刘丹,C程序设计,C语言程序设计,第一章第二章第三章第四章,第五章第六章第七章,第一章C语言概述,C语言既可作为系统软件的程序设计语言,又可作为应用软件的程序设计语言。,尤其是当今计算机应用极为广泛,软件的设计、编写质量要求高,经常与硬件部分打交道,如:界面设计等,所以用C语言编写是最理想的。因而C语言也是当前计算机语言中用得最广泛的语言之一。,1.1C语言出现的历史背景,一、操作系统的设计语言,O.S.操作系统,为用户使用计算机提供一个操作环境:系统命令、语言编程等。,如:DOS.UNIX,以前:O.S.软件用汇编指令编写。汇编语言:一种二进制指令代码的符号表示,既繁琐,又易出错,可读性差。,改进:用C语言编写,既提高了程序的可读性,又可与硬件打交道。,二、发展过程,1960年出现了Algol60语言,但该语言主要面向问题,与硬件较远,故英国剑桥大学推出了CPL(CombinedProgrammingLanguage),1967年,MatinRichards对CPL进行改进、简化、推出了BCPL(BasicCombinedProgrammingLanguage),1970年,美国贝尔实验室KenThomson以BCPL为基础,再次简化推出了B语言,并写了第一个UNIX系统。,美国贝尔实验室D.M.Ritchie在B语言基础上设计出了C语言,并用其将UNIX系统全部改写并实现。,经进一步改进,至1977年出现了与具体机器无关的C编译文本,从而使C语言广泛应用,各种机器皆可使用。,1978年,美国BrainW.Kernighan与Dennis.M.Ritchie联合出版一书TheCProgrammingLanguage成为ANSIC之基础。,1983年,美国标准化协会(ANSI)制定了ANSIC。,ANSIC为基础:,不同机器有不同版本,尤其是函数均应参考相应的机器。,1.2C语言的特点,只有通过学习,方可理解C之特点,先简叙之:,1.简洁、紧凑、方便、灵活32个关键字,9种控制语句,主要用小写字母,压缩一切不必要成分,2.运算符丰富除了最基本的、%等运算外,还将括号、赋值、类型强制转换等均作为运算符,共有34种运算符。,3.数据结构丰富除基本类型外,有指针,结构体、共同体等类型。,4.具有结构化的控制语句模块完整,控制中的语句可完整化。,5.语法严格,但有灵活性如:数据类型可相互通用:整型、字符型通用。,6.可与机器硬件打交道,直接访问内存地址,具有“高”、“低”级语言之功能。,7.生成目标代码质量高,执行效率高。,8.可移植性优于汇编语言。,1.3简单的C程序介绍,为了更好、更快地掌握C程序,我们先看几个C语言程序:,例1.main()printf(Thisisacprogramn);,例2.main()/*求两个数之和*/inta,b,sum;/*这是定义变量*/a=123;b=456;sum=a+b;printf(sumis%dn,sum);,例3.main()/*主函数*/inta,b,c;/*定义变量*/scanf(%d,%d,)/*输出c的值*/,intmax(x,y)intx,y;/*对形参x、y作类型定义*/intz;/*max函用到的变量z,也要加以定义*/z=y;if(xy)z=x;return(z);/*将z的值返回,通过max带回调用处*/,通过分析,初步看到:1.C程序全部由一个一个的函数构成。至少有一个主函数main(),其它函数可被主函数调用或相互调用。其它函数可为C函数库中函数,也可为自己编的函数。,上述特点称为程序的模块化.,2.函数的构成:函数说明+函数体,函数体:变量定义与执行语句,可允许空函数:dump(),函数说明包括:函数名、类型、属性、参数等,3.函数的执行一定从main()开始。尽管main()函数位置可自由。,4.书写自由,一个语句可多行,一行可多个语句。,5.每一条语句必须有一个分号;,6.C语言的输入/出均以函数形式出现。scanf(),printf().,7.可用/对C语言加注释,主讲教师:刘丹,第二章数据类型、运算符与表达式,2.1.数据类型,著名计算机科学家沃思提出:程序数据结构算法,所以,存放数据的方式直接反映了一种语言的数据表达能力。数据的存储方式又称之为:数据类型。,举一个例子:以考生各科成绩及总分排队问题为列。成绩的存放以数组形式排队方法算法,前面已述.C数据类型丰富,分为:,基本类型,构造类型,指针类型,空类型,整型,字符型,实型,单精度,双精度,数组,结构体,共用体,数据有常量、变量之分,均为其中一种类型。,本章先学习基本类型。,枚举,2.2常量与变量,2.2.1常量和符号常量,常量程序运行过程中不能被改变的量。,一般的数据显式写法均表示常量。如程序中:20整型常量15.8实型常量a字符常量,例:#definePRICE30main()intnum,total;num=10;total=num*PRICE;printf(total=%d,total);,还可用一个符号表示一个常量符号常量,符号常量(一般用大写,以区分变量),再如:=3.1415629#definePAI3.1415629,#definePRICE30,2.2.2变量,程序执行中可以改变的量称为变量。变量包括变量名和变量值。,变量名用标识符命名,对应一定数量的内存存贮单元,其单元数视变量类型而定。,标识符由字母、数字、下划线组成且由字母或下划线开头的字符串。,标识符可用来命名变量及作为常量名、函数名、类型名、文件名等,一个程序内不得有重复名。如:_sum,sum,student_name,price等,习惯上,变量名、函数名等用小写字母表示。常量名用大写字母表示(以增加可读性)。,另:需注意标识符长度,视不同系统而定。设允许8个字符。则:student_namestudent_number为同一名字。,C语言中,变量须先定义,后使用如:intstudentstudent=30;则若写成student=30,则未定义,编译时指出其错。,一旦变量被定义,即可在编译时为其分配相应数量的单元。,一旦变量被定义,其类型便确定。则可检查其运算的合法性。,如:a%b表示a整除以b的余,则a,b必须为整型量。,2.3整型数据,2.3.1整型常量,整型常量整型常数,C语言提供了三种形式十进制如:256,308,120等,八进制以数字0开头表示的整数例:0235,0146012等.0235=28238515710014618248610210012(182)1010,十六进制以0 x开头的整型数如:0 x16,0 x28,2.3.2整型变量,一、分类:分为四种:基本型、短整型、长整型、无符号型,2.短整型:用shortint或short定义,3.长整型:用long或longint定义,1.基本型:用int定义,4.无符号型:不存放符号,则不带符号数.,又分无符号整型,无符号短整型,无符号长整型。,上述各种类型所占内存单元数及取值范围视不同机器而不同。详见P13。,二、定义方法整型变量分别以下列方式定义,2.短整型shortint或shorta,b,c;,3.长整型longint或longa,b,c;,1.基本整型:inta,b,c;,4.无符号型unsigneda,b,c;unsignedshorta,b,c;unsignedlonga,b,c;,例:main()inta,b,c,d;/*指定a,b,c,d为整型变量*/unsigndu;/*指定u为无符号整型变量*/a=12;b=24;u=10;,c=a+u;d=b+u;printf(a+u=%d,b+u=%dn,c,d);,由此看到:不同类型的整型数据可进行算术运算。但有一定规则,见2.7.,运行结果为a+u=22,b+u=14,三、关于整型常量程序中出现的整型常数,系统按以下规则分配变量(内存单元)或赋值给相应变量,2.若超越,而在21474836482147483647之间,则可赋给longint变量。,1.当常数(量)在3276832767之间,则可赋给int,longint变量。,4.一个非负整数,=,又如:(int)(x+y)若省略:(int)x+y会变成将x转成整型.,(int)x;则x本身仍为实型,而(int)x由一个中间变量(整)存放x的整数部分。,例:main()floatx;inti;x=3.6;i=(int)x;printf(x=%d,x,i);,则:x=3.600000,i=3.,总结以上类型转换,有二种:1.强制,另:强制类型转换运算优先于算术运算符.,2.系统自动,如:若x为float,则x%3不合法。但可用(int)x%3来解决。(附录III介绍了优先级),四、自增,自减运算符,设有inti=3;,+自增1,自减1,则:+i,i+都会使i变为4,但有区别:,+i:先使i值+1,再使用i值;,i+:先使用i值,再使i值+1.,j=+i;j=4,i=4.(i=i+1;j=i;),j=i+;j=3,i=4.(j=i;i=i+1),同理:i,i,均使i值1,但:,又如:printf(i=%dn,i+);结果:i=3,若:printf(i=%dn,+i);结果:i=4,i:先使i值1,再使用i值;,i:先使用i值,再使i值1,i=3;,几点注意:1.+和运算法只能用于变量,不得用于常量和表达式.,2.+,的结合性为从右至左,而一般算术运算符为从左至右。如:,如5+,(a+b)+均为不合法.,i+和+为同一优先级.,i+相当于(i+),若i=3,则结果为3,i为4.+,主要用于循环变量自增或自减。,1.要慎用+、运算符。,五、有关表达式使用中的问题说明,则:先对i进行3次自加,为6,然后三个i相加为18,而i为6。,如:表达式(i+)+(i+)+(i+)(i=3)一般认为:从左至右:3+4+5=12,i6.,但TurboC.MSC都是先取三个原值相加:i+i+i=9i6,如果表达式数为:k=(+i)+(+i)+(+i),2.在表达式中,有的运算符为一个字符,有的为两个字符。,3.在函数调用时,如:,一般地:自左至右尽可能多地将若干字符组成一个运算符。,例:i+j,究竟理解为(i+)+j还是i+(+j)?,printf(%d,%d,i,i+);,若i=3,若参数计算从左至右,则输出3,3,若从右至左,则输出4,3,上述问题看似复杂,最好上机实践.,2.9赋值运算符和赋值表达式,符号=为赋值运算符。,2.整型数据赋给实型变量,数值不变,但按实数形式存放.,1.将实型数据(无论单,双精度)赋给整型变量时,舍弃小数.,赋值时,两边类型若不一致,则按以下规则转换:,4.将intlongint,进行符号扩展。即:符号扩展,低16位long的低16位。,5.longintint则高16位截断。,3.字符型数据赋给整型变量时:,(2)字符带符号整型变量,则字符高位扩展。,(1)字符无符号整型变量,则存入低8位,高8位补零。,6.将unsignedint型longint高位补0。,原值传送,但数据大小不能超值。如:unsignedinta=65535;intb;b=a;则越界。,而位数相同部分赋值unsignedintintunsignedlonglongunsignedshortshort,7.非unsigned型长度相同的unsigned型数据,原样传送(包括符号位),一、复合赋值运算符:在号之前加一个其它运算符。,C语言规定:凡是二目运算符均可构成复合运算符。,例:a+=3;相当于a=a+3x=y+8;相当于x=x(y+8)x%=3;相当于x=x%,一般形式:,二、赋值表达式,例:x=10为一赋值表达式其中又可以是一个赋值表达式。,例:x=(y=10)相当于y=10;x=y由于赋值号为右结合性,于是()可省略,即为:x=y=10;,例:a+=a=aa(设a12),又:a=5+(c=6)c=6,a=11a=(b=4)+(c=6)b=4,c=6,a=10a=(b=10)/(c=2)b=10,c=2,a=5,进一步,还可用复合赋值运算符作下列运算:,步骤:aa144.a=aaa=aaa=12144=132a+=132a=a+(132)=264,2.10逗号运算符和逗号表达式,一般形式:表达式1,表达式2,其计算规则:先计算表达式1,再计算表达式2,最后值为表达式2的值。,例:a=35,a4则:先计算35,a15,a4=60,结果为60。,又如:(a=35,a4),a+5,扩展形式:表达式1,表达2,表达式n,结果为20(作为逗号表达式的值),a+5a即20a.,35=15a,a4=60(此时a值仍未变),结果为表达式n的值,注意:x=(a=3,63)赋值表达式,x18;,x=a=3,6a逗号表达式,x3.,逗号表达式主要用于某些语句中需一次计算多个表达式值的情况。如在循环语句中。,函数调用中的实参之间虽然用的是逗号间隔,但不是逗号表达式。如:printf(%d,%d,%d,a,b,c);,主讲教师:刘丹,C程序设计,第三章最简单的C程序设计,3.1C语句概述,C语句全部为可执行语句,对应若干机器操作指命令,C程序由许多源文件组成。(分别编译,然后连接),每一个源文件由预编译命令和若干函数组成。,每一个函数由说明部分和语句部分组成。,其结构如图,除说明部分外,重要部分为语句部分。,C程序,源程序文件1,源程序文件i,源程序文件n,预编译命令,函数1,函数n,说明部分,执行部分(语句),C语句分为五类,1.控制语句改变语句的执行顺序,共有9种控制语句:,if()else(条件),for()(循环),while()(循环),dowhile(循环),continue(结束本次循环),switch(多分支选择),break(中止整个循环),goto(转移),return(函数返回),()表示条件,表示语句,2.函数调用语句,3.表达式语句,printf();,表达式加;如:i=i+1;i+;x+y;其函数调用也可理解为表达式语句.,5.复合语句,4.空语句,;任何事情都不做.,用括起来的一系列语句。如:z=x+y;t=z/100;printf(%f,t);,3.2程序的三种基本结构,从结构化程序设计角度出发,程序有三种结构:,顺序结构,选择结构,循环结构,1.顺序结构,表示,先执行A,再执行B.,2.选择结构,表示为,存在某条件P,若P为真,则执行A,否则执行B。,3.循环结构,表示为,(1)当型结构当P条件成立时(T),反复执行A,直到P为“假”时才停止循环.,有两种结构:当型和直到型,(2)直到型,先执行A,再判断P,若为F,再执行A,如此反复,直到P为T.,另外:由选择结构可以派生出另一种基本结构多分支结构.,已证明:上述三种结构组成的程序可以解决全部的问题,所以任何一种高级语言都具备上述三种结构。,3.3赋值语句,由赋值表达式加分号;构成,与其它高级语言相比有以下不同点:,“=”为一运算符,由此,构成一赋值表达式,可出现于表达式能出现的任何地方:,if(a=b)0)t=a;,3.4数据输出,前面已论述:C语言本身无输入/出语句,由函数实现,如printf.等。,一般:C语言提供了一些标准的输入/出函数系统函数。,形式:putchar(c);,功能:向终端(一般为显示器)输出一个字符,其中c为字符型或整型变量,注意:用该函数时,须用预编译命令:#includestdio.h,3.4.1putchar函数字符输出函数,举例:#includestdio.hmain()chara,b,c;a=B;b=O;c=Y;putchar(a);putchar(b);putchar(C);,结果:BOY,putchar(a);putchar(n);putchar(b);putchar(n);putchar(c);putchar(n);,*利用putchar还可输出其它转义字符,结果:BOY,putchar(101);输出A,putchar();输出,putchar(015);输出,*若将最后一行改为:,3.4.2printf函数格式输出函数,一、printf的一般形式,是C语言中使用得最多的一种输出函数,它可一次按格式输出多个不同类型的数据。,printf(格式控制序列,输出表列);,输出表列用“,”号隔开的变量或表达式序列,其变量的值按对应的格式控制符所指定的格式输出。,格式控制序列用双引号“.”括起来的格式符序列。,格式控制序列由格式说明符和普通字符组成。,2.普通字符原样输出,1.格式说明符:由%接格式字符组成如:%f,%d等,例:a=3;b=4;printf(a=%d,b=%d,a,b);,结果:a=3,b=4,无论a,b中位数多少,均为上述形式:,a=123b=45,二、格式字符,如直接用%d,则将出错。,不同类型的数据输出,用不同格式字符:,1.d格式符十进制整数输出。,(1)%d:按数据的实际长度输出。,(2)%md:m表示输出字段宽度。若实际位数m,则m自动取n值,即保证n个字符正常输出。,(2)%ms,如果串长小于m,则在m列范围内,字符串向左靠,右补空格。,7.f格式符以小数形式输出单、双精度实数,有以下几种形式:,%m.nf,指定输出的数据共占m列,其中有n位小数。如果值长度小于m,则左端补空格。,%mn.f,与%m.nf基本相同,只是使输出的数值向左端靠,右端补空格。,%f,不指定字段宽度,由系统自动指定,使整数部分全部如数输出,并输出6位小数。,%f%m.nf%m.nf,8.e格式符以指数形式输出单,双精度实数基本形式:%e,结果:1.23456,共13列,6例,5例,可有%m.ne和%m.ne的形式,9.g格式符根据实数大小自动选择f格式,或e格式输出单双精度实数。,e+002,例:printf(%e,123.456),表3.1printf格式字符总结,许多情况与具体机器或系统有关,最好机器上一试。,表3.2附加格式说明字符,3.5数据输入,系统提供了若干函数,以提供从标准输入设备(键盘)上输入数据.,3.5.1getchar函数,本节先介绍两个输入函数.,形式:getchar(),功能:从标准输入装置(键盘)上输入一个字符,要求:有#includestdio.h预编译命令,例:#includestdio.hmain()charc;c=getchar();putchar(c);,3.5.2scanf函数,功能:在标准输入装置(键盘)上按指定格式输入各种类型的数据,地址表列变量的地址或字符串首地址。,形式:scanf(格式控制序列,地址表列),格式控制序列同printf(.),例:main()inta,b,c;scanf(%d%d%d,运行,机器等待你输入:345,结果3,4,5,注意:1.scanf函数顺用地址量接受数据。,2.输入数据的间隔为,Tab.空格,不能为“,”.,3.允许在格式符中插入附加字符。格式字符及附加字符的定义如下表3.3和表3.4,表3.3scanf格式字符,表3.4scanf附加的格式说明字符,4.对于输入unsigned型数据,不用%u,而用%d,%o,%x.,5.指定数据长度时,系统自动截取。,则当输入123456时,scanf(%3d%3d,a12,b34,7.输入数据不能规定精度.,6.在%后加“*”表示跳过相应的数据,则当输入为1234567,则a12b67,scanf(%2d%*3d%2d,scanf(%7.2f,是错误的,8.在格式控制中除格式说明符外若还有其它字符,则应按顺序原样输入。,例:scanf(%d,%d,则必须输入21,28,又如:scanf(a=%d,b=%d,c=%d,则输入:a=34,b=58,c=100,3.6程序举例,例1:输入三角形三边,求三角形面积。,例2:输入一个大写字母,要求系统改为小写字母输出。,例3.当b24ac0时,求ax2+bx+c=0的两个根。,主讲教师:刘丹,在C程序的三种结构中,分支结构是一重要结构,其中的P为条件,第四章逻辑运算和判断选取控制,问题:条件如何表达?逻辑运算、关系运算,4.1关系运算符,关系运算比较运算,如:a3为一比较运算,当a=5,a3成立。结果称为“真”,否则,如:a=1,a3不成立,为假。,上述表达式a3称为关系表达式。,4.1.1关系运算符及其优先次序,1.,=为同一优先级,=,!=等为同一优先级,但前者高于后者。,2.关系运算符优先级低于算术运算符。,C语言提供了六种关系运算符=!=,优先级为:,3.关系运算符优先级高于赋值运算符。,如下图:,举例:ca+bc(a+b),ab!=c(ab)!=c,a=bc),4.1.2关系表达式,关系表达式的结果值规定为1或0.,如:ab,a+bb+c,(a=3)(b=5),ab,(ab)(bb)=c成立1,b+cb则ab值为1,所以d=1.,f=abcab为1,abc为0,所以f=0.,4.2逻辑运算符和逻辑表达式,用逻辑运算符将关系表达式、逻辑表达式连接起来的式子逻辑表达式。,4.2.1逻辑运算符及优先级,三种:elseprintf(%d,y);,形式3if(表达式1)语句1,elseif(表达式2)语句2,elseif(表达式3)语句3,elseif(表达式n)语句n,else语句n,流程:,表达1,表达2,表达3,表达n,语句1,语句2,语句3,语句n,语句n,语句1,0,=0,=0,0,0,0,如:if(3)prinft(o.k);if(a),1.表达式可以是逻辑、关系,甚至是算术表达式。,2.上述形式中的语句必须以分号结束,3.上述形式中的语句可以是由括起来的复合语句。此时,在外可以不用分号.,注意的问题:,main()floata,b,t;scabf(%f,%f,例4.1输入两个实数,按代数值由小到大次序输出这两个数。,3.6,3.23.20,3.60,运行情况如下:,例4.2输入三个数,按大小顺序输出。,main()floata,b,c,t;scanf(%f,%f,%f,if(bc)t=b;b=c;c=t;printf(%5.2f,%5.2f,%5.2f,a,b,c);,运行情况如下:,3,7,11.00,3.00,7.00,4.3.2.if语句的嵌套,if(表达式1),内嵌if,else,内嵌,注意:else与最近的if配对.,一般形式,在上述形式的if语句中,又可以是if语句称为嵌套。,if(表达式2)语句1,if(表达式3)语句3,else语句2,else语句4,例:if(),if()语句2else语句3,if()if()语句1else,所以:必要时加.,if()语句1else,例4.3有一函数,y=,1(x0),编一程序,输入一个x值,输出y值。,有以下几种写法,请判断哪些是正确的?,程序1:main()intx,y;scanf(d,if(x=0)if(x0)y=1;elsey=0;elsey=1;,程序3:将上述if语句改为:y=1;if(x!=0)if(x0)y=1;elsey=0;,程序4:y=0;if(x=0)if(x0)y=1;elsey=1;,4.3.3条件运算符,C语言提供了一个简单的条件赋值语句或条件表达式。,问题:当判断条件不论是“真”是“假”,均给同一变量赋值时,能否简化语句书写?,条件运算符为?:三目运算符。,功能:先判表达式1,若非0,则值为表达式2的值,否则为表达式3的值。,一般形式,表达式1?表达式2:表达式3,max=ab?a:b;当ab.maxa.否则maxb,注:1.条件运算符优先于赋值运算符.例:max=(ab?a:b)可去掉(),2.条件运算符低于关系运算符和算术运算符。例:max=ab?a:b+1max=ab?a:(b+1)并不是max=(ab?a:b)+1,3.条件运算符结合性为从右至左.如:ab?a:cd?c:d相当于ab?a:(cd?c:d),4.条件表达式不能取代一般的if语句,只有当if的两个分支为给同一变量赋值时才可替代if.,if(ab)printf(%d,a);elseprintf(%d,b),由于printf.不是表达式,故不可用条件表达式,但可为:printf(%d,ab?a:b);,5.表达式1、表达式2、表达式3可类型不同。,main()charch;scanf(%c,printf(%c,ch),例4.4输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。,运行结果如下:Aa,4.4switch语句开关语句,问题:当某一表达式有n个取值,每一取值执行一语句,则如果用内嵌if十分繁锁,而用switch简单.,一般形式:switch(表达式)case常量表达式1:语句1case常量表达式2:语句2case常量表达式n:语句ndefault:语句n+1,例:根据成绩等级打印百分数段.,switch(grade),caseA:printf(85100n);,caseB:printf(7084n);,caseC:printf(6069n);,caseD:printf(60n);break;caseD:printf(60n);break;,4.5程序举例,例1写一程序,输入年号,判断是否为闰年。,1.算法:根据闰年的判断条件,当年号能被4整除但不能被100整除时,它为闰年。,当年号能被100整除又能被400整除时,它为闰年。,设用变量year表示年号,leap为待置值变量,当year为闰年:leap1,否则leap0.,2.流程图,leap%400=0,leap1,leap=0,打印非闰年,打印是闰年,结束,leap1,yes,No,yes,No,A,3.程序:,main()intyear,leap;scanf(%d,elseleap=0;,elseleap=1;elseleap=0;if(leap)printf(%dis,year);elseprintf(%disnot,year);printf(aleapyearn);,运行情况如下:,20002000isaleapyear,19891989isnotaleapyear,上述条件也可用一个逻辑表达式表示:if(year%4=0),例2:求ax2+bx+c=0方程的解,例3:P62请同学们阅读,C程序设计,主讲教师:刘丹,第五章循环控制,5.1概述,前面已介绍了顺序结构,选择结构,本章介绍循环结构。,如:,sum=1+2+3+100;,实际问题:一组重复执行的语句。,则用循环结构解决。,C语言用四种形式循环,2.while语句,3.dowhile语句,4.for语句0,1.if语句与goto语句,5.2goto语句及与if语句构成循环,1.goto语句,2.与if构成循环.,例:求,main()inti,sum=0;,形式:goto标号;,功能:无条件转向标号处。,标号:用标识符命名。,i=1;loop:if(i=100)sum=sum+i;i+;gotoloop;printf(%d,sum);,运行结果如下:5050,main()intsum=0,i=0;loop:sum=sum+i;i+;if(i=100)gotoloop;printf(sum=%d,sum);,本例相当于当型循环,若改为直到型:,5.3while语句,为了使程序的结构化功能强,应尽量少用goto语句。,1.形式:while(表达式)语句,2.执行过程:先判断表达式的值。若0.则执行其后面的语句,否则while执行完毕。,专门的当型循环语句while语句,3.流程图:,将上述例子用while语句写出while(i=100)sum+=i;i+;,语句中应有使表达式=0的语句。否则会出现无限循环死循环。,注:while后面的语句一般为复合语句,即:加,5.4dowhile语句,一种专门的“直到型”循环语句。,2.执行过程:先执行语句,再判表达式的值,若0,再执行语句,否则结束循环,3.流程:,1.形式:do语句while(表达式);,main()inti,sum=0;i=1;dosum=sum+i;i+;while(i=100);printf(%d,sum);,程序如下:,while语句与dowhile语句的区别:当第一次执行时,若表达式=0时,则while语句与dowhile有所不同,dowhile执行一次后面的语句,而while不执行。,5.5for语句,1.形式,首先计算表达式1,接着执行表达式2,若表达式2的值0,则执行语句,接着计算表达式3,再判断表达式2的值.依此重复下去,直到表达式2的值=0(假)。,一种形式更为灵活的循环语句。,2.执行过程,for(表达式1;表达式2;表达式3)语句,3.流程:,计算表达式1,求表达式2值,语句,计算表达式3,结束for语句,=0(假),0(真),用for语句写出上述例子,for用while代替的流程表达式1;while(表达式2)语句表达式3;,for(i=1;ib)i=b;j=a;for(;i=j;i+)sum=sum+i;printf(nsum=%d,sum);,表达式2一般不可省略,否则为无限循环,相当于:while(1)sum=sum+i;i+;,例:for(i=1;i+)sum=sum+i;,相当于条件永真、永不为0,若用while表示,表达式3亦可省略,但在循环体中须有语句修改循环变量;以使表达式2在某一时刻为0而正常结束循环。,例:for(sum=0,i=1;i=100;)sum=sum+v;i+;,若同时省略表达式1,表达式3,则相当于while(表达式2)语句。,相当于while(i=100)sum:=i;i+;,例:for(;i=100,)sum+=i;i+;,三个表达式均省略即for(;)语句则相当于while(1)语句.,表达式1、表达式3可以是逗号表达式,以使循环变量值在修改时可以对其它变量赋值。,如for(sum=0,i=1;i=100;i+,i+)sum=0;for(i=1;i100时结束。,for(r=1;r100)break;printf(%f,area);,5.8.1break语句,从结构化程序要求出发,用break,退出循环,进入for语句的下一条语句。,注:break只能用于循环语句和switch语句。,5.8.2continuce语句,main()intn;for(n=100;n200;n+)if(n%3!=0)printf(%d,n);,问题:编写程序,打印100200中不能被3整除的数。,换一种方式:main()intn;for(n=100;n2),程序如下:,main()longintf1,f2;inti;f1=1;f2=1;for(i=1;i=20;i+)printf(%12ld%12ld,f1,f2);,if(i%2=0)printf(n);f1=f1+f2;f2=f2+f1;,图5.13,运行结果为:,153423315971094675025514229352457824157817,18553772584177111211393832040570288739088169,213896104181286571964181346269922746563245986,321144987676546368317811217830914930352102334155,判一个数m是否为素数的方法:,每打印10个数,换一次行。,当用2,3,的整数去除它时均不能除,尽,则为素数。,程序如下:#includemath.hmain(),例2.求100200的素数.,intm,k,i,n=0;for(m=101;m=k+1)printf(%d,m);n=n+1;,101103107109113127131137139149151157163167173179181191193197199,运行结果如下:,C程序设计,主讲教师:刘丹,第六章数组,前面所用到的数据均为基本类型(整、实、字符),为了丰富数据类型,须提供强有力的数据表达方式。C语言提供了一种构造类型数据由基本类型按某一规则组合在一起。,其中数组:同一种(基本)类型按一定顺序组合在一起的数据类型。,6.1一维数组,6.1.1一维数组的定义,1.数组名的确定方法同变量名。,2.C语言用方括号表示数组元数个数。,形式:类型说明符数组名常量表达式;,例:inta20;floatx100;,3.常量表达式为常量和符号常量。不允许有变量,其表达式的值代表了元素的个数。,例:inta20;表示有20个元素且元素从0开始编排:a0,a1,a19,4.可在定义时对静态数组和外部存储(全局)数组赋初值,方法如下:,对部分元素赋初值staticinta10=0,1,2,3,4;,静态,对全部元素赋初值staticinta10=10,11,12,13,14,15,16,17,18,19,如此,只有前5个元素初值确定,后5个元素由系统设置。,如对数组元素赋同一初值,必须一一写出:staticinta10=0,0,0,0,0,0,0,0,0,0;不可写成:staticinta10*0;,若赋全部元素的初值,可省略常量表达式a=0,1,2,3;表示a4,即只有4个元素。,6.1.2一维数组的引用,2.引用方式:数组名下标代表了一个元素,等价一个同类型的变量。,3.一般地,一维数组各元素分配在连续地内存单元之中。,1.须象使用变量那样,先定义,后使用,例:a05+a16为正确的算术表达式,6.1.3一维数组的应用,用循环for实现:for(i=2;i20;i+)fi=fi2+fi1;,例:求Fibonacci数列。定义数组,并赋初值staticintf20=1,1;,注意:下标越界问题:i=2且i20,程序如下:mian()inti;staticintf20=1,1;for(i=2;i20;i+)fi=fi2+fi1;for(i=0;in1,打印结果,结束,内循环,外循环,B,A,No,Yes,Yes,No,程序:main()inta11;inti,j,t;printf(pleaseinput10n:n);for(i=1;iaj),t=ai;ai=aj;aj=t;printf(thesortednumbers:n);for(i=1;i=10;i+)printf(%d,ai;,另一种排序法:冒泡排序法(详见教材),6.2二维数组,6.2.1二维数组的定义,1.不可将定义写为inta4,10。,形式类型说明符数组名常量表达式常量表达式,例:inta410;floatx820;,2.可将二维数组的元素看成为若干个特殊的一维数组。如:intb34;,则:有三个特殊的一维数组b0,b1,b2,每一个又有四个元素:b00,b01,b02,b03,b10,b11,b12,b13,b20,b21,b22,b23,b30,b31,b32,b33,3.二维数组的存放方式为:按行存放。由此可推广至三维、n维数组的定义和存放。即:最右边的下标变化最快。,4.初始化:按行给二维数组赋初值:staticinta34=1,2,3,4,5,6,7,8,9,10,11,12,;可以去掉其中的。,可以对部分元素赋初值,但需表达清楚。如:staticinta34=1,2,3,8。,可通过赋初值决定数组大小。如为二维,则只可省略第一维的大小.staticinta4=1,2,3,12;,6.2.2二维数组元素的引用,形式:数组名下标下标,其中的下标为整型表达式,但不得越界。与一维数组元素一样,二维数组元素相当于同类型的简单变量。,6.2.3程序举例,程序如下:,main()staticinta23=1,2,3,4,5,6;staticintb32,i,j;,例1将一个二维数组行和列元素互换,存到另一个二维数组中。例如:,printf(arraya:n);for(i=0;i=1;i+)for(j=0;j=2;j+)printf(%5d,aij);bji=aij;printf(n);printf(arrayb:n);for(i=0;i=0.0001);return(x);,main()/*主函数*/floatx1,x2,f1,f2,x;doprintf(inputx1,x2:n);scanf(%f,%f,while(f1*f2=0);x=root(x1,x2);printf(Arootofequationis%8.4f,x);,运行情况如下:inputx1,x2:2,6Arootofequationis5.000,7.4递归调用,递归:一个函数在其函数体中又出现直接或间接地调用自身的语句.,以上仅给出了递归的概念.,显然:上述例子会无限递归(无限执行)。所以,在递归调用时都有条件限制。,即:条件成立,调用递归,否则结束。,一个最常用的例子:求n!,1.从数学上定义,2.程序floatfac(n)intn;floatf;if(n%cn,getone,putone);voidhanoi(n,one,two,three)/*将n个盘从one借助two,移动three*/charone,two,three;,intn;if(n=1)move(one,three);elsehanoi(n1,one,three,two);move(one,three);hanoi(n1,two,one,three);,main()intm;printf(inputthenumberofdisdes:);scanf(%d,运行情况如下:inputthe
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 自动化施工方案
- 幼儿园大班《滑梯的回忆》教案
- 建筑施工特种作业-高处作业吊篮安装拆卸工真题库-2
- 容错性定义题目及答案
- 1 1 集合-2026版53高考数学总复习A版精炼
- 2023-2024学年云南省保山市高二下学期期末质量检测数学试题(解析版)
- 2023-2024学年山东省青岛市莱西市高二下学期期末考试数学试题(解析版)
- 新疆盛鼎龙新材料科技有限责任公司2500吨-年高效偶联剂5000吨-年甲基苯基硅油及3万吨-年硅酮胶项目环评报告
- 2025年秋三年级上册语文同步教案 8 总也倒不了的老屋
- 物流公司和客户合作协议
- 华为大学人才培养与发展实践
- 年产12000吨水合肼(100%)项目环评报告书
- 《有机波谱分析》期末考试试卷及参考答案
- 最详细的整车开发流程
- 部编版七年级历史(下)材料论述题专项训练
- 年产1000吨乳酸的生产工艺设计
- 博克服装CAD制版说明操作手册(共95页)
- 光电效应测普朗克常数-实验报告
- (完整word版)数据模型与决策课程案例分析
- 自制桁架移动式操作平台施工方案
- 物业服务参与校园文化建设及举办大型活动配合措施
评论
0/150
提交评论