《循环和数组ppt课件.ppt》由会员分享,可在线阅读,更多相关《循环和数组ppt课件.ppt(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1循循 环环 与与 数数 组组 一、级一、级 数数 问问 题题 二、多二、多 重重 循循 环环 三、穷三、穷 举举 法法 四、数四、数 组组 的的 应应 用用2一、级数问题一、级数问题 级数求和要解决级数求和要解决2个问题:个问题: 通项的变化规律;通项的变化规律; 求求和的结束条件(按给定项数或按某种要求)。和的结束条件(按给定项数或按某种要求)。例:习题集例:习题集P71 5题题编写程序,计算当编写程序,计算当 时时N的值的值分析:分析:本题中通项的变化规律是每次分母加本题中通项的变化规律是每次分母加1,求和的结束,求和的结束条件是条件是sum10。 for(n=1;sum=10.0;n+
2、) sum=sum+1.0/n; 1014131211NSUM3例:习题集例:习题集P72 21题题 某级数的前两项某级数的前两项A1=1,A2=1 ,以后各项具有关系以后各项具有关系:An=An-2+2An-1。编写程序,要求依次编写程序,要求依次对于整数对于整数M=100,1000,10000求出对应的求出对应的n值,使其满足值,使其满足SnM且且Sn+1M,这里这里Sn=A1+A2+An。分析:分析:本题中通项的变化规律是本题中通项的变化规律是An=An-2+2An-1,求和的结束求和的结束条件是条件是SnM且且Sn+1M。按此条件,每次循环判断求和结束时按此条件,每次循环判断求和结束时
3、都要用前一次的和都要用前一次的和Sn-1以及本次的和以及本次的和Sn,因此要定义,因此要定义2个变量个变量分别存放两次的和,循环体中要计算本次的和分别存放两次的和,循环体中要计算本次的和Sn= Sn-1+An ,若不满足结束条件,则要将本次的和保留在前一次的和的变若不满足结束条件,则要将本次的和保留在前一次的和的变量中,然后继续循环,直到满足条件。另外还要注意题目给量中,然后继续循环,直到满足条件。另外还要注意题目给出出3 个个M的值的值,也就是说,级数求和要做也就是说,级数求和要做3次,因此要再加一次,因此要再加一重循环,构成二重循环。重循环,构成二重循环。4循环循环(m分别取分别取100,
4、1000,10000) a1,a2,s1赋初值赋初值; for(n=3; ;n+) /* n是项数,从第是项数,从第3项开始项开始*/ 计算计算an,s2; if(s1=m)break; else s1=s2;a1=a2;a2=an; printf(n=%dn,n-1); 5二、多重循环二、多重循环 多重循环是循环嵌套(循环套循环),要特别注意它多重循环是循环嵌套(循环套循环),要特别注意它的执行过程是外循环每执行一次,内循环要执行若干次。的执行过程是外循环每执行一次,内循环要执行若干次。例:习题集例:习题集P71 11题题 编写程序,计算编写程序,计算500800区间内素数的个数区间内素数的
5、个数cnt,并,并按所求素数的值从大到小的顺序,计算其间隔减、加之按所求素数的值从大到小的顺序,计算其间隔减、加之和,即第和,即第1个素数个素数-第第2个素数个素数+第第3个素数个素数-第第4个素数个素数+第第5个素数个素数的值的值sum。分析:分析:按照题意,要对按照题意,要对800500区间(因为是从大到小)内区间(因为是从大到小)内的数逐个作出判断,而判断一个数是否为素数又要用一重循的数逐个作出判断,而判断一个数是否为素数又要用一重循环,这样就构成了二重循环(外循环控制区间范围,内循环环,这样就构成了二重循环(外循环控制区间范围,内循环判断一个数是否为素数),每找出一个素数,判断一个数是
6、否为素数),每找出一个素数,cnt就要加就要加1,再根据再根据cnt的奇偶对的奇偶对sum进行加或减计算。进行加或减计算。6 cnt=0,sum=0; 循环循环(i= 800500) 判断判断i 是否为素数是否为素数; if(i是素数是素数) cnt +; 输出输出cnt,i; if(cnt为偶数为偶数)sum-=i; else sum+=i; 输出输出sum; 7例:习题集例:习题集P71 15题题 编写程序验证下列结论:任何一个自然数编写程序验证下列结论:任何一个自然数n的立方,的立方,都等于都等于n个连续奇数之和。例如:个连续奇数之和。例如:13=1; 23=3+5; 33=7+9+11
7、。要求程序对每个输入的自然数计算并输。要求程序对每个输入的自然数计算并输出相应的连续奇数,直到输入的自然数为出相应的连续奇数,直到输入的自然数为0时止。时止。分析:分析:首先考虑输入的自然数个数不确定,可用首先考虑输入的自然数个数不确定,可用while语句语句对每一个数进行处理,在循环体内输入对每一个数进行处理,在循环体内输入n,然后找连续,然后找连续n个奇个奇数,使它们的和等于数,使它们的和等于n的立方。的立方。 接下来要考虑的是连续接下来要考虑的是连续n个奇数的起始数是未知的,因个奇数的起始数是未知的,因此需要循环测试。设变量此需要循环测试。设变量k为起始数(为起始数(k的初值为的初值为1
8、),再设),再设一个变量一个变量j从从k开始循环累加连续开始循环累加连续n个个奇数,若求出的和奇数,若求出的和s等于等于n的立方,则结束测试的立方,则结束测试k的循环,从的循环,从k开始输出连续开始输出连续n个奇数,个奇数,否则否则k=k+2;继续循环测试。继续循环测试。8 while(1) /* 该循环控制多该循环控制多个自然数个自然数 */ 输入一个自然数输入一个自然数n); if(n=0)break; /*当输入当输入0时,跳出循环时,跳出循环 */ k=1; do /*该循环找出连续该循环找出连续n个奇数,个奇数,k是起始数是起始数 */ s=0; for(i=1,j=k;i=n;i+
9、,j=j+2)s+=j; k+=2; while(s!=n*n*n); 输出输出n; 输出从输出从k开始的连续开始的连续n个奇数个奇数 9三、穷举法三、穷举法 穷举法是指不重复,不遗漏地穷举所有可能情况,穷举法是指不重复,不遗漏地穷举所有可能情况,以便从中寻求满足条件的结果。以便从中寻求满足条件的结果。 在穷举法编程中,主在穷举法编程中,主要使用循环语句和选择语句。循环语句用于列举所有的要使用循环语句和选择语句。循环语句用于列举所有的可能性;而选择语句判定当前的条件是否为所求的解。可能性;而选择语句判定当前的条件是否为所求的解。例:习题集例:习题集P72 22题题 一个自然数的七进制表达式是一
10、个三位数,而这个一个自然数的七进制表达式是一个三位数,而这个自然数的九进制表示也是一个三位数,且这两个三位数自然数的九进制表示也是一个三位数,且这两个三位数的数码正好相反,编写程序,求这个自然数。的数码正好相反,编写程序,求这个自然数。分析:分析:三位九进制最大为三位九进制最大为(888)(888)9 9即即(728)(728)1010,三位七进制最小,三位七进制最小为为(100)(100)7 7即即(49)(49)1010,因此要找的自然数一定在此范围内,可,因此要找的自然数一定在此范围内,可采用穷举法对该范围内的每一个数都判断是否满足条件。为采用穷举法对该范围内的每一个数都判断是否满足条件
11、。为了判断条件,要将自然数分别按九进制和七进制分解出三位了判断条件,要将自然数分别按九进制和七进制分解出三位数码,然后按题目给出的条件判断。数码,然后按题目给出的条件判断。10for(n=49;n0;i-) /* 控制单词个数控制单词个数 */ for(j=0;sij;j+) /*内循环完成一个单词的传送内循环完成一个单词的传送*/ strk+=sij; strk+= ; /* 每个单词末尾加一个空格每个单词末尾加一个空格 */ strk=0; /* 最后给一维数组末尾加一个结束符最后给一维数组末尾加一个结束符*/15例:习题集例:习题集P98 9题题 编写程序,它能读入构成集合编写程序,它能
12、读入构成集合A,B的两组非零整数的两组非零整数x1 ,x2 , , xm ,y1 ,y2 , ,yn 。计算计算A与与B的交的交集集AB,再以由大到小的顺序输出,再以由大到小的顺序输出AB中的元素,中的元素, AB为空时无输出。为空时无输出。分析:分析:定义数组定义数组A、B、C, A、B分别存放集合分别存放集合A和和B,C存存放放A与与B的交集。求的交集。求与与A与与B交集可用交集可用A的每一个元素与的每一个元素与 B的的各元素逐个比较,遇到相等的,就存入各元素逐个比较,遇到相等的,就存入C中。这个过程需中。这个过程需要二重循环来实现,外循环是要二重循环来实现,外循环是A的变化,内循环是的变
13、化,内循环是B的变化。的变化。输出输出C时要先进行由大到小的排序。时要先进行由大到小的排序。16 输入输入a,b数组元素个数数组元素个数; 输入输入a数组元素数组元素; 输入输入b数组元素数组元素; k=0; 循环循环(i=0m-1) 循环循环(j=0n-1) if(ai=bj)ck+=ai;break; if(k!=0) 对对c排序;排序; 输出输出c17例:习题集例:习题集P98 16题题 编写程序对字符串按下面给定的条件进行排序,排编写程序对字符串按下面给定的条件进行排序,排序后的结果仍按行重新存入字符串中并打印出来。序后的结果仍按行重新存入字符串中并打印出来。条件:从字符串中间一分为二
14、,左边部分按字符的条件:从字符串中间一分为二,左边部分按字符的ASCII值降序排序,右边部分按字符的值降序排序,右边部分按字符的ASCII值升序排值升序排序;排序后,左边部分与右边部分进行交换。如果原序;排序后,左边部分与右边部分进行交换。如果原字符串长度为奇数,则最中间的字符不参加排序,字字符串长度为奇数,则最中间的字符不参加排序,字符仍放在原位置上。符仍放在原位置上。分析:分析:解题步骤如下:解题步骤如下: 定义数组并输入字符串;定义数组并输入字符串; char str80; gets(str); 计算字符串长度计算字符串长度n及右边部分起始位置及右边部分起始位置m ; n=strlen(str); k=n/2; m=n%2=0?k:k+1; 18 对对str0 strk-1由大到小排序;由大到小排序; 对对strm strn-1由小到大排序;由小到大排序; 将将str0 strk-1 与与strm strn-1交换;交换; for(i=0,j=m; ik;i+,j+) t=stri;stri=strj;strj=t; 输出输出str; puts(str);