大数据技术与应用专业《第五单元阅读资料》.docx
《大数据技术与应用专业《第五单元阅读资料》.docx》由会员分享,可在线阅读,更多相关《大数据技术与应用专业《第五单元阅读资料》.docx(15页珍藏版)》请在冰豆网上搜索。
大数据技术与应用专业《第五单元阅读资料》
(1)
第五单元循环结构程序设计
问题引入:
上一单元,我们学习运用选择结构程序设计语句,可以完成判断和选择。
通常情况下我们的判断可以是屡次的,即循环判断,如小型计算器可以重复计算屡次,可以为多个人预测身高,可以为判断任意一个年份为闰年等。
有关循环的例子还有很多,在自然界中,地球绕太阳旋转、每年的四季更替;在生活中,运动的车轮、旋转的电扇等。
我们经常会对输入的多个数据应用相同的计算,使用循环语句就解决了繁琐的重复问题。
如果程序中有需要屡次执行的语句组,就进行循环结构程序设计。
循环结构是结构化程序设计的三种根本结构之一,循环语句序列可重复执行,直到某条件不成立〔或成立〕结束,或完成指定的次数。
循环结构的编写由循环语句来完成,有时我们还希望控制循环的进入和退出,所以还会使用一些循环控制语句。
本单元的五个典型任务讲解和分析了在C语言程序中循环结构的程序设计方法。
知识目标:
1.了解循环结构设计方法
2.熟练掌握当型循环while语句
3.熟练掌握直到型循环do-while语句
4.熟练循环for语句
5.掌握控制循环break和continue语句
6.了解循环嵌套程序结构
技能目标:
1.学会循环结构程序设计的方法与步骤
2.能够运用while语句进行循环结构程序设计
3.能够运用do-while语句进行循环结构程序设计
4.能够运用for语句进行循环结构程序设计
5.能够运用break和continue语句控制循环
6.综合运用三种循环语句进行嵌套循环结构程序设计
任务1:
歌唱比赛平均分——while语句的运用
反复执行的程序段(语句序列)为循环体,给定的条件称为循环条件。
C语言提供了3种循环语句,while、do-while和for语句。
利用它们可以组成各种不同形式的循环结构。
本任务介绍while循环语句。
【工作任务】
学院开展一次小型歌唱比赛,邀请各系组织并推选评委,比赛时一支参赛队伍演唱完毕,由评委打分,最终成绩是所有评委的平均分。
设评委人数不固定,由输入的评委人数决定,每个评委打分,进行求和,打分次数和评委人数不相等继续打分和求和,打分结束计算平均分,最后输出最终成绩。
【思路指导】
输入:
评委人数〔intn〕。
次数统计:
计数器〔inti〕
循环:
循环条件i<=n
循环任务输入评委打分0-100分之间〔intscr〕,求和〔intsum〕,打分次数i增1
求平均分:
平均分(intave)ave=sum/n
输出:
平均分为选手比赛成绩
【相关知识】
〔一〕循环是怎样的
循环结构是结构化程序设计的根本结构之一,它与顺序结构、选择结构共同作为各种复杂程序的根本结构。
〔二〕解决循环问题的根本步骤和方法
循环要完成的任务主要有三个:
〔1〕循环需要确定重复执行的次数,因此要设计一个循环变量,并对它进行初始化;
〔2〕设计循环条件即循环变量的终值,控制循环的结束;
〔3〕设计循环反复执行的任务即循环体。
〔三〕当型循环while语句
1.while语句的语法格式
while(表达式)
{循环语句组}
2.while语句的执行过程
当表达式的值为真true〔非0〕时,执行while语句中的循环语句组,否那么执行循环体后续语句,while语句结构如下列图所示。
图5-1while语句流程
3.while语句的进一步说明
〔1〕循环体如果包含一个以上的语句,应该用大括号括起来,以复合语句的形式出现。
〔2〕在循环中应有使循环趋向于结束的语句,即设置修改条件的语句。
例如:
本例中的次数变量i++;
〔3〕while语句的特点是先判断表达式的值,然后决定是否执行循环体中的语句,如果表达式的值一开始为假〔即值为0〕,那么退出循环,并转入循环体的后续语句执行。
如果表达式的值始终为真〔即值为1〕,那么是永久循环“死循环〞。
【任务实施】
1.流程图:
图5-2任务1流程图
2.程序代码:
#include
voidmain()
{intn,i=1,scr,sum=0,ave;
printf(“请输入评委的人数:
〞);
scanf(“%d〞,&n);
while(i<=n)//循环输入打分并求和
{printf(“请为参赛队打分:
0-100之间〞);
scanf(“%d〞,&scr);
sum+=scr;
i++;}
ave=sum/n;
printf(“参赛队总成绩是评委打分平均分:
%d〞,ave);
}
程序运行结果如下所示:
图5-3任务1运行结果图
【特别提示】
(1)循环变量要有初值。
(2)在循环体中,循环变量要有变化,并且使得循环条件可以为假,跳出循环,防止“死循环〞。
(3)打分和sum初值为0。
任务2:
翻牌游戏——do-while语句的运用
【工作任务】
有这样的一个纸牌小游戏,三个人一起玩,不分花色,一人选择奇数牌,一人选择偶数牌,一人负责唱分,A-1分……K-13分,直到两人抽到大王或小王按0分对待,游戏结束,最终两人积分高者胜出。
【思路指导】
循环输入:
由唱分人负责输入分值
循环条件:
不是大小王〔0分〕
输出:
两人总得分
判断输赢:
比拟奇数和偶数和的大小
【相关知识】
1.“直到型〞循环do-while语句
do-while语句语法格式:
do
{循环语句组}
while〔表达式〕;
2.do-while语句执行过程
先执行一次指定的循环体语句,然后判断表达式的值,当表达式的值为非0时,返回重新执行该语句,如此反复,直到表达式的值等于0为止,此时循环结束。
do-while语句结构如图5-4所示。
图5-4do-while语句流程
3.do-while语句进一步说明
〔1〕do-while语句是先执行语句序列一次,后判断表达式的值。
〔2〕如果do-while语句的循环体局部是多个语句组成,那么必须用左右大括号括起来,使其形成复合语句。
〔3〕书写时不要忘记while圆括号后面有一个分号“;〞。
【任务实施】
1.流程图:
图5-5任务2流程图
2.程序代码:
#include
voidmain()
{
inti,k,sum1=0,sum2=0;
do//循环
{printf(“请输入奇数分值〞);
scanf(“%d〞,&i);//输入
if(i%2!
=0)//奇数分值求和
sum1+=i;
}while(i!
=0);
Do//循环
{printf(“请输入偶数分值〞);
scanf(“%d〞,&k);//输入
if(k%2==0)//偶数分值求和
sum2+=k;
}while(k!
=0);
printf(“奇数分值是%d偶数分值是%d〞,sum1,sum2);
if(sum1>sum2)
printf(“奇数玩家赢!
〞);
else
if(sum1printf(“偶数玩家赢!
〞);
else
if(sum1=sum2)
printf(“平局!
〞);
}
程序运行结果如下所示:
图5-6任务2运行结果图
【特别提示】
while语句和do-while语句的区别:
在循环条件和循环体相同的情况下while后面的表达式第一次的值为“真〞时,两种循环得到的结果相同。
当while后面的表达式第一次的值为“假〞时,while语句一次也不执行,而do-while语句可以顺利执行一次。
任务3:
彩票中奖——for语句的运用
【工作任务】
一个小型模拟彩票中奖机,彩票中奖号码是一个固定的3位数即原始号码。
对任意一个三位数,取出它的每位数字和原始号码的每位数字比拟,共有1位数相同中三等奖,2位数相同中二等奖,3位数都相同中一等奖。
在所有的三位数中进行比拟,输出所有中奖数字。
【思路指导】
初始化:
原始号码123
循环:
循环变量i是100-999的数字,个位a=i%10,十位b=i/10%10,c=i/100%10。
计数器:
k
条件判断:
判断a,b,c是否1,2,3,有一个相等k++
条件输出:
判断k=1输出“三等奖+数字〞
k=2输出“二等奖+数字〞
k=3输出“一等奖+数字〞
【相关知识】
1.for语句语法格式:
for(表达式1;表达式2;表达式3)
{循环语句组}
2.for语句执行过程:
〔1〕先计算表达式1的值。
〔2〕再计算表达式2的值,假设其值为真,那么执行循环体一次;否那么跳转第〔5〕步。
〔3〕然后计算表达式3的值。
〔4〕回转上面第〔2〕步。
〔5〕结束循环,执行for语句的后续语句。
for语句结构如图下列图所示。
图5-7for语句结构
3.for语句说明:
〔1〕表达式1一般为赋值表达式,用于进入循环之前给循环变量赋初值,后面有“;〞分隔。
〔2〕表达式2一般为关系表达式或逻辑表达式,用于执行循环的条件判定,它与while、do-while循环中的表达式作用完全相同,后面用“;〞分隔。
〔3〕表达式3一般为赋值表达式或自增(i=i+1可表示成i++)、自减(i=i-1可表示成i--)表达式,用于修改循环变量的值。
〔4〕如果循环体局部是多个语句组成的,那么必须用大括号括起来,使其成为一个复合语句。
【任务实施】
1.流程图:
图5-8任务3流程图
2.程序代码:
#include
voidmain()
{
inti,a,b,c,k=0,num=0;
intn=123;//中奖原始号码
printf(“输出所有中奖〞号码:
\n〞);
for(i=100;i<=999;i++)//循环判断三位数中中奖数字
{a=i%10;//求个位
b=i/10%10;//求十位
c=i/100%10;//求百位
if(a==3)k++;//个位是3,k=1
if(b==2)k++;//十位是2,k=2
if(c==1)k++;//百位是1,k=3
if(k==1){printf(“三等奖%-5d〞,i);num++;k=0;}//根据k的值判定获奖等级
if(k==2){printf(“二等奖y%-5d〞,i);num++;k=0;}
if(k==3){printf(“一等奖%-5d〞,i);num++;k=0;}
if(num==6){printf(“\n〞);num=0;}//一行显示6个数字
}
}
程序运行结果如下所示:
图5-9任务3运行结果图
【特别提示】
〔1〕for语句的一般形式中的“表达式1〞可以省略。
但要注意省略表达式1时,其后的分号不能省略。
举例:
i=1;
for(;i<=100;i++)
sum=sum+i;
〔2〕如果省略表达式2,即表示表达式2的值始终为真,循环将无终止地进行下去。
举例:
for(i=1;;i++)
printf("%d",i);
〔3〕如果省略表达式3,也将产生一个无穷循环。
因此,应另外设法保证循环能正常结束,可以将循环变量的修改局部〔即表达式3〕放在循环语句中控制。
举例:
for(i=1;i<=100;)
{printf("%d",i);
i++;
}
〔4〕可以同时省略表达式1和表达式3,即省略了循环的初值和循环变量的修改局部,此时完全等价于while语句。
举例:
i=1;
for(;i<=10;)
{printf("%d",i);
i++;
}