C语言讲解课件_第1页
C语言讲解课件_第2页
C语言讲解课件_第3页
C语言讲解课件_第4页
C语言讲解课件_第5页
已阅读5页,还剩150页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Start

甯Algorithm

.「ArraysandPointersDataStructure

GettingStartedBasicTypes

■MemoryManagement?

StatementsFunctionsVisualComputingMultimedia9

脸FAQ

UserDefinedTypes41

CloudComputingMobile

0

ObjectOriented

ProgrammingAbstractDataTypesGraphicalUserInterface

Video

c程序设计ISBN978-7-30228011-8

第3章程序控制结构

►3.1语句

3.2输入与输出

►3.3程序顺序结构

►3.4程序选择结构

3.5程序循环结构

un程序设计2

3.1语句

语句(statement)是C程序的最小单位

程序由一条一条语句组成

语句执行的次序则称为流程

C语言语句分为简单语句、复合语句和控制语句

un程序设计3

3.1.1简单语句

1.表达式语句

表达式;//用分号结束

x=a+b;〃赋值语句

t=a,a=b,b=t;//a和b交换

a+b+c;//运算但无实际意义

un程序设计4

3.1.1简单语句

A2.函数调用语句

函数调用(实参);//用分号结束

printf(na+b=%dn,a+b);〃输出函数调用语句

un程序设计5

3.1.1简单语句

3.空语句

;//单个分号

xy

printf(a+b=%d"Aa+b);;〃第2个即为空语句

►4.声明部分

声明部分......

执行语句......

un程序设计6

3.1.2复合语句

a复合语句(compoundstatement),又称语句块,

简称块(block)

[局部声明部分......;]

语句序列......;

)

un程序设计7

3.1.2复合语句

复合语句内部可以进行变量定义或类型声明,这些

定义或声明仅在复合语句内部可以使用。

intt,a=10zb=7;//定义局部变量七、a>b

t=a,a=b,b=t;//仅在这个复合语句里使用

)

un程序设计8

3.2输入与输出

所谓输入是指从外部输入设备(如键盘、鼠标等)

向计算机输入数据,输出是指从计算机向外部输出

设备(如显示器、打印机等)输出数据。

un程序设计9

3.2.1字符输入与输出

1.字符输出putchar函数

putchar函数的作用是向显示终端输出一个字符,

一般形式为:

putchar(c);

un程序设计10

321字符输入与输出

1#include<stdio.h>

2intmain()

3(

4chara=1C!,b=6;

5putchar(a);//字符型变量,输出C

6putchar(b+101);//整型表达式,输出6

7putchar「\ll(T);//转义字符(八进制)输出H

8putchar(D);//转义字符(换行),输出换行

9return0;

10)

un程序设计11

3.2.1字符输入与输出

程序运行屏幕

C6H

un程序设计12

3.2.1字符输入与输出

2.字符输入getchar函数

getchar函数的作用是从键盘终端输入一个字符,

一般形式为:

getchar()

un程序设计13

321字符输入与输出

mH

i#include<stdio.h>田

2intmain()

3(

4charclzc2rc3;

5cl=getchar();

c2=getchar();

c3=getchar();

6putchar(cl);putchar(c2);putchar(c3);

7return0;

8)

un程序设计14

3.2.1字符输入与输出

例3・2程序运行屏幕

un程序设计15

3.2.1字符输入与输出

例3・2程序运行屏幕

un程序设计16

3.2.2格式化输出

1.printf函数

printf函数的作用是向标准输出设备(显示终端)

输出格式化的数据,一般形式为:

printf(格式控制,输出项列表......);

a(1)格式控制

格式控制为字符串形式,称为格式控制串

un程序设计17

3.2.2格式化输出

A它主要有两种内容:

①格式说明。格式说明总是以百分号(%)字符开

始,后跟格式控制字符,例如%d、%f等。它的作

用是将输出项转换为指定格式输出。

%[flags][width][.prec][h|1|L

|F|N]type

②一般字符。除格式说明之外的其他字符,包含转

义字符。一般字符根据从左向右的出现顺序直接输

出到显示终端上,ASCII控制字符的输出有特殊的

un程序设计18

3.2.2格式化输出

表3-1printf格式说明域含义

域域选描述含义

type必需类型决定输出项转换为字符、字符串还是数值

字符

flags可选志控制输出的对齐、符号、空格及八进制和

十六进制前缀。可以出现多个标志

width可选宽度指定输出项的最小显示宽度

说明

.prec可选精度指定输出项的最大输出字符数或浮点数小

说明数精度

h/l/L/F可选大小指明输出项类型大小斯旨针的远近

/N修饰

un程序设计19

3.2.2格式化输出

表3-2printf类型字符含义

字符类型输出格式

dint带符号的十进制整数

Uint无符号十进制整数

Oint无符号八进制整数

x或Xint无符号十六进制整数(若输出为字母,X用

abcdef,X用ABCDEF)

un程序设计20

3.2.2格式化输出

表3-2printf类型字符含义

字符类型输出格式

fdouble具有[―]dddd.dddd格式的带符号数值,dddd

为一位或多位十进制数字。小数点前数字个数

取决于数的量级;小数点后面数字个数取决于

所要求的精度

e或Edouble具有[一]d.dddde[+/—]ddd格式的带符号数值,

其中d为单个十进制数字,dddd为一位或多位

十进制数字,ddd为三位十进制数。用e或E表

示指数

g或double以f或e格式输出的带符号数值,对给出的值及

G其精度,f和e哪个简洁就用哪个。只有当值的

指数小于一4或大于、等于精度说明时才使用e

格式。尾部的0被截断,只有小数点后跟1位

或多位数字时才出现小数点。用e或E表示指数

un程序设计21

3.2.2格式化输出

表3-2printf类型字符含义

字符类型输出格式

Cchar单个字符

S字符串直到第一个非空字符c\oo或满足精度的字符

指针串

%输出百分号‘%’

un程序设计22

3.2.2格式化输出

表3-3printf标志字符含义

标志意义默认

—在给定域宽内左对齐输出右对齐(左边用空格

结果(右边用空格填充)或0填充)

+如果输出值是有符号数,只在负数前加(一)

则总是加上符号(+或一)

空格如果输出值是有符号数或无

为正数,则以空格作为前

缀加到输出值前;如果空

格和+标志同时出现,则

忽略空格

un程序设计23

3.2.2格式化输出

表3-3printf标志字符含义

标志意义默认

#指明使用如下的“转换样

式”转换输出参数

若类型对输出参数的影响

字符为

x或X在任何非0输出值前加上

Ox或0X

e,E,强制在所有情况下输出值只有小数点后面有数

f总是包含小数点字时才显示它

g,G同e和E,强制在所有情况只有小数点后面有数

下输出值中总是包含小数字时才显示它,截断

点并阻止截断尾部的0尾部的0

un程序设计24

3.2.2格式化输出

表3-4printf宽度说明

宽度对输出域宽度的影响

说明

至少有n个字符宽度输出,如果输出值中的宽度小于n个,

则输出用空格填充直到最小宽度规定(如果flags为一,

则填充在输出值的右边,否则在左边)

On至少有n个字符宽度输出,如果输出值中的字符宽度小于

n个,则输出用0填充在输出值的左边(对于左对齐无效)

*间接设置宽度,此时由输出项列表提供宽度值,且它必

须在输出项的前面

un程序设计25

3.2.2格式化输出

表3-5printf精度说明

精度精度影响

说明

.n类型含义

e,E,f精度值指定小数点后数字的个数。四舍五入

g,G精度值指定可输出的有效数字的最大数目

s精度值指定可输出字符的最大数目,超出精

度值范围的字符不予输出

un程序设计26

3.2.2格式化输出

表3-5printf精度说明

精度精度影响

说明

(无)精度按默认

值:

类型默认值

e,E,f6

g,G打印6个有效数字,尾部的0串被截断

s输出直到空字符(''0')为止

.。或类型含义

仅有.

un程序设计27

3.2.2格式化输出

续表3-5printf精度说明

精度精度影响

说明

e,E,f,g,输出不打印小数点(及其后的小数)

G

s无任何字符输出

*间接设置精度,此时由输出项列表提供精度

值,且它必须在输出项的前面。如果宽度说

明和精度说明同时使用*,则先出现宽度值,

接着是精度值,然后才是输出项。

un程序设计28

3.2.2格式化输出

表3-6printf类型大小修饰含义

大小修饰type类型字符输出参数被解释为

hd,o,x,X短整型(short)

U无符号短整型(unsignedshort)

1d,o,x,X长整型(long)

u无符号长整型(unsignedlong)

e,E,f,g,G双精度浮点型(double)

Le,E,f,g,G长双精度浮点型(longdouble)

un程序设计29

322格式化输出

inta=123,b=-lrc=12345;

longh=-l;shorti=-lrj=32767;

charcl=97;

doublex=12.3456,y=12,z=12.123456789123;

〃①输出整型数据

printf("%d,%u,%x,%X,%o\n”,a,a,a,a,a);

//十进制、无符号、十六进制和八进制

//输出结果:123,123,7b,7B,173

printf(”%d,%u,%x,%X,%o\n”,b,b,b,b,b);

//十进制、无符号、十六进制和八进制,负数为补码

〃-1,4294967295,ffffffff,FFFFFFFF,37777777777

un程序设计30

322格式化输出

printf(”%1d,%lu,%lx,%lo\n”,h,h,h,h,h);

//长整型,负数为补码

//输出结果:-1,4294967295,ffffffff,37777777777

printf("%hd,%hu,%hx,%ho\n”;

//短整型,负数为补码

//输出结果:-lA65535Affff,177777

printf(n%hd,%hd\nn,j,j+1);〃短整型,数据溢出

//输出结果:32767,-32768

//②输出带格式的整型数据

printf(H[%d],[%4d],[%-4d],[%4d],[%-

4d]\n”,a,a,a,c,c);//宽度、右对齐、左对齐、实际宽度

//输出结果:[123],[123],[123]A[12345]A[12345]

un程序设计31

322格式化输出

printf(”[%+d]r[%+d]A[%d]r[%d]\n”,a,-a,a,-a);

//填充正负符号、填充空格

//输出结果:[+123],[-123],[123],[-123]

H

printf([%04d],[%04d],[%04d]A[%-

04d]\n”,a,b,c,a);//左边填充0、右边不影响

//输出结果:[0123],[-001],[12345],[123]

printf(”%#d,%#x,%#X,%#o\n”,a,a,a,a);

//填充十六进制、八进制前缀

//输出结果:123,0x7b,0X7B,0173

printf(H[%*d]\n”,5,a);//由输出项指定宽度

//输出结果:[123]

un程序设计32

322格式化输出

printf(”[%8.2d]A[%-8.2d]\n”,a,a);

//精度对整型无作用

//输出结果:[123],[123]

//③输出字符型数据

printf(n%d,%c\nn,cl,cl);//字符型数值、ASC工工码

//输出结果:97ra

//④输出带格式的字符型数据

nH

printf([%12c],[%012c],[%-012c]\n,clzclAcl);

//宽度、右对齐、左对齐

//[a]4[00000000000a],[a]

un程序设计33

322格式化输出____________________________________________

//⑤输出浮点型数据

printf(”%lf,%e,%g\n”,x,x,x);

//小数格式、指数格式、最简格式

//输出结果:12.34560041.234560e+001412.3456

printf,%e,%g\n”,v,y,y);

//小数格式、指数格式、最简格式

//输出结果:12.000000,1.2000008+001,12

//⑥输出指定精度的浮点型数据

printf(H[%工£],[%10[£],[%10.21f],

,x,x);//默认精度、宽度、精度

//[12.345600]z[12.345600],[12.35],[12.35:

un程序设计34

322格式化输出

//⑦输出带格式的浮点型数据

printf(H[%+lf],[%+lf],[%If],[%lf]\nn,y,-

y,v,-v);

//填充正负符号、填充空格

//[+12.000000],[-12.000000]A[12.000000]A[-

12.000000]

nn

printf([%06.11f]A[%-06.Ilf]\nAyzy);

//左边填充0、右边不影响

//输出结果:[0012.0],[12.0]

printf(n[%.*£],[%★.*£]\n”,6,x,12,3,x);

//由输出项指定宽度、宽度与精度

//输出结果:[12.345600]z[12.346]

un程序设计35

322格式化输出

//⑧输出字符串

printf(H[%s],[%6s],[%-

n11nn11

6s]\nr"JavarJava"rJava);

//宽度对字符串的影响

//输出结果:[Java],[Java],[Java]

nfnnnn

printf([%s]r[%.3s]r[%6.3s]\n\BasicrBasic

,"Basic");

//精度对字符串的影响

//输出结果:[Basic],[Bas],[Bas]

un程序设计36

322格式化输出

//⑨特殊输出

printf("%%\n”,cl);

//两个%%表示输出一个%,输出项

//输出结果:%

nn

printf(%dA%d\nAa,bzc);

//格式数目小于输出项数,忽略多余输出项

//输出结果:123,-1

printf(”%d,%d,%d\n”,a,b);

//格式数目大于输出项数,输出结果不确定

//输出结果:123,-1,2367460

nn

printf(%df%lf\n4xAa);

//类型不对应,输出结果不确定

//输出结果:2075328197,0.000000

un程序设计37

3.2.3格式化输入

1.scanf函数

scanf函数的作用是从标准输入设备(键盘终端)

读取格式化的数据,一般形式为:

scanf(格式才空制,输入项歹IJ表......);

%[*][width][h|1|L|F|N

]type

un程序设计38

2.scant格式输入函数

调用格式:scanf(格式控制字符串,地址表列)

功能:按格式控制字符串中指定的格式,从键盘输

入常数,并存入对应变量地址所表示的存储单元中。

格式控制字符串:包含格式说明、普通字符;

地址表列是要获得数据的变量地址,逗号分隔;

变量地址:&变量名

地址运算符&:2级、单目。

un程序设计39

►#include"stdio.h"

avoidmain()必须按格式控制字符串中

a{inta,b;的格式从键盘输入数据

►printf("Enterinta,b\nM);

scanf("%d,%cT,&a,&b);

printf("a+b=%d\n",a+b);

)

un程序设计40

如:scanf("%d;%d;%cT,&a,&b,&c);

输入:3;4;5/

如:scanf(,za=%d,b=%d,c=%d,\&a,&b,&c);

输入:।—>a=3,b=4,c=5/

un程序设计41

珞式说明与它控制的变量类型

必须—对应

注意:

若违背了该规则,或没按格式控

制字符串中指定的格式输入数据,

变量获得的值将发生混乱,导致

程序运行结果错误。

un程序设计42

例:

#includelvstdio.hlv

voidmain()

{longm,n;

printf("Enterlong

scanf("%ld:%ld”,&m,&n);

printf(,im*n=%ld\n,i,m*n);

)

un程序设计43

A例:

►#include"stdio.h11

►voidmain()

►{floatmfn;

►printf("Enterfloat

scanf("%f,%F',&m,&n);

►printf("m*n=%f\n"fm*n);

A)

un程序设计44

A例:

►#include"stdio.h11

►voidmain()

►{doublemfn;

►printf("Enterdouble

,,

►printf("m*n=%f\nfm*n);

A)

un程序设计45

输入项格式说明输入数据的形式

变量类型

long型%ld十进制整常数

%lo八进制整常数

%lx十六进制整常数

float型%f小数形式实常数或指数形式实

%e常数

double型%lf小数形式实常数或整常数

%le指数形式实常数

un程序设计46

输入项格式说明输入数据的形式

变量类型

int型%d十进制整常数

unsigned%0无符号八进制整常数(不需以0

开头)

%x

无符号十六进制整常数(不需以Ox

%u

开头)

无符号十进制整常数

Char型%c一个可键入字符(不需加单引号)

%d0〜255整常数

un程序设计47

输入整数或实型数据时,当格式说明之间无其

它字符,系统默认以一个或多个空格,回车、

跳格(Tab)作为输入数据间的分隔;

如:scanf(〃%d%d%d〃,&a,&b,&c);

345/

un程序设计48

重点讲解:scanf的使用

>书写的scanf格式说明与对应的变量在个数

和类型上必须对应一致。

»输入时,各常数间的分隔符必须与格式控制字符

串一致,否则变量获值错乱。

un程序设计49

重要提示

scant的格式控制是为了控制键盘输入数

据的格式,所以要力求简单。

printf的格式控制是为了控制输出内容的

屏幕显示格式,所以要力求使得输出结果清

晰。

un程序设计50

3.4程序选择结构

1.if语句

►2.switch语句

un程序设计51

3.4.1if语句

if语句的作用是计算给定的表达式,根据结果选择

执行相应的语句,语句形式有两种:

A①if形式:

if(表达式)语句1;

a②if-else形式:

if(表达式)语句1;else语句2;

un程序设计52

341if语句

图3.2两种形式的if语句执行流程

(a)

un程序设计53

341if语句

图3.2两种形式的if语句执行流程

(b)

un程序设计54

3.4.1if语句

当a>b时,执行t二a,a二b,b二t运算,即a和b相互交

换,若a小于等于b则什么也不做;总而言之,无

论a和b之前是什么数,执行这段程序后,a肯定小

于等于b。

if(a>b)t=a,a=b,b=t;

un程序设计55

3.4.1if语句

(1)if语句中的子语句既可以是简单语句,又可

以是复合语句或控制语句,但必须是“一个语句”

的语法形式.

un程序设计56

3.4.1if语句

(2)子语句往往会有多条语句,甚至更复杂的情

形,这时可以使用复合语句

1if(a>b){

2x=a+b;y=a-b;

3}

4else{

5x=a-b;y=a+b;

6)

un程序设计57

341if语句

—逻辑错误的代码

1if(a>b)

2{;

3t=a;

4a=b;

5b=t;

6}

语法错误的代码

1if(a>b)

2x=a+b;y=a-b;

3else

4x=a-b;y=a+b;

un程序设计58

3.4.1if语句

数值逻辑值

aaa!=0!aa==0

0假假真真

非0真真假假

a=5,b=2;

if(a)x=a*10;

a=5,b=2;

if(!a)x=a*10;

un程序设计59

3.4.1if语句

#include<stdio.h>

#include<math.h>

intmain()

{doublea,b,c;

printf(ninput

scanf,&a,&b,&c);

if(a+b>c&&a+c>b&&b+c>a){

doubleszt;

t=(a+b+c)/2.0;

s=sqrt(t*(t-a)*(t-b)*(t-c));

printf("area=%lf\n"zs);

elseprintf("error\n");

return0;

un程序设计

3.4.1if语句

例3.3

15elseprintf(nerror\nn);

16return0;程序运行屏幕

un程序设计61

3.4.2switch语句

-switch语句的作用是计算给定的表达式,根据结果

选择从多个分支入口执行,语句形式为:

switch(表达式){

case常量表达式1语句序列1

case常量表达式2语句序列2

I

I

case常量表达式n语句序列n

default:...语句序列

}

表达式:可是任何形式,但

其值应为整型或符号常量.

un程序设计62

3.4.2switch语句

1switch(n){

2case7:printf(nstep5\nn);

3case6:

4case5:printf(nstep4\nn);

5case4:

6

7printf("step3\n");printf(Hstep2\nH);

8)

9case2:printf(nstepl\nn);

10default:printf(nstepO\nn);

11)

un程序设计63

2,switch的执行流程

首先算出表达式的值,并自上而下将其

与case后的常量相比较)选择值相等的语

句执行)直到其后所有的语句执行完毕,

才退出该多分支结构,否则执行default后

的语句。

例:85页

un程序设计64

将A,B,C,D制分数转变为百分制成绩

A等

B等

c等

D等

un程序设计65

A等)1oo

80

等7

#include"stdio.h"B70)9分

voidmain()c60)69分

0-5分

{chargrade;D9夕

scanf("%c",&grade);

switch(grade)

{case'A':printf("80~100分\rT);

caseB:printf(“70〜79分\n“);

case'C:printf(“60~69分\n“);

case'D':printf(”O〜59分\rT);

default:printf("error\n");

)

)

un程序设计66

A等80〜100分

#include,,stdio.hM

B等70〜79分

voidmain()C等60〜69分

{chargrade;D等0〜59分

scanf("%c",&grade);

switch(grade)

{case'A':printf(”80〜100分\n”);break;

case'B':printf(”70〜79分\n”);break;

caseC:printf《'6O〜69分\n”);break;

case'D':printf(”O〜59分\rT);break;

default:printf("error\n");

)

)

un程序设计67

重点讲解:

1在位fswitch语句时,常量一定要与表达式的

值类型一致。

2在switch中可以使用break语句跳出switch结

构;

un程序设计68

例:对学生百分制成绩分档o财A

80B档

#include"stdio.h"

7079c档

main()6069

0档

59分D

{charc1;intscore;

scanf("%d",&score);

switch(score/10)

{case10:

case9:

case8:c1='A';break;

case7:c1='B';break;

case6:c1='C;break;

default:c1='D';

}

printf("%c\n",c1);}

un程序设计69

3case后的各常量不能相同,否则编译无法通过;

4default为可选项,它提供了表达式的值与任何常

量都不相同时的执行方案;若表达式的值与任何

常量都不相同时什么也不需要做,则省略关键字

default(类似else);

5多个case可共用一组执行语句;

例:switch(score/10)

{case10:

case9:

case8:cl=W;break;

case7:cl='B';break;

un程序设计70

重点讲解:

/switch是用来实现多分支选择算法的,

构造表达式和与其相配的常量表达式是关

键。

un程序设计71

3.4.3选择结构的嵌套

►1.if语句的嵌套

(1)第一种形式,在else分支上嵌套if语句,语法

形式为:

if(表达式1)语句1

elseif(表达式2)语句2

elseif(表达式3)语句3

elseif(表达式n)语句n

else语句m

un程序设计72

3.4.3选择结构的嵌套

图3.5嵌套if语句第一种形式的执行流程

un程序设计73

343选择结构的嵌套

1#include<stdio.h>

2intmain()

3(

4intscore;

5scanf(”%d”,&score);

6if(score>=90)printf(nA\nn);

7elseif(score>=80)printf(nB\nn);

8elseif(score>=70)printf(nC\nn);

9elseif(score>=60)printf(nD\nn);

10elseprintf(nE\nn);

11return0;

12)

un程序设计74

343选择结构的嵌套

(2)第二种形式,在if和else分支上嵌套if-else语句,

语法形式为:

if(表达式1)

if(表达式2)语句1

else语句2

else

if(表达式3)语句3

else语句4

un程序设计75

3.4.3选择结构的嵌套

图3.6嵌套if语句第二种形式的执行流程

un程序设计76

难点讲解:if语句嵌套

1)C编译系统确定if和else的配对原则是:

e1se与上面最近的未曾配对的if配对;

书写语句时:

2)对内嵌的语句,采用缩进格式,可清晰地

表示出嵌套层次关系;

un程序设计77

提倡的IF语句嵌套的形式:

1.外层的IF语句和内嵌的IF语句都包含else形

式,使IF和ELSE的配对形式十分清楚。

if(el)

if(e2)si

elses2

else

if(e3)s3

elses4

un程序设计78

2.如果if和else的数目不一样,可以加上{}

来明确配对关系。

如:

if()

{if()语句1}

else语句2

un程序设计79

嵌套IF语句的执行:

它的功能是求:

Main()

-1x<0

{intx,y;

y—<0X—0

scanf(''%d';&x);

1x>0

if(x>=0)

if(x>0)y=l;

elsey=0;

elsey=-l;

printf(”x=%d,y=%”x,y);

输入:

un程序设计

Main()它的功能是求:

{intx,y;1x>0

scanf(u%d^&x);

y=<0x<0

y=i;-1x==0

if(x!=O)

if(x>0)y=l;

elsey=0;

printf(”x=%d,y=%d';x,y);

un程序设计81

难点讲斛:程序中如何判断一个float型实数为零。

例:判断float型变量disc是否为零。

fbas(disc)<1e-6

因为float型实数在内存中只有7位有效数字,

le-6=0.000001,上式表明disc的前'7佳效数学为0。

double型实数在内存中只有16位有效数字。

un程序设计82

求ax2+bx+c=0方程的角星

Scanf("%f,%f,%f”,&a,&b,&c);

lf(fabs(a)<1e-6)

printf(“erro”);

else

{disc=b*b-4*a*c;

if(fabs(disc)<1e-6)

(}

elseif(disc>1e-6)

(}

else

un程序设计83

3.5程序循环结构

►1.while语句

►2.do语句

a3.for语句

un程序设计84

3.5.1while语句

awhile语句

wMe语句的作用是计算给定的表达式,根据结果

判定循环执行语句,语句形式为:

while(表达式)语句;

其中的语句称为子语句,又称循环体,圆括号内的

表达式称为循环条件。

un程序设计85

3.5.1while语句

while语句的执行过程是:

①计算表达式,无论表达式为何种类型均将这个值

按逻辑值处理;

②如果值为真,则执行子语句,然后重复①;

③如果值为假,则while语句结束,执行后续语句。

un程序设计86

3.5.1while语句

图3.8while语句执行流程

(a)

un程序设计87

3.5.1while语句

a【例3.8】

100

求S=

n=l

即s=1+2+3+•

un程序设计88

3.5.1while语句

图3.8while语句执行流程

(b)

un程序设计89

3.5.1while语句

例3.8

1#include<stdio.h>

2intmain()

3

4intn=l,sum=O;

5while(n<=100){//循环直至Ijn大于100

6sum=sum+n;//累力口和

7n=n+l;

8)

9printf(”sum=%d\n",sum);

10return0;

11)

un程序设计90

3.5.1while语句

4intn=l,sum=O;

5while(n<=100){//循环直到n大于100

6sum=sum+n;//累力口和

7n=n+l;

8)

第4行先做循环前的初始化,n为Lsum为0。

第5行while语句时n<=100的结果为真,则执行循环体;

循环体是复合语句,先计算sum累加,则sum变为0+1

的结果,再让n累加1。

un程序设计91

3.5.1while语句

例3.8

4intn=l,sum=O;

5while(n<=100){//循环直到n大于100

6sum=sum+n;//累力口和

7n=n+l;

8)

重复第5行的比较和执行过程,贝Un值越来越趋向100,

n<=100也越来越趋向假,sum逐渐为累加和的结果;

当n为100时,n<=100为真,sum为的结果,n值累加

到101,则n<=100为假,while语句结束。

un程序设计92

3.5.1while语句

4intn=l,sum=O;

5while(n<=100){//循环直到n大于100

6sum=sum+n;//累力口和

7n=n+l;

8)

第4行叫循环初始,即进入循环前的初始计算过程。

如果不给n和sum赋初值可不可以?

un程序设计93

3.5.1while语句

例3.8

4intn=l,sum=O;

5while(n<=100){//循环直到n大于100

6sum=sum+n;//累力口和

7n=n+l;

8)

第5行叫循环条件,即判断是否继续循环的条件或循环

终止的条件。

第7行叫循环控制,即让循环条件趋向结束的计算过程o

un程序设计94

3.5.1while语句

循环结构三要素:

A循环初始、循环条件和循环控制。

编写循环程序,就要精确设计三要素。循环初始发

生在循环之前,使得循环“就绪”;循环条件是循

环得以继续或终止的判定,而循环控制是在循环内

部实现循环条件的关键过程。循环体可以直接或间

接利用三要素来达到计算目的,也可以与三要素无

关。

un程序设计95

3.5.1while语句

awhile语句的说明。

wMe语句的循环体既可以是简单语句,又可以是

复合语句或控制语句,但必须是“一个语句”的语

法形式。在实际编程中,当循环体有多条语句时使

用复合语句。

在循环中应该有使while表达式趋向假的操作,否

则表达式恒为真,循环永不结束,成为死循环。

un程序设计96

3.5.1while语句

awhile语句的说明。

由于while语句先计算表达式的值,再判断是否循

环,所以如果表达式的值始终为假,则循环一次也

不执行,失去了循环的意义。

while语句循环条件可以是C语言的任意表达式。通

常情况下,循环条件是关系表达式或逻辑表达式,

应该谨慎出现别的表达式。

从循环结构来看,while语句前应有循环初始,循

环体内应有循环控制。

un程序设计97

3.5.2do语句

ado语句

do语句的作用是先执行语句,然后计算给定的表

达式,根据结果判定是否循环执行,语句形式为:

do语句while(表达式);

其中的语句称为子语句,又称循环体,圆括号内的

表达式称为循环条件。

un程序设计98

3.5.2do语句

d。语句的执行过程是:

①执行子语句;

②计算表达式,无论表达式为何种类型均将这个值

按逻辑值处理;

③如果值为真,则再次执行①;如果值为假,则

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论