C语言入门(九)循环语句和循环控制

循环语句和循环控制

前言:

Turbo C 2.0提供三种基本的循环语句: for语句、while语句和do-while语句。

一、循环语句

(一)、for循环

for(<初始化>;<条件表过式>;<增量>)

语句;

初始化总是一个赋值语句,它用来给循环控制变量赋初值;条件表达式是一个关系表达式,它决定什么时候退出循环;增量定义循环控制变量每循环一次后按什么方式变化。这三个部分之间用;分开。

例如:

for(i=1;i<=10;i++)

语句;

上例中先给i赋初值1,判断i是否小于等于10,若是则执行语句,之后值增加1。再重新判断,直到条件为假,即i>10时,结束循环。

注意:

(1).for循环中语句可以为语句体,但要用{和}将参加循环的语句括起来。

(2).for循环中的初始化、条件表达式和增量都是选择项,即可以缺省,但;不能缺省。省略了初始化,表示不对循环控制变量赋初值。省略了条件表达式,则不做其它处理时便成为死循环。省略了增量,则不对循环控制变量进行操作,这时可在语句体中加入修改循环控制变量的语句。

(3).for循环可以有多层嵌套。

例如:

for(;;) 语句;

for(i=1;;i+=2) 语句;

for(j=5;;) 语句;

这些for循环语句都是正确的。

main()
{
int i,j;
printf(i j\n);
for(i=0;i<2;i++)
for(j=0;j<3;j++)
printf(%d %d\n,i,j);
} 

输出结果为:

i j

0 0

0 1

0 2

1 0

1 1

1 2

用for循环求1+2+……+100的和:

main()
{
int sn=0,i;
for(i=1;i<=100;i++)
sn+=i; /*1+2+……+100*/
printf(%d\n,sn);
}

从程序可以看出,使用循环语句可以大大简化代码。

(二)、while循环 它的一般形式为: 

while(条件)

语句;

while循环表示当条件为真时,便执行语句。直到条件为假才结束循环。并继续执行循环程序外的后续语句。

例如:

#include stdio.h
main()
{
char c;
c='\0'; /*初始化c*/
while(c!='\n') /*回车结束循环*/
c=getche(); /*带回显的从键盘接收字符*/
} 

上例中,while循环是以检查c是否为回车符开始,因其事先被初始化为空,所以条件为真,进入循环等待键盘输入字符;一旦输入回车,则c=‘\n‘,条件为假,循环便告结束。与for循环一样,while循环总是在循环的头部检验条件,这就意味着循环可能什么也不执行就退出。

注意:

(1).在while循环体内也允许空语句。

例如:

while((c=getche())!='\n'); 

这个循环直到键入回车为止。

(2).可以有多层循环嵌套。

(3).语句可以是语句体, 此时必须用{和}括起来。

用while循环求1+2+……+100的和:

main()
{
int sn=0,i=0;
while(++i<=100)
sn+=i; /*求1+2+……+100*/
printf(%d\n,sn);
}

(三)、do--while循环 它的一般格式为:

do

{

语句块;

}

while(条件);

这个循环与while循环的不同在于:它先执行循环中的语句,然后再判断条件是否为真,如果为真则继续循环;如果为假,则终止循环。因此,do-while循环至少要执行一次循环语句。

同样当有许多语句参加循环时,要用{和}把它们括起来。

用do--while循环求1+2+……+100的和:

main()
{
int sn=0,i=1;
do
sn+=i; /*求1+2+……+100*/
while(++i<=100);
printf(%d\n,sn);
}

从上面三个程序看出,使用for,while和do--while求解同样的问题,基本思路都差不多,只是在第一次计算时,注意初值。

二、循环控制

(一)、break语句

break语句通常用在循环语句和开关语句中。当break用于开关语句switch中时,可使程序跳出switch而执行switch以后的语句;如果没有break语句,则将成为一个死循环而无法退出。break在switch中的用法已在前面介绍开关语句时的例子中碰到,这里不再举例。

当break语句用于do-while、for、while循环语句中时,可使程序终止循环而执行循环后面的语句,通常break语句总是与if语句联在一起。即满足条件时便跳出循环。

例如:

main()
{
int sn=0,i;
for(i=1;i<=100;i++)
{
if(i==51) break; /*如果i等于51,则跳出循环*/
sn+=i; /*1+2+……+50*/
}
printf(%d\n,sn);
}

可以看出,最终的结果是1+2+……+50。因为在i等于51的时候,就跳出循环了。自己写写怎样在while和do--while循环中增加break语句。

注意:

1. break语句对if-else的条件语句不起作用。

2. 在多层循环中,一个break语句只向外跳一层。

例如:

main()
{
int i,j;
printf(i j\n);
for(i=0;i<2;i++)
for(j=0;j<3;j++)
{
if(j==2) break;
printf(%d %d\n,i,j);
}
} 

输出结果为:

i j

0 0

0 1

1 0

1 1

当i==0,j==2时,执行break语句,跳出到外层的循环,i变为1。

(二)、continue语句

continue语句的作用是跳过循环本中剩余的语句而强行执行下一次循环。

continue语句只用在for、while、do-while等循环体中, 常与if条件语句一起使用,用来加速循环。

例如:

main()
{
int sn=0,i;
for(i=1;i<=100;i++)
{
if(i==51) continue; /*如果i等于51,则结束本次循环*/
sn+=i; /*1+2+……+50+52+……+100*/
}
printf(%d\n,sn);
}

从程序中可以看出,continue语句只是当前的值没有执行,也就是说当前的值跳过去了,接着执行下次循环。

main()
{
int i,j;
printf(i j\n);
for(i=0;i<2;i++)
for(j=0;j<3;j++)
{
if(j==1) continue;
printf(%d %d\n,i,j);
}
} 

输出结果为:

i j

0 0

0 2

1 0

1 2

(三)、goto语句

goto语句是一种无条件转移语句,与BASIC中的goto语句相似。goto语句的使用格式为:

goto 标号;

其中标号是Turbo C 2.0中一个有效的标识符,这个标识符加上一个:一起出现在函数内某处,执行goto语句后,程序将跳转到该标号处并执行其后的语句。标号既然是一个标识符,也就要满足标识符的命名规则。另外标号必须与goto语句同处于一个函数中,但可以不在一个循环层中。通常goto语句与if条件语句连用,当满足某一条件时,程序跳到标号处运行。goto语句通常不用,主要因为它将使程序层次不清,且不易读,但在多层嵌套退出时,用goto语句则比较合理。

main()
{
int sn=0,i;
for(i=1;i<=100;i++)
{
if(i==51) goto loop; /*如果i等于51,则跳出循环*/
sn+=i; /*1+2+……+50*/
}
loop: ;
printf(%d\n,sn);
}

可以看出,这儿的goto语句和break作用很类似。

这儿的loop: ;

printf(%d\n,sn);

也可以写成loop: printf(%d\n,sn);

main()
{
int sn=0,i;
for(i=1;i<=100;i++)
{
if(i==51) goto loop; /*如果i等于51,则跳出本次循环*/
sn+=i; /*1+2+……+50+52+……+100*/
loop: ;
}
printf(%d\n,sn);
}

可以看出这儿的loop语句和continue的作用类似。

但是某些情况下又必须使用goto语句,否则会让程序大大臃肿。如:

main()
{
int i,j,k;
printf(i j k\n);
for(i=0;i<2;i++)
for(j=0;j<3;j++)
for(k=0;k<3;k++)
{
if(k==2) goto loop;
printf(%d %d %d\n,i,j,k);
}
loop: ;
} 

输出结果为:

i j k

0 0 0

0 0 1

如果不使用goto语句,而使用break,continue语句,应该这样

main()
{
int i,j,k;
printf(i j\n);
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
for(k=0;k<3;k++)
{
if(k==2) break;
printf(%d %d %d\n,i,j,k);
}
if(k==2) break;
}
if(k==2) break;
}
}

输出结果为:

i j k

0 0 0

0 0 1

所以在同时跳出多层循环时,应该使用goto语句。记住,所有的goto语句其实都是可以用break,continue代替的。

下面举几个例子:

1.求两个整数的最大公约数。例如10和15的最大公约数是5。

分析:最大公约数一定小于等于最小的那个数一半,同时能被两数整除。

main()
{
int num1,num2,i,min;
scanf(%d%d,&num1,&num2);
min=num1 for(i=min/2;i>0;i--)
if(num1%i==0&&num2%i==0) break;
printf(最大公约数为%d\n,i);
}

2.求1!+2!+……+n!(n<10)

main()
{
int n,i;
long temp=1,sn=0; /*从9!以后,所得的值就超过了int范围*/
scanf(%d,&n);
for(i=1;i<=n;i++)
{
temp*=i;
sn+=temp; /*如果没有这一步,求的就是n!*/
}
printf(%ld\n,sn);
}

3.判断一个整数是不是素数(素数就是只能被本身和1整除的数)。

#include math.h
main()
{
int num,i,flag=0;
scanf(%d,&num);
for(i=2;i {
flag=0; /*标志变量复位*/
if(num%i==0)
{
flag=1;
break;
}
}
if(flag==0) printf(是素数\n);
else printf(不是素数\n);
} 

所有的C语言书上,都有判断素数的例题。它的编程思想是:把一个变量作为标志变量,用来标志是不是素数;循环体是从2到sqrt(num),因为如果一个数不是素数的话,一定能分解成num=num1*num2,它们中的最小值一定小于sqrt(num),所以循环的时候只要到sqrt(num)就可以了。同时要注意变量复位的问题。

时间: 2024-08-08 03:12:45

C语言入门(九)循环语句和循环控制的相关文章

Swift入门篇-循环语句

开始继续分享swift入门篇 中的循环语句. 一:循环语句 1:for 用法 2: for in 用法 3: while 用法 4: do while 用法 for 的用法 一般格式 常见格式:(for格式很多) for 变量 ; 变量<某个值 ; 变量++ 例子 // ------for 的一种用法 for var i = 0 ; i<5 ;i++ { println("i=\(i)") } //-------for 的二种用法 var j = 0 for j = 0 ;

单片机c语言教程:C51循环语句

单片机c语言教程第十三课 C51循环语句 循环语句是几乎每个程序都会用到的,它的作用就是用来实现需要反复进行多次的操 作.如一个 12M 的 51 芯片应用电路中要求实现 1 毫秒的延时,那么就要执行 1000 次空语句 才能达到延时的目的(当然能使用定时器来做,这里就不讨论),如果是写 1000 条空语 句那是多么麻烦的事情,再者就是要占用很多的存储空间.我们能知道这 1000 条空语句, 无非就是一条空语句重复执行 1000 次,因此我们就能用循环语句去写,这样不但使程序 结构清晰明了,而且

C语言中的循环语句练习

注:练习题目均出自<明解C语言 入门篇> 一.do语句 1,求多个整数的和及平均值 #include<stdio.h> int main(void) { int sum = 0; //和 int cnt = 0; //整数个数 int retry; //判断是否继续 do{ int t; printf("请输入一个整数:"); scanf("%d",&t); sum = sum + t; cnt = cnt + 1; printf(&

java语言基础与go语言基础,循环语句的区别

java语言  循环语句 for(表达式1(参数初始化):表达式2(条件判断):表达式3(更新循环变量)){ 语句循环操作: } 首先;参数的初始化,接下来条件判断,(条件成立),再执行循环操作,然后更新循环变量,又来做条件判断(条件成立),又执行循环操作:以此循环. 一,循环的三要素 1,循环变量 2,循环条件 3,循环体 二,do-while循环(先循环,再判断,至少循环一次) do{ 语句: }while(条件); 三,while循环(先判断,再循环,有可能一次也不循环) while(条件

值得收藏!16段代码入门Python循环语句

[ 导读 ]本文重点讲述for语句和while语句.for语句属于遍历循环,while语句属于当型循环.除了两个循环语句外,还介绍了break.continue与pass三个用于控制循环结构中的程序流向的语句.在此基础之上,也介绍了列表推导式,这是一种特殊的循环语句. 循环语句又称为重复结构,用于反复执行某一操作.面对大数量级的重复运算,即使借助计算机,重复编写代码也是费时的,这时就需要借助循环语句.使用循环语句一般要用到条件判断,根据判断式的返回值决定是否执行循环体. 循环分为两种模式,一种是

【C语言】用循环语句输出菱形

//用循环语句输出菱形 #include <stdio.h> int main() { int i,j; for(i=0;i<=3;i++) //上4行 { for(j=0;j<=3;j++) //上4行的左边 { if(i+j<=2) printf(" "); else printf("*"); } for(j=4;j<=6;j++) //上4行的右边 { if(j-i>=4) printf(" ");

Java语言----三种循环语句的区别

------- android培训.java培训.期待与您交流! ---------- 第一种:for循环 循环结构for语句的格式: for(初始化表达式;条件表达式;循环后的操作表达式) { 循环体; } eg: 1 class Dome_For2{ 2 public static void main(String[] args) { 3 //System.out.println("Hello World!"); 4 //求1-10的偶数的和 5 int sum = 0; 6 fo

[C语言入门笔记]循环与运算符

循环与运算符 什么是循环? 循环就是一个不停工作的东西,可以反复的实现一个功能,这个才是计算机的重点.计算机可以重复的做一件事情,这样子可以省很多事情 循环的种类有哪些? While Do while For 运算符有哪些? 刚入门接触的运算符有: 逻辑运算符 位运算符 赋值运算符 递增运算符 和一些其他的运算符

Linux shell脚本编程入门(二) 循环语句

前面有了变量的概念和逻辑运算符,就可以写判断语句了,不过这里注意中括号的两边必须得留空格,不然报错. 运算符 赋值, 用 let 语句, 如 let "a=1" 算数运算, 支持 +  -  *  /  %(模运算)  **(幂运算) 位运算符, 支持 <<(左移)  >>(右移)  &(按位与)  |(按位或)  ~(按位取反)  ^(按位异或) if / then / else 语句 先举个栗子呗~ #!/bin/bash read var1 if