1循环语句
1.1循环语句主要包括三种:while、do-while、for。
2while语句处理循环
2.1while语句基本形式:
While(表达式)
{循环体语句}
2.2执行流程:首先计算while表达式的值,当非零时执行循环体内的语句,执行完之后继续判断while表达式的值,如果非零,继续执行循环体,直到表达式值为零时,跳出循环,执行后续的语句。
例子代码:
#include "stdio.h"
main (){
int i,sum;
i=1;
sum=0;
while ( i<=100 ) /* 累加的数i 小于或等于终止数n就循环累加,否则结束循环*/
{ sum=sum+i;
i++;
}
printf ("sum=%d\n",sum);
}
注:使用sum和i时一定要赋初始值。
2.3while语句使用注意:
循环体要是多条语句必须使用符合语句形式;在循环体表达式中一定要有控制循环趋向结束的语句,否则循环将无限进行;循环体可为空;
2.4while实例:a+aa+aaa+....
代码:
#include "stdio.h"
main( )
{
int a,x;
long sum=0,n=1,tn ;
scanf("%d%d",&a,&x);
tn=a;
while(n<=x) /*n超过x则中止*/
{sum+=tn;
tn=tn*10+x;
n++;
}
printf("result is %ld",sum);
}
思考问题:求阶乘。
3do while语句处理循环
3.1do while语句基本形式:
do{循环体语句}
while(表达式);
3.2执行流程:先执行do后面的循环体,然后计算while里的表达式值,当值非零时继续执行do的循环体,当值为零时,跳出循环。
例子代码:
#include "stdio.h"
main (){
int i,sum;
i=2;
sum=0;
do /*先执行循环*/
{
sum+=i;
i+=2;
}while(i<=100); /*判断条件*/
printf ("sum=%d\n", sum );
}
3.3while和do while的区别:就是while首先要判断while的表达式是否成立再执行循环体,而do while是无论while的表达式是否成立,都会先执行一次do的循环体。
4for语句处理循环
4.1基本语法形式:
for(表达式1;表达式2;表达式3)
循环体;
注:for是c语言关键字,括号里的3个表达式可以是任意的表达式,当循环体内有多条语句时,注意使用复合语句。
4.2先计算表达式1,表达式1只执行一次,一般是赋值语句,用于初始化变量;然后求解表达式2,若值为零,则退出循环,若非零,则执行循环体;接着执行表达式3,然后继续判断表达式2,再执行循环体,直到表达式2不成立。
例子代码:
#include "stdio.h"
main( )
{
int i,sum;
sum=0;
for( i=1; i<=100; i++)
sum+=i;
printf("sum=%d",sum);
}
4.3for语句的特点:表达式1、2、3都可以省略,但“;”分号不能省略;表达式可以是任意形式的表达式;循环体可以为空;for的括号里可以使用多个控制循环的变量。
判断素数例子代码:
#include "stdio.h"
#include "math.h"
main()
{ int n,m,flag;
flag=1; /*flag变量为旗帜变量,值为1则n为素数,否则不是素数。初值为1*/
printf("\n enter n:"); /*输入n*/
scanf("%d",&n);
for(m=2;m<n&&flag;m++) /*判断n能否被2~n-1之间的数整除*/
if(n%m==0)
flag=0; /*n不是素数*/
if(flag==1) /*若flag的值没有变化,则为素数*/
printf("\n%d is a prime number.",n);
else
printf("\n %d is not a prime number.",n);
}
4.4思考问题:
1.求阶乘。
2.输出斐波那契数列。
3.输出水仙花数。
4.输出如下图形:
*****
****
***
**
*
5流程控制语句
有时我们在执行循环的过程中,可能需要在中途中断循环或者跳过本次循环,这时我们就需要使用流程控制语句。
5.1break:在switch语句中我们常使用break用来跳出switch分支,其实break同样也可以使用在循环语句中用来跳出循环。在循环中使用break让循环语句可以有多个出口,使程序变的更加灵活。
break语句可以使循环在未达到结束条件时提前跳出循环。
例子代码:
for(i=0;i<10;i++){
printf("%d",i);
if(i==0) break;
}
思考问题:使用break语句修改判断素数问题。
5.2continue:在循环过程中使用continue可以根据条件判断是否执行本次循环,使用continue之后,后面的代码就不再执行,直接执行下次循环。但是不像break既可以用在分支也可以用在循环中,continue只能用在循环结构中。
例子代码:
for(i=0;i<10;i++){
if(i==0) continue; /*当i==0时不执行循环*/
printf("%d",i);
}
思考练习:使用continue实现求1000内能被3、5、7整除的数。
5.3goto:也叫无条件转向语句.
它的一般格式为:goto 标号;
例子代码:
#include <stdio.h>
main() {
int i,s=0;
i=1;
loop:if(i<=100){ /*标号,表示出goto语句转向的位置*/
s+=i;
i++;
goto loop;
}
printf("1+2+3+…100=%d\n",s);
}
在结构化程序设计中不提倡使用goto语句,但有时使用goto却比较方便,比如在一个多层的循环体中,要跳出到最外层的循环就要使用多个break,但使用goto直接就可以实现。