C语言程序设计3-结构化流程B_第1页
C语言程序设计3-结构化流程B_第2页
C语言程序设计3-结构化流程B_第3页
C语言程序设计3-结构化流程B_第4页
C语言程序设计3-结构化流程B_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

1、实验报告的格式程序设计实验报告 姓名:XXXX 班级:XXXX 学号:XXXX 实验日期:xxxx年xx月xx日 实验名称:认识C程序的VC+编译环境一、实验目的:要学习和掌握目标。二、实验内容:实验的题目。三、实验准备:实验前预先设计好的程序或方案。四、试验过程:实验中碰到的问题及解决和改进方案。 (尤其找出错原因并改正和改良程序)五、实验总结:对实验过程中的心得体会进行总结。 (分条目总结程序设计和调试经验)M个数由小到大冒泡法排序第3步3322214151871510排序前4151871533222110找第1个最大数 (i=M, j=1M)第1步 4151871533222110找第3

2、个最大数 (i=M-2, j=1M-2).33. 找第M-1个最大数 (i=2, j=12) 第M-1步 C语言基本语句表达式语句控制语句复合表达式语句简单表达式语句函数调用语句(数据声明&执行语句)赋值语句空语句流程控制语句限定转向语句限定转向(break;continue;return)无限定转向和退出(goto;exit()选择结构循环结构while;dowhilefor多分支二分支(ifelse)else ifswitch(三)结构化的流程设计if 选择结构1)选择基本结构双分支选择结构 if(表达式) 语句块1; else 语句块2; 2)缺省else的选择型结构单分支选择结构 if

3、(表达式) 语句块; 3) if条件语句的嵌套复合分支选择结构 if(表达式1) if(表达式2) 语句块1; else 语句块2; else 语句3; 4) if-else-if结构多分支选择结构 if(表达式1) 语句块1; else if(表达式2) 语句块2; else 语句块3; switch选择结构多分支选择结构 switch (表达式) case 常量表达式1: 语句块1; break; case 常量表达式n: 语句块n; break; default: 语句块n+1; 1) switch后的表达式只能是整型、字符型或枚举型表达式;case后的常量表达式结果只能是常量值;而语句

4、块i可以简单语句、空语句、复合语句块,也可以省略。2) 先计算表达式的值,若值等于某个常量表达式值,则选择执行其对应语句块i;否则,执行default对应语句块n+1。对表达式和常量表达式是否值一致只作一次判断,当选择执行语句块i后,如果未碰到语句break,则会继续顺序执行语句块i后面的语句,直到碰到break或到switch最后语句为止。switch语句示例void main( ) int a; scanf(%d,&a); switch(a) case 1: printf(onen); case 2: printf(twon); break; case 3: printf(threen);

5、 default: printf(othern); printf(Good-bye!n);选择结构的标准缩进 if(x%2=0) x1=x1+1; else x2=x2+1;也可写成: if(x%2=0) x1=x1+1; else x2=x2+1;或写成: if(x%2=0) x1=x1+1; else x2=x2+1;后面两种是推荐的写法,特别是第二种不同层次的缩进区分明显,可读性最强,虽然占据四行的篇幅,但是结构层次清楚,很容易让人理解。(配合花括号)# include # include void main() float a,b,c,s,area; printf(Input 3 po

6、sitive numbers to form triangle:n); scanf(%f,%f,%f,&a,&b,&c); if(a+bc&a+cb&b+ca) s=(float)1.0/2*(a+b+c);area=(float)sqrt(s*(s-a)*(s-b)*(s-c);printf(a=%7.2f,b=%7.2f,c=%7.2f,s=%7.2fn,a,b,c,s);printf(area=%7.2fn,area); elseprintf(Inputed numbers dont form triangle!n);# include # include / double fabs(d

7、ouble x)# include / void exit(int status)# define EPS 1.0E-6 / 判断某数为零的一个极小的门阈值void main() double a,b,c,delta,x1,x2,realpart,imagpart; printf(Input quadratic equation a*x*x+b*x+c=0 coefficients: a,b,cn); scanf(%lf,%lf,%lf,&a,&b,&c); if(fabs(a)=EPS) / 判断浮点数a为0, 注意是绝对值 printf(The equation is not quadra

8、tic!n); exit(1); printf(The equation has two ); delta=b*b-4*a*c; if(fabs(delta)EPS) / 判断delta0 x1=(-b+sqrt(delta)/(2*a); x2=(-b-sqrt(delta)/(2*a); printf(distinct real roots: %8.4lf,%8.4lfn,x1,x2); else / 判断delta0 realpart=-b/(2*a); imagpart=sqrt(-delta)/(2*a); / 为控制输出效果, 这里求虚部的绝对值! printf(distinct

9、complex roots: n); printf(%8.4lf+%8.4lfin,realpart,imagpart); printf(%8.4lf-%8.4lfin,realpart,imagpart); 一、穷举算法(枚举) 对问题的所有可能状态逐一测试,直到找到解或将全部可能状态都测试完为止。 循环控制的办法:计数法和标志法。 计数法:要先确定循环次数,完成循环的次数后,结束循环。 标志法:达到标志条件(执行或结束条件)时,结束循环。二、迭代算法(递推) 是一个不断用新值取代变量的旧值的过程,或者说,是由旧值递推出变量新值的过程。三、循环结构的基本概念 循环体:被重复执行的一段程序。

10、循环结构的关键:执行或跳出循环的条件;哪些语句在循环体中。3.4 循环结构第一类、 while循环 (先判断后执行的当型循环) 语法格式为: while(条件表达式) /“真”为循环执行条件 循环体语句; 当条件为真时执行语句,直到条件为假才结束循环。 首先要对条件表达式进行计算和判断,若其值为真, 则执行循环体中的语句,并进行下一次的条件判断; 否则立即跳过循环体,即一次也不执行循环。 注意: (1)while循环体可以是简单语句、空语句或复合语句。(2)while语句后面要不要加分号 “;”,为什么?(3)while后的“条件表达式”可以是任何数值表达式。while语句简单示例void m

11、ain() int i=1,s=0; while(i=10) s+=i; i+=1; printf(i=%d,s=%dn,i,s);i=11, s=55第二类、do-while循环 (先执行后判断的当型循环) 语法格式为: do 循环体语句; while(条件表达式); /“真”为循环执行条件 执行过程: 1) 先执行循环体语句,直到条件为假时结束循环。 2) 首先要执行一次循环,然后才对条件表达式进行计算和判断,若其值为真,则执行下一次循环体中的语句,并进行随后的条件判断;否则立即退出循环体,即仅仅执行一次循环。 3) while循环和do-while循环都是当型循环,因此两者的条件表达式的

12、涵义是一致的,真则执行循环,假则退出循环。但由于后者至少执行一次,因此前者可以涵盖后者。除此外,两者等价。do-while语句简单示例void main( ) int i=1,s=0; do s+=i; i+; while(i=10); printf(i=%d,s=%dn,i,s); void main( ) int i=1,s=0; do s+=i; while(i+=10); printf(i=%d, s=%dn,i,s);i=11, s=55i=12, s=66第三类、for循环 (先判断后执行的当型循环) for结构的一般形式: for(表达式1;表达式2;表达式3) 循环体语句; f

13、or结构一般情况下可简单理解为: for(初始化表达式;条件表达式;修正表达式) 循环体语句; 当条件为真时执行语句;直到条件为假才结束循环。 for循环结构的真正涵义可以完全等同的理解为:表达式1;for(;表达式2;) / while(表达式2) 循环体语句; 表达式3;说明:表达式1执行且执行一次。表达式2是条件或逻辑表达式,值只能是逻辑真或假。循环体语句和表达式3共同构成for循环的循环体。void main( ) int i,s; for(i=1,s=0;i=10;i+) s+=i; printf(i=%d,s=%dn,i,s);for 语句简单示例i=11, s=55for 循环的

14、几种变化格式for(;) Sfor(e1;e3) Sfor(e1;) Sfor(;e2;e3) Sfor(;e2;) Sfor(e1;e2;) Sfor(;e3) S循环体S可为空语句;注意:如果缺少e2,循环条件恒为真,则构成 死循环,除非在循环体中有退出语句。循环结构的嵌套当循环结构的循环体中包含另外的循环结构时,称为循环结构的嵌套。for(.) for() S1 while(e1) while(e2) S1 for() while(e1) S1 while(e1) for()S1 循环嵌套示例void main( ) int i,j; for(i=1;i=9;i+) for(j=1;j=

15、i;j+) printf(%dx%d=%-3d,i,j,i*j); printf(n); / 乘法口诀表(注意输出格式)一、break语句: 在switch语句中中止执行选择; 循环语句中直接退出所在层循环。二、continue语句:循环语句中,不再执行该语句后面的语句,但继续下次是否执行循环的判定。void main( ) int i=0,s=0; for(; ;) s+=i; if(i=10) break; i+; printf(i=%d,s=%dn,i,s);void main( ) int i=0,s=0; for(; ;) i+; if(i10) continue; s+=i; br

16、eak; printf(i=%d,s=%dn,i,s);3.5 限定转向i=10, s=55i=10, s=10三、函数调用和return返回 调用将使流程转向所调用的函数体; return将使流程从被调用函数返回。四、goto语句 goto语句是一种无条件转移语句。 语法格式和使用: goto 标号; /标号命名按照标识符规则 /语句序列 标号: 语句; 与if语句一起构成循环结构。 由多层循环嵌套跳出时,会用到goto语句。五、强制退出函数exit(0)或exit(1) 是标准函数库中函数。 停止当前程序运行,并返回到操作系统。 关于使用goto语句的建议 goto语句很少使用。 有人认为

17、goto语句应该从程序设计语言中彻底抛弃,理由是goto破坏程序结构化的思想。 但由于goto异常强大,建议:如果goto实现的转移在1020行以内是可以接受的。因为在此范围内,它并不影响程序的执行,也不会干扰程序的阅读。其次,由多层循环的内部跳转到外部时,若可以大大简化程序循环运算量,也是可以接受的。1、把结构作为一个整体(一块) 用开始,用结束。 如: 2、结构之前或之后空一行,如: / for(i=0;in;i+) /3、若结构有嵌套,则内层结构 一定要缩进,每嵌一层可以 缩23个字符的位置。如: for(.) for() 4、当有多层嵌套时,最好每层 开始和结束作适当注释,以 便知道结

18、构开始点和结束点。3.6 书写风格# include # include / double sqrt(double x)# include / int system(char *)void main() int i,j,k,flag,sum=0; /注意sum初始化 for(i=1;i=1000;i+) /对于特殊情况进行处理 if(i=1) continue; /此时跳过下面的语句,执行下1次循环判断 flag=1; /flag是标志数,赋初值. k=(int)(sqrt(double)(i); /注意强制类型转换的使用 /i=2时,k=1,不执行下面的for循环,flag=1 for(j=

19、2;j=k;j+) /使用if-break结合标志数flag避免多余的循环判断 if(i%j=0) flag=0, break; if(flag) / flag=1 sum+; printf(%d is prime number!n,i); if(sum%25=0) system(pause); /每输出25个素数暂停 printf(“The number of prime numbers: %dn”,sum); / 统计素数# include int main() int m,n,temp,product; printf(Input two positive integer m,n: );

20、scanf(%d,%d,&m,&n); if(m=n product=m*n; / 提前计算并保存m和n的乘积以便求m和n的最小公倍数 / 求m和n的最大公约数(m=n):辗转相除法 while(temp=m%n) m=n, n=temp; / while(temp=m%n)!=0) / 0=temp=n-1 printf(G.C.D.=%dn, n); / 最大公约数(greatest common divisor) printf(L.C.M.=%dn, product/n); / 最小公倍数(least common multiple) return 0;# include int mai

21、n()int i;double e=1.0, x=1.0;for(i=1;x1E-6;i+)/x/=i;/e+=x;/printf(i=%d,e=%lfn,i,e); / i=11,e=2.718282return 0; / 用公式e=1+1/1!+1/2!+.+1/n!计算e的值,要求每项大于1E-6# include # include # define EPS 1E-5int main()double a,x0,x1;printf(Please input a positive number: );scanf(%lf,&a);for(x0=1,x1=(x0+a/x0);fabs(x0-x

22、1)EPS;)x0=x1;x1=(x0+a/x0)/2;printf(The square root of %lf = %lfn,a,x1);return 0; Please input a positive number: 2The square root of 2.000000 = 1.414214总 结 搞清楚各种语句,特别是空语句与复合语句,有时应该把复合语句当成一个语句看待,而空语句虽然什么没有,但分号是不可省的,而且执行时也会占用CPU时间。 顺序结构看起来很简单,平谈无奇,但是很多不理解程序的主要原因可能是不理解顺序结构。无论选择、循环结构从时间的角度考虑,它们都是顺序执行的。 选择结构是根据给定条件选择要执行的路线。而这样的结构在现实生活是很常见的,我们不断作出判断,不断进行选择,得到不同的结果。 选择结构可以分单分支、双分支、多分支选择结构。其中,特别是switch构成的多分支选择结构,应该结合br

温馨提示

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

评论

0/150

提交评论