第六章 循环控制结构
三种循环语句:for,while,do–while.
1.while语句与do–while语句
whilr语句属于当型循环,do–while语句属于直到型循环.
while语句的一般形式为:
while(循环控制表达式)
{
语句序列
}
若循环控制表达式为真,则执行循环体中的语句,若循环控制表达式为假,就是退出循环,执行循环体后面的语句.
di-while语句的一般形式为:
do
{
语句序列
}
先执行循环体中的语句,若循环控制表达式为真,则执行循环体中的语句,若循环控制表达式为假,就是退出循环,执行循环体后面的语句.
二者区别:do–while语句中的循环控制表达式是在执行循环体之后测试的,故do–while语句中循环体内的语句至少被执行一次.
2.for语句
for语句属于当型循环结构,其一般形式为:
for(初始化表达式(赋初值);循环控制表达式(循环控制条件);增值表达式(变量增值)) ↓ ↓ ↓
{
语句序列
}
1)三个表达式之间的分隔符是分号,而且只有两个分号,既不能多,也不能少.
2)例如课本例6.1,计算并输出1+2+3+.....+n的值中,给sum赋初值,令sum=0,其必须在循环语句前并且挨着循环语句.
若(循环次数次数已知,计数控制)的循环用for语句
若(循环次数未知,条件控制)的循环用while语句
4)for语句后面一般不加分号
3.嵌套循环
执行嵌套语句时,先由外层循环进入内层循环,在内层循环终止之后接着执行外层循环,再由外层循环进入内层循环当外层循环全部终止时,程序结束。
4.条件控制的循环
1)随机函数rand()
标准C规定RAND_MAX的值不大于双字节整数的最大值32767.
若想改变其范围:①利用求余运算rand()%b将函数rand()生成的随机数变化到[0,b-1]之间.②利用rand()%b+a将随机数的取值范围平移至[a,a+b-1]之间.
5.c语言中用于控制流程转移的跳转语句有:
goto语句,break语句,coutinue语句,return语句
break语句:当执行循环体遇到break语句时,循环立即终止。
感受:通过做循环结构的题,从中找到了一些做题的方法,例如画矩形问题和蛋糕裱花问题是一类题目,都运用了:用i和j来表示直线方程,从而找到i和j的关系;还有敲七,有多少位是7,含k个3的数等问题也是一个类型,其中都用到了:用整数除法和求余运算来分离该数中的每一位数。
例1,画矩形问题
#include<cstdio>
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
int main()
{
int a,b,d,i,j;
char c;
scanf("%d %d %c %d",&a,&b,&c,&d);
for(i=1;i<=a;i++)
{
for(j=1;j<=b;j++)
{
if(d==1)
printf("%c",c);
if(d==0)
{
if(i>1&&i<a&&j>1&&j<b)
printf(" ");
else
printf("%c",c);
}
}
printf("\n");
}
return 0;
}
例2,有多少位是7问题
#include<cstdio>
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
int main()
{
int a,n;
n=0;
scanf("%d",&a);
if(a/1000==7) n+=1;
if((a-(a/1000)*1000)/100==7) n+=1;
if((a-(a/100)*100)/10==7) n+=1;
if(a%10==7) n+=1;
printf("%d",n);
return 0;
}