文章目录
4.1 循环控制语句
程序的三种基本结构:
顺序
循环(while当型循环结构/do while直到型循环结构),
选择( if/switch )
本节内容:
4.1.1 goto语句
(1)goto 语句: 无条件转向语句。用来跳转到某个程序位置进行执行。
一般形式:
goto label; goto 123; goto int;
goto 语句标号, 其中语句标号是个标识符。 标识符不可以是系统中的保留字(int , float, if,then …) .
goto的用途:
a)与if语句一起构成循环结构。
b)从循环体内跳转到循环体外,(很少使用) 破环了结构化程序设计原则。一般用break, continue ;
**// 从 1+2+3+ ... + 100 总和
int main(){
int i = 1,sum = 0;
loop:
if(i<=100)
{
sum = sum + i;
i++;
goto loop;
}
printf("sum=%d\n",sum); //结果为5050
return 0;
}**
注意: goto语句只能在当前函数中才可以使用。
//goto 语句不能够跨函数来使用。
4.1.2 while 语句 (当型)
while 语句 → 当型循环结构
//一般形式:
while(表达式) 要执行的语句 ( 一条或者多条)
图解:
当表达式的值为0时,则此表达式直接退出,其语句不会被执行一次。
while循环实现1+2+…+100 求和。
int i = 1, sum = 0;
while(i<=100)
{
sum = sum + i;
i++;
}
printf("sum的值=%d",sum);
- 有多条语句需要都被执行时,建议使用{} 括起来。
- 循环中必须要有条语句促使while循环不成立。这样才能够使程序停止运行,不构成死循环。
4.1.3 do while 语句 ( 直到型)
形式:
do 语句(一条或者多条)
while (条件表达式);
图解:
不管表达式结果如何,其循环体内语句至少被执行一次。
先执行循环体语句,然后再判断表达式值,为真(非0)则循环,为假(0)则退出
eg:
int i = 1, sum = 0;
do
{
sum = sum + i;
i++;
} while(i<=100);
printf("sum值%d",sum);
当型循环、直到型循环
eg:
int sum = 0, i = 1;
while(i <=10)
{
sum = sum + i ;
i++;
}
printf("while循环sum =%d",sum); //值为55
int sum, i;
sum = 0, i = 1;
do
{
sum = sum + i;'
i++;
}while(i<=10);
printf("do...while循环sum = %d",sum); //值为55
改动版:
int sum = 0; int i = 20;
while(i<=10)
{
sum = sum + i;
i++;
}
printf("sum = %d",sum); //值为0
int sum = 0; int i = 20;
do{
sum = sum + i;
i++;
}while(i<=10);
printf("sum = %d",sum); //值为20
通过上面两个循环程序能证明 while 和 do…while循环的区别。
如果条件为假更能看出其区别。
4.2 for语句精解
for语句:
for是能够取代while语句的。但是是否取代,则取决于大家的编程习惯。
for语句的一般形式:
for(表达式1;表达式2;表达式3)
内嵌的语句
for语句的执行过程:
(1)先求解表达式1的值,表达式1只会被执行一次。
(2)再求解表达式2的值。
(2.1) 若表达式2值为真(非0),则执行for语句中指定的内嵌语句,
同时求解表达式3,再反复循环步骤2,一直到表达式2的值为假。
(2.2)若表达式2的值为假(0),则循环结束,跳到整个for语句后边的语句去执行。
//for语句最简单也是最常用的应用形式:
for(循环变量赋初值;循环变量结束条件;循环变量增加值) 内嵌的语句
例如:
1+2+3.... 100 求结果
int i,sum=0;
for(i=1;i<=100;i++)
{
sum = sum + i;
}
printf("sum=%d",sum);
4.2.1 ※ for语句的一些特殊用法说明:
(1) 表达式1可以省略,但后边的;不能省略,应该在for语句之前就给循环变量赋予初值。
int i,sum=0;
i = 1; //此处需要赋予初值。
for(; i<=100;i++)
{
sum = sum + i;
}
printf("sum=%d\n",sum);
printf("i=%d\n",i);
(2) 表达式2也能省略(不多见),也就是不判断循环条件,那么循环就会无终止的运行下去。此时,就必须用break语句终止for循环。 表达式2没了相当于一直为真,成为死循环。
解决方法:
int i,sum = 0;
for(i=1; ; i++)
{
sum = sum + i;
if(i<=100)
break; //借助if语句来跳出循环体。
}
(3) 表达式3也可以省略,我们也必须借助其他方式来使得循环正常结束,否则会变成死循环。
int i,sum=0;
for(i = 1;i<=100;)
{
sum = sum + i;
i++; //保证循环正常结束的方式.
}
printf("sum=%d\n",sum);
printf("i=%d\n",i);
(4)可以省略表达式1,表达式3,只给表达式2
int i,sum=0;
i=1; // i必须赋初值
for(; i<=100;)
{
sum = sum + i;
i++; // 保证循环正常结束的办法。
}
printf("sum=%d\n",sum);
printf("i=%d\n",i);
(5)三个表达式都省略,不设置初值,不判断条件(条件一直为真),循环变量也不增加。这就导致无终止的执行循环体。
int i,sum=0;
i=1; //i给初值
for(;;)
{
sum = sum + i;
if(i>=100) //结束条件
{
break;
}
i++; //增加值
}
printf("sum=%d\n",sum);
printf("i=%d\n",i);
** (6)表达式1可以设置循环变量初值,也可以是与循环变量无关的其他表达式;**
int i,sum;
i = 1;
for(sum=0;i<=100;i++)
{
sum = sum + i;
}
printf("sum=%d\n",sum);
printf("i=%d\n",i);
(7)表达式1和表达式3可以是简单表达式,也可以是逗号表达式。
逗号表达式格式: (表达式1,表达式2) 整个表达式结果是表达式2的值
int i,j = 10000,sum;
for(sum=0,i=1; i<=100; i++,j--)
{
sum = sum + i;
}
printf("sum=%d\n",sum); // sum=5050
printf("i=%d\n",i); // i=101
printf("j=%d",j); // j=9900
(8) 表达式2的值一般是关系表达式,或者逻辑表达式 && || , 但是只要其值非0,就执行循环体。
int i , sum;
sum = 0;
for(i=0; 9999; i++)
{
sum = sum + i;
if(i>100)
{
break;
}
}
printf("sum=%d\n",sum);
printf("i=%d\n",i);
//规矩使用:
int i ;
for(i=0;i<100;i++)
{
......
}
4.3 循环嵌套、比较、break、continue语句
- 循环的嵌套
- 几种循环语句的比较
- break语句以及continue语句
练习:
For语句嵌套for语句
9,9乘法表:
int i,j,k;
for(i=1;i<=9;i++)
{
for(j=1;j<=i;j++)
{
k = i*j;
printf("%d*%d=%d\n",i,j,k);
}
printf("\n");
}
几种循环语句的比较:
goto型写法, while型循环, do while型循环 , for循环
//while(表达式) 要执行的语句
do 要执行的语句
while(表达式);
for(表达式1;表达式2;表达式3) 内嵌语句
//对while,do while , for 这三种循环,可以用break语句跳出循环,用continue语句结束本次循环。
4.3.1 break , continue 语句
break 和 continue 不能用于goto循环语句中,因为goto并不是真正的循环语句。
break 语句可以出现任何循环体中,用来跳出此循环
要求1+2+3+......100 = 5050,当和值达到4000的时候退出循环
int i,sum=0;
for(i=1;i<=100;i++)
{
sum = sum + i;
if(sum>=4000)
{
break;
}
}
printf("sum=%d\n",sum);
printf("i=%d\n",i);
在整个c/c++中,break语句不能用于 循环语句和switch语句之外的任何其他语句中。并且break语句出现在switch中时,是用于跳出switch。
int i;
for(i=1;i<=100;i++)
{
switch(i)
{
case 1:
printf("1");
break;
}
printf("curr i value = %d",i);
}
int i,j,k;
for(int i = 1; i<=9;i++)
{
for(j=1;j<=i;j++)
{
k = i * j;
printf("%d*%d",i,j,k);
break; //内循环break
}
printf("\n");
break; //外循环break
}
4.3.2 continue 语句: (结束本次循环)
本语句只能用在三种循环while , do while , for 循环的语句体中。但是continue不用再switch中。
作用: 结束本次循环,跳出循环体中的下面尚未执行的语句。接着进行下一次是否执行循环的判断。
4.3.3 break 与 continue 语句的区别
break :结束整个循环的执行,跳转到整个循环之后的语句。
continue:只结束本次循环,而不是终止整个循环的执行。
while语句之中嵌套break语句:
break :
continue :
eg:
1-100之间不能被3整除的数字输出。
int i;
for(i=1;i<=100;i++)
{
if((i%3)==0)
{
continue;
//不能被3整除的情况下会执行下面的语句。
printf("%d ",i);
}else if{
printf(%d ",i);
}