您的位置:首页 > 编程语言 > C语言/C++

学习C语言的循环结构

2006-09-30 09:35 501 查看
学习循环结构
学习之前我们应该知道什么是循环?以及为什么要使用循环?
现在我们先来看一下循环的定义:解决某一问题要重复执行某些指令的情况就是循环。使用循环可以使我们解决问题变得更简单一些,通过生活示例可以说明。
1、 while 循环
学习while循环的语法:
while<条件>
{
<语句>;
}
学习while循环使用时需要注意的几点:
Ø 在使用过程中,我们指定的条件,它的返回值应为逻辑值(真或假);
Ø 应该先检查条件,后执行循环体语句,也就是说循环体中的语句只能在条件为真的时候才执行,如果第一次检查条件的结果为假,则循环中的语句根本不会执行。
Ø 因为while循环取决于条件的值,因此,它可用在循环次数不固定或者循环次数未知的情况下。
Ø 一旦循环执行完毕(当条件的结果为假时),程序就从循环最后一条语句之后的代码行继续执行。
Ø 如果循环中包含多条语句,需要用{}括起来。
Ø While循环体中的每条语句应以分号;结束。
Ø While循环条件中使用的变量必须先声明并初始化,才能用于while循环条件中。
Ø While循环体中的语句必须以某种方式改变条件变量的值,这样循环才可能结束。如果条件表达式中变量保持不变,则循环将永远不会结束,从而成为死循环。
示例:
#include<stdio.h>
void main ()
{
int num=1,result;
while (num<=10)
{
result=num*10;
printf("%d × 10 %d /n",num,result);
num++;
}
}

2、 do-while循环
学习do-while循环的语法:
Do
{
<语句>;
}while<条件>;
学习do-while时除了与while循环相同的注意点外,还需要注意:
Ø 它先执行循环体中的语句,然后再判断条件是否为真,如果为真则继续循环;如果为假,则终止循环。
Ø While语句后面必须有一个分号。
示例:1
do
{
. . .
. . .
scanf(“%c”,&answer);
} while (answer != ’n’);
示例:2
#include<stdio.h>
void main ()
{
int number=5,guess;
printf ("猜一个介于 1 与 10 之间的数/n");
do
{
printf("请输入您猜测的数:");
scanf("%d",&guess);
if (guess > number)
printf("太大/n");
else if (guess < number)
printf("太小/n");
} while (guess != number);
printf("您猜中了! 答案为 %d/n",number);
}

3、嵌套 while 循环
嵌套 while 循环的语法:
while(i <= 10)
{
. . .
while (i <= j)
{
. . .
. . .
}
. . .
}
注:只有在内循环完全结束后,外循环才会进行下一趟。
示例:
#include <stdio.h>
void main()
{
int nstars=1,stars;
while(nstars <= 10)
{
stars=1;
while (stars <= nstars)
{
printf("*");
stars++;
}
printf("/n");
nstars++;
}
}

4、嵌套 do-while 循环
嵌套 do-while 循环的语法:
do
{
. . .
do
{
. . .
}while( . . .)
. . .
}while( . . . )
注:只有在内循环完全结束后,外循环才会进行下一趟。
示例:
#include <stdio.h>
void main()
{
int x;
char i, ans;
ans='y';
do
{
x=0;
printf("/n请输入字符序列");
fflush(stdin);
do{
i=getchar();
x++;
}while( i !='/n' );
printf("/n输入的字符数为%d", --x);
printf("/n是否需要输入更多序列 (Y/N) ? ");
ans = getch();
}while(ans =='Y' || ans == 'y');
}

注:while循环和do-while循环的区别在于:while循环是先判断后执行,而do-while循环是先执行后判断。
5、for循环
for 循环的一般语法:
for( 表达式1 ; 表达式2 ; 表达式3 )
{
语句;
}
工作原理:
Ø 计算表达式1的值,通常为循环变量赋初值
Ø 计算表达式2的值,即判断循环条件是否为真,若值为真则执行循环体一次, 否则跳出循环;
Ø 计算表达式3的值,这里通常写更新循环变量的赋值表达式,然后转回第2步重复执行;
示例:
#include <stdio.h>
void main()
{
int number,count,factorial=1;
printf("/n 请输入任意一个正整数:");
scanf("%d",&number);
for(count = 1; count <=number; count++)
factorial=factorial*count;
printf("/n %d的阶乘 = %d/n",number,factorial);
}
注:
Ø for 循环中有三个表达式
Ø for 语句中的各个表达式都可以省略
Ø 分号分隔符不能省略
省略表达式1:相当于省去了为循环变量赋初值,此时应在for语句之前给循环变量赋初值
int num=0;
for(;num <= 10 ;num ++)
{
printf("%d/n",num*2);
}
省略表达式2:即不判断循环条件,也就是认为表达式2始终为真,这时应在循环体内设法结束循环,否则将成为死循环
for(num=1;;num++)
{
...
}
省略表达式3:即省去修改循环变量的值,但此时应在循环体内设法结束循环
for(i=1;i<=100;)
{
sum=sum+1;
i++;
}
省略三个表达式:即不为循环变量赋初值,不设置循环条件(认为表达式2为真值),不修改循环变量的值,无终止地执行循环体。此时应在循环体内设法结束循环,否则会成为死循环
for( ; ; )
{
printf("这将一直进行下去");
i = getchar();
if(i == 'X' || i == 'x')
break;
}
6、break语句
Ø break语句可以改变程序的控制流
Ø break语句用于do-while、while、for循环中时,可使程序终止循环而执行循环后面的语句
Ø break语句通常在循环中与条件语句一起使用。若条件值为真,将跳出循环,控制流转向循环后面的语句
Ø 如果已执行break语句,就不会执行循环体中位于 break 语句后的语句
Ø 在多层循环中,一个break语句只向外跳一层
示例:
#include<stdio.h>
void main()
{
int count=0,ch;
printf("/n 请输入一行字符:");
while((ch=getchar())!='/n')
{
if(ch==' ')
break;
count++;
}
printf("/n 共有 %d 个有效字符。/n",count);
}
7continue 语句
Ø continue 语句只能用在循环里
Ø continue 语句的作用是跳过循环体中剩余的语句而执行下一次循环
Ø 对于while和do-while循环,continue 语句执行之后的动作是条件判断;对于for循环,随后的动作是变量更新
示例:
#include<stdio.h>
void main()
{
int i,sum = 0;
for(i=1; i<=100;i++)
{
if( i % 10 == 3)
continue;
sum += i;
}
printf("sum = %d /n",sum);
}
嵌套循环示例1
void main()
{
int i,j,k;
for(i=1;i<=4;i++)
{
for(j=1;j<=4-i;j++)
printf(" ");
for(k=1;k<=2*i-1;k++)
printf("*");
printf("/n");
}
for(i=1;i<=3;i++)
{
for(j=1;j<=i;j++)
printf(" ");
for(k=1;k<=7-2*i;k++)
printf("*");
printf("/n");
}
}

嵌套循环示例2
void main()
{
int i,num;
char answer;
do
{
printf("请输入一个数:");
scanf("%d",&num);
printf("/n");
for (i = 1; i <= 10; i++)
{
printf("=");
}
printf("/n 该数是 %d",num);
printf("/n/n 您是否还要输入其他的数(y/n)?");
fflush(stdin);
answer = getchar();
} while (answer != 'n');
}
输出:
请输入一个数: 58

==========
该数是 58

您是否还要输入其他的数(y/n)? y
请输入一个数: 64

==========
该数是 64

您是否还要输入其他的数(y/n)? n
Press any key to continue
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: