说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

循环控制-C语言教程

HTML文档下载 WORD文档下载 PDF文档下载
循环结构是程序中一种很重要的结构。其特点是,在给定条件成立时,反复执行某程序段,直到条件不成立为止。给定的条件称为循环条件,反复执行的程序段称为循环体。C语言提供了多种循环语句,可以组成各种不同形式的循环结构。

 

6.1 概述

循环结构是程序中一种很重要的结构。其特点是,在给定条件成立时,反复执行某程序段,直到条件不成立为止。给定的条件称为循环条件,反复执行的程序段称为循环体。C语言提供了多种循环语句,可以组成各种不同形式的循环结构。

1) 用goto语句和if语句构成循环;

2) 用while语句;

3) 用do-while语句;

4) 用for语句;

 

6.2 goto语句以及用goto语句构成循环

 

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

     goto  语句标号;

其中标号是一个有效的标识符,这个标识符加上一个“:”一起出现在函数内某处, 执行goto语句后,程序将跳转到该标号处并执行其后的语句。另外标号必须与goto语句同处于一个函数中,但可以不在一个循环层中。通常goto语句与if条件语句连用, 当满足某一条件时, 程序跳到标号处运行。

goto语句通常不用,主要因为它将使程序层次不清,且不易读,但在多层嵌套退出时, 用goto语句则比较合理。

【例6.1】用goto语句和if语句构成循环,

 

main(){        int i,sum=0;        i=1;loop:   if(i<=100)          {sum=sum+i;           i++;           goto loop;}         printf("%d\n",sum);}

6.3 while语句

while语句的一般形式为:

    while(表达式)语句

其中表达式是循环条件,语句为循环体。

    while语句的语义是:计算表达式的值,当值为真(非0)时, 执行循环体语句。其执行过程可用下图表示。

 

【例6.2】用while语句求 。

用传统流程图和N-S结构流程图表示算法,见图:

 

main(){   int i,sum=0;   i=1;   while(i<=100)        {sum=sum+i;          i++;         }   printf("%d\n",sum);}

【例6.3】统计从键盘输入一行字符的个数。

 

#include <stdio.h>main(){    int n=0;    printf("input a string:\n");    while(getchar()!='\n') n++;    printf("%d",n);}

    本例程序中的循环条件为getchar()!='\n',其意义是, 只要从键盘输入的字符不是回车就继续循环。循环体n++完成对输入字符个数计数。从而程序实现了对输入一行字符的字符个数计数。

使用while语句应注意以下几点:

1) while语句中的表达式一般是关系表达或逻辑表达式,只要表达式的值为真(非0)即可继续循环。

【例6.4】

 

main(){    int a=0,n;    printf("\n input n:    ");    scanf("%d",&n);    while (n--)      printf("%d  ",a++*2);}

本例程序将执行n次循环,每执行一次,n值减1。循环体输出表达式a++*2的值。该表达式等效于(a*2;a++)。

2) 循环体如包括有一个以上的语句,则必须用{}括起来,组成复合语句。

 

6.4 do-while语句

 

do-while语句的一般形式为:

        do

            语句

        while(表达式);

这个循环与while循环的不同在于:它先执行循环中的语句,然后再判断表达式是否为真, 如果为真则继续循环;如果为假, 则终止循环。因此, do-while循环至少要执行一次循环语句。其执行过程可用下图表示。

【例6.5】用do-while语句求 。

用传统流程图和N-S结构流程图表示算法,见图:

main(){   int i,sum=0;   i=1;   do        {sum=sum+i;          i++;         }while(i<=100)    printf("%d\n",sum);}

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

【例6.6】while和do-while循环比较。

(1)

main(){int sum=0,i; scanf(“%d”,&i); while(i<=10)    {sum=sum+i;     i++;}printf(“sum=%d”,sum);}

(2)

main(){int sum=0,i; scanf(“%d”,&i); do   {sum=sum+i;    i++;}while(i<=10);printf(“sum=%d”,sum);}

6.5 for语句

在C语言中,for语句使用最为灵活,它完全可以取代 while 语句。它的一般形式为:

        for(表达式1;表达式2;表达式3) 语句

它的执行过程如下:

1) 先求解表达式1。

2) 求解表达式2,若其值为真(非0),则执行for语句中指定的内嵌语句,然后执行下面第3)步;若其值为假(0),则结束循环,转到第5)步。

3) 求解表达式3。

4) 转回上面第2)步继续执行。

5) 循环结束,执行for语句下面的一个语句。

其执行过程可用下图表示。

for语句最简单的应用形式也是最容易理解的形式如下:

for(循环变量赋初值;循环条件;循环变量增量) 语句

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

   例如:

for(i=1; i<=100; i++)sum=sum+i;

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

相当于:

i=1;

while(i<=100)

    { sum=sum+i;

     i++;

}

对于for循环中语句的一般形式,就是如下的while循环形式:

表达式1;

while(表达式2)

    {语句

     表达式3;

}

注意:

1) for循环中的“表达式1(循环变量赋初值)”、“表达式2(循环条件)”和“表达式3(循环变量增量)”都是选择项, 即可以缺省,但“;”不能缺省。

2) 省略了“表达式1(循环变量赋初值)”, 表示不对循环控制变量赋初值。

3) 省略了“表达式2(循环条件)”, 则不做其它处理时便成为死循环。

例如:

    for(i=1;;i++)sum=sum+i;

相当于:

i=1;

while(1)

{sum=sum+i;

i++;}

4) 省略了“表达式3(循环变量增量)”, 则不对循环控制变量进行操作,这时可在语句体中加入修改循环控制变量的语句。

例如:

for(i=1;i<=100;)

{sum=sum+i;

       i++;}

5) 省略了“表达式1(循环变量赋初值)”和“表达式3(循环变量增量)”。

例如:

for(;i<=100;)

{sum=sum+i;

    i++;}

相当于:

while(i<=100)

{sum=sum+i;

i++;}

6) 3个表达式都可以省略。

例如:

for(;;)语句

相当于:

while(1)语句

7) 表达式1可以是设置循环变量的初值的赋值表达式,也可以是其他表达式。

例如:

    for(sum=0;i<=100;i++)sum=sum+i;

8) 表达式1和表达式3可以是一个简单表达式也可以是逗号表达式。

for(sum=0,i=1;i<=100;i++)sum=sum+i;

或:

for(i=0,j=100;i<=100;i++,j--)k=i+j;

9) 表达式2一般是关系表达式或逻辑表达式,但也可是数值表达式或字符表达式,只要其值非零,就执行循环体。

例如:

for(i=0;(c=getchar())!=’\n’;i+=c);

又如:

for(;(c=getchar())!=’\n’;)

printf(“%c”,c);

 

6.6 循环的嵌套

 

【例6.7】

 

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

6.7 几种循环的比较

 

1) 四种循环都可以用来处理同一个问题,一般可以互相代替。但一般不提倡用goto型循环。

2) while和do-while循环,循环体中应包括使循环趋于结束的语句。for语句功能最强。

3) 用while和do-while循环时,循环变量初始化的操作应在while和do-while语句之前完成,而for语句可以在表达式1中实现循环变量的初始化。

 

6.8 break和continue语句

 

6.8.1 break语句

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

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

【例6.8】

 

main(){   int i=0;   char c;   while(1)                 /*设置循环*/     {      c='\0';             /*变量赋初值*/      while(c!=13&&c!=27) /*键盘接收字符直到按回车或Esc键*/        {         c=getch();         printf("%c\n", c);        }      if(c==27)         break;          /*判断若按Esc键则退出循环*/      i++;      printf("The No. is %d\n", i);      }    printf("The end"); }

 注意:

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

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

 

6.8.2 continue 语句

 

continue语句的作用是跳过循环本中剩余的语句而强行执行下一次循环。continue语句只用在for、while、do-while等循环体中,常与if条件语句一起使用,用来加速循环。其执行过程可用下图表示。

1) while(表达式1)

     { ……

       if(表达式2)break;

       ……

2) while(表达式1)

     { ……

       if(表达式2)continue;

       ……

}

 

【例6.9】

 

main(){  char c;  while(c!=13)      /*不是回车符则循环*/      {         c=getch();         if(c==0X1B)            continue; /*若按Esc键不输出便进行下次循环*/         printf("%c\n", c);       }}

6.9 程序举例

【例6.10】用 公式求π

N-S流程图:

#include<math.h>main(){  int s;  float n,t,pi;  t=1,pi=0;n=1.0;s=1;  while(fabs(t)>1e-6)      {pi=pi+t;       n=n+2;       s=-s;t=s/n;      }  pi=pi*4;         printf("pi=%10.6f\n",pi);  }

【例6.11】判断m是否素数。

N-S流程图:

#include<math.h>main(){int m,i,k;scanf(“%d”,&m);k=sqrt(m);for(i=2;i<=k;i++)if(m%i==0)break;if(i>=k+1)printf(“%d is a prime number\n”,m);elseprintf(“%d is not a prime number\n”,m);}

【例6.12】求100至200间的全部素数。

 

#include<math.h>main(){int m,i,k,n=0;for(m=101;m<=200;m=m+2){k=sqrt(m);for(i=2;i<=k;i++)if(m%i==0)break;if(i>=k+1){printf(“%d”,m);   n=n+1;}      if(n%n==0)printf(“\n”);}printf(“\n”);}

 

(本节完)

 

播放MP3文件 -VB资料 播放背景音乐 -VB资料 播放声音文件 -VB资料 播放资源文件文件中的声音-VB资料 不用ActiveX控件也能播放声音文件-VB资料 VB创建动态图标 电影结束画面的卷动效果-VB资料 二进制操作截取VCD片断 -VB资料 非常VB测声卡 关闭屏幕保护功能,改变屏保等待时间 -VB资料 VB获取桌面窗口图象 红色警戒&终级动员令-VB资料 检查是否安装声卡 -VB资料 将 .flc 动画档放在某一个 hWnd 之中播放 -VB资料 截取屏幕图像-VB资料 开机,自动更换墙纸 -VB资料 控制PC喇叭 -VB资料 利用VB测声卡 利用VB进行多媒体程序设计初步 利用Visual Basic设计多媒体应用程序 满屏播放AVI文件-VB资料 平铺贴图背景 -VB资料 破解WINDOWS屏幕保护密码 -VB资料 巧用VB编程使XMPLAYER自动播放VCD VB取得 WAV 文件信息 趣味撞球VB5应用程序一例 VB如何从"SOUND.DRV"中提取声音 VB如何设定墙纸的显示方式? VB如何用API及MMSYSTEM.DLL播放AVI文件 VB如何知道计算机是否安装声卡? 设计简单的屏幕保护程序 -VB资料 软件发布:凯蒂神卜2001 哪位高手作过网站建设?请帮忙!!! 软件发布:五子棋大战 光驱的问题 软件发布:扑克(版本:36.0,玩法的数量和版本号一样) 软件发布:鸿森万能证件打印系统 软件发布:密码盗窃器(超小版:30k) 软件发布:寝室多人共享上网计时计费器 软件发布:美萍安全卫士密码破解器 软件发布:整人蛀虫 SQL SERVER存储过程的问题!!!! 软件发布:词痴 软件发布:自动关机 软件发布:南易彩票选号系统 pfc基类庫是纯英字,谁有中文的。 软件发布:精灵英文输入法(写代码助手) 软件发布:QQSpy密码探测器98版 for 0425 高手请,为何在不同地方打开对话框会有不同的结果呢? 软件发布:《商务导航》 软件发布:amp player 豪华版 如何关闭XCOPY打开的窗口,详细一点 请援手:pfc程序如何再升级?(关于版本更新) 谁是高手,一个事务处理问题。 大家来聊聊:JBUILDER5比JUILDER4在那方面改进了!? 我们这个破烂小公司成天TMD瞎折腾! 根据用户名和密码登陆的问题! 大家来说一下,中程和高程证书在找工作时作用怎样 Dialog上放了一个group box,请问如何动态改变group box框框中的整个颜色?急呀! 用程序向表中插数据的问题? 怎样制作一个类似日历的控件?快快快! 做个调查:在上海delphi的前景如何?现在工资怎么样? 如何给graph控件的values赋值. c++Builder的悲哀历程,求助帮忙,各位大虾多指点 建议封杀e_lion,影响看贴情绪!杀无赦!!! 请教高手:我用vc6.0向导生成了一个Utility Project,不想用MFC AppWizard(exe)生成的基本类,可我无法编译我写的cpp(带winMain函数)文件,为何? 无任何理由,第一个进来者300分。当场结帐。 各位,是如何调试自己编写的servlet的,我使用jswdk每次,修改servlet后都要重启一次服务器,有没有什么好法子。 不看不知道。 在写servlet时,如果要输出一段文字的问题。 “瑞星2001病毒实时间控装载失败”? 既然看到了,不妨进来“坐坐”! (关于串口) 看看我的计划《程序员生活》, 数据库小问题 有谁用过Delphi6带的InstallShield Express - Borland Limited 请赐教:我只想建一个空工程,里面什么类也没有,只望往加我写的类(带winMain 函数),编译成exe文件,用vc6.0,怎么做呀 硬盘喀-啦,喀-啦连续的响是何原因 你们好,能告诉多表更新的时候UPDATE(true,false)中的true,false是什么意思吗? (菜菜鸟级问题)怎么给别人分数?自己的分数又是怎样积累的? 算法问题求解 怎样去看继承下来的方法的代码? 原来大把花钱的感觉真是爽!还是没有任何理由,第7个进来者300分! 一班植树占三个班总棵树的1/5,二班植树是三个班植树棵树的3/5,二班比一班多植树20棵,这三个班一共植树多少棵? 鸡兔同笼,有23个头,56条腿,鸡兔各几只【用方程做】 鸡兔共40只,兔子比鸡多16条腿,问鸡兔各多少只有x的方程 希望小学二、三年级共植树114棵,其中三年级的植树棵数是二年级的2倍,问二、三年级各植树多棵? 鸡兔同笼,共有21个头,56条腿.鸡、兔各有多少只?(方程解) 一只鸡有2条腿,兔子有4条腿,现在又鸡兔若干只,他们共有240条腿,鸡是兔子的2呗,求鸡兔各有多少只?第一个回答的给悬殊按 奥数题(鸡兔同笼)蜘蛛有8条腿,蝴蝶有6条腿和2对翅膀,禅有6条腿和1对翅膀.现在这三种小虫共21只共140条腿和23对翅膀.蜘蛛,蝴蝶,禅各几只? 鸡兔同笼20只,鸡和兔的腿共56条,鸡有()只,兔有()只 鸡兔同笼,共有30个头和84条腿,求鸡和兔各几只? 鸡兔同笼奥数题有2分、5分、1角的硬币20枚,共计1.20元,其中5分有几枚,1角有几枚? 鸡兔同笼共9只,腿26条,则鸡..只.兔..只.怎样求出的..本人只学过一元一次方程,请用 一元一次方程解答.. 鸡兔同笼,有25个头,有70条腿, 请问有几只兔子几只鸡?急用! 奥数题(鸡兔同笼)某农民养鸡兔若干只,已知鸡比兔多13只,鸡的脚比兔的脚多16只,鸡兔各多少只?(横式计算) 鸡兔同笼,腿200只,鸡的腿书比兔少56只,鸡兔各多少只? 鸡兔同笼,共有35个头,94条腿.求鸡和兔子各有多少只. 某学校四五六年级共有930 人,问三个年级各有多少人?请帮忙把公式列出来! T1.在括号里面分别填上两个相邻的自然数,使下式成立!( )<(一百零一分之一+一百零二分之一+一百零三分之一+.+一百五十分之一)*3<( )T2.自然数A和B的最小公倍数是140,最大公约数是5, 鸡兔同笼共九只,腿26条,则鸡和兔各有几只? 运输队要运一批货物,已经运走的和剩下的比是1:4.如果再运走4吨,那么运走的和剩下的比为3:7.这批货物多少 甲乙两个箱子所装水果的质量比是5:4,现在如果把甲水果的25%放进乙,再从乙拿出30千克,这时两个箱子的重量相等.求甲乙两箱原来各有多少千克水果? 鸡兔同笼 21个头 56条腿 鸡兔各几只? 运输队要运一批货物,已经运走了20%,如果再运走4吨,那么运走的和剩下的比为3:7,这批货物共多少吨 如题,一项工程,甲单独做要36天,乙单独做要45天.如果开工时甲、乙两队合做,甲中途退出转做新的工程,乙队又做了18天才完成任务.问甲队做了多少天? 鸡兔同笼方程解笼子里有若干只鸡和兔,从上面数,有8个头,从下面数,有26只脚.鸡和兔各有几只?所有解的过程都写上写清楚,不能掉 某运输队计划在3天之内运完一批货物,第一天运走7.2吨,第二天运的比这货物的总吨数少70%,第二天的吨数的比试3:5,这批货物共有多少吨? 比例应用题 也要用算术方法解一次 急 1、一辆轿车从甲地开往乙地,每小时行驶72km,4小时到达,如果每小时行驶80km,几小时到达?2、一捆铁丝长212.5m,剪下5m长的一段重200g,这捆铁丝重多少克?3、 鸡兔同笼,鸡比兔多26只,足数共274只,问鸡兔各有几只?方程 计划在3天运完一批货第一天运走7.2吨第二天运的比这批货物的总吨数少70%,第二天与第三天运的吨数比是3:5 (用算术法算,不要用方程)谢谢各位配合!1.有一箱灯泡,先拿出168个,又拿出剩下的2/3,这时箱里剩下的灯泡恰好是这箱灯泡总数的1/7,这箱灯泡共有多少个?2.小华看一本书,第一天看了一些,第二 鸡兔同笼,兔比鸡少20只,脚数共262只,鸡兔各有多少只?(方程解答,并说出计算道理) 运输队计划在3天内运走一批货物第一天运走了48吨占这批货物的2/5第二天与第三天运走的比是3:5第三天比第二天多运多少吨急急ij 六年级数学题 要用算术解 不要方程篮球比赛中,3分线以外投中一球得3分,3分线内投中一球得2分.在一次篮球比赛中,球星易建联总共投中9个球,得20分,他投中的3分球和2分球各多少个? 笼子里有相同数量的鸡和兔,一共有48条腿,各有鸡和兔几只?(用方程解) 运输队计划在3天内运走一批货物第一天运走了48吨占这批货物的2/5第二天与第三天运走的比是3.看补充运输队计划在3天内运走一批货物第一天运走了48吨占这批货物的2/5第二天与第三天运走 [用算术方法解,不能用方程]某商店从外地购进360个玻璃制品,运输时损坏了40个,剩下的按进价的117%售出,商店可盈利百分之几? 鸡兔同笼 共有48条腿 已知兔比鸡多8条腿 鸡兔各有多少只? 运输队计划在3天内运走一批货物第一天运走了48吨占这批货物的2/5第二天与第三天运走的比是3:5第三天运多少 请列示解答或一元一次方程修一条水渠,如果每天多修8米,可以提前4天,若每天少修八米,将推迟八天完成,求水渠的长度. 鸡、兔共有100条腿,若鸡数和兔数互换,则共有86条腿,鸡兔各有多少只?请讲解本题 运输队计划3天内运完一批货物.第一天运了4.8吨,占这批货物的40%,第二天与第三天运的吨数比是3:5——用正比例的方式 六年级数学题(一元一次方程)0.3分之x-1-0.5分之x+2=1.2 鸡兔同笼,有8个头,20条腿,鸡和兔各有多少只?用算术方法怎么做 运输队计划在3天内运走一批货物第一天运走了4.8吨占这批货物的40%第二天与第三天运走的比是3:5第三天运了第三天运了多少吨?2.一辆汽车三小时行驶180千米,用这样的速度从甲地开到乙地,已 一元一次方程的应用已知六年级2班共有45人,男生人数于女生人数的比为4:5,求这个班男女生各有多少人? 鸡兔同笼,共有20个头,64条腿,鸡和兔各有多少只? 物流公司运送一批货物第一天运了总数的3分之1第二天运了9吨已运的与剩下的吨数比是7:5求这批货物一共多少吨 一道数学题(可用方程、算数法,方程用一元一次方程)求详细解答!六年级同学分成甲 乙两个组劳动,甲 乙两组人数比是7:3 ,后来因为劳动需要,从甲组派了30人到乙组,这样甲乙两组人数比变 鸡兔同笼,有8个头,20条腿,鸡和兔各有多少只?用方程 运送一批货,第一天运了总数的1/3,第二天运了9吨,这时已运的与剩下的吨数比是7:5,这批货物有多少吨? 要解设,并且是一元一次方程一家商店将某种型号的彩电按物价部门准核的原价提高30%,然后标出“大酬宾,八折优惠”,经顾客投诉,执法部门按非法收入的10倍处以每台1000元罚款,则每台彩电原 鸡兔同笼,有20个头,50条腿,鸡有()只,兔有()只,一个平行四边变成()形时面积最大, 五年级同学参加植树要植树五十六棵要求每行的棵数相同有几种不同的方法 用一元一次方程解,算术也行1、某商店经销一种商品,由于进货价格降低了百分之六点四,使得利润率提高了百分之八,求原来经销此种商品的利润率.2、一项工程,A单独做要四十天,B单独做要三 鸡兔同笼,有20个头,54条腿,鸡与兔各有多少只? 把下面各比化成前项是100的比.(1)实验小学今年植树的棵数与去年植树棵数的比是4:3.2 (2)一辆小汽车的速度与一架超音速飞机的速度之比是1:15. 要解题思路,最好用算术方法,或者一元一次方程.货车速度与轿车速度的比是3:8,两车分别从A、B两地同时出发,相向而行.八分之三小时相遇,如果两车从A、B两地同时出发同向而行,货车速度在前, 鸡兔同笼共有十八个头54条腿同笼中鸡和兔各有多少只? 一班植树的棵数占三个班的五分之一,二班与三班的比是3:5,二班比三班少植树40棵,这三个班各植树多少棵要方程 鸡兔同笼,有20个头,56条腿,鸡与兔各有多少只? 鸡兔同笼问题方程解 ,鸡和兔共有18只,共有72只脚,设有X只兔,那鸡有多少只打错了是56只脚不好意思
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn