c语言-作业.ppt_第1页
c语言-作业.ppt_第2页
c语言-作业.ppt_第3页
c语言-作业.ppt_第4页
c语言-作业.ppt_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

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

文档简介

1、作业,1. 输入两个正整数,求其最大公约数和最小公倍数。 方法:求最大公约数用辗转相除法; 最小公倍数=2数的积除以最大公约数 3 3 3 2. 输出水仙花数,例1531 + 5 + 3,小结,第六章 循环结构,在语言中,可用以下语句实现循环: (1)用goto语句和if语句构成循环。 (2)用while语句。 (3)用do-while语句。 (4)用for语句。,第六节 循环嵌套 第七节 几种循环的比较 第八节 break 、continue语句 第九节 程序举例,例6.4 求1100的累加。,#include int main() int i, sum; i=1; sum =0; whil

2、e (i=100) sum =sum+ i; i+; printf( “sum=%dn”, sum); return 0; ,#include int main() int i, sum; i=1; sum =0; do sum =sum+ i; i+; while (i=100); printf( “sum=%dn”, sum); ruturn 0; ,先判后做,先做后判,第五节 for 语句 语法格式为: for(表达式1; 表达式2;表达式3) 语句; ,表达式1; while(表达式2) 语句; 表达式3; ,for(表达式1; 表达式2;表达式3) 语句 ;,最常用形式的表达: fo

3、r(初值; 条件;增值) 语句;,for ( 表达式1 ; 表达式2 ; 表达式3 ) 语句;,表达式1,;,表达式3,;,这个分号 不能移走,这个分号 不能丢掉,for的变化:,说明: 1、for语句的表达式是任意可选的。但是分号不能省略!,例1:for( ; i=100;i+) sum=sum+i;,i=1;,例2:,for(i=1; ;i+) if ( sum 100 ) break; sum=sum+i; ,退出循环,例3:for(i=1; i=100; ) sum=sum+i;,例3:for(i=1; i=100; ) sum=sum+i; i+; ,2、表达式1和表达式3可以是逗号

4、表达式。,例4:for ( i=0 , j=100 ; i=j ; i+ , j-) k=i+j;,3、表达式2一般是关系表达式或逻辑表达式,也可以是数值表达式或字符表达式。,例6:for (;(c=getchar()!=n ;) printf(“%c”,c);,敲Enter键才进入缓冲区!,例5: for( k = 1; k - 4; k+) s = s + k; 当 k 的值等于4时终止循环。,数值表达式,computer,第六节 循环嵌套,一、循环语句的循环体内,包含另一个完整的循环结构。 二、构成多重循环。 三、for、while、do-while语句互相嵌套。,其中最重要的嵌套结构应

5、该是循环套选择: while(条件1) 语句1; if(条件2) 语句2; else 语句3; 语句4; 例如:作业 P140.8 求水仙花数。,For(初值;条件;增值),第八节 break 、continue语句,功能 (1)break:强行结束循环,用于跳出循环和switch结构。 (2)continue:用于结束本次循环。,最有代表性的循环算法:穷举与迭代,1、穷举:对问题的所有可能状态一一测试,直到求解。,循环控制的办法:计数法与标志法。 计数法,先确定循环次数,然后逐次测试,完成测试次数后,循环结束。 标志法,是达到某一目标后,使循环结束。,例6.13:百钱买百鸡(二重穷举算法),

6、算经:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、母、雏各几何?,(1)基本解题思路 这是有名的不定方程问题: cocks+hens+chicks=100 5*cocks+3*hens+chicks/3=100,cocks:鸡翁数hens:鸡母数chicks:鸡雏数,由题知三个变量取值范围: cocks:019中的整数 hens:0 33 中的整数 chicks:0 100中的整数 依次取cocks值域中的一个值,然后求其余两数,看是否符合题意。,S1:cocks=0; S2:while(cocks=19) S2.1:找满足题意的hens,chicks; S2.2: cock

7、s加1,S2.1.1: hens=0; S2.1.2: while(hens=33) S2.1.2.1: 找满足题意的chicks; S2.1.2.2: hens加1;,S2.1.2.1: chicks=100-cocks-hens; if (5*cocks+3*hens+chicks/3.0)=100 printf(“%d %d %dn”,cocks,hens,chicks);,main() int hens,chicks , cocks=0; while(cocks=19) hens=0; while (hens=33) chicks=100-cocks-hens; if (5.0*coc

8、ks+3.0*hens+chicks/3.0=100.0) printf(“%d %d %dn”,cocks,hens,chicks); hens=hens+1; cocks=cocks+1; ,0 25 75 4 18 78 8 11 81 12 4 84,2、迭代: 是一个不断用新值取代变量的旧值,或由旧值递推出变量的新值的过程。,著名意大利数学家Fibonacci曾提出一个有趣的问题: 设有一对新生兔子,从第三个月开始它们每个月都生一对免子。按此规律,并假设没有免子死亡,一年后共有多少对免子?,与迭代有关的因素:初值迭代公式迭代次数,例6.14:求菲波那契(Fibonacci)数列,该数

9、列的生成方法为: f1=1,f2=1,fn=fn-1+fn-2(n=3),即从第3个数开始,每个数等于前2个数之和。,N-S图:,赋初值,迭代公式,迭代次数,属于固定次数的循环,main() int f1=1,f2=1; /*定义并初始化数列的头2个数*/ int i; /*定义并初始化循环控制变量i*/ for(i=1; i=6; i+ ) /*1组2个,6组12个月*/ printf(“%12d%12d”, f1, f2); /*输出当前的2个数*/ if(i%2=0) printf(“n”); /*输出2次(4个数),换行*/ f1 += f2; /*计算下2个数*/ f2 += f1;

10、 ,运行结果:1 1 2 3 5 8 13 21 345589144,四、一种典型结构-含有无条件转移的循环,格式: while(条件1) 语句1; if(条件2) 语句2; break; else 语句3 continue; ,由于这种结构的重要性,我们几乎可以把它看作是一种基本结构。,功能: 该结构是在循环结构内套了一个选择结构,在选择结构内出现了无条件转移。而无条件转移的目标与循环结构相关。 1、break和continue是无条件转移 2、break和continue出现在循环体内 3、break 指向出口 continue 指向入口,算法设计要点: 1、显然,只要设计出判断某数n是否

11、是素数的算法,外面再套一个for循环即可。 2、判断某数m是否是素数的算法:根据素数的定义, m 被 2 m 之间的每一个数除,如果都不能被整除,则表示该数是一个素数。 判断一个数是否能被另一个数整除,可通过判断它们整除的余数是否为0来实现。,例6.15:输出100200之间的全部素数。,【例6.10】 求100200之间的全部素数。,#include #include int main ( ) int m, i, k; printf (输入一个整数:); scanf (%d, ,for ( m = 101; m 200; m = m + 2 ) ,if ( i k )printf (%6d,

12、 m ); ,分析:判断m是否为素数,#include main() int i, m, k,n=0; for(m=101; m= k+1 ) /*整数m是素数:输出,计数器加1*/ printf(“%6d”,m); n+; if(n%10=0)printf(“n”); /*每输出10个数换一行*/ ,101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 183 191 193 197 199,例6.16:用一元换成一分、两分、五分的所有兑换方案,main() int i,j,k,m=0; for(i=0;i=0) pr

13、intf(“%2d,%2d,%2d”,i,j,k); m=m+1; if(m%5=0) printf(“n”); ,第七章 数 组,第一节 概述 第二节 一维数组的定义和引用 第三节 二维数组的定义和引用 第四节 字符数组与字符串,第一节 概 述,一、引 入,排序问题,两个数排序?,if ( a b ) t = a; a = b; b = t; ,三个数排序?,if ( a b ) t = a; a = b; b = t; if ( a c ) t = a; a = c; c = t; if ( b c ) t = b; b = c; c = t; ,四个数排序?,if ( a b ) t =

14、 a; a = b; b = t; if ( a c ) t = a; a = c; c = t; if ( a d ) t = a; a = d; d = t; if ( b c ) t = b; b = c; c = t; if ( b d ) t = b; b = d; d = t; if ( c d ) t = c; c = d; d = t; ,100个数排序?,!?,小儿科!,小 case!,有点儿,基本类型的变量的存储特点是:,例如:x = 4.2; y1 = 0; y2 = -2 * x;,简单变量,每个变量单独存储,各变量之间独立存放, 无任何联系.,二、构造类型的基本概念

15、由简单类型构造而成的,称为构造类型。 构造类型的每一个分量是一个变量,可以是一个简单类型或者构造类型 构造类型的分量的使用方法与简单变量相同 构造类型的分量占用相邻的存储空间 对于构造类型的变量,重点是访问其分量的方法,例如: int a10; float b34; struct student int num; char name20; char sex; int age; char addr30; student1, student2;,数组,结构体,1、有序数据的表示 例如:,测量球的直径:需要多次测量,求平均值 按学号排列的成绩表 线性方程组的系数矩阵,三、 数组中几个重要概念,这些数

16、据都是由具有相同类型的若干个分量按一定顺序排列组成的。, 数组定义:是指一组同类型数据的有序集合。 数组表示方法:数组中的元素可以用统一的数组名和下标来唯一的确定。 例: age1, age2, age3 注意: 同一数组中的所有元素必须属于同一数据类型。,标识符,第一节 一维数组的定义和引用 一、一维数组的定义方法: 类型说明符 数组名常量表达式;, 类型说明符:是指数组元素的数据类型。 数组名:与变量名一样,必须遵循标识符命名规则。, 常量表达式: 又称数组长度,它是一个整型值,其中可以包含常数和符号常量,但不能包含变量。 例 int a5; char c10;,元素个数,注意:a5 不能

17、用!,例 y4*M+1;,符号常量,注意:C语言中不允许动态定义数组。 例:int n; scanf(“%d”,二、一维数组元素的引用: 数组元素的引用形式如下: 数组名下标,整型常量或整型表达式,例如:a0 = a5 + a7 - a2*3, 引用方式:先定义,后使用。 同样有三部曲:定义,初始化赋值,引用。 C规定:只能引用数组元素,而不能引用整个数组。,说明:,例7.1:数组元素的引用,int main() int i,a10; for (i=0;i=0;i-) printf(“%d”,ai); return 0; ,运行结果: 9876543210,数组元素的下标常用循环变量来控制,三

18、、一维数组的初始化 定义:指在定义数组时对各元素赋以初始值。 初始化格式: 数据类型 数组名常量表达式初值表 例: char c7=c, , l, a, n, g, u; int a=1,3,5,7,9; (全体赋初值),缺省,int a5=1,3,5; (部分初始化),char c7=c, , l, a, n, g, u; c0 c1 c2 c3 c4 c5 c6,int a=1,3,5,7,9; (全体赋初值) a0 a1 a2 a3 a4,int a5=1,3,5; (部分初始化) a0 a1 a2 a3 a4,int d5= 0 , 0 , 0 , 0 , 0 ;或int d5= 0

19、; d0 d1 d2 d3 d4,static int e5; a0 a1 a2 a3 a4,int a5; a0 a1 a2 a3 a4,随机数! 长度不定!,例7.2:求菲波那契(Fibonacci)数列,该数列的生成方法为: f0=1,f1=1,fi=fi-2+fi-1(i=2),即从第3个数开始,每个数等于前2个数之和。,N-S图:,四、一维数组的举例,int main() int f1=1,f2=1; int i; for(i=1; i=6; i+ ) printf(“%12d%12d”, f1, f2); if(i%2=0) printf(“n”); f1 += f2; f2 +=

20、 f1; return 0; ,int main() int i; int f12=1,1; for(i=2;i12;i+) fi=fi-2+fi-1; for(i=1;i13;i+) if(i%4=0) printf(“n”); printf(“%12d”,fi); return 0; ,算法简单 多占内存,算法复杂 少占内存,经典,#define N 30 int main() int i,sum=0,high=0,score; float average; printf(“input everyones score.n”); for(i=0;ihigh)high=score; avera

21、ge=(float)sum/N; printf(“average=%dn”,average); printf(“high=%dn”,high); return 0; ,例7.3:统计全班某门功课期末考试的平均分数 和最高分数(设全班人数为30人),用简单变量实现,用数组实现分析: 定义一个整形数组score30,存放全班每位同学的分数 用for循环读入分数,并求出总分和平均分 定义变量high存入当前得到的“最高分”,每得到一个分数都要与high的值比较,若比high大,则放入high中,这样最后high的值一定是最高分,#define N 30 main() int i,sum=0,high=0,scoreN; float average; printf(“input everyones score.n”); for(i=0;ihigh)high=scorei; average=(float)sum/N; printf(“average=%dn”,average); printf(“high=%dn”,high); ,思考: 找出n个数中超出平均值的那些数?,for(high=0,i=0;ihigh)high=scorei; ,#define N 30 int main() int i,sum=0,high=0,sc

温馨提示

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

评论

0/150

提交评论