c++全册配套完整课件3_第1页
c++全册配套完整课件3_第2页
c++全册配套完整课件3_第3页
c++全册配套完整课件3_第4页
c++全册配套完整课件3_第5页
已阅读5页,还剩278页未读 继续免费阅读

下载本文档

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

文档简介

c++全册配套完整课件3C

语言程序设计但愿她是你知识大厦的又一块基石。但愿她是开启你智慧的又一把钥匙!CLanguageProgramming高级语言的概念

计算机的语言在发展的过程中经历了三个阶段:如:表示2+301110000110101000010MOV

AC,3ADD

AC,22+3面向机器的二进制语言、CPU直接运行。面向机器符号化语言,翻译后运行。面向问题的类自然语言,翻译后运行。编译或解释系统SourceObject机器语言汇编语言高级语言

语言的基本元素、构词方法、句法、程序结构等规则的集合。解决特定问题的步骤描述。结构化程序设计的思想方法。学习的层次语法算法方法

把我所考察的每一个难题,都尽可能地分成细小的部分,直到可以而且适于加以圆满解决的程度为止。

———笛卡尔(法)实践FromRequirementtoProgramRequirement:Triangle’sareaInput:a、b、cabcInput:a,b,cOutputareaBlackboxFromRequirementtoProgram约束:任意两边和大于第三边。第一章C语言概论Chapter1Introduction1.1C语言的特点C语言是由DennisMRitchie和BrianWKernighan于1972年在B语言的基础上提出的,他们用C语言重写了在PDP–11小型机上的Unix,并取得了成功。C语言的特点:C语言功能完善、效率高。C语言可以对硬件操作,是一种中级语言。C语言是结构化的程序设计语言。C语言具有丰富的数据类型和运算类型。C语言具有良好的移植性。C语言书写灵活,表达简洁。1.2C语言的基本程序结构

实例:输入两个数及其算术运算关系,输出运算结果。/*ThisismyfirstCprogramfilename:first.c*/#include<stdio.h>voidmain(void){

charch;int

iA,iB,c;scanf(“%d%c%d”,&iA,&ch,&iB);c=fun(iA,ch,iB);printf(“%d%c%d=%d”,iA,ch,iB,c);}intfun(intx,charop,inty){intz;switch(op){case‘+’:z=x+y;break;case‘-‘:z=x-y;break;case‘*’:z=x*y;break;case‘/’:z=x/y;}returnz;/*返回运算结果*/}子函数主函数chp1ex1程序结构说明

⒈程序是由函数组成的,函数是由语句组成的。其中主函数有且唯一,主函数名固定为main。子函数可有可无也可以有多个。

⒉C语言的系统构词必须用小写,用户构词可以大小写混用,各词之间用一个或几个space分隔。

⒊C语言的语句用;作为结束,因此,一句可以用一行或几行书写,但不能割裂构词。

⒋程序中可通过/*…(注释内容)…*/

包含对程序的注释。注释在编译时忽略注释,不产生代码。⒌程序中可以包含编译预处理命令。1.3C语言的词法⒈C语言的字符集⑴字母:A、a、B、b…、Z、z52个⑵数字符号:0、1…、910个⑶特殊符号:+-*/…⒉系统保留字系统占用词(共32个)auto、break、case、char、const、continue、default、do、double、else、enum、extern、float、for、goto、if、int、long、register、return、short、signed、sizeof、static、struct、switch、typedef、union、unsigned、void、volatile、while建议不要使用:define、undef、include、ifdef、ifndef、endif、line、error、elif、pragma⒊标识符(用户构词规则)

作用:用户为各种自定义数据命名。组成规则:⑴字母和数字以及下划线_组成。⑵以字母和下划线_开头。⑶长度不超过31个字符。⑷不能使用保留字。aa1b_iArea_fLoadiStatusfaS2Abinta/1注意:系统区分大小写字母。

aBcAbc1.4

计算机算法的概念⒈算法(Algorithm)的定义:

广义地讲:算法是解决问题的逻辑步骤,是对特定问题求解步骤的一种描述。计算机算法:是用程序解决问题的逻辑步骤,是指令的有限序列。

只有通过算法能够描述出来的问题,才能够通过计算机求解。能够用算法描述的问题称为可以形式化的问题。正确的算法有三个条件:

⑴每个逻辑步骤有可以实现的语句来完成;⑵每个步骤间的关系是唯一的;⑶算法要能终止(防止死循环)。算法的两个关键要素:动作(Action);顺序(Order)。算法举例⒈求数列n=1+2+…+m的值n,当n>10000时结束。

⒉欧几里德求m,n(m>n)的最大公约数算法S1:mModn

kS2:k不为0:

nm,kn

(原除数变成新的被除数,余数变成新的除数)。重复S1

否则:到S3。S3:输出n的值为最大公约数。步骤:S1:初始化0n,0tS2:t+1tn+tnS3:n>10000?

满足到S4,否则到S2。S4:OUTPUTn⒉算法与计算方法计算方法(ComputationalMethod):

求数学近似解的方法,如SinX=X-X3/3!+X5/5!-X7/7!+…算法(Algorithm):逻辑步骤,解决问题的过程。⒊算法的特征有穷性:在有限的时间和有限的资源下完成算法;确定性:各步骤之间的关系要确定;有输入:有0到多个原始数据输入;有输出:有结果输出;可行性:可以编程实现;高效性:执行速度快、占用资源少;健壮性:对数据响应正确。算法确定性示例商店a图书馆l三岔路口b如果走近路如果路过医院如果路过教室医院h教室s死过程abif(dmin)blelseif(to

h)bh,hlelseif(tos)bs,slendabif(toh)bh,hlelseif(tos)bs,slelseif(dmin)blend⒋算法的表示自然语言伪代码图形工具——流程图1.5程序流程图

概念:以特定的图形符号加上说明,表示算法的图,称为流程图或框图。规则:从上到下,从左到右。符号及其意义:流程线连接点处理框判断框I/O框过程框端点框

⒈用框图描述函数

1x0y=

-1

x<0输入xAx0?y=1y=-1yesnoA输出y流程图描述算法举例startend⒉用框图描述求s=1+2+…+100的算法。start1

t0ss+tst+1tt>100?noyesOutputsA0A0end1.6C语言上机的过程编辑startf.c编译语法错?有无f.obj连接、运行逻辑错?有无f.exeendSourceObjectExecutable⒈用程序流程图描述算法

1x>0y=0x=0-1x<0思考题:

⒉用框图描述,欧几里德求最大公约数算法。⒊从生活或学习中找出可以用算法描述的一件事,并通过符号化的伪语言以及框图加以抽象的描述。TheTipofChap.2数据表示及其类型运算及表达式输入/输出程序的基本处理方式第二章C语言基础程序处理的基本过程开始输入数据x=2,y=3外设z=x+y数据处理输出数据5外设结束数据表示主要内容⒈数据及其表示方法;

⒉数据的基本运算;

⒊基本输入输出。

程序是对数据按照算法处理,并输出结果的过程,因此,以上三个问题是程序设计的基本问题。2.1基本数据类型1/2?

数据是对客观事物特征抽象的符号化表示,客观事物不同,表示的方法也不同(人数以整数表示,圆面积用小数表示,灯的状态用开关表示,信件要用文字表示),计算机的处理方法也不同,因此根据程序处理的数据对象,应规定数据的类型。

计算机由于工程的限制,只能在有限精度和有限范围内在工程上近似地描述操作的对象——数据。

数据类型决定了数据的如下特征:⑴数据的外部表示方式和内部存储方式不同;⑵表示的范围和精度不同;⑶对数据的处理方式不同。C语言的数据类型C语言的数据类型基本类型字符型char浮点型floatdouble构造类型数组、结构、联合、枚举型enum指针类型空类型void整型int2.2常量(Constant)及其类型⒈常量的概念

在程序中不能改变的量称为常量。常量的类型由数据的外部表现形式确定。⒉常量的外部形式及其确定的类型⑴整型常量的表示

整型常量根据表示的范围可以有一般整型和长整型,还可以表示为十进制、八进制、十六进制形式。一般整型常量的表示进制表示举例范围字节数十进制2304-32768~+327672八进制

044000~0177777

2十六进制0xaa000x0000~0xffff2长整型常量的表示进制表示举例范围字节数十进制-21234l

-231~+231-1

4八进制

04400l

0~037777777777

4十六进制0XAA00L

0x0000----0xffffffff4⑵浮点型常量的表示(只有十进制表示)

浮点型常量有两种表示方式:小数表示方法,指数表示方法。不区分单、双精度。小数表示方式规则:一个小数点、符号和至少一位数字。-2.01.0.11113-15.指数表示方式规则:规则:ne±m表示n×10

mn小数部分,整型常量或小数形式表示的实型常量。指数部分,两位整数。n决定精度,一般精度为7位;m决定范围,范围10-38到10+38,当超过范围时称为“溢出”,小于10-38称为下溢,当0处理,大于10+38,称为上溢,系统出错!123.456

表示为0.123456E+3-10000000

表示为-1e70.0000123

表示为0.123e-4⑶字符常量的表示

表示ASCII字符集中的一个字符。字符有一个整型值,即该字符的ASCII码值。表示方法:’a’、’!’

。撇号定界的一个字符。值为:97⑷字符串常量的表示

双引号“定界的字符序列。系统会在最后一个字符后加NULL(ASCII码值为0),标志字符串的结束。如:”HEFEI”

”Hello!”

’a’和”a”的区别?内部’a’:97”a”:97NULL72101108108111330Hello!\0”Hello!”在内存中的存储结构:⑸转义字符

转义字符是C语言表示字符的特殊方法,用来表示ASCII字符集中的控制字符,以及系统占用字符如:”。表示方法:①\字符;②

\八进制(十六进制整数,小于256) \a表示BELL \b 表示BACKSPACE字母\n 表示换行

\r 表示回车

\t表示TAB

\\ 表示\

\? 表示?符号 \’ 表示’

\” 表示”

\0 表示NULL八进制十六进制数\x41\101代表’A’printf(“\007”);printf(“语文\n数学\n”);表示八进制或十六进制数作为ASCII码值所对应的字符。2.3变量(Variable)⒈变量的概念

变量是在程序中可以改变的量,变量具有三个特征:

⑴变量有名,用标识符命名;

⑵变量有类型;

⑶在程序中可以改变。

变量对应于内存中某一地址下的几个单元,变量名作为程序引用变量的标志。变量的类型确定了变量在内存中所占单元的数量及其表示的方式。变量的地址可以通过&运算获得。内存inta;a变量的引用标志&a对应a的地址。

整型变量占两个内存单元。变量必须先说明后使用!说明的目的是确定变量的名字和类型。⒉变量的说明形式:

type变量名表;/*以,分隔的标识符表*/inta,b,c;type是类型说明词,对于整型和字符型可加修饰说明。基本类型说明符:int、char、float、double修饰说明和基本说明的对应关系修饰说明词可用于修饰的基本类型singed/unsignedint、charshort/longintlonginta,b,c;⑴整型变量说明说明词及性质如下:说明词含义范围Byteint有符号一般整型-32768~327672short[int]有符号短整型-32768~327672long[int]有符号长整型-231~+231-14unsigned无符号一般整型0~655352unsignedshort无符号短整型0~655352unsignedlong无符号长整型0~232-14shorta,b,c;inte,f,g;long_qs,num;unsignedd,e,f;⑵字符型变量的说明说明符所占字节数 范围char 1 -128~+127unsignedchar 1 0~255⑶浮点型变量的说明说明符所占字节数 范围精度float 4 10-38~10+38 7位double 8 10-308~10+308 16位浮点型变量包含精度和范围两个概念。⑴超过精度位数后的位数值不确定。floata;a=1.1111111111;⑵超过范围溢出(Overflow)。超出精度部分,不准确。floata,b,c;a=1.234e+20;b=2.345e+21;c=a*b;超出1038,溢出。

当运算结果大于10+38称为上溢,系统出错。当运算结果小于10-38称为下溢,当0处理。2.4基本运算与表达式

程序的核心是对数据按照算法进行处理(运算)。C语言提供了强大的数据运算功能。数据通过运算符连接的式子称为表达式,表达式根据运算关系对数据运算,并得到一个值。⒈变量赋值(Assignment)运算格式:

V=expression;/*将expression的值赋给变量V*/inta=2;/*说明赋值,编译时赋值。*/intb;b=3+2;/*说明后赋值,执行时赋值。*/说明:⑴=是赋值号(动词);⑵赋值运算的左值只能是变量。a=a+2;iCount=iCount+10;a+2=12;/*Error!*/⑶赋值号两边类型应该一致,如不一致,以变量类型转换。inta=2.5;/*2a*/⒉算术运算(Arithmeticoperators)功能:完成各种类型数据的加、减、乘、除及求余数运算。⑴双目算术运算(两个运算对象参加的运算)运算运算规则示例+加2+3-减a-b*乘2*(-a)/除12/3.0%求余数15%4

只能对整型或字符型数据运算。余数符号与被除数相同。注意:乘号不能省略!-12%5-2-12%(-5)1%2⑵自加、自减运算(单目运算)运算符前置后置运算关系++++aa++a=a+1

----aa--a=a-1说明:①运算对象只能是一个变量。②前置是先运算,后引用,而后置则是先引用,后运算。2++;/*Error!*/inti,x;i=5;x=i++;/*x=i;i=i+1;*/i=5;x=++i;/*i=i+1;x=i;*/#include<stdio.h>voidmain(void){inta=2,b=3,c;c=a+++b;printf(“%d”,c);}CHAP2EX1C语言尽可能多的从左向右结合符号形成运算符。⑶算术运算赋值运算符表达式示例运算关系+=a+=3a=a+3-=b-=cb=b-c*=a*=2a=a*2/=s/=ts=s/t%=a%=5a=a%5说明:①运算对象的左值只能是一个变量。(a+2)+=5;/*Error!*/②%=运算的对象,必须是整型或字符型。⑷算术运算的说明①运算中的类型问题运算对象的类型相同,运算结果取运算对象相同的类型。inta;floatb;b=2/3;/*0b0.0*/a=5.0/2.0;/*2.5a2*/

运算对象的类型不同,先将低等类型转换为高等类型后再进行运算,运算结果取高等类型。等级原则如下:charintlongdoublefloat2*16.0+15.0doubledoubledouble运算时可以实行类型的强制转换,格式如下:(type)expression只对当前表达式起作用。(float)a/(int)’c’+(float)(a+10)2+(int)fSum类型转换举例inta;floatb;intc;c=a*1.0+b*5+(float)’A’;idfic

d

d

ff

d

dcint注意:赋值运算右值表达式的类型转换以左值变量的类型为准。②运算的优先级

表达式的运算是分步骤进行的。因此当一个表达式中出现多种运算时,存在优先级的问题。算术运算的优先级如下:++、--、(type)单目运算*、/、%+、-=、op=相同优先级,结合顺序从左到右!3*4+6/a-6%3;相同优先级,结合顺序从右到左!inta,b=2,c=2;a=b*=c+=2;可以用()调整优先级。c=c+2;b=b*c;a=b;⒊条件运算运算格式:

e1?e2:e3e1、e2、e3为表达式,当e1非0时,运算结果取e2的值;当e1为0时,取e3的值。inta=2,b=3,c=-1,d;d=a?b:c;/*d为3*/a=0;d=a?b:c;/*d为-1*/⒋逗号表达式格式:

e1,e2,e3,…,en

用,分隔的表达式,计算顺序从左到右,表达式取值为en;⒌sizeof运算形式:sizeof数据对象;

sizeof(类型说明符);inta,b,c;b=sizeofa;/*b的值为2(TC)*/c=sizeof(float);/*c的值为4*/x=(a=5,a+6)*10;C语言常用数学函数

为方便用户使用,C语言系统定义了大量函数。数学函数主要目的是求解常用数学函数,如sinX等。数学函数的原型定义在系统的math.h头文件中。在使用此类函数时,应在程序的开始处加如下语句:

#include<math.h>函数数学含义sin(x)sinXcos(x)cosXtan(x)tgXfabs(x)|x|pow(x,y)xysqrt(x)log(x)lnxlog10(x)log10x使用方法:作为一个运算项参加表达式运算。

函数的参数(自变量)、函数的值都是double类型。z=sqrt(sin(x)*sin(x)+cos(y)*cos(y))2.5数据的输入输出Input&Output

C语言没有输入输出语句,输入输出是通过系统定义的标准函数来实现的。I/O函数的原型定义在stdio.h头文件中,在引用I/O函数时,应应在程序开始处加预处理语句包含头文件。#include<stdio.h>⒈输入输出的概念输入输出指的是内存变量或程序和外部设备间的数据交换。内存外设输入输出输入输出函数要描述:⑴输入输出的量;⑵输入输出的格式;⑶输入输出的设备。⒉格式输入输出函数⑴输出函数printf()格式:

printf(“输出格式字符串”,输出项列表);格式描述。用,分隔的常量、变量、表达式表。输出格式字符串可包含以下内容:①普通字符,如:a=②转义字符,如:\n

对于普通字符和转义字符在相应位置原样输出,其中%用%%。

printf(“\nabcd%%”);

输出结果:

abcd%③格式说明符组,说明输出项列表中的各项的输出格式。格式说名符组用%为开始标志。内容包含对一项输出对象的格式说明。%-7.5f格式说明类型表格式说明符说明量的类型d、i、o、x、u整型c字符型s字符串f、e、g浮点型

格式说明符应和输出的列表项对应,产生相应的输出。其中输出的表项应与格式说明符类型一致。printf(“a=%5d\nb=%f”,

2+3,

5.34);格式说明串的一般形式和意义%-

m.n

l

格式类型字符(一个字母)格式说明标志对齐方式:缺省为右对齐,-为左对齐。

宽度.精度(位数),宽度:输出总列数,精度:小数位数(或字符位数)。类型长度,缺省短整型,l表示long或double。#include<stdio.h>voidmain(void){floata;a=1.232326;printf(“a=%10.4f”,a);}CHAP2EX2各种类型数据输出举例⑴字符型输出charch=’b’;printf(“%5c,

%-5c,

%c”,ch,ch-32,’s’+1);输出结果:

b,B

,t⑵字符串输出#include<stdio.h>voidmain(void){charchString[]="China";printf("%s,%6s,%-6s\n",chString,chString,chString);printf(“%4s%6.2s%-6.2s","Hefei","Hefei","Hefei");}China,

China,

China

Hefei

HeHe

宽度不够,原样输出。m.n,m为总输出列数,n截取输出字符数。⑶整型输出(TC环境描述)#include<stdio.h>voidmain(void){unsignedinta=65535;intb=-2;printf("a=%d,%o,%x,%u",a,a,a,a);printf("\nb=%6d%8o%5X%6u",b,b,b,b);}a=-1,177777,ffff,65535b=

-2

177776FFFE

65534⑷浮点数输出include<stdio.h>voidmain(void){floatf=123.456;printf("%f,%10f,%10.2f,%-10.2f\n",f,-f,f,-f);}123.456001,-123.45600,

123.46,-123.46

小数保留两位,四舍五入截断。符号占一位!⑵输入函数scanf()格式:

scanf(“格式说明字符串”,输入变量地址列表);说明:①m域宽可自动截取,空格作为各数据项的分隔符。voidmain(void){inti,j;scanf("%3d%3d",&i,&j);printf("%d\n%d",i,j);}123456②实型变量输入时不能规定精度;scanf(“%7.2f”,&a);ERROR!

③数据输入用SPACE分隔,当格式字符用其他字符隔离,输入时也应在对应位置上输入相同的字符;voidmain(void){inti,j;scanf("i=%d,j=%d",&i,&j);printf("\n%d\n%d",i,j);}④输入项只能是变量,且必须用地址形式。⒉字符输入输出函数输入:getchar();输出:putchar();#include<stdio.h>voidmain(void){charch1,ch2='\n';

ch1=getchar();putchar(ch1);putchar(ch2);

putchar('a');}rra输入程序设计举例⒈已知:有一圆柱体,底半径为r,圆柱高为h。

求:底面积、表面积,底周长、体积。⑴定义变量fAread、fAreas,fLen,fV──输出;

r、h──输入。rh建立模型fLen=2

rfAread=r2,fAreas=2r2+2rh=2fAread+fLenhfV=fAreadh程序如下:#include<stdio.h>voidmain(void){floatfAread,fAreas,fLen,fV,r,h;/*说明变量*/scanf(“%f,%f”,&r,&h);/*输入原始数据*/fLen=2.*3.1415926*r;fAread=3.1415926*r*r;fAreas=2.0*fAread+fLen*h;fV=fAread*h;/*运算,并赋给变量*/printf(“%f\n%f\n%f\n%f\n”,fLen,fAread,fAreas,fV);

/*输出结果*/}CHAP2EX3⒉求一元二次方程ax2+bx+c=0的根#include<math.h>#include<stdio.h>voidmain(void){floata,b,c,x1,x2;scanf(“%f,%f,%f”,&a,&b,&c);x1=(-b+sqrt(b*b-4.*a*c))/(2.0*a);x2=(-b-sqrt(b*b-4.*a*c))/(2.0*a);printf(“x1=%7.2f\nx2=%7.2f”,x1,x2);}CHAP2EX4b*b-4.*a*c<0思考题总结各类型常量、变量的特征和操作方法。自己找一些代数式写出对应的C语言表达式。编程求圆锥体的体积。(个人作业)编程求扇形面积。(个人作业)结合数学问题用C编程求解。(个人作业,不少于2题)第三章C语言的基本控制结构Chapter3ControlFlow问题#include<stdio.h>#include<math.h>voidmain(void){floata,b,c,x1,x2;scanf(“%f,%f,%f”,&a,&b,&c);x1=(-b+sqrt(b*b-4.*a*c))/(2.0*a);x2=(-b-sqrt(b*b-4.*a*c))/(2.0*a);printf(“x1=%7.2f\nx2=%7.2f”,x1,x2);}b*b-4ac<0?一元二次方程根求解算法描述b2-4ac=0?yes求等根nob2-4ac>0?yes求实根no求复根问题:如何构造条件?如何根据条件实现不同算法?3.1程序的三种控制结构

结构化程序设计是软件设计的第三次革命。结构化程序设计的基础是采用三种程序的控制结构。1966年BÖHM&Jacopini

证明:只要三种控制结构就能表达用一个入口和一个出口框图所能表达的任何程序逻辑。三种控制结构如下:⒈顺序结构Sequence算法描述:

f;g;框图:f;g;⒉选择结构Selection(分支结构)算法描述:

if(e)f;elseg;框图:e?yesf;nog;⒊循环结构Repetition⑴当型循环whilecistruedofc?fYESNO⑵直到循环dofuntilcisfalsefc?YESNO三种控制结构有如下共同的特点:一个入口和一个出口;无死语句;无死循环。如何构造条件?⒋复合语句Compound Statement

概念:C语言可以用{}包括一系列的语句。一对{}所包含的内容称为一个复合语句。其中可以含有0到多条C语言语句。#include<stdio.h>voidmain(void)

{inta,b;scanf(“%d,%d”,&a,&b);

{inttemp;temp=a;a=b;b=temp;

}printf(“%d,%d”,a,b);}复合语句复合语句复合语句可以嵌套凡是可以出现单一语句的地方都可以使用复合语句。复合语句的作用:⒈作为分支和循环的块。⒉作为标识符的作用域。交换算法演示3.2关系运算和逻辑运算⒈关系运算(RelationalOperator)

关系运算是比较两个表达式的数值相互关系的运算。运算符比较的关系实例>大于a>b>=大于等于a>=b<小于2<1<=小于等于c<=d==等于1==c!=不等于1!=3

关系运算规则:参加运算的表达式的从左到右按关系运算符提供的关系进行比较,满足关系得到整型值1

,不满足关系得到整型值0。inta=1,b=3,c,d;c=a>b;d=a+2<=b+3;⒉逻辑运算(LogicalOperator)

逻辑运算运算时判断对象真、假的运算。C语言没有提供逻辑类型。任何类型的值都可以表示逻辑状态,如下表:表达式的值所对应的逻辑值表达式的值表示的逻辑关系非0真true0假false

运算对象非0代表逻辑真,是0代表逻辑假。也就是说任何类型的量都有逻辑值。逻辑运算的结果用整型值表示。运算结果为真时,得到整型值1;运算结果为假时,得到整型值0。inta=2,b=0;aba+bC语言的逻辑运算运算符逻辑关系举例&&逻辑与a>2&&a<3||逻辑或s<2||s>6!逻辑非!a其中,!运算是单目运算。逻辑运算演示⒊复杂逻辑关系的表示

在实际应用中,经常会遇到描述复杂的关系。如:判断x是否大于等于5或小于3。此类关系的描述在程序设计中会大量使用。035x<3||x>=50-23-2<x<3?x=4-2<x&&x<3表示数值关系的原则:开放区间用或;闭合区间用与。思考题⒈判断是否在一、三象限的表达式。⒉判断是否在如图圆环内的表达式。sqrt(x),代表对x开平方。⒊ch为字符变量,判断ch是否为字母的表达式。(ch>=’a’&&ch<=‘z’)||(ch>=’A’&&ch<=‘Z’)不是字母的表达式?⒋运算的优先级C语言允许所有基本类型的量参加同一表达式的运算,也允许所有类型的运算符出现在一个表达式中。因此,表达式值的类型如何确定,运算的先后顺序如何确定,必须通过一套规则解决。

为了便于调整优先级,设置()为最高优先级。相同优先级存在一个顺序称为结合顺序,结合顺序有从右向左或从左向右。⑴运算优先级第一原则:单目运算的优先级高于双目运算。第二原则:算术运算关系运算逻辑运算赋值运算表达式优先级举例说明:++a-b>c+d&&a>=b*34①②③④⑤⑥⑦注意:在无法确定优先级时,加()区分。简化表达式。c=b*=a+2c=(b*=(a+2))级别运算符结合顺序1()[]->.从左向右2!-++--(type)sizeof*&~从右向左3*/%从左向右4+-从左向右5<<>>(移位运算)从左向右6<<=>>=从左向右7==!=从左向右8&(位与运算)从左向右9^(位异或运算)从左向右10|(位或运算)从左向右11&&从左向右12||从左向右13?:从右向左14=op=从右向左15,从左向右优先级总表优先级特例

⒈自加、自减运算优先级遵循原则:前置:先运算后引用;

后置:先引用后运算。#include<stdio.h>voidmain(void){inta=3,b;b=a+++a++;printf(“b=%d”,b);b=++a+(++a);printf(“b=%d”,b);}CHAP3EX0⒉在逻辑运算中,如果逻辑值能够确定,则不再进行运算。inta=0,b=0++a||++b;printf(“a=%d\nb=%d”,a,b);a=0;a&&++b;/*b的值?*/++CHAP3EX13.3分支结构(选择结构Selection)

⒈if及if-else的三种结构。

由标准的分支结构可以演化成单分支、多分支结构。C语言的分支语句有if

、if–else、switch三种。

⑴if语句格式:

if(expression)statement;语句表达式,非0为yes,0为no。语句,可以是复合语句。流程图:e?statement;yesno举例:#include<stdio.h>voidmain(void){charch;ch=getchar();if(ch>=‘a’&&ch<=‘z’)ch-=32;putchar(ch);}CHAP3EX2⑵if–else结构格式:

if(expression)

stat1;

else stat2;语句或复合语句。流程图:e?falsestat2;stat1;true入口出口举例:输出|x|。#include<stdio.h>voidmain(void){intx;scanf(“%d”,&x);

if(x>=0)printf(“%d”,x);

else

printf(“%d”,-x);}⑶if–elseif结构(Muliline

)格式:

if(e1)

stat1;

elseif(e2)

stat2;

elseif(e3)

stat3;…

elseif(en-1)

statn-1;

elsestatn;

框图:e1?tstat1;fe2?tstat2;出口fen-1?tstatn-1;fstatn;n-1个条件,满足某个条件,执行对应的语句,然后到出口。ifelseif结构举例:征税问题:1000以下税率为3%1000~2000税率为4%2000~3000税率为5% 3000以上税率6%输入收入,求应缴税款。#include<stdio.h>voidmain(void){floatx,rate;scanf(“%f”,&x);

if(x<1000)rate=.03;elseif(x<2000)rate=.04;elseif(x<3000)rate=.05;elserate=.06;printf(“%f”,x*rate);}3/100?⑷if语句的嵌套对于如下的结构:

if(e1)stat1;

elsestat2;在stat1或stat2中又含有if结构:if(e2)stat3;elsestat4;称为if结构的嵌套。各种if结构都可以嵌套。

如求符号函数:

-1(x<0)y=0(x=0)1(x>0)#include<stdio.h>voidmain(void){intx,y;scanf(“%d”,&x);if(x<0)y=-1;else

if(x==0)y=0;

else

y=1;printf(“x=%d,y=%d\n”,x,y);}外层内层

在外层else语句中,含有一个if结构。说明:①书写采取缩进形式,便于区分。内层缩进。②else与最近的if相匹配,从内到外。y=-1;if(x!=0)if(x>0)y=1;elsey=0;x==0结果?举例:求一元二次方程ax2+bx+c=0的根。#include<stdio.h>#include<math.h>voidmain(void){floata,b,c,d,x1,x2;scanf(“%f,%f,%f”,&a,&b,&c);d=b*b-4.0*a*c;if(fabs(d)<1.0e-6){printf(“\nx1=x2=,%f”,-b/(2.0*a));}else{

if(d>0)

{

printf(“\nx1=%f”,(-b+(float)sqrt(d))/(2.0*a));printf(“\nx2=%f”,(-b-(float)sqrt(d))/(2.0*a));

}

else

{

printf(“\nx1=%f+i%f”,-b/(2.0*a),(float)sqrt(-d)/(2.0*a));printf(“\nx2=%f-i%f”,-b/(2.0*a),(float)sqrt(-d)/(2.0*a));

}}}外层内层求相等实根。求不等实根。求共扼复根。CHAP3EX4

判断实型量相等或不等用误差的方法。flaota=1.0/*a=1.000001或0.999999*/a==1.0?⒉switch语句(多分支结构)格式:switch

(expression)

{case常量表达式1:statement1;case常量表达式2:statement2;…case常量表达式n-1:statementn-1;default:statementn;

}只能是整型或字符型表达式。

整型字符型常量表达式。表达式的值要互不能相等!

流程:①先求expression的值。②依次比较expression和各常量表达式的值。

③如果与第i个常量表达式相等,则执行第i条以后的语句。④如果都不相等,则执行default以后的语句。语句标号的概念:#include<stdio.h>voidmain(void){chargrade;grade=getchar();

switch(grade)

{

case‘A’:printf(“90—100\n”);

case‘B’:printf(“80—89\n’);

case‘C’:printf(“70—79\n”);

case‘D’:printf(“60—69\n”);

case‘E’:printf(“<60\n”);

default:printf(“error\n”);}}CHAP3EX5语句标号。break语句:格式:break;作用:中断switch流程。break;break;break;break;break;CHAP3EX6例:输出五分制对应的百分制范围。#include<stdio.h>voidmain(void){charchGrad;chGrad=getchar();

switch(chGrad){

case‘a’:case‘A’:

printf(“90—100\n”);break;case‘b’:case‘B’:printf(“80—89\n”);break;case‘c’:case‘C’:printf(“70—79\n”);break;case‘d’:case‘D’:printf(“60—69\n”);break;case‘e’:case‘E’:printf(“<60\n”);break;

default:printf(“DataError!\n”);

}}多个标号可以共用相同的语句。default语句可以省略。3.4

循环结构(Repetition)程序经常会重复执行某些相同的操作,如:求:s=1+2+3+4+…+100算法描述:①s=0;i=1;②s+=i;i++;③判断i是否小于等于100

如果i小于等于100,重复②;

否则,结束。此类根据“条件”重复执行相同算法的结构,称为循环。初始化部分。循环体。含有使条件趋假的语句。

循环的条件。注意:循环应在有限次完成。

C语言提供了三类实现循环的语句:

while,dowhile,for

⒈while循环(当型循环)格式:

while(expression)

statement;表达式:值非0,表示满足条件;值为0代表不满足条件。语句(复合语句),重复执行部分(循环体)。流程:e?truestatement;false含有使条件趋假的语句。举例:求s=1+2+3+4+…+100#include<stdio.h>voidmain(void){ints=0,i=1;

while(i<=100)

{s=s+i;/*s+=i;*/i++;}

printf(“s=%d\n”,s);}初始化部分循环体条件测试使条件趋假语句CHAP3EX7⒉do–while循环(直到型循环)格式:

do{

statement;}

while

(expression);流程:statement;e?truefalse含有使条件趋假的语句。while循环与do-while循环的区别:while循环先判条件,后执行循环体;do–while循环先执行循环体,后判条件。举例:求:30!#include<stdio.h>voidmain(void){floats=1.0;inti=1;

do{s*=i;i++;}while(i<=30);

printf(“30!=%f”,s);}初始化。循环体。测试条件。使条件趋假。CHAP3EX8思考题:用do-while实现s=1+2+…+100。用while实现30!。⒊for循环格式:

for

(e1;

e2;e3)

statement;流程:e1e2?truestatement;e3false举例:求:s=1+2+3+…+100#include<stdio.h>voidmain(void){ints=0,i;

for(i=1;i<=100;i++

)

{s=s+i;

}

printf(“s=%d”,s);}使e2趋假。在for循环中,e1、e2、e3都可以省略!e1省略

i=1;e3省略

i++;初值表达式。测试表达式。增值表达式。for循环实例

求100以内的偶数和。ints=0,i;for(i=2;i<100;i+=2){s+=i;}求500以内最大的5个能被50整除数的和。inti,j,s=0;for(j=500,i=0;i<5;i++,j-=50){s+=j;}从大到小输出100以内能被5整除的数。inti;for(i=100;i>=0;i-=5)printf(“%d\n”,i);inti,j,s=0;for(i=0,j=0;i+j<100;i++,++j){s+=i+j;}⒋循环应用的几个问题⑴循环的嵌套

概念:在一个循环的循环体内又包含一个完整的循环称为循环的嵌套。i123456789 11

11

2……1

9

j 22

12

2……2

9 99

19

2……9

9如打印一9

9的乘法表:i=1时,j从1变化到9,完i*j。多重循环打印9

9乘法表。#include<stdio.h>voidmain(void){inti,j;for(i=1;i<=9;i++){

printf(“\n“);}}外层循环内层循环说明:⒈内外层循环采用缩进形式。⒉while和do-while和for可以相互嵌套。

⒊执行次数为内层循环次数和外层循环次数的乘积。CHAP3EX9如何打印乘法表的一半?for(j=1;j<=9;j++){printf(“%4d“,i*j);}⑵循环的中断(break)和继续(continue)①循环的中断:break语句

概念:循环体中可以加分支,判断是否继续执行循环,break语句可以提前结束循环。举例:求:r=1—10的圆的面积,如圆面积大于100则中断。for(r=1;r<=10;r++){area=3.14159*r*r;

if(area>100)

break;

printf(“\n%f“,area);}满足条件,则退出循环。②继续循环:continue语句continue语句的作用是跳过本次循环剩余的循环体内容,执行下次循环。举例:求1—100内的偶数和。

s=0;for(n=1;n<=100;n++){

if(n%2!=0)

continue;

s+=n;}

满足条件,跳过本次循环体剩余内容,继续下次循环。ints=0,i;for(i=2;i<100;i=i+2)s+=i;⑶无限循环和空循环①条件为恒真的循环——无限循环while(1){…}do{…}while(1);for(;;){…}通过条件控制的break语句退出循环。例:程序等待直到输入字母A。for(;;){ch=getchar();if(ch==’A’)break;}②循环体为空语句的循环——空循环for(i=1;i<=MAX;i++)

;作用:程序延时。空语句{;}⑷goto语句格式:

gotoLabel/*Label:同一函数内语句前的标号。*/作用:转移到标号对应的语句上继续执行。loop:

if(i<=100){

sum=sum+i;i++;

gotoloop;

}循环和分支相互嵌套输入10个自然数统计其中偶数的个数及偶数值和。算法框图:start定义变量初始化循环?true输入偶数?true统计累加falsefalse输出结果end#include<stdio.h>voidmain(void){inti,ix,iCount=0,iSum=0;

for(i=1;i<=10;i++){

scanf(“%d\n”,&ix);

if(ix%2==0){iSum+=ix;iCount++;}

}printf(“Num=%d\nSum=%d”,iCount,iSum);}循环结构分支结构输入负数?do{

if(ix<=0)printf(“dateerror”);}while(ix<=0);

算法的健壮性注意:结构应完整的包含和被包含。程序设计的基本方法

根据计算机的特点,结合循环与分支结构在程序设计时常使两种常用的基本方法。枚举法(穷举法)迭代法

本专题将结合分支和循环介绍两种方法的基本思想和具体实现!枚举法Enumeration存在有限状态;其中某些状态满足特定条件。通过循环产生所有状态(枚举)。对每一状态,按条件进行状态测试,满足条件的状态,为所求的解。求100到200内的所有素数。通过循环使i从101变化到199(枚举所有状态)对每次循环的i进行是否是素数的测试,如果是素数,输出i。枚举法举例:⒈求100到200之间的所有素数(只能被1和自身整除的数)。对于自然数n,判断其是否为素数有以下三种方法:①判断n是否能被从2到n-1范围内的数整除;②判断n是否能被从2到(int)(n/2)范围的数整除;③判断n是否能被从2到(int)sqrt(n)范围的数整除;程序如下:#include<stdio.h>#include<math.h>voidmain(void){intn,j,s;

for(n=101;n<200;n+=2)

{

s=(int)sqrt((double)n);

for(j=2;j<=s;j++){if(n%j==0)break;}

if(j>s)

printf(“\n%d”,n);

}}枚举所有数构造,测试条件

如果n能被2到s的任意数整除,退出循环。如果n是素数,输出n。CHAP3EXA

⒉求水仙花数(条件:三位数的个、十、百位的方和等于该数。153==13+53+33

)。n为枚举变量,枚举初值100,枚举终值999。构造条件:取出n的个、十、百位数。测试是否满足条件,满足条件输出n。#include<stdio.h>voidmain(void){intn,a,b,c;

for(n=100;n<=999;n++){

a=n/100;b=n%100/10;c=n%10;

if(a*a*a+b*b*b+c*c*c==n) printf(“\n%d”,n);

}}枚举所有三位数构造条件测试条件取n的百位a、十位b、个位c。CHAP3EXB⒊爱因斯坦阶梯问题(不定范围的枚举)。

设有一阶梯,每步跨2阶,最后剩1阶;每步跨3阶,最后剩2阶;每步跨5阶,最后剩4阶;每步跨6阶,最后剩5阶;每步跨7阶,正好到阶梯顶。问共有多少阶梯。根据条件可以得出:台阶数一定是奇数且为7的倍数。枚举初值:k=7;

枚举公式:k=k+14

结束条件:满足(k%3==2)&&(k%5==4)&&(k%6==5)结束。#include<stdio.h>void

温馨提示

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

评论

0/150

提交评论