a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 59|回复: 1

[C语言] C程序开发初级讲座之循环结构

[复制链接]
发表于 2012-7-31 21:48:08 | 显示全部楼层 |阅读模式
  循环结构是程序中一种很重要的结构。其特点是, 在给定条件成立时,反复执行某程序段,直到条件不成立为止。 给定的条件称为循环条件,反复执行的程序段称为循环体。 C语言提供了多种循环语句,可以组成各种不同形式的循环结构。
0 }) \# [0 O+ N' P( v2 ~  while语句
4 J6 B$ X+ c# w" K  while语句的一般形式为: while语句; 其中表达式是循环条件,语句为循环体。" M# k. m& t& r4 b) D8 ]
  while语句的语义是:计算表达式的值,当值为真时, 执行循环体语句。其执行过程可用图3—4表示。 统计从键盘输入一行字符的个数。
3 H6 f& M, D  ^% A2 k  Y  #include stdio.h; h0 K4 X; Z: `" u7 h
  void main int n=0;+ M$ Q7 i/ [+ k4 D
  printf;
$ {$ s* L7 ]; l1 y' V! Z" E" V  while!=‘“n‘)) ]9 H% K3 D2 P! k- {+ v5 [
  n++;
# n% [( x8 h8 D) t' S  printf;
, s' A0 r/ n4 I4 V. M4 `  本例程序中的循环条件为getchar!=‘“n‘,其意义是, 只要从键盘输入的字符不是回车就继续循环。循环体n++完成对输入字符个数计数。从而程序实现了对输入一行字符的字符个数计数。( d( \  n( E; E6 n0 I6 v) h' Z
  使用while语句应注意以下几点:
, Q$ [1 i; a1 j- M5 U3 z6 U( a  1.while语句中的表达式一般是关系表达或逻辑表达式,只要表达式的值为真即可继续循环。
- k  F6 ^9 d2 N# ~! h; J  void main int a=0,n;
0 @' n6 A2 k* w$ M  ]0 g8 F8 ?  printf;
: |7 ?6 u3 u" v! A7 q! {/ u  scanf;
7 N: ~1 Q& V7 z# G5 _, P  while$ W: }2 {2 m: T, v3 r
  printf;# X% J8 |! M6 Z) U7 x- X7 {8 f
  本例程序将执行n次循环,每执行一次,n值减1。循环体输出表达式a++*2的值。该表达式等效于" ]8 ]- V' k) e7 f# o7 O) j5 o
  2.循环体如包括有一个以上的语句,则必须用括起来, 组成复合语句。- D8 m5 }  l' O8 L6 h3 b7 P2 B
  3.应注意循环条件的选择以避免死循环。
8 V9 e" e( I$ }, d$ }  void main int a,n=0;
( B3 x( W  Q. {' v! u  while) _5 C* _3 S2 X' v4 u
  printf;
  f0 a' n6 @7 S' W/ Q  本例中while语句的循环条件为赋值表达式a=5, 因此该表达式的值永远为真,而循环体中又没有其它中止循环的手段, 因此该循环将无休止地进行下去,形成死循环。4.允许while语句的循环体又是while语句,从而形成双重循环。: c4 w/ z: ~  u- n3 `/ k
  do-while语句
8 F' w8 |/ h" a1 k) J7 W8 M3 q1 K  do-while语句的一般形式为:
) @: ^' Z/ s6 t. L; W% u8 L, W  do  {5 T0 _; }- U& ^( Y" R5 t- ^
  语句;
8 I0 r) v  s. @9 S0 [) z  while;% ~' E3 `/ x, \  W2 s. T
  其中语句是循环体,表达式是循环条件。
4 B- D$ ], a. Z2 A6 I% d  do-while语句的语义是:' Y9 i( C& J; P( S5 U
  先执行循环体语句一次, 再判别表达式的值,若为真则继续循环,否则终止循环。
- J" n! u( ]- X3 }1 q  do-while语句和while语句的区别在于do-while是先执行后判断,因此do-while至少要执行一次循环体。而while是先判断后执行,如果条件不满足,则一次循环体语句也不执行。
1 q0 S, ^3 t9 K" n- L" K% H2 L  while语句和do-while语句一般都可以相互改写。6 O0 K$ S) c2 Y
  void main: m0 K. W6 k; D( g+ @
  int a=0,n;
' {6 M0 ]7 U4 |$ U, B+ z2 `  printf;/ \, o  F8 S4 o
  scanf;7 K  p% p! R4 ^) Q: Q9 v
  do printf;
5 }" U1 s/ P7 e; Q- o7 {0 ]  while ;! R" Q% p8 z0 L! P0 S
  在本例中,循环条件改为n,否则将多执行一次循环。这是由于先执行后判断而造成的。$ H6 Q/ d) c+ a% R5 R( N
  对于do-while语句还应注意以下几点:/ w4 P) P. F( K4 c( k. H6 a  W
  1.在if语句,while语句中, 表达式后面都不能加分号, 而在 do-while语句的表达式后面则必须加分号。
% u: ?; [- _/ b! P; S  2.do-while语句也可以组成多重循环,而且也可以和while语句相互嵌套。
3 z" w; K* y+ S4 V  3.在do和while之间的循环体由多个语句组成时,也必须用括起来组成一个复合语句。
; S, U& U. I0 T. o  k  4.do-while和while语句相互替换时,要注意修改循环控制条件。6 E1 w$ I, G' {3 x3 s- X* b
  for语句' i1 [, V* i( U
  for语句是C语言所提供的功能更强,使用更广泛的一种循环语句。其一般形式为:4 G9 F9 P8 v6 r9 F0 S  ^
  for, G) a' ]/ |" G
  语句:) y+ p1 e) i1 z% u; a$ D; C
  表达式1通常用来给循环变量赋初值,一般是赋值表达式。也允许在for语句外给循环变量赋初值,此时可以省略该表达式。0 n. F2 b* ~8 M% F! b- J/ m  q) A/ y
  表达式2通常是循环条件,一般为关系表达式或逻辑表达式。: Y7 H. h+ `+ ^0 f3 {
  表达式3通常可用来修改循环变量的值,一般是赋值语句。2 S; E; c# W) w* C+ O
  这三个表达式都可以是逗号表达式, 即每个表达式都可由多个表达式组成。三个表达式都是任选项,都可以省略。$ j- T- s' S) ]9 B/ N/ P
  一般形式中的“语句”即为循环体语句。for语句的语义是:/ V1 `( X+ H: N; n8 t6 Z# C5 N1 g
  1.首先计算表达式1的值。
6 B$ j5 C6 ^/ j: D  2.再计算表达式2的值,若值为真则执行循环体一次, 否则跳出循环。! t2 M  I0 `9 D  r/ {
  3.然后再计算表达式3的值,转回第2步重复执行。在整个for循环过程中,表达式1只计算一次,表达式2和表达式,3则可能计算多次。循环体可能多次执行,也可能一次都不执行。for 语句的执行过程如图所示。
: B% j+ q5 g; p2 E2 n2 a& J  void main, f# t1 j6 @+ }- D( n$ {5 l; `$ q
  用for语句计算s=1+2+3+...+99+100& K3 Q4 E7 G. A1 K, _
  int n,s=0;( |+ ~' f& l% I+ h
  for
3 n- ^. A# Q" Q1 h" `  s=s+n;3 t6 a: A7 i1 Y" d; j% ~* o
  printf;/ v- d' o* L! \+ m6 `
  本例for语句中的表达式3为n++,实际上也是一种赋值语句,相当于n=n+1,以改变循环变量的值。
3 ~  z4 y* O! C: A% ~  void main  a: A7 `1 C' C% e1 T( f; _
  用for语句修改例题。从0开始,输出n个连续的偶数。; |( h% ]) ?' g5 f2 K
  int a=0,n;
6 J8 @( Z; s! I! O  printf;
# k3 ~, N! n( I' q% w  scanf;
! J. G) g+ K  \0 D  for: P/ k1 |; `6 Z  S
  printf;* \4 m9 P, W& b* ^" X  J/ ~
  本例的for语句中,表达式1已省去,循环变量的初值在for语句之前由scanf语句取得,表达式3是一个逗号表达式,由a++,n 两个表达式组成。每循环一次a自增1,n自减1。a的变化使输出的偶数递增,n的变化控制循次数。4 @5 B0 ?& O3 c% ~
  在使用for语句中要注意以下几点
/ u6 u5 c% _- U  1.for语句中的各表达式都可省略,但分号间隔符不能少。如:for省去了表达式1。for省去了表达式2。" ~  |" S( J: |* k
  for省去了表达式3。for省去了全部表达式。
1 I% c, S) c/ @- |( L! B% ]2 U/ ~  2.在循环变量已赋初值时,可省去表达式1,如例3.27即属于这种情形。如省去表达式2或表达式3则将造成无限循环, 这时应在循环体内设法结束循环。例题即属于此情况。2 D7 Q& K* r+ M. C! y6 \
  void main
/ U8 F% E4 F7 |* X. S. u6 W  } int a=0,n;
2 e6 h8 l9 R5 e/ A# |0 M) C  printf;2 v$ \' t% K- H% u3 M4 R% A$ S
  scanf;
6 Z& ?4 |' V) c$ ^  f6 |* M6 e$ F5 D1 F  for
! C" @; `' u( R2 ?+ J0 d5 M" N  本例中省略了表达式1和表达式3,由循环体内的n语句进行循环变量n的递减,以控制循环次数。* k" g6 x  \0 D' J
  void main
. x4 k' S: P8 A$ u! `( E  }
4 P* Q# C: R) r8 ^  int a=0,n;
  m6 r; }7 V1 f. f* Z$ `2 k  printf;6 C1 D$ v. i* K0 W
  scanf;2 R1 h3 E& T0 O; I. u
  for8 a+ I& V& u6 T$ r  g7 v" A5 h; H
  本例中for语句的表达式全部省去。由循环体中的语句实现循环变量的递减和循环条件的判断。当n值为0时,由break语句中止循环,转去执行for以后的程序。在此情况下,for语句已等效于while语句。如在循环体中没有相应的控制手段,则造成死循环。
回复

使用道具 举报

 楼主| 发表于 2012-7-31 21:48:09 | 显示全部楼层

C程序开发初级讲座之循环结构

  3.循环体可以是空语句。
3 v7 i, Q5 t  X' m  #include"stdio.h"6 k8 g9 l0 E/ ]6 W. E) N9 Y$ Y! m
  void main3 A" B- Z1 s2 K6 P" ?
  本例中,省去了for语句的表达式1,表达式3也不是用来修改循环变量,而是用作输入字符的计数。这样, 就把本应在循环体中完成的计数放在表达式中完成了。因此循环体是空语句。应注意的是,空语句后的分号不可少,如缺少此分号,则把后面的printf 语句当成循环体来执行。反过来说,如循环体不为空语句时, 决不能在表达式的括号后加分号, 这样又会认为循环体是空语句而不能反复执行。这些都是中常见的错误,要十分注意。
# c2 `8 [6 I5 E/ l7 r  ]0 B( I  4.for语句也可与while,do-while语句相互嵌套,构成多重循环。以下形成都合法的嵌套。
% Z/ {- P' P: u. ]% ]  for
9 _2 ~/ H/ F: A) r3 m& i5 @  …
8 j3 m: [( u1 a+ ]4 c( w* q  }
3 d' N. @. K8 }4 h1 P- Q3 V  do' ~# y9 C7 \& x# X# w
  …4 K$ n- c/ `3 |  x- N; s
  }while;
% c. Y4 M! o, X1 o/ S  while& o* v, P' M% s; p- _3 V
  …/ ?% C9 Q- z! x6 v' X6 h' S" t
  }+ `; l, z/ J: @2 K$ Y
  for
3 c8 i4 A6 g! I) w2 ]4 j# T$ P  }# d. v$ }1 n. H/ B  m2 p8 S
  void main
* {+ ^  v: x9 P" N5 U  printf;3 q( D7 v3 u# k* D0 }
  }
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-6-11 08:11 , Processed in 0.225465 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表