资源描述:
《C语言程序设计第四版第二章PPT 谭浩强ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第2章算法算法在程序中的重要性一个程序包含以下内容数据的类型与组织形式——数据结构操作步骤——算法结构化程序设计方法计算机语言计算机算法数值运算非数值运算目的是求数值解,例如求方程的根、求1到100的和。计算机算法数值运算非数值运算包括面十分广泛,最常见的是用于事务管理领域,例如图书检索、人事管理。算法实例例2.1求1x2x3x4x5。设置两个变量,一个变量代表被乘数,一个变量代表乘数。不另设变量存放乘积结果,而是直接将每一步骤的乘积放在被乘数变量中。今设变量p为被乘数,变量i为乘数。用循环算法
2、来求结果。算法实例例2.1求1x2x3x4x5。算法的步骤为:S1:使p=1S2:使i=2;S3:使p与i相乘,乘积仍放在变量p中,可表示为p=p*I;S4:使i的值加1,即i=i+1;S5:如果i不大于5,返回重新执行S3及其以后步骤S4和S5;否则算法结束。最后得到p的值就5!的值。算法实例例2.1求1x2x3x4x5。#includeintmain(){inti,p=1;for(i=2;i<=5;i++){p=p*i;}printf("p=%d",p);return0
3、;}算法实例扩展求1x3x5x7x9x11。S1:P=1;S2:i=3;S3:p=p*i;S4:i=i+2;S5:若i<=11,结束;否则返回S3。算法实例扩展求1x3x5x7x9x11。#includeintmain(){inti,p=1;for(i=3;i<=11;i=i+2){p=p*i;}printf("p=%d",p);return0;}思考题:若i<=11写成i<11将得到什么样的结果?算法实例例2.2求有50个学生,要求输出成绩在80分以上的学生的学号和成绩。
4、每次检查的对象都是学生的成绩g,只是下标不同(从g1到g50)。只要有规律地改变下标i的值(从1到50),就可以用循环的方法来处理了。算法可表示如下:S1:i=1;S2:如果gi>=80,则输出ni和gi,否则不输出;S3:i=i+1;S4:如果i<=50,返回到步骤S2,继续执行,否则算法结束。算法实例例2.2求有50个学生,要求输出成绩在80分以上的学生的学号和成绩。#includestructstudent{charSno[20];floatscore;};intmain
5、(){inti,p;studentstu[3]={{"12345",89},{"12346",90},{"12347",79}};for(p=0;p<3;p++){if(stu[p].score>80)printf("%s,%f",stu[p].Sno,stu[p].score);}return0;}算法实例例2.3判定2000-2500年中的每一年是否为闰年,并将结果输出。先分析闰年的条件:(1)能被4整出,但不能被100整除的年份为闰年,如1996年、2008年、2012年、2048年是
6、闰年。(2)能被400整除的年份的闰年,如1600、2000年不是闰年。不符合这两个条件的年份不是闰年。例如2009年、2100年不是闰年。算法实例例2.3判定2000-2500年中的每一年是否为闰年,并将结果输出。设year为被检测的年份,算法可表示如下:S1:year=2000S2:若year不能被4整除,则输出year的值和“不是闰年”,然后转到S6。S3:若year能被4整除,不能被100整除,则输出year的值和“是闰年”。然后转到S6.S4:若year能被400整除,输出year的值
7、和“是闰年”,然后转到S6。S5:输入year的值和“不是闰年”。S6:year=year+1S7:当year<=2500时,转S2继续执行,否则算法停止。算法实例#includeintmain(){intyear;for(year=2000;year<=2500;year++){if(year%4!=0)printf("%d不是闰年",year);else{if(year%4==0&&year%100!=0)printf("%d是闰年",year);elseif(ye
8、ar%400==0)printf("%d是闰年",year);elseprintf("%d不是闰年",year);}}return0;}算法实例例2.4求sign代表当前处理的项前面的数值符号,term代表当前项的值。sum表示当前各项的累加和,deno是当前项的分母。算法可表示如下:S1:sign=1S2:sum=1S3:deno=2S4:sign=(-1)*signS5:term=sign*(1/deno)S6:sum=sum+termS7:deno=deno+1S8:若deno<=