C语言程序设计教程第5章循环程序设计课件.ppt

上传人(卖家):晟晟文业 文档编号:4145124 上传时间:2022-11-14 格式:PPT 页数:100 大小:857.40KB
下载 相关 举报
C语言程序设计教程第5章循环程序设计课件.ppt_第1页
第1页 / 共100页
C语言程序设计教程第5章循环程序设计课件.ppt_第2页
第2页 / 共100页
C语言程序设计教程第5章循环程序设计课件.ppt_第3页
第3页 / 共100页
C语言程序设计教程第5章循环程序设计课件.ppt_第4页
第4页 / 共100页
C语言程序设计教程第5章循环程序设计课件.ppt_第5页
第5页 / 共100页
点击查看更多>>
资源描述

1、5.1 循环结构循环结构 循环结构循环结构的特点:在给定条件成立时,反复的特点:在给定条件成立时,反复执行某程序段,直到条件不成立为止。执行某程序段,直到条件不成立为止。注意两个概念:注意两个概念:1 1、循环条件给定的条件称为、循环条件给定的条件称为循环条件循环条件 2 2、循环体反复执行的程序段称为、循环体反复执行的程序段称为循环循环 体体 在在C语言中,实现循环结构的语句主要有语言中,实现循环结构的语句主要有3种:种:5.1 循环结构循环结构for语句语句while语句语句doWhile语句语句5.1.2 for5.1.2 for循环语句循环语句 for语句是语言所提供语句是语言所提供的

2、功能更强,使用更广泛的的功能更强,使用更广泛的一种循环语句。一种循环语句。5.1 循环结构循环结构表达式2表达式1语句表达式3零零非零非零 for(表达式表达式1;表达式;表达式2;表达;表达3)语句;语句;(1)当循环体语句组仅由一条语句构成时,可以不使当循环体语句组仅由一条语句构成时,可以不使用复合语句形式,如:用复合语句形式,如:for(i=1;i=100;i+)*psum+=i;(2)对于表达式对于表达式1,既可以是给循环变量赋初值的简,既可以是给循环变量赋初值的简单表达式,也可以是其它表达式单表达式,也可以是其它表达式(如逗号表达式如逗号表达式),如:,如:for(*psum=0,i

3、=1;i0;(*pn)-,a+)printf(%d,a*2);5.1 循环结构循环结构5.1 循环结构循环结构b.如果省略表达式如果省略表达式2,相当于第二个表达式,相当于第二个表达式的值是的值是1,即循环继续的条件一直成立,这,即循环继续的条件一直成立,这时可能造成无限循环时可能造成无限循环(俗称死循环俗称死循环),那么应,那么应在其它位置设法结束循环(在其它位置设法结束循环(5.2节将介绍),节将介绍),下面就是一个死循环的例子:下面就是一个死循环的例子:for(;(*pn)-,a+)printf(%d,a*2);c.可以省略表达式可以省略表达式3,这时可由循环体内的,这时可由循环体内的语

4、句进行对循环变量的调整,以控制循环次语句进行对循环变量的调整,以控制循环次数。如:数。如:for(;*pn0;)a+;5.1 循环结构循环结构(*pn)-;printf(%d,a*2);d.循环体也可以是空语句,称为空循环。循环体也可以是空语句,称为空循环。如下面的程序段能实现计算从键盘输入的如下面的程序段能实现计算从键盘输入的字符数:字符数:intn=0;for(;getchar()!=n;n+);/*循环体为循环体为空空*/空循环有时可被用来产生延时,如:空循环有时可被用来产生延时,如:intt,time=10000;for(t=0;ttime;t+);表达式表达式1(控制变量的初始化(控

5、制变量的初始化):):给循给循环变量赋初值环变量赋初值,也允许在也允许在for语句外给循环语句外给循环变量赋初值,此时可以省略该表达式。变量赋初值,此时可以省略该表达式。表达式表达式2(循环条件)(循环条件):一般为关系或一般为关系或逻辑表达式。逻辑表达式。表达式表达式3通常可用来修改循环变量的值,通常可用来修改循环变量的值,一般是赋值语句。一般是赋值语句。5.1 循环结构循环结构 1.计算表达式计算表达式1的值。的值。2.计算表达式计算表达式2的值,若的值,若值为真值为真(非非0)则执行循环体一则执行循环体一次,否则跳出循环。次,否则跳出循环。3.然后再计算表达式然后再计算表达式3的的值,转

6、回第值,转回第2步重复执行。步重复执行。表达式2语句非00语句求解表达式1求解表达式3for 语句的执行过程语句的执行过程for语句的执行过程:语句的执行过程:5.1 循环结构循环结构 在整个在整个for循环过程中,表达循环过程中,表达式式1只计算一次。只计算一次。表达式表达式2和表达式和表达式3则可能计则可能计算多次。算多次。循环体可能多次执行,也可循环体可能多次执行,也可能一次都不执行。能一次都不执行。5.1 循环结构循环结构表达式2语句非00语句求解表达式1求解表达式3for 语句的执行过程语句的执行过程#include“stdio.h“main()inti,sum=0;int*psum

7、=∑for(i=1;i=100;i+)*psum+=I;printf(“1+2+100=%dn“,*psum);例:例:求求1100的累加和的累加和.(用指针完成用指针完成).5.1 循环结构循环结构/*将累加器将累加器sum初始化为初始化为0*/*指针变量指针变量psum来指向来指向sum,并将其初始化并将其初始化*/*实现累加实现累加*/5.1 循环结构循环结构例例:一个球从一个球从100米高度自由落下,每次落地后反跳米高度自由落下,每次落地后反跳回原高度的一半再落下,求它在第回原高度的一半再落下,求它在第10次落地次落地时,共经过多少米?第时,共经过多少米?第10次反弹多高?次反

8、弹多高?开始开始定义:反弹次数定义:反弹次数i,经过的,经过的距离距离length=100,每次反弹每次反弹高度高度nheight=length/2i=2i=10 i+length+=nheight*2,nheight=nheight/2输出输出length、nheight结束结束5.1 循环结构循环结构#include“stdio.h“main()floatlength=100,nheight;inti;nheight=length/2;for(i=2;i=0):);scanf(%d,&n);t=1.0;/*给变量给变量t赋初值赋初值*/for(i=1;i=n;i+)t=t*i;printf

9、(%d!=%fn,n,t);例例.使用使用for循环语句求循环语句求n!n!5.1 循环结构循环结构3.4.1 while3.4.1 while语句语句 执行过程执行过程是:计算表达式的值,当值为真是:计算表达式的值,当值为真(非非0)时,时,执执行循环体语句。行循环体语句。while语句的一般形式为:语句的一般形式为:while(表达式表达式)语句;语句;其中表达式是循环条件,语其中表达式是循环条件,语句为循环体,若是多个语句则必句为循环体,若是多个语句则必须用须用 组成复合语句组成复合语句。表达式语句非005.1 循环结构循环结构 计算计算的值,若表达式的值为真的值,若表达式的值为真(非非

10、0)时,则执行时,则执行循环体语句;不断反复,直到表达式的值为假循环体语句;不断反复,直到表达式的值为假(0),则不执行,则不执行循环体语句,而直接转向循环体外的第一条语句。循环体语句,而直接转向循环体外的第一条语句。是循环反复执行的程序,称为是循环反复执行的程序,称为“循环体循环体”,当当需要执行多条语句时,应使用需要执行多条语句时,应使用“”括起来组成一个复合语句。括起来组成一个复合语句。while语句语句是先判断条件,后执行循环体,为是先判断条件,后执行循环体,为“当当型型”循环,因此若条件不成立,有可能一次也不执行循环体。循环,因此若条件不成立,有可能一次也不执行循环体。一般情况下,一

11、般情况下,whilewhile型循环最适合于这种情况型循环最适合于这种情况:知道控制知道控制循环的条件为某个逻辑表达式的值循环的条件为某个逻辑表达式的值,而且该表达式的值而且该表达式的值会在循环中被改变。会在循环中被改变。说明:说明:3.4 循环结构循环结构例:例:求求1100的累计和。的累计和。main()int s sum=0,i=1;while (n=100)s sum=s sum+i+i;n+;printf(S=%d,sum);这句不能缺少这句不能缺少数据初始化:数据初始化:求和变量和求和变量和计数变量一计数变量一般赋般赋0,求积,求积变量一般赋变量一般赋13.4 循环结构循环结构ma

12、in()intn=0;printf(Inputastring:n);while(getchar()!=n)n+;printf(Thenumberofinputcharactersis%d.n,n);例例:统计从键盘输入的一行字符的个数。统计从键盘输入的一行字符的个数。3.4 循环结构循环结构/*输入字符的同时判输入字符的同时判断其是否为换行符断其是否为换行符*/3.4.2 do.while3.4.2 do.while语句语句 do-while语句的一般形式为:语句的一般形式为:do 语句;语句;while(表达式表达式);其中:语句是循环体,其中:语句是循环体,表达式是循环条件。表达式是循环条

13、件。表达式语句非00 执行过程是执行过程是:先执行循环体语句一次,先执行循环体语句一次,再判别表达式的再判别表达式的值,若为真值,若为真(非非0)则继续循环,否则终止循环。则继续循环,否则终止循环。3.4 循环结构循环结构例:例:求解求解10!main()inti=1;longfact=1;dofact*=i;i+;while(i1e-5);printf(方程方程2x3-4x2+3x-6=0的根为的根为:x=%fn,x1);3.4 循环结构循环结构/*练习指针的使用:指针练习指针的使用:指针pdiff指向变量指向变量diff*/*设解的初值为设解的初值为x=1.5*/5.1 5.1 三种循环语

14、句比较三种循环语句比较 for()while()do .while();循循环环类类型型 当当型型循循环环 当当型型循循环环 直直到到循循环环 循循环环控控制制条条件件 表表达达式式 2 值值非非 0 表表达达式式值值非非 0 表表达达式式值值非非 0 循循环环变变量量初初值值 在在 for 语语句句行行中中 在在 while 之之前前 在在 do 之之前前 使使循循环环结结束束 表表达达式式 3 循循环环体体中中使使用用专专门门语语句句 循循环环体体中中使使用用专专门门语语句句 5.1 循环结构循环结构5.2break语句与语句与continue语句语句5.2.1 break5.2.1 br

15、eak语句语句形式形式break;说明说明跳出跳出switch语句语句跳出本层循环语句跳出本层循环语句如果有多层循环存在如果有多层循环存在,break只跳出它所只跳出它所在的那一层循环语句,不影响外层循环的执在的那一层循环语句,不影响外层循环的执行行不能用于循环语句和不能用于循环语句和switch语句之外的语句之外的任何其他场合任何其他场合5.2break语句与语句与continue语句语句5.2.1 5.2.1 continue语句形式continue;continue;说明结束本次循环跳过循环体中余下的其他语句,接着进行下一次循环的判定只能用于循环语句中5.2break语句与语句与cont

16、inue语句语句 break语句 跳出本层本层循环 while(i100)break;.continue语句 结束本次本次循环 while(i100)continue;.5.2break语句与语句与continue语句语句例例:对于表达式对于表达式s=1+2+3+n,s=1+2+3+n,求满足求满足s100s100的的n n最小值。最小值。main()main()intint s=0,i=1;s=0,i=1;dodo s+=i;s+=i;ifif(s(s100)100)breakbreak;i+;i+;whilewhile(1);(1);printfprintf(“(“满足满足s=1+2+3+

17、n 100s=1+2+3+n 100的最小的的最小的n n是是%dn,idn,i););开始开始定义定义:自然数自然数i=1和和s=0s=100i+YN输出输出i结束结束s+=i5.2break语句与语句与continue语句语句main()main()intint n;n;printfprintf(“100(“100以内能被以内能被7 7整除整除的自然数有:的自然数有:n);n);forfor(n(n=7;n=100;n+)=7;n=100;n+)ifif(n%7!=0)(n%7!=0)continuecontinue;printfprintf(%d,n);(%d,n);printfprin

18、tf(“n“);(“n“);例:输出100以内能被7整除的自然数。开始开始定义定义:自然数自然数n=7n=100n+YN输出输出n结束结束n%7=0YN5.2break语句与语句与continue语句语句main()int n;printf(100以内能被7整除的自然数有:n);for(n=7;n=100;n+=7)printf(%d,n);printf(“n“);练习for语句实现开始开始定义定义:自然数自然数n=7n=100n=n+7N输出输出n结束结束Y.3.5.3.5 循环的嵌套循环的嵌套 一个循环体内又包含另一个完整的循环一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。内嵌的

19、循环中结构,称为循环的嵌套。内嵌的循环中还可以嵌套循环,称为还可以嵌套循环,称为多层循环多层循环。三种循环(三种循环(while循环、循环、do-while循环循环和和for循环)可以互相嵌套。循环)可以互相嵌套。以下是合法的嵌套形式:以下是合法的嵌套形式:while()while()dodowhile();while();for(;)for(;)while()dowhile();for(;)while()dofor(;)while();合法的嵌套形式:合法的嵌套形式:5.3循环的嵌套循环的嵌套若要输出如下共3行、每行有5个*的图案:*int i,j;for(i=0;i=3;i+)for(j=

20、0;j=4;j+)printf(“*“);printf(“n“);int i,j;for(i=0;i=3;i+)for(j=0;j2*i+1;j+)printf(“*“);printf(“n“);*如改成这样的话5.3循环的嵌套循环的嵌套求1!2!3!+20!开始开始定义定义:int:I,j.double:t,sumj=1,sum=0j=20i=1,t=1i=jt=t*ii=i+1sum=sum+t输出输出sum结束结束j=j+1AYNYNA5.3循环的嵌套循环的嵌套main()int i,j;double t,sum=0;for(j=1;j=20;j+)for(i=1,t=1;i=j;i+)

21、t*=i;sum+=t;printf(n1!2!3!+20!=%gn,sum);/*计算每一项的值:求i的阶乘*/*循环:累加20项*/*变量t保存j!*/5.3循环的嵌套循环的嵌套开始开始定义定义:int:I,nn=2n=100i=2i=nNNNYY例5-11 输出2-100以内所有的素数。5.3循环的嵌套循环的嵌套#includestdio.hmain()intn,i;printf(“100以内所有以内所有的素数为:的素数为:n“);for(n=2;n=100;n+)i=2;while(i=n)printf(%4d,n);printf(“n“);/*输出素数*/*能整除:n不是素数,跳出w

22、hile语句,此时in*/用for与while语句的循环嵌套来输出100以内的素数。5.3循环的嵌套循环的嵌套#include math.h#include stdio.hmain()int n,i,k;printf(“100以内所有的素数为:n%4d“,2);for(n=3;n=100;n+=2)k=sqrt(n);for(i=2;ik)printf(%4d,n);printf(n);用for语句的循环嵌套来输出100以内的素数。5.4数组与字符串的使用数组与字符串的使用int i,data100;for(i=0;i100;i+)datai=i;或 for(i=0;i50;i+)datai=

23、i+1;for(i=50;i100;i+)datai=2*i;比如:5.4数组与字符串的使用数组与字符串的使用一维数组的输入与输出。i=i+1开始开始定义定义:intN,aN,ii=0iNi=0iNi=i+1输入输入ai结束结束YNYN确定确定N整型数组整型数组aN控制变量控制变量i输出输出ai5.4数组与字符串的使用数组与字符串的使用#define N 5#include main()int i;int aN;printf(“输入数组a(共%d个整数):“,N);for(i=0;iN;i+)scanf(“%d“,&ai);printf(“数组a各元素为:n“);for(i=0;iN;i+)p

24、rintf(“a%d=%dn“,i,ai);/*说明了一个元素个数为5的整型数组*/5.4数组与字符串的使用数组与字符串的使用求数组元素中的最大、最小值。确定确定N整型数组整型数组termN最大值最大值max最小值最小值min变量变量i开始开始定义定义:int:Nint:termNint:max,minmax=termNmin=termNi=1iNmaxtermi结束结束Yi=i+1NY输入输入term的值的值max=termimintermimax=termiNYN输出输出max输出输出minaa5.4数组与字符串的使用数组与字符串的使用#define N 10main()int termN

25、;/*说明一个元素个数为10的整型数组*/int i,max,min;/*max存放最大数,min存放最小数*/printf(“n输入%d个整数:“,N);for(i=0;iN;i+)scanf(“%d“,&termi);max=term0;/*将数组的第一个元素赋值给max*/min=term0;/*将数组的第一个元素赋值给min*/for(i=1;imax)max=termi;/*找最大值*/if(termi=2),即从第3个数开始,每个数均等于前2个数之和。开始开始定义定义:int:I;int:FibN;int:f1,f2;i=2输出输出Fib0;输出输出Fib1;af1=Fib0=1;

26、f1=Fib0=1;5.4数组与字符串的使用数组与字符串的使用i40结束结束i=i+1Yi%5=0NYNaFibi=f1+f2换行换行输出输出Fibif1=f2;f2=Fibi;5.4数组与字符串的使用数组与字符串的使用#include stdio.hmain()int f1,f2,Fib40;int i;f1=Fib0=1;/*定义并初始化数列的头2个数*/f2=Fib1=1;printf(Fibonacci数列的前40个数为:n);printf(%d,%d,Fib0,Fib1);/*输出头2个数*/for(i=2;i40;i+)/*共40个数*/Fibi=f1+f2;if(i%5=0)pr

27、intf(n);/*每行输出5个数,换行*/printf(%d,Fibi);/*输出当前的那个数*/f1=f2;f2=Fibi;printf(n);5.4数组与字符串的使用数组与字符串的使用 一个学习小组有5个人,每个人有英语、数学、C语言程序设计三门课的考试成绩。求每个人的平均成绩、各门课的平均成绩i5结束结束Yj3NYNaj=0输入输入scoreijf1=f2;f2=Fibi;开始开始定义定义:intscore53;intvp5,vc3,i,j;ai=0vcj=vcj+scoreijvpi=vpi+scoreiji=i+1输出输出vp,vc每个学生的平均每个学生的平均成绩成绩vp,每门课每

28、门课的平均成绩的平均成绩vc5.4数组与字符串的使用数组与字符串的使用#include stdio.hmain()int i,j;int vc3=0,vp5=0,score53;printf(请输入5个学生 英语 数学 C语言的成绩:n);for(i=0;i5;i+)printf(第%d个学生成绩:,i+1);for(j=0;j3;j+)scanf(%d,&scoreij);vcj=vcj+scoreij;vpi=vpi+scoreij;printf(课程平均成绩是:);for(j=0;j3;j+)printf(%d ,vcj/5);for(i=0;i5;i+)printf(n第%d个学生的平

29、均成绩是%d,i+1,vpi/3);5.4数组与字符串的使用数组与字符串的使用将字符串a中第1、3、5个字符赋给另一个字符串b,然后输出a和b的内容。mlength结束结束m=m+2YNabn+=am输出输出:字符串字符串a,b开始开始定义定义:int:N;char:a,b;int:m,n,length;m=n=0;输入字符串输入字符串aa5.4数组与字符串的使用数组与字符串的使用#define N 100main()char aN=0,bN=0;/*初始化第一个元素,值为0,即字符0*/int m,n,length;printf(请输入字符串a(长度100):n);gets(a);lengt

30、h=strlen(a);for(m=0,n=0;mlength;m+=2)bn+=am;printf(由a中第1、3、5.位置上字符构成的字符串b为:);puts(b);5.5.1 指针与数组 datai=&datai两边同时作取内容运算得:两边同时作取内容运算得:*(data+i)=*(&datai)即即*(data+i)=datai或或datai=*(data+i)5.5.1 指针与数组 输出数组的全部元素。main()int a6=0,3,6,9,12,15;int i,*p;printf(用三种方法输出数组的元素:n);printf(用下标标记元素:);for(i=0;i6;i+)/*

31、下标法下标法*/printf(%d,ai);printf(n用数组名+元素位置表示元素:);for(i=0;i6;i+)/*通过数组名计算数组元素地址通过数组名计算数组元素地址*/printf(%d,*(a+i);printf(n用指针表示元素:);for(p=a;pa+6;p+)/*用指针变量指向数组元素用指针变量指向数组元素*/printf(%d,*p);putchar(n);5.5.1 指针与数组 利用指针求数组元素中的最大值和最小值#define N 10main()int term10,*p=term;/*定义一个元素个数为定义一个元素个数为10的整型数组的整型数组*/*p指向此数组

32、指向此数组*/int i,max,min;/*max存放最大数,存放最大数,min存放最小数存放最小数*/printf(”n输入%d个整数:”,N);for(i=0;iN;i+)scanf(“%d“,(p+i);max=*p;/*将数组的第一个元素赋值给将数组的第一个元素赋值给max*/min=*p;/*将数组的第一个元素赋值给将数组的第一个元素赋值给min*/for(i=1;imax)max=*(p+i);if(*(p+i)min)min=*(p+i);printf(”最大数为%d,最小数为%dn”,max,min);5.5.2 指针与字符串1字符指针与字符串2.字符指针的初始化 字符指针可

33、以初始化,如字符指针可以初始化,如 char *ptr=This is a string;等价于等价于:char*ptr;ptr=This is a string;char*p1,*p2;char s=A string;再执行语句:再执行语句:p1=Another string;p2=s;5.5.2 指针与字符串用字符指针来处理字符串的例子。开始开始定义:字符数组str1,str2,str3;字符指针pstr1,pstr2用gets()函数输入str2用scanf()函数输入str3a将“This is a string.”赋给str1;使pstr1指向“This is another str

34、ing.”用printf()函数输出 str2用puts()函数输出str3用printf()函数输出str15.5.2 指针与字符串*pstr1!=0结束结束YNYNapstr1+使使pstr1指向指向“Thisisthethirdstring.”用用printf()函数函数输出字符输出字符*pstr1用用printf()函数输出字符函数输出字符*pstr2,同时,同时:pstr2+*pstr2!=05.5.2 指针与字符串#includemain()charstr1=Thisisastring.;charstr2100,str3100;char*pstr1=Thisisanotherstr

35、ing.;char*pstr2;printf(请输入一个字符串:请输入一个字符串:n);gets(str2);/*输入方式输入方式1*/printf(请再输入一个字符串:请再输入一个字符串:n);scanf(%s,str3);/*输入方式输入方式2*/printf(输入的两个字符串是:输入的两个字符串是:n%sn和:和:,str2);puts(str3);/*输出方式输出方式1*/printf(另有其它字符串:另有其它字符串:n);printf(%sn,str1);/*输出方式输出方式2*/while(*pstr1)/*输出方式输出方式3*/printf(%c,*pstr1);pstr1+;p

36、rintf(n);pstr2=Thisisthethirdstring.;do/*输出方式输出方式4*/printf(%c,*(pstr2+);while(*pstr2);printf(n);5.5.2 指针与字符串例5-19 用字符指针来处理字符串的例子。5.5.2 指针与字符串例5-20 将字符串str1的内容复制到str2中,不得调用库函数strcpy()。开始开始定义定义:字符串字符串str1、str2,控制变量控制变量ii=0输入输入str1的值的值a*(str1+i)!=0结束结束YNa*(str2+i)=*(str1+i)添加添加str2的结束符的结束符输出输出:str1,str

37、2i=i+15.5.2 指针与字符串main()charstr1100,str2100;inti=0;printf(请输入一个字符串:请输入一个字符串:n);gets(str1);while(*(str1+i)!=0)/*判断是否为结束标志判断是否为结束标志*/*(str2+i)=*(str1+i);/*复制每个字符复制每个字符*/i+;*(str2+i)=0;/*添加字符串结束符添加字符串结束符*/printf(复制的字符串为复制的字符串为:%sn,str2);5.5.2 指针与字符串其中实现字符串复制功能的程序段为其中实现字符串复制功能的程序段为while(*(str1+i)!=0)*(s

38、tr2+i)=*(str1+i);i+;*(str2+i)=0;/*添加结束符添加结束符*/此程序段也可改为此程序段也可改为for(;*(str2+i)=*(str1+i);i+);/*循环体为空语句循环体为空语句*/或或for(;(*(str2+i)=*(str1+i)!=0;i+);或或while(*(str2+i)=*(str1+i)i+;5.5.2 指针与字符串例5-21 编一程序,将两个字符串连接起来,不使用strcat()函数。开始开始定义定义:字符串字符串str1、str2,str1字符数字符数i,str2字符数字符数j计算计算str1的长度的长度i输入输入str1、str2a*

39、(str2+j)=0结束结束YNa*(str1+i)=*(str2+j)添加连接后字符串的添加连接后字符串的结束符:结束符:*(str1+i)=0输出:输出:str1i=i+1j=j+1j=05.5.2 指针与字符串#includemain()charstr180,str280;inti=0,j;printf(请输入两个字符串:请输入两个字符串:n);gets(str1);gets(str2);while(str1i!=0)i+;/*求求str1的长度的长度*/j=0;while(str2j!=0)str1i=str2j;i+;j+;str1i=0;printf(两字符串连接后的新字符串为:两

40、字符串连接后的新字符串为:n%sn,str1);5.5.2 指针与字符串在程序中,求字符串在程序中,求字符串str1的长度也可通过的长度也可通过调用函数调用函数strlen()来实现来实现:i=strlen(str1);当然,在程序的头部应增加:当然,在程序的头部应增加:#include一个字符串既可使用字符串指针变量来表示,一个字符串既可使用字符串指针变量来表示,也可以使用字符数组来表示,而且这两种方也可以使用字符数组来表示,而且这两种方式都可实现字符串的存储和运算,但两者是式都可实现字符串的存储和运算,但两者是有区别的。例如,对字符串用指针方式可进有区别的。例如,对字符串用指针方式可进行如

41、下定义和初始化行如下定义和初始化:5.5.2 指针与字符串char*ps=CLanguage;可以改写为:可以改写为:char*ps;ps=CLanguage;而对用数组方式定义的字符串:而对用数组方式定义的字符串:charst=CLanguage;则不能写为:则不能写为:charst20;st=CLanguage;而只能对字符数组的各元素逐个赋值,而只能对字符数组的各元素逐个赋值,或用或用strcpy()进行字符串的复制。进行字符串的复制。5.5.3 指针数组、数组指针、二级指针与二维数组*指针数组说明的一般形式为:指针数组说明的一般形式为:类型说明符类型说明符*数组名数组名数组长度数组长度

42、例如:例如:int*pa3;1.指针数组指针数组pa0pa1pa2pa00 pa01pa10 pa11 pa12.pa205.5.3 指针数组、数组指针、二级指针与二维数组*指针数组常用来表示一组字符串,这时指针数组的指针数组常用来表示一组字符串,这时指针数组的每个元素被赋予一个字符串的首地址。指向字符串的每个元素被赋予一个字符串的首地址。指向字符串的指针数组的初始化很简单,例如:指针数组的初始化很简单,例如:char*name=Illegalday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday;完成这个初始化赋值之后,完成这

43、个初始化赋值之后,name0即指向字符串即指向字符串“Illegalday”,name1指向了指向了“Monday”,.。5.5.3 指针数组、数组指针、二级指针与二维数组*2.数组指针表示一个指向二维数组的指针变量,可理解为指向一个行数未定而每行有列的二维数组。图5-20表示了这种关系:*p*(p+1)*(p+2)pa00pa01 pa02pa10 pa11 pa12pa22pa21pa20*(p+3).在语言中,还有一种变量,即数组指针变量。例如:int(*p)3;5.5.3 指针数组、数组指针、二级指针与二维数组*3.二级指针二级指针(a)取钥匙开柜子取物:仓库钥匙仓库钥匙柜子钥匙柜子钥

44、匙物资物资存取物资存取物资100053689344求值:求值:*ptr(b)二级指针的求值:保管员保管员打开仓库打开仓库仓库中的抽屉仓库中的抽屉打开柜子打开柜子储物柜储物柜pp:求一级指针求一级指针*pp(单元单元1000):求求i的地址的地址:ptr=&i*pp(单元单元5368):0123443612 以5个元素为例说明冒泡排序 位置0位置4的元素初始排列如右下方所示5.6.1 冒泡排序法元素下标:元素下标:(01234)初始数据:初始数据:436125.6 排序冒泡排序方法 第一轮:令位置0和位置1的元素比较,若位置0的元素大,则交换交换交换01234436120123434612冒泡排

45、序方法 第一轮:令位置1和位置2的元素比较,若位置1的元素小,则不交换不交换不交换01234346120123434612冒泡排序方法 第一轮:令位置2和位置3的元素比较,若位置2的元素大,则交换交换交换01234346120123434162冒泡排序方法 第一轮:令位置3和位置4的元素比较,若位置3的元素大,则交换交换交换01234341620123434126冒泡排序方法 第二轮:令位置0和位置1的元素比较,若位置0的元素小,则不交换不交换不交换01234341260123434126冒泡排序方法 第二轮:令位置1和位置2的元素比较,若位置1的元素大,则交换交换交换012343412601

46、23431426冒泡排序方法 第二轮:令位置2和位置3的元素比较,若位置2的元素大,则交换交换交换01234314260123431246冒泡排序方法 以5个元素为例说明冒泡排序,存放每个元素的位置以序号进行标记 经过4趟冒泡排序后,位置0位置4中的元素排列如下所示01234123465.6 排序从键盘输入任意的10个整数,并用冒泡法将其按升序排列后输出。开始开始定义定义:常量常量N=10,数组数组aN,临时变量临时变量t,控制变量控制变量i,ji=0aiN-1jaj+1交换交换aj与与aj+1NYN输出升序排列的数列输出升序排列的数列aNaj=0i=i+1输入所有的整输入所有的整5.6 排序

47、#includestdio.h#defineN10main()intaN,i,j,t;printf(请输入请输入%d个任意的整数:个任意的整数:n,N);for(i=0;iN;i+)scanf(%d,&ai);for(i=0;iN-1;i+)for(j=0;jN-i-1;j+)if(aj+1aj)t=aj;aj=aj+1;aj+1=t;printf(这些数按升序排列后,为:这些数按升序排列后,为:n);for(i=0;iN;i+)printf(%6d,ai);printf(n);5.6 排序如果要进行降序排列,则将程序中数组元素如果要进行降序排列,则将程序中数组元素交换前的判断表达式交换前的判

48、断表达式aj+1aj即可。即可。如果在程序中要用指针来表示数组元素,如果在程序中要用指针来表示数组元素,则程序源代码可改为:则程序源代码可改为:5.6 排序#includestdio.h#defineN10main()intaN,i,j,t,*pa;printf(请输入请输入%d个任意的整数:个任意的整数:n,N);pa=a;for(i=0;iN;i+)scanf(%d,(pa+i);for(i=0;iN-1;i+)for(j=0;jN-i-1;j+)if(*(pa+j+1)*(pa+j)t=*(pa+j);*(pa+j)=*(pa+j+1);*(pa+j+1)=t;printf(这些数按升序

49、排列后,为:这些数按升序排列后,为:n);for(i=0;iN;i+)printf(%6d,*(pa+i);printf(n);5.6 排序5.6.2选择排序法选择排序法元素下标:(0 1 2 3 4)初始数据:4 3 6 1 20123443612以5个元素为例说明选择排序选择排序位置0位置4的元素初始排列如右下方所示选择排序法选择排序法第一轮:位置0到位置4中位置3 是最小的,则位置0与位置3交换交换交换01234436120123413642选择排序法选择排序法第二轮:位置1到位置4中位置4 是最小的,则位置1与位置4交换交换交换01234136420123412643选择排序法选择排序

50、法第三轮:位置2到位置4中位置4 是最小的,则位置2与位置4交换交换交换01234126430123412346选择排序法选择排序法第三轮:位置3到位置4中位置3 是最小的,则不交换不交换不交换01234123460123412346选择排序法选择排序法至此,所有的数据都已按升序排列。01234123465.6 排序例5-23 用选择法将从键盘输入的10个学生的数学成绩按升序排列。开始开始定义:常量定义:常量N=10,成绩数组成绩数组aN,指针指针*pa(指向(指向a),临时变量临时变量t,控制变量,控制变量i,j,ki=0aiN-1jN结束结束Yj=j+1NY*(pa+j)*(pa+k)k=

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(C语言程序设计教程第5章循环程序设计课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|