C语言第二章算法课件_第1页
C语言第二章算法课件_第2页
C语言第二章算法课件_第3页
C语言第二章算法课件_第4页
C语言第二章算法课件_第5页
已阅读5页,还剩143页未读 继续免费阅读

下载本文档

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

文档简介

第3章基本算法本章要点:算法的特征算法的表示方法程序设计的基本算法掌握程序的基本结构第3章基本算法本章要点:13.1程序与算法程序包括:(1)对数据的描述数据结构(2)对数据处理的描述算法算法(algorithm)是对特定问题求解步骤的一种描述。可将程序总结为:程序=算法+数据结构+程序设计方法+语言工具和环境3.1程序与算法程序包括:2C语言算法的主要特点如下:1.有穷性一个算法应该包含有限的操作步骤,而不能是无限的。

2.确定性算法中的每一个步骤应当是确定的,而不应当是含糊的(多义性),应是十分明确无误的。

3.有0个或多个输入。4.有一个或多个输出。5.有效性算法中的每一个步骤都应当有效的执行,并得到确定的结果。3.2算法的特征C语言算法的主要特点如下:3.2算法的特征3

3.3算法的表示方法(1)自然语言描述法(2)传统的流程图表示

常用符号有:(3)N-S流程图表示(4)伪代码表示算法(5)计算机语言表示算法起止框输入/输出框判断框处理框流程线连接点3.3算法的表示方法(1)自然语言描述法起止框输4一、顺序结构

BA(a)AB(b)先执行A操作,再执行B操作,两者是顺序执行关系。N-S结构流程图结构化程序设计的三种基本机构一、顺序结构5二、选择结构当P条件为真时,执行A模块,否则执行B模块。APB真假(a)P真假AB(b)二、选择结构当P条件为真时,执行A模块,否则执行B模块。AP6三、循环结构当P条件成立时,反复执行A,直到P为假。1.当型循环结构PA假真(a)当P为真A(b)当P为真三、循环结构当P条件成立时,反复执行A,直到P为假。1.当型72.直到型循环结构先执行A操作,再判断P是否为假,若P为假,再执行A,直到P为真为止。AP假真

(a)A直到P为真

(b)2.直到型循环结构先执行A操作,再判断P是否为假,若P为假,8算法举例1:对一个大于2的正整数,判断它是不是一个素数。方法:将n(其中n>2)作为被除数,将2到(n-1)各个整数轮流作为除数,如果都不能被整除,则n为素数。算法表示如下:S1:输入n的值S2:2i(i作为除数)

S3:n被i除,得余数rS4:如果r等于0,表示n能被i整除,则打印n“不是素数”,算法结束;否则执行S5S5:i+1iS6:如果in-1,返回S3;否则,打印n“是素数”,算法结束。算法举例1:对一个大于2的正整数,判断它是不是一个素数。9算法举例2:求1-1/2+1/3–1/4+…+1/99–1/100。S1:1signS2:1sumS3:2denoS4:(-1)*signsignS5:sign*(1/deno)termS6:sum+termsumS7:deno+1denoS8:若deno100返回S4;否则算法结束。算法举例2:求1-1/2+1/3–1/4+…+110算法举例3:用伪代码表示算法:用介于自然语言和计算机语言之间的文字和符号来描述算法

BEGIN1=>iwhile(i50){inputni和gi

i+1=>i}

1=>iwhile(i50){if(gi>=80)printni和gi

i+1=>i}END算法举例3:用伪代码表示算法:用介于自然语言和计算机语言11算法举例4:

用计算机语言表示算法

求1-1/2+1/3–1/4+…+1/99–1/100。S1:

1sS2:1sumS3:2dS4:(-1)*ssS5:s*(1/d)tS6:sum+tsumS7:d+1dS8:若d100返回S4;否则算法结束。main(){ints=1;floatd=2.0,sum=1.0,t;while(d<=100){s=-s;t=s/d;sum=sum+t;d=d+1;}printf(“%f”,sum);}算法举例4:用计算机语言表示算法求1-1/2+1/3123.4小结(1)算法是程序的灵魂,计算机程序设计的实质是算法的设计。(2)C语言算法的特点是:① 有穷性

② 确定性

③ 有0个或多个输入

④ 有一个或多个输出

有效性

(3)算法的表示① 用自然语言表示

② 用流程图表示算法,三种最基本的程序设计算法为:顺序结构,选择结构和循环结构。3.4小结(1)算法是程序的灵魂,计算机程序设计的实质是算133.5C语句介绍一、C程序结构C程序源程序文件1源程序文件2源程序文件n••••••预处理命令全局变量声明函数1函数n••••••函数首部函数体局部变量声明执行语句3.5C语句介绍一、C程序结构C程序源程序文件1源程序14二、C语句概述C语句分类:1.控制语句2.函数调用语句3.赋值语句4.空语句5.复合语句一条完整的C语句必须以“;”结束。“;”是一个语句不可缺少的一部分。二、C语句概述C语句分类:一条完整的C语句必须以151.控制语句:完成一定的控制功能。C有9种控制语句:⑴if()~else~(条件语句)⑵for()~(循环语句)⑶while()~(循环语句)⑷do~while()(循环语句)⑸continue(结束本次循环语句)⑹break(中止执行switch或循环语句)⑺switch(多分支选择语句)⑻goto(转向语句)⑼return(从函数返回语句)1.控制语句:完成一定的控制功能。C有9种控制语句:162.函数调用语句

由一次函数调用加一个“;”构成。如:printf(“HelloWorld!”);函数调用分号3.赋值语句由表达式加上“;”构成。如:x+4*y;算术表达式语句4*7,4+8;逗号表达式语句x=4*7;赋值表达式语句(赋值语句)2.函数调用语句由一次函数调用加一个“;”构成。174.空语句

由一个“;”构成。即:;作用:①程序转向点;②什么也不做的循环体。while(i<=11);5.复合语句

用{}括起的一组语句。如:if(x1>x2){y=x1*x1+x2;printf("y=%d",y);}不能省略不能加“;”4.空语句由一个“;”构成。即:;18说明:(1)复合语句中的每一个语句还可以是复合语句;(2)复合语句尽管可由多个语句组合,但它只相当于一个语句,在任何单一语句可以存在的地方,复合语句都可以存在。(3)在复合语句内,不仅可以有执行语句,还可以有定义部分,定义部分应该出现在可执行语句的前面。说明:(1)复合语句中的每一个语句还可以193.6顺序结构程序设计(顺序结构)(选择结构)(循环结构)3.6顺序结构程序设计(顺序结构)20特点:程序按语句从上到下的排列顺序依此执行,每条语句必须执行且只能执行一次,没有执行不到或执行多次的语句。例如:已知圆柱体半径6米,高7米,求体积。#definePI3.1415main(){floatr,h,s,v;r=6;h=7;s=PI*r*r;v=s*h;printf(“V=%f\n”,v);}特点:程序按语句从上到下的排列顺序依此执例如:已知圆柱体半径21例3.1输入三角形的三条边,求三角形的面积。分析:已知∶三角形的三条边a,b,c。求解∶三角形的面积area。计算公式∶设s=(a+b+c)/2area=开始给a,b,c赋值计算s=(a+b+c)/2计算area=结果输出结束#include<math.h>main(){floata,b,c,s,area;scanf(“%f%f%f”,&a,&b,&c);s=(a+b+c)/2.0;area=sqrt(s*(s-a)*(s-b)*(s-c));printf(“a=%fb=%fc=%fs=%f”,a,b,c,s);printf(“area=%f”,area);}例3.1输入三角形的三条边,求三角形的面积。分析:已知22例3.2从键盘输入一个大写字母,要求改用小写字母输出。分析:已知∶字符变量c1为大写字母。求解∶将字符变量c2中放入相应的小写字母。计算公式∶c2=c1+32(小写改成大写字母?)开始计算c2=c1+32输出c1结束输入一大写字母放入c1中输出c2#include<stdio.h>main(){charc1,c2;c1=getchar();/*键盘输入一个大写字母*/

printf(“%c,%d\n”,c1,c1);c2=c1+32;printf(“%c,%d\n”,c2,c2);}输入:A

输出:A,65

a,97

例3.2从键盘输入一个大写字母,要求改用小写字母输出。23例3.3求ax2+bx+c=0的根,a,b,c由键盘输入,设b2-4ac>0#include<math.h>main(){floata,b,c,disc,x1,x2,p,q;scanf("%f%f%f",&a,&b,&c);disc=b*b-4*a*c;p=-b/(2*a);q=sqrt(disc)/(2*a);x1=p+q;x2=p-q;printf(”x1=%fx2=%f",x1,x2);}运行情况:a=1,b=3,c=2x1=-1.000000x2=-2.000000例3.3求ax2+bx+c=0的根,a,b,c由键盘输入24例3.4输入一个三位数,依次输出该数的符号和百号,十位,个位数字

。#include<stdi.h>#include<math.h>main(){charc1,c2,c3,c4;intx;scanf(“%d”,&x); /*输入一个三位数*/c4=(x>=0?’+’:’-’); /*将x的符号存入c4中*/x=abs(x); /*求三位数的绝对值*/c3=x%10+48; /*获得个位数字,加48后转换为对应的字符*/x=x/10; /*获得x的前两位*/c2=x%10+48; /*获得十位数字,加48后转换为对应的字符*/c1=x/10+48; /*获得百位数字,加48后转换为对应的字符*/printf(“%c%c%c%c”,c4,c1,c2,c3);}运行情况:-345-345例3.4输入一个三位数,依次输出该数的符号和百号,十位,个253.7选择结构本节要点关系运算符与关系表达式逻辑运算符与逻辑表达式条件运算符与条件表达式if语句switch语句本章难点if语句的嵌套switch语句的使用3.7选择结构本节要点26C语言第二章算法课件273.7.1关系运算符和关系表达式

6种关系运算符:

①<(小于)②<=(小于或等于)③>(大于)④>=(大于或等于)⑤==(等于)⑥!=(不等于)3.7.1.1关系运算符结合性:自左向右3.7.1关系运算符和关系表达式6种关系运算符:3.28关系运算符的优先次序

与其它运算符优先级的比较:算术运算符关系运算符赋值运算符(高)(低)例如:c=d>a+b等效于:c=(d>(a+b))关系运算符的优先次序与其它运算符优先级的比较:算术运算符291.什么是关系表达式?3.7.1.2关系表达式如:(a>b)>(b<c)、‘a’<‘b’、x>y、s+f>d2.关系表达式的值运算结果∶逻辑值1——“真”,0——“假”如:设a=3,b=2,c=1求下面关系表达式的值:c>b(a-b)==1b+c<a值为0值为1值为0如果关系运算对象的类型不同,也要先进行类型转换。1.什么是关系表达式?3.7.1.2关系表达式如:(a>303.7.2逻辑运算符和逻辑表达式

3种逻辑运算符:

①!(逻辑非)②&&(逻辑与)③||(逻辑或)3.7.2.1逻辑运算符优先级(高)(低)如:!aa为真,则!a为假。a||ba、b之一为真,则a||b为真。a&&ba、b同时为真,则a&&b为真。3.7.2逻辑运算符和逻辑表达式3种逻辑运算符:3.7.31与其它运算符优先级的比较:(高)(低)

算术运算符

关系运算符

&&和||

赋值运算符例如:c=d>a+b&&a>b等效于:c=((d>(a+b))&&(a>b))与其它运算符优先级的比较:(高)(低)!321.什么是逻辑表达式?3.7.3逻辑表达式用逻辑运算符将逻辑运算对象连结起来的式子。如:(a>b)&&(b<c)、!a||a>b2.逻辑表达式的值运算结果∶逻辑值(只有假为0、真为1两种取值)如:5>3&&2||8<4‘b’&&’d’值为1值为1运算对象∶以数值非0为真、0为假1.什么是逻辑表达式?3.7.3逻辑表达式用逻辑运算符将33注意事项:(1)代数式不等式0<x<5必须写成(x>0)&&(x<5),而不能直接写成0<x<5。(2)C语言允许直接对数或字符进行逻辑运算。例如!5,结果为0。5&&‘c’,结果为1。因为字符‘c’的ASCII为非0值,非0值与非0值作与运算,结果为真。注意事项:343.7.4选择结构语句单分子选择if(表达式)语句3.7.4.1if语句执行过程:当表达式的值为“真”(非零)时,执行语句,否则,不执行语句。如:if(x>y)z=x;3.7.4选择结构语句单分子选择3.7.4.1if语句352.双分子语句if(表达式)语句1else语句2执行过程:当表达式的值为“真”(非零)时,执行语句1,否则,执行语句2。如:

if(x>y)z=x;

elsez=y;2.双分子语句执行过程:如:if(x>y)z=363.多分子语句if(表达式1)语句1elseif(表达式2)语句2elseif(表达式3)语句3:elseif(表达式m)语句melse语句n如:if(grade>=85)level=‘A’;elseif(grade>=70)level=‘B’;elseif(grade>=60)level=‘C’;elselevel=‘D’;3.多分子语句如:if(grade>=85)le37

if语句说明:

⑴if后面的表达式一般为逻辑表达式或关系表达式,也可以是任意数值类型表达式。该语句是合法的:if(3)printf(“ok!”);⑵if语句中的“语句”为一个简单语句或复合语句。

如:下面程序段是否有错?if(x>=0)printf(“Xispositive.”);x++;elseprintf(“Xisnegative.”);if(x>=0){printf(“Xispositive.”);x++;}elseprintf(“Xisnegative.”);if语句说明:⑴if后面的表达式一般为逻辑表达式或关384.if语句的嵌套

在if语句中又包含一个或多个if语句称为if语句的嵌套。一般形式:if(条件1)if(条件2)语句1else语句2elseif(条件3)语句3else语句4内嵌if内嵌if如:if(x>0)if(y>0)printf("x>0,y>0");elseprintf(“x>0,y<=0");elseif(y>0)printf(“x<=0,y>0");elseprintf(“x<=0,y<=0”);4.if语句的嵌套在if语句中又包39说明:else与if的匹配原则是:一个else应与其之前距离最近且没有与其它else配对的if配对。

if(n>6)if(n<12)printf(“6<n<12”);elseprintf(“n<=6”);if(n>6){if(n<12)printf(“6<n<12”);}elseprintf(“n<=6”);说明:else与if的匹配原则是:一个else应与其之前距离40缩排

#inclde<stdio.h>main(){intx;scanf(“%d”,&x);if(x>0){printf(“Xispositive.”);x=x+1;}elseprintf(“Xisnegative.”);}缩进缩进缩进缩排#inclde<stdio.h>缩进41用if语句实现选择结构举例

-1;x<0例:求y=0;x=0输入x值,输出y值。1;x>0main(){intx,y;scanf("%d",&x);if(x<0)y=-1;elseif(x==0)y=0;elsey=1;printf("x=%dy=%d",x,y);}用if语句实现选择结构举例42例:托运行李计费。用f代表收费,w代表重量,并将它们定义成实型数。则有关系:

w*0.205 (0<=w<=50)f=w*0.313 (50<w<=200)(w-120)*0.413+10*0.23 (w>200)main(){

floatf,m; printf(“inputweight:”); scanf(“%f”,&w); if(w>100) f=(w-120)*0.413+10*0.23; elseif(w>50) f=w*0.313; else f=w*0.205; printf(“w=%f,f=%f\n’,w,f);}例:托运行李计费。用f代表收费,w代表重量,并将它们定义433.7.5条件运算符1.条件运算符与条件表达式条件表达式的一般形式:表达式1?表达式2∶表达式3如:max=(a>b)?a:b;

若a=3,b=2,则max=?如:(a>b)?a:b

目的∶简化if语句。

if(a>b)max=a;elsemax=b;等效于:3.7.5条件运算符条件表达式的一般形式:表达式1?表44条件运算符的优先级:

算数运算符=>关系运算符=>逻辑运算符(除!)赋值运算符<=条件运算符如:x=a+b>c&&c>d?a+b:d等效于:x=((((a+b)>c)&&(c>d))?(a+b):d)条件运算符的结合方向:自右至左

如:a>b?a:c>d?c:d等效于:a>b?a:(c>d?c:d)条件运算符的优先级:算数运算符=>关系运算符=>逻辑452.条件表达式与if语句的比较

当if语句中嵌套的语句是赋值语句,而且两个分支都给同一个变量赋值时,条件表达式能替代if语句

。如下面的写法是错误的:a>0?printf(“abs(a)=%d\n”,a):printf(“abs(a)=%d\n”,(-1)*a);

此语句的本意是:if(a>0)printf(“abs(a)=%d\n”,a);elseprintf(“abs(a)=%d\n”,(-1)*a);可以改写为:printf(“abs(a)=%d\n”,a>0?a:(-1)*a);2.条件表达式与if语句的比较a>0?printf(46例:把输入字符中的小写字符转换成大写并输出

。#include<stdio.h>main(){charch;scanf("%c",&ch);ch=(ch>='a'&&ch<='z')?ch-32:ch;printf(“%c”,ch);}输入数据:b输出结果:B例:把输入字符中的小写字符转换成大写并输出。#includ47main(){inta,b,c,t,max;scanf("%d%d%d",&a,&b,&c);t=(a>b)?a:b;max=(t>c)?t:c;printf("max=%d\n",max);}main()483.7.6switch语句一般形式:switch(表达式){case常量表达式1:语句序列1[]case常量表达式2:语句序列2[break;]:case常量表达式n:语句序列n[break;][default:语句序列n+1]}此处break用于退出switch语句break;3.7.6switch语句一般形式:switch(表达49先计算表达式的值,并逐个与其后的常量表达式值相比较;当表达式的值与某个常量表达式的值相等时,即执行其后的语句;然后不再进行判断,继续执行后面所有case后的语句;如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。switch语句的执行过程:先计算表达式的值,并逐个与其后的常量表达式值相比较;sw50执行过程:执行过程:51例如:switch(grade){case‘A’:printf(“85~100”); case’B’:printf(“70~84”); case’C’:printf(“60~69”);case‘D’:printf(“<60”); default:printf(“error”);}若grade=‘A’,输出结果是什么?85~10070~8460~69<60error

例如:switch(grade)若grade=‘A’,52用break语句处理后的程序段:switch(grade){case‘A’:printf(“85~100”);break; case’B’:printf(“70~84”);break; case’C’:printf(“60~69”);break;case‘D’:printf(“<60”);break; default:printf(“error”);}若grade=‘A’,输出结果又是什么?85~100用break语句处理后的程序段:s53完整程序:main(){chargrade;printf(“Inputgrade(A,B,C,D):”);scanf(“%c”,&grade);switch(grade){

case‘A’:printf(“85~100”);break;case’B’:printf(“70~84”);break;case’C’:printf(“60~69”);break;case‘D’:printf(“<60”);break;default:printf(“error!”);break;}}完整程序:main()54流程图为:

grade输出“85-100”输出“<60”输出“60-69”输出“error”输出“70-84”流程图为:grade输出输出输出输出输出55使用switch语句时还应注意以下几点:1.在case后的各常量表达式的值不能相同,否则会出现错误。2.在case后,允许有多个语句,可以不用{}括起来。3.各case和default子句的先后顺序可以变动,而不会影响程序执行结果。4.default子句可以省略不用。5.若判断的是一个区间,要将区间转换成单个值。使用switch语句时还应注意以下几点:1.在case后的563.7.7标号语句和goto标号语句一般形式:语句标号:语句例如:end:,该标志符就成了语句标号,但标号不能用数值表示,例如:12:,3:,5:都是错误的。标号可以与变量同名。

goto语句一般形式:goto语句标号;

goto语句的作用是使程序改变原来的执行顺序,而跳到指定的语句上执行。例如:gotosd;sd:printf(“thisisacat!\n”);3.7.7标号语句和goto标号语句一般形式:语句标号:语57说明:⑴C语言允许在任何语句前加一个语句标号,作为goto语句的目标。给语句加标号的形式:

语句标号:语句⑵goto语句是一种非结构化语句,结构化程序设计方法不提倡使用goto语句,因为滥用goto语句将使程序流程无规律,可读性差。但也不是绝对禁止使用,只有在能够大大提高程序效率时才使用。且记:不要从循环体外跳到循环体内!说明:⑴C语言允许在任何语句前加一个语句标号,作为goto58#include<stdio.h>main(){inti,sum=0;i=1;loop:if(i<=100){sum=sum+i; i++; gotoloop;}printf("%d",sum);}sum=0+1sum==1+2=3sum=3+3=6sum=6+4……sum=4950+100=5050循环初值循环终值循环变量增值循环条件循环体一、例用if语句和goto语句构成循环求

1+2+3+……+100。#include<stdio.h>sum=0+1循环初值循59二、用goto语句和if语句构成循环计算10!并输出结果。

main(){inti=1,sum=1;loop:if(i<=10){sum=sum*i;i++;gotoloop;}printf(“10!=%d\n”,sum);}运行结果:10!=24320本应是:10!=3628800

main(){inti=1;longsum=1;loop:if(i<=10){sum=sum*i;i++;gotoloop;}printf(“10!=%ld\n”,sum);}二、用goto语句和if语句构成循环计算10!并输出结果603.7.8选择结构程序设计举例

例1写程序,判断某一年是否闰年。设:leap代表闰年信息,leap=1闰年,leap=0非闰年不能被4整除非闰年被4整除,但不能被100整除闰年被100整除,又能被400整除闰年其他,非闰年非闰年3.7.8选择结构程序设计举例

例1写程序,判断某61main(){intyear,leap=0;scanf(“%d”,&year);/*输入年份值*/if((year%4==0&&year%100!=0)||(year%400==0))leap=1;elseleap=0;if(leap==1)printf(“%disleap”,year);elseprintf(“%disnotleap”,year);

}main()62main(){intyear,leap=0;scanf(“%d”,&year);/*输入年份值*/if(year%4!=0)leap=0;elseif(year%100!=0) leap=1; elseif(year%400!=0) leap=0; elseleap=1;if(leap==1)printf(“%disleap”,year);elseprintf(“%disnotleap”,year);

}main()63例已知基本运费、货重,以及路程(s)和折扣的关系标准如下:

s<250km没有折扣250≤s<500%2折扣500≤s<10005%折扣1000≤s<20008%折扣2000≤s<300010%折扣3000≤s15%折扣算法:先按距离的250倍数进行分类,求每类的折扣,再按公式计算。编程序,计算运费。设基本运费p、货物重量w、距离s和折扣d。则总运费的计算公式为:f=p*w*s*(1-d)例已知基本运费、货重,以及路程(s)和折扣的关系标准如下64250500100020003000s0161412108642折扣的变化点都是250的倍数.c=s/250代表250的倍数。124812c总运费的计算公式为:f=p*w*s*(1-d)250500100065程序为:main(){intc,s;floatp,w,d,f;scanf(“%f,%f,%d”,&p,&w,&s);if(s>=3000)c=12;elsec=s/250;/*按250分类*/switch(c){case0:d=0;break;/*s<250*/case1:d=2;break;/*250≤s<500*/case2:/*500≤s<750*/case3:d=5;break;/*750≤s<1000*/case4:/*1000≤s<1250*/case5:/*1250≤s<1500*/程序为:66

case6:/*1500≤s<1750*/

case7:d=8;break;/*1750≤s<2000*/

case8:/*2000≤s<2250*/

case9:/*2250≤s<2500*/

case10:/*2500≤s<2750*/

case11:d=10;break;/*2750≤s<3000*/

case12:d=15;break;/*3000≤s*/

}f=p*w*s*(1-d/100.0);printf(“freight=%15.4f”,f);}运行情况:输入:100,20,300↙

结果:freight=588000.0000case6:67若用if语句实现上述功能,程序为:main(){ints;floatp,w,d,f;scanf(“%f,%f,%d”,&p,&w,&s);if(s>=3000)d=15;elseif(s>=2000&&s<3000)d=10;elseif(s>=1000&&s<2000)d=8;elseif(s>=500&&s<1000)d=5;elseif(s>=250&&s<500)d=2;elsed=0;f=p*w*s*(1-d/100.0);printf(“freight=%15.4f”,f);}若用if语句实现上述功能,程序为:68习题给一个不多于5位的正整数,要求:①求出它是几位数;②分别打印出每一位数字;③按逆序打印出各位数字,例如原数为321,应输出123。#include<stdio.h>main(){longintnum;intn1,n2,n3,n4,n5,bits;scanf(“%ld”,&num);if(num>9999)bits=5elseif(num>999)bits=4;elseif(num>99)bits=3;elseif(num>9)bits=2;elsebits=1;printf(“bits=%d\n”,bits);习题给一个不多于5位的正整数,要求:①求出它是几位数;②69n5=num/10000;n4=(int)(num-n5*10000)/1000;n3=(int)(num-n5*10000-n4*1000)/100;n2=(int)(num-n5*10000-n4*1000-n3*100)/10;n1=(int)(num-n5*10000-n4*1000-n3*100-n2*10);switch(bits){case5:printf(“Everybitis:%d,%d,%d,%d,%d\n”,n5,n4,n3,n2,n1);printf(“Reverseis:%d,%d,%d,%d,%d\n”,n1,n2,n3,n4,n5);break;case4:printf(“Everybitis:%d,%d,%d,%d\n”,n4,n3,n2,n1);printf(“Reverseis:%d,%d,%d,%d\n”,n1,n2,n3,n4);break;n5=num/10000;switch(bi70case3:printf(“Everybitis:%d,%d,%d\n”,n3,n2,n1);printf(“Reverseis:%d,%d,%d\n”,n1,n2,n3);break;case2:printf(“Everybitis:%d,%d\n”,n2,n1);printf(“Reverseis:%d,%d\n”,n1,n2);break;case1:printf(“Bitis:%d\n”,n1);printf(“Reverseis:%d\n”,n1);}}运行情况:12345↙Inputbits=5Everybitis:1,2,3,4,5Reverseis:5,4,3,2,1Outputcase3:printf(“Everybit713.7作业题目:输入某年某月某日,判断这一天是这一年的第几天?

1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。

3.7作业题目:输入某年某月某日,判断这一天是这一年的第72经常不断地学习,你就什么都知道。你知道得越多,你就越有力量StudyConstantly,AndYouWillKnowEverything.TheMoreYouKnow,TheMorePowerfulYouWillBe写在最后经常不断地学习,你就什么都知道。你知道得越多,你就越有力量写73谢谢大家荣幸这一路,与你同行It'SAnHonorToWalkWithYouAllTheWay演讲人:XXXXXX时间:XX年XX月XX日

谢谢大家演讲人:XXXXXX74第3章基本算法本章要点:算法的特征算法的表示方法程序设计的基本算法掌握程序的基本结构第3章基本算法本章要点:753.1程序与算法程序包括:(1)对数据的描述数据结构(2)对数据处理的描述算法算法(algorithm)是对特定问题求解步骤的一种描述。可将程序总结为:程序=算法+数据结构+程序设计方法+语言工具和环境3.1程序与算法程序包括:76C语言算法的主要特点如下:1.有穷性一个算法应该包含有限的操作步骤,而不能是无限的。

2.确定性算法中的每一个步骤应当是确定的,而不应当是含糊的(多义性),应是十分明确无误的。

3.有0个或多个输入。4.有一个或多个输出。5.有效性算法中的每一个步骤都应当有效的执行,并得到确定的结果。3.2算法的特征C语言算法的主要特点如下:3.2算法的特征77

3.3算法的表示方法(1)自然语言描述法(2)传统的流程图表示

常用符号有:(3)N-S流程图表示(4)伪代码表示算法(5)计算机语言表示算法起止框输入/输出框判断框处理框流程线连接点3.3算法的表示方法(1)自然语言描述法起止框输78一、顺序结构

BA(a)AB(b)先执行A操作,再执行B操作,两者是顺序执行关系。N-S结构流程图结构化程序设计的三种基本机构一、顺序结构79二、选择结构当P条件为真时,执行A模块,否则执行B模块。APB真假(a)P真假AB(b)二、选择结构当P条件为真时,执行A模块,否则执行B模块。AP80三、循环结构当P条件成立时,反复执行A,直到P为假。1.当型循环结构PA假真(a)当P为真A(b)当P为真三、循环结构当P条件成立时,反复执行A,直到P为假。1.当型812.直到型循环结构先执行A操作,再判断P是否为假,若P为假,再执行A,直到P为真为止。AP假真

(a)A直到P为真

(b)2.直到型循环结构先执行A操作,再判断P是否为假,若P为假,82算法举例1:对一个大于2的正整数,判断它是不是一个素数。方法:将n(其中n>2)作为被除数,将2到(n-1)各个整数轮流作为除数,如果都不能被整除,则n为素数。算法表示如下:S1:输入n的值S2:2i(i作为除数)

S3:n被i除,得余数rS4:如果r等于0,表示n能被i整除,则打印n“不是素数”,算法结束;否则执行S5S5:i+1iS6:如果in-1,返回S3;否则,打印n“是素数”,算法结束。算法举例1:对一个大于2的正整数,判断它是不是一个素数。83算法举例2:求1-1/2+1/3–1/4+…+1/99–1/100。S1:1signS2:1sumS3:2denoS4:(-1)*signsignS5:sign*(1/deno)termS6:sum+termsumS7:deno+1denoS8:若deno100返回S4;否则算法结束。算法举例2:求1-1/2+1/3–1/4+…+184算法举例3:用伪代码表示算法:用介于自然语言和计算机语言之间的文字和符号来描述算法

BEGIN1=>iwhile(i50){inputni和gi

i+1=>i}

1=>iwhile(i50){if(gi>=80)printni和gi

i+1=>i}END算法举例3:用伪代码表示算法:用介于自然语言和计算机语言85算法举例4:

用计算机语言表示算法

求1-1/2+1/3–1/4+…+1/99–1/100。S1:

1sS2:1sumS3:2dS4:(-1)*ssS5:s*(1/d)tS6:sum+tsumS7:d+1dS8:若d100返回S4;否则算法结束。main(){ints=1;floatd=2.0,sum=1.0,t;while(d<=100){s=-s;t=s/d;sum=sum+t;d=d+1;}printf(“%f”,sum);}算法举例4:用计算机语言表示算法求1-1/2+1/3863.4小结(1)算法是程序的灵魂,计算机程序设计的实质是算法的设计。(2)C语言算法的特点是:① 有穷性

② 确定性

③ 有0个或多个输入

④ 有一个或多个输出

有效性

(3)算法的表示① 用自然语言表示

② 用流程图表示算法,三种最基本的程序设计算法为:顺序结构,选择结构和循环结构。3.4小结(1)算法是程序的灵魂,计算机程序设计的实质是算873.5C语句介绍一、C程序结构C程序源程序文件1源程序文件2源程序文件n••••••预处理命令全局变量声明函数1函数n••••••函数首部函数体局部变量声明执行语句3.5C语句介绍一、C程序结构C程序源程序文件1源程序88二、C语句概述C语句分类:1.控制语句2.函数调用语句3.赋值语句4.空语句5.复合语句一条完整的C语句必须以“;”结束。“;”是一个语句不可缺少的一部分。二、C语句概述C语句分类:一条完整的C语句必须以891.控制语句:完成一定的控制功能。C有9种控制语句:⑴if()~else~(条件语句)⑵for()~(循环语句)⑶while()~(循环语句)⑷do~while()(循环语句)⑸continue(结束本次循环语句)⑹break(中止执行switch或循环语句)⑺switch(多分支选择语句)⑻goto(转向语句)⑼return(从函数返回语句)1.控制语句:完成一定的控制功能。C有9种控制语句:902.函数调用语句

由一次函数调用加一个“;”构成。如:printf(“HelloWorld!”);函数调用分号3.赋值语句由表达式加上“;”构成。如:x+4*y;算术表达式语句4*7,4+8;逗号表达式语句x=4*7;赋值表达式语句(赋值语句)2.函数调用语句由一次函数调用加一个“;”构成。914.空语句

由一个“;”构成。即:;作用:①程序转向点;②什么也不做的循环体。while(i<=11);5.复合语句

用{}括起的一组语句。如:if(x1>x2){y=x1*x1+x2;printf("y=%d",y);}不能省略不能加“;”4.空语句由一个“;”构成。即:;92说明:(1)复合语句中的每一个语句还可以是复合语句;(2)复合语句尽管可由多个语句组合,但它只相当于一个语句,在任何单一语句可以存在的地方,复合语句都可以存在。(3)在复合语句内,不仅可以有执行语句,还可以有定义部分,定义部分应该出现在可执行语句的前面。说明:(1)复合语句中的每一个语句还可以933.6顺序结构程序设计(顺序结构)(选择结构)(循环结构)3.6顺序结构程序设计(顺序结构)94特点:程序按语句从上到下的排列顺序依此执行,每条语句必须执行且只能执行一次,没有执行不到或执行多次的语句。例如:已知圆柱体半径6米,高7米,求体积。#definePI3.1415main(){floatr,h,s,v;r=6;h=7;s=PI*r*r;v=s*h;printf(“V=%f\n”,v);}特点:程序按语句从上到下的排列顺序依此执例如:已知圆柱体半径95例3.1输入三角形的三条边,求三角形的面积。分析:已知∶三角形的三条边a,b,c。求解∶三角形的面积area。计算公式∶设s=(a+b+c)/2area=开始给a,b,c赋值计算s=(a+b+c)/2计算area=结果输出结束#include<math.h>main(){floata,b,c,s,area;scanf(“%f%f%f”,&a,&b,&c);s=(a+b+c)/2.0;area=sqrt(s*(s-a)*(s-b)*(s-c));printf(“a=%fb=%fc=%fs=%f”,a,b,c,s);printf(“area=%f”,area);}例3.1输入三角形的三条边,求三角形的面积。分析:已知96例3.2从键盘输入一个大写字母,要求改用小写字母输出。分析:已知∶字符变量c1为大写字母。求解∶将字符变量c2中放入相应的小写字母。计算公式∶c2=c1+32(小写改成大写字母?)开始计算c2=c1+32输出c1结束输入一大写字母放入c1中输出c2#include<stdio.h>main(){charc1,c2;c1=getchar();/*键盘输入一个大写字母*/

printf(“%c,%d\n”,c1,c1);c2=c1+32;printf(“%c,%d\n”,c2,c2);}输入:A

输出:A,65

a,97

例3.2从键盘输入一个大写字母,要求改用小写字母输出。97例3.3求ax2+bx+c=0的根,a,b,c由键盘输入,设b2-4ac>0#include<math.h>main(){floata,b,c,disc,x1,x2,p,q;scanf("%f%f%f",&a,&b,&c);disc=b*b-4*a*c;p=-b/(2*a);q=sqrt(disc)/(2*a);x1=p+q;x2=p-q;printf(”x1=%fx2=%f",x1,x2);}运行情况:a=1,b=3,c=2x1=-1.000000x2=-2.000000例3.3求ax2+bx+c=0的根,a,b,c由键盘输入98例3.4输入一个三位数,依次输出该数的符号和百号,十位,个位数字

。#include<stdi.h>#include<math.h>main(){charc1,c2,c3,c4;intx;scanf(“%d”,&x); /*输入一个三位数*/c4=(x>=0?’+’:’-’); /*将x的符号存入c4中*/x=abs(x); /*求三位数的绝对值*/c3=x%10+48; /*获得个位数字,加48后转换为对应的字符*/x=x/10; /*获得x的前两位*/c2=x%10+48; /*获得十位数字,加48后转换为对应的字符*/c1=x/10+48; /*获得百位数字,加48后转换为对应的字符*/printf(“%c%c%c%c”,c4,c1,c2,c3);}运行情况:-345-345例3.4输入一个三位数,依次输出该数的符号和百号,十位,个993.7选择结构本节要点关系运算符与关系表达式逻辑运算符与逻辑表达式条件运算符与条件表达式if语句switch语句本章难点if语句的嵌套switch语句的使用3.7选择结构本节要点100C语言第二章算法课件1013.7.1关系运算符和关系表达式

6种关系运算符:

①<(小于)②<=(小于或等于)③>(大于)④>=(大于或等于)⑤==(等于)⑥!=(不等于)3.7.1.1关系运算符结合性:自左向右3.7.1关系运算符和关系表达式6种关系运算符:3.102关系运算符的优先次序

与其它运算符优先级的比较:算术运算符关系运算符赋值运算符(高)(低)例如:c=d>a+b等效于:c=(d>(a+b))关系运算符的优先次序与其它运算符优先级的比较:算术运算符1031.什么是关系表达式?3.7.1.2关系表达式如:(a>b)>(b<c)、‘a’<‘b’、x>y、s+f>d2.关系表达式的值运算结果∶逻辑值1——“真”,0——“假”如:设a=3,b=2,c=1求下面关系表达式的值:c>b(a-b)==1b+c<a值为0值为1值为0如果关系运算对象的类型不同,也要先进行类型转换。1.什么是关系表达式?3.7.1.2关系表达式如:(a>1043.7.2逻辑运算符和逻辑表达式

3种逻辑运算符:

①!(逻辑非)②&&(逻辑与)③||(逻辑或)3.7.2.1逻辑运算符优先级(高)(低)如:!aa为真,则!a为假。a||ba、b之一为真,则a||b为真。a&&ba、b同时为真,则a&&b为真。3.7.2逻辑运算符和逻辑表达式3种逻辑运算符:3.7.105与其它运算符优先级的比较:(高)(低)

算术运算符

关系运算符

&&和||

赋值运算符例如:c=d>a+b&&a>b等效于:c=((d>(a+b))&&(a>b))与其它运算符优先级的比较:(高)(低)!1061.什么是逻辑表达式?3.7.3逻辑表达式用逻辑运算符将逻辑运算对象连结起来的式子。如:(a>b)&&(b<c)、!a||a>b2.逻辑表达式的值运算结果∶逻辑值(只有假为0、真为1两种取值)如:5>3&&2||8<4‘b’&&’d’值为1值为1运算对象∶以数值非0为真、0为假1.什么是逻辑表达式?3.7.3逻辑表达式用逻辑运算符将107注意事项:(1)代数式不等式0<x<5必须写成(x>0)&&(x<5),而不能直接写成0<x<5。(2)C语言允许直接对数或字符进行逻辑运算。例如!5,结果为0。5&&‘c’,结果为1。因为字符‘c’的ASCII为非0值,非0值与非0值作与运算,结果为真。注意事项:1083.7.4选择结构语句单分子选择if(表达式)语句3.7.4.1if语句执行过程:当表达式的值为“真”(非零)时,执行语句,否则,不执行语句。如:if(x>y)z=x;3.7.4选择结构语句单分子选择3.7.4

温馨提示

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

评论

0/150

提交评论