C语言学习笔记(5)循环结构程序
while语句
while语句用于表示“先判断,后执行”的循环结构表示形式如下:
while(表达式) 循环体语句
其中的循环体语句只能是一条语句,多条的符合语句需要用{}括起来
例:
#include<stdio.h>
void main()
{
int i = 1,sum = 0; //变量的定义与赋值
while(i <= 100) //设置循环结构
{
sum= sum + i; //计算累加和
i++; //循环变量自加
}
printf("1+2+3+...+100=%d\n",sum);
}
输出的结果为
1+2+3+...+100=5050
Press any key to continue
while语句中的表达式和循环后最好用空格或回车隔以方便以后的检查和别的程序员对程序的读取;但是不可以用分号间隔,否则会使循环体变成空语句。
do-while语句
do-while语句表示“先执行,后判断”型的循环语句,表达形式如下:
do
循环语句
while(表达式);
同样循环语句只能为一条,如果需要使用多条语句的复合语句需要用大括号{}将其括起来
例:
#include<stdio.h>
void main()
{
int i = 1,sum = 0; //变量的定义与赋初值
do
{
sum=sum + i; //计算相加量
i++; //循环变量相加
}
while(i <= 100); //设置循环条件
printf("1+2+3+...+100=%d\n",sum); //结果输出
}
输出结果如下
1+2+3+...+100=5050
Press any key to continue
应当注意的是在do-while语句中while语句后的判断表达式应当用分号隔断
在do-while语句中循环体至少循环一次
两语句的不同
如果将判断条件都设置为i<1,不满足循环条件在while语句中:
#include<stdio.h>
void main()
{
int i = 1,sum = 0; //变量的定义与赋值
while(i < 1) //设置循环结构
{
sum= sum + i; //计算累加和
i++; //循环变量自加
}
printf("i=%d\n",i);
}
输出结果为:
i=0
Press any key to continue
及没有进入循环体
而如果在do-while语句用同样的判断条件:
#include<stdio.h>
void main()
{
int i = 1,sum = 0; //变量的定义与赋初值
do
{
sum=sum + i; //计算相加量
i++; //循环变量相加
}
while(i < 1); //设置循环条件
printf("i=%d\n",i); //结果输出
}
输出结果为
i=1
Press any key to continue
及进入了循环体且执行了一次循环语句
for语句
for语句也用于实现“先判断后执行”的循环结构。
三种语句中 for语句的功能最强大,使用过最灵活,而成为应用最广泛的循环语句
表达形式为:
for([表达式1];[表达式2];[表达式3])
循环体语句
语义为
(1).计算表达式1的值
(2).计算表达式2的值,进行判断(及判断语句)若值为真则继续执行,否则结束循环
(3).执行一次循环语句,接着计算表达式3的值
例:
#include <stdio.h>
void main()
{
int i,sum;
for(i = 1,sum = 0;
i <= 100;
i++)
sum = i + sum;
printf("1+2+3+...+100=%d\n",sum);
}
输出结果与前两条语句的结果相同
注意
1.表达式1通常为赋值语句可省略,但是分号必须保留。例如原循环体可以写成:
i = 1 ; sum = 0;
for(;
i <= 100;
i++)
sum = sum + i;
2.表达式2为判断语句,如省略会陷入死循环,应设法使用break语句结束循环。如:
for(i = 1,sum = 0;;i++)
{
sum = sum + i;
if (i > 100)
break;
}
可将修改循环体变量的表达式放在循环体内。
for(i = 1,sum = 0;i <= 100;)
{
sum = sum + 1;
i++;
}
一般把和循环体无关的操作放在循环体外。
循环体内的内容和括号间没有分号,擅加分号会导致循环体变成空语句。
循环语句的嵌套使用
循环语句同样可以进行嵌套
例:
#include <stdio.h>
#include "math.h"
void main()
{
int k , data , tag; //外层循环,用来产生2到1000的整数
for(data = 2;data <= 1000;data++)
{
tag = 0; //tag由于表示data是否为素数。没有判断前先假定为素数
for(k = 2; k <= sqrt(data)&&!tag; k++) //内层判断data是否有约数
{
if(data%k == 0)
tag = 1;
}
if(tag == 0)
printf("%4d",data); //如果data是素数则输出
}
}
break语句
break语句不仅可以跳出witch语句,还可以跳出本层循环。
例:
求1到100中可以被三整除的整数之和
#include <stdio.h>
void main()
{
int i, s=0;
for(i = 1;;i++)
{
if (i >100) break; //直接结束本次循环转到循环后第一条语句
if (i%3 == 0) s = s + i; //如果能被3整除则加入总和
}
printf("sum=%d",s);
}
break语句只能用于switch和循环体语句中
break语句只会跳出一层循环
能不使用break语句就不使用break语句
continue语句
continue语句只能用于循环语句中
语义:结束本次循环,直接跳入下一次循环条件的判断
例:
#include
<stdio.h>
void main()
{
int i,s = 0;
for(i = 1;i <=100 ; i++)
{
if(i%3!=0)continue; //结束本次循环,不在执行后边的s = s + i,转到表达式3即i++处执行
s = s + i;
}
printf("s=%d",s);
}
continue语句只跳过循环体后的语句,而for中的语句不在循环体内仍然要执行
continue语句仍要进行循环条件的判断,而break语句直接跳出循环体