C语言入门7-程序设计方法基础-循环结构
程序设计方法基础-循环结构
循环三要素: 初值 循环判断条件 步长(循环增量)
循环结构在有些书籍上也称为重复结构, 即反复执行某一部分的操作。
循环三要素: 初值 循环判断条件 步长(循环增量)
如何控制循环的结束呢?
第一种方式就是 条件控制的循环(Condition Controlled Loop),由一个给定的条件来控制,第二种方式就是 计数控制的循环(Counter Controlled Loop),重复处理的次数是已知的,
循环结构的两种实现方法如下图
“当”型循环如上图所示,它是先测试循环条件P,根据测试条件如果为真则执行循环体,否则退出循环,
“直到”型循环如上图所示,它是先执行循环体,然后再测试循环条件P,根据测试条件如果为真则再次执行循环体,否则退出循环,
循环体(Body of Loop):被重复执行的操作A
如果第一次测试循环条件为真的话,”当”型循环与”直到”型循环是一样的,两者没有区别;
当第一次测试循环条件就为假时,我们可以看出”当”型循环一次也不执行,而”直到”型循环执行一次。
(当型循环结构 跟 直到型循环结构 是可以互相转化的。)
选择 循环结构的 一般原则
循环 次数已知 |
计数控制的循环结构 |
循环次数未知,循环的次数由一个给定的条件来控制 |
条件控制的循环结构 |
循环体至少要执行一次 |
“直到”型循环 |
变量名: 内存存储单元的一个符号名。
通过 引用符号名来访问其 所对应的 存储单元,
总结 保证循环可终止的条件是:
1.证 经有限次重复后,循环控制条件i<=5 不再满足
2.执行循环体时,必须改一个或多个变量的值
循环结构正着计数:i = i + 1 i <= 循环的上界
循环结构倒着计数:i = i - 1 i >= 循环的下界
一、 Raptor之循环结构
循环结构(loop) 它的核心有以下三点:
1.重复运算动作(body)
2.重复运算的次数怎么定?(condition)
以 数字 设定执行次数
以某项条件的发生 而 停止重复运算
3.循环内的语句应 能改动 条件变量 以脱离循环
注意:Raptor图的循环分支是条件为 no的分支进行循环,为yes的分支退出循环。
注意:
1:字母是区分大小写的
2:Raptor的循环分支是 no分支
while循环语句
一、 循环结构的思想及意义:
循环结构的思想就是重复要做同样的事, 也就是程序中重复执行的语句,
我们只要控制好循环的 初值 ,条件 和步长 就可以轻松解决问题。
循环三要素: 初值 条件 步长
二、 while的基本格式*******
(1)While它的格式变形如下:(流程图如右图所示: 当型循环结构)
表达式1; //初值
while( 表达式2 ) //条件
{
执行语句;
表达式3; // 步长
}
其中表达式1代表了程序循环前的初始值,
表达式2代表了控制条件,
表达式3代表了增量变化 (步长)
while循环语句中,
while后一对圆括号中 表达式2的值 决定了循环体是否进行,
因此,进入while循环后,一定有能使表达式2的值变为( 0 / 假 ) 的操作,*******
否则,循环将会无限制地进行下去。
(3)其中表达式2代表了循环条件,整个复合语句为循环体。
do---while循环语句
在循环中有当型循环,还有直到型循环。
接下来我们就来学习下 直到型循环。
结合while循环结构, 分析 while do...while 的区别
While它的格式变形如下;
表达式1; //初值
while(表达式2) //条件
{
语句;
表达式3; // 步长
}
一、 do—while语句格式
do—while语句格式
表达式1; // 初始值
do
{
语句;
表达式3; //步长
}
while(表达式2); //判定条件
其中表达式1代表了程序循环前的 初始值,
表达式2代表了 控制条件,
表达式3代表了 增量变化
这种格式在程序中已经很少用了。
主要应用于下种变形格式:
do—while语句格式变形
do
{
语句;
} while (条件表达式);
do-while语句的思想及意义
do英文翻译成中文是 做 的意思,
那么从上面的结构我们也能看出,do语句后 判断条件表达式,
如果条件表达式成立,再次执行语句,直到条件表达式不成立,
往下继续执行。
所以do—while的中心思想是 至少执行一次循环语句。
但是,while循环结构, 至少执行0次循环语句。
do—while的流程图如下:
2 while 与do—while的相同与不同总结?
(1)while 语句是先计算表达式的值,再执行循环体, do…while是执行完一次循环体,再计算表达式的值
(2)当表达式的值第一次为假时,while的循环体一次都不执行,do…while则执行一次循环体;
(3)当表达式的值为真时,两者无区别
(4)在不确定 条件次数 的情况下, 程序一般用while比较多
for循环语句
一、 for 循环的思想及意义
for 循环为 当型循环。
for循环最容易实现计数控制循环方法。
for循环的使用最为灵活,且适合应用在循环次数确定的情况下。
for循环的思想是,
先分析清楚循环的初始值,
循环的控制条件,
循环变量的步长变化,
然后直接把语句再写到for的循环体里即可,
这样可以让问题想的很清楚,流程也很清楚。
二、 for循环语句的应用
for语句是c语言所提供的功能更强,使用更广泛的一种循环语句。
- 1. for语句的一般格式
第1种情况
for(表达式1;表达式2;表达式3)
初值 ; 条件 ; 步长
语句;
第2种情况
for(表达式1;表达式2;表达式3)
初值 ; 条件 ; 步长
{
语句块;
}
for语句的注意事项
(1)各表达式 之间分号 不能省略
(2)表达式1与表达式2与表达式3均可省略, 一般是不省略的。
当表达式1省略时,相当于省去了为循环变量赋初值,此时应在for语句之前给循环变量赋初值
当表达式2省略时,表示不判断循环条件,也就是认为表达式2始终为真, 这时应在循环体内设法结束循环,否则将成为死循环
当表达式3省略时,即省去 修改循环变量的值, 但此时应在循环体内设法结束循环
虽然说表达式可以省略,但是在使用for时,还是要正常使用的,也就是该有的都有。
循环中的跳转语句 以及 循环嵌套
一、 跳转的思想及意义:
break和continue都是循环 中途 退出语句,
其中break语句用来跳出 一层 循环结构;
continue语句用来结束 一次 循环。
跳转的思想就是在 循环过程中出现了特殊情况,
一是终止循环; break
二是跳过去了某次,还继续下次。 continue
二、 什么是循环跳转
循环跳转指的是在循环结构当中, 出现的 强制终止循环 或 跳过某些次的循环的 一种操作。
三、 循环中的特殊情况应用
for循环语句是循环结构中使用最多最灵活的语句。循环结构中用for语句也可以更好的体现出跳转及嵌套的思想的过程。
- 1. break语句
break语句可用于选择结构中的switch语句,也可能用于循环结构中
break可以用于switch中的case搭挡,跳出switch语句。 (请参考第六单元)
break可以用于循环结构中,中止循环
break在循环语句中的基本格式如下:
① do
{
break;
}while(条件);
② while(条件)
{
break;
}
③ for(初值;条件;增量)
{
break;
}
break可以用于任意循环结构语句中,使用最多的是for循环里
注意:break可以用于switch与循环语句中,不能单独用于if语句中.
Break直接与if运用是不可以的,但是可以嵌套在循环语句中,和If一起使用!!!,
- 2. continue
(1)continue语句是继续的意思 , 跳过本次循环,还继续下一个循环.只能用于循环结构中
(1) continue的基本格式
① do
{
continue;
}while(条件);
② while(条件)
{
continue;
}
③ for(初值;条件;增量)
{
continue;
}
大
注意:continue 只可以用于循环结构语句中.
一、 什么是嵌套循环
嵌套循环的 就是一个循环结构体内 还有另一个循环结构,也称为 多重循环。
嵌套循环中任何一种循环结构语句都可以嵌套三种循环结构语句中的任意一种或多种;常见for语句嵌套for语句
电影院观影代码
/* Note:Your choice is C IDE */ #include "stdio.h" #include "string.h" int i; char arr[5][20]={"何以为家","圣杯骑士","小黄人","星球大战","金牌特工"}; char a1[20]="何以为家",a2[20]="圣杯骑士",a3[20]="小黄人",a4[20]="星球大战",a5[20]="金牌特工"; void show_menu(){ printf("\n\t\t\t2019最美精彩预告片\n"); printf("\t\t\t1.查看预告简介\n"); printf("\t\t\t2.调查吸引度\n"); printf("\t\t\t3.购票观影\n"); printf("\t\t\t4.刷新\n"); printf("\t\t\t5.查看所有\n"); printf("\t\t\t0.退出\n"); } /*查预告功能*/ void intro(){ char brr[20]; printf("please input movie name\n"); scanf("%s",&brr); if(strcmp(brr,a1)==0){ printf("法庭上,十二岁的男孩赞恩向法官状告他的亲生父母,原因是,他们给了他生命。\n"); }else if(strcmp(brr,a2)==0){ printf("马利克的哲学美学,广角的绝美影像.\n"); }else if(strcmp(brr,a3)==0){ printf("超人气配角无理头登场.\n"); }else if(strcmp(brr,a4)==0){ printf("全新特务间谍电影,独特的幽默将是亮点.\n"); }else{ printf("我们将尽快整合您需要的电影.\n");} } /*调查吸引度*/ void survey(){ int n[5];//n为对象 float p;//吸引度 for(i=0;i<5;i++){ printf("请输入对第%d部电影感兴趣的人数:",i+1); scanf("%d",&n[i]); } for(i=0;i<5;i++){ p=(float)(n[i]*100/50); printf("第%d部电影的吸引度是%.2f%%\n",i+1,p);} } /*购票功能*/ void ticket(){ char m[20]; int x,y,zong,a=0; printf("请输入购票名称:"); scanf("%s",&m); for(i=0;i<5;i++) { if(strcmp(m,arr[i])>0) { a=1; } } if(a==1) { printf("请输入购票张数:"); scanf("%d",&x);//x为购票张数 printf("确认结算0/1:"); scanf("%d",&y); zong=x*35; if (y==1){ printf("本次影片%s需支付金额%d元",m,zong); }else if(y==0){ printf("欢迎选购其他影片,继续观影\n"); }else{ printf("error number!!!"); } }else{ printf("今日暂无该影片上映!"); } } void showt() { for(i=0;i<5;i++) { printf("\t\t\t\t%s\n",arr[i]); } } void main() { int q;//q代表功能编号 for (i=1;i>0;i++){ show_menu(); printf("请输入功能编号:"); scanf("%d",&q); switch (q){ case 1:intro();break; case 2:survey();break; case 3:ticket();break; case 4:system("cls");break; case 5:showt();break; case 0:exit(1);break; default :printf("您输入的功能编号有误,请重新输入\n"); } } }