冯沾庆C语言程序设计_第1页
冯沾庆C语言程序设计_第2页
冯沾庆C语言程序设计_第3页
冯沾庆C语言程序设计_第4页
冯沾庆C语言程序设计_第5页
已阅读5页,还剩251页未读 继续免费阅读

下载本文档

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

文档简介

C语言程序设计教材名称:《C程序设计(第二版)》

谭浩强著清华大学出版社主讲:杨

锋前言一、计算机语言1、机器语言2、汇编语言3、高级语言4、高级语言向机器语言的过渡高级语言源程序机器语言目标程序计算结果编译解释执行——机器指令的集合——符号化的机器语言——通用自然的算法语言二、算法1、算法的概念为解决某一问题而采取的方法和步骤称为算法例:求1+2+3+…+100的值的算法Step1:使sum的值为0,即sum=0Step2:使n的值为1,即n=1Step3:使sum和n的值相加,并将相加的结果保存到sum中,即sum+nsumStep5:使n的当前值加1,即n+1nStep6:若n100,返回Step3;否则,结束2、算法的特性有穷性确定性有零个或多个输入至少有一个输出有效性3、算法的表示用自然语言表示如前面的例子用流程图表示后面具体介绍用N—S流程图表示任何一个算法都可以用三种基本结构表示,这三种基本结构为:顺序结构、选择结构和循环结构。前面算法的N—S流程表示如下:

sum=0

n=1

n<=100

sum+nsum

n+1n用伪代码表示N—S流程图画起来费事,特别是在算法设计阶段,由于算法需要经常修改,采用伪代码比N—S流程图更方便些。伪代码是用介于自然语言和计算机语言之间的文字和符号描述算法用伪代码描述的累加算法如下:sum和n分别初始化为0和1IFnislittlethen100orequal100sum=sum+n,n=n+1ELSE

输出结果用计算机语言表示用计算机语言表示的算法是计算机能执行的算法,该算法必须完全遵守相应语言的语法规则。三、程序与程序设计——完成某一功能的计算机指令的有序集合1、程序2、程序设计——设计、编制、调试程序的过程3、程序设计的基本步骤(1)分析问题(2)确定解题思路和算法(3)编制流程图(4)编写源程序(5)静态检查(6)上机调试(7)正式运行四、流程图(框图)起止框处理框判断框输出输入框流程线连接点注释框流程图是算法的一种表示形式,而算法则是为解决某一问题而采取的方法和步骤。为了用流程图表示算法,我们规定了一些表示特定功能的流程符号:下面是求一元二次方程ax2+bx+c=0根的流程图:开始计算判别式d=b2-4acd<0输出二复数根输入系数a,b,cd=0输出二等根输出二实根结束yesnoyesno第一章C语言概述§1.1C语言发展史1960ALGOL60(AlgorithmicLanguage)198787ANSIC1990ISOC1972C(取BCPL第二个字母)1970B(取BCPL第一个字母)1978标准C1983ANSIC 1967BCPL(BasicCombinedProgrammingLanguage)§1.2C语言特点1、简练、自由、结构化2、运算符丰富(附录Ⅲ)3、数据结构丰富4、可直接对硬件进行操作5、目标程序质量高§1.3简单C程序分析例1.1打印(显示)一串字符运行结果:

Thisisanexample./*example1.1*/main(){

printf(“Thisisanexample.\n”);}例1.2已知三角形三边a,b,c,求面积

/*example1.2*/

main(){floata,b,c,p,s;

scanf(“%f,%f,%f”,&a,&b,&c);p=(a+b+c)/2;s=sqrt(p*(p-a)*(p-b)*(p-c));

printf(“p=%fs=%f”,p,s);}floatf(k)main()

intk; {{ intn,m;floatc;floatfac=1;inti; scanf(“%d,%d”,for(i=1;i<=k;i++) &n,&m);

fac=fac*i; c=f(m)/f(n)/f(m-n);

return(fac); printf(“%f”,c);} }mn例1.3已知整数m,n,求组合数CC程序结构1、C程序由函数构成C程序={一个主函数(main函数)一个主函数+若干其他函数§1.3简单C程序分析例1.1打印(显示)一串字符运行结果:

Thisisanexample./*example1.1*/main(){

printf(“Thisisanexample.\n”);}例1.2已知三角形三边a,b,c,求面积

/*example1.2*/

main(){floata,b,c,p,s;

scanf(“%f,%f,%f”,&a,&b,&c);p=(a+b+c)/2;s=sqrt(p*(p-a)*(p-b)*(p-c));

printf(“p=%fs=%f”,p,s);}floatf(k)main()

intk; {{ intn,m;floatc;floatfac=1;inti; scanf(“%d,%d”,for(i=1;i<=k;i++) &n,&m);

fac=fac*i; c=f(m)/f(n)/f(m-n);

return(fac); printf(“%f”,c);} }mn例1.3已知整数m,n,求组合数CC程序结构1、C程序由函数构成C程序={一个主函数(main函数)一个主函数+若干其他函数说明部分2、函数{{函数体}数据定义执行部分(语句){floatf(k)main()

intk; {{ intn,m;floatc;floatfac=1;inti; scanf(“%d,%d”,for(i=1;i<=k;i++) &n,&m);

fac=fac*i; c=f(m)/f(n)/f(m-n);

return(fac); printf(“%f”,c);} }mn例1.3已知整数m,n,求组合数CC程序结构1、C程序由函数构成C程序={一个主函数(main函数)一个主函数+若干其他函数说明部分2、函数{{函数体}{数据定义执行部分(语句)3、语句书写自由,后带分号“;”4、可用/*……*/对C程序作注释例1.2已知三角形三边a,b,c,求面积

/*example1.2*/

main(){floata,b,c,p,s;

scanf(“%f,%f,%f”,&a,&b,&c);p=(a+b+c)/2;s=sqrt(p*(p-a)*(p-b)*(p-c));

printf(“p=%fs=%f”,p,s);}floatf(k)main()

intk; {{ intn,m;floatc;floatfac=1;inti; scanf(“%d,%d”,for(i=1;i<=k;i++) &n,&m);

fac=fac*i; c=f(m)/f(n)/f(m-n);

return(fac); printf(“%f”,c);} }mn例1.3已知整数m,n,求组合数CC数据类型基本类型构造类型指针类型空类型整型实型字符型枚举型数组型结构体型共用体型单精度双精度

第二章数据类型、运算符与表达式§2.1常量与变量一、常量4、字符串常量——“”括起来的字符字符序列5、符号常量——

#define符号名常量2、实型常量小数形式(12.34、-0.65)指数形式(0.1234e2)3、字符型常量‘’括起来的一个字符或以\开头的有特殊含义的字符序列(’a’,’\n’)1、整型常量:十进制常量:八进制常量:以数字0开头(023,-014)十六进制常量:以0x开头(0x123,-0x2af)

#definePI

3.14159例2.1判断下列是否是C语言的常量

’1’-123’internet’2/4’\141’100.0-12e2.5"t"0.4e-4’\k’(字符型)(整型)()()(字符型)(实型)()(字符串)(实型)(×)例2.2定义一个符号常量

PI,其值为二、变量1、变量名——以标识符命名由字母、数字或下划线组成首字符为字母或下划线用来标识变量、符号常量、数组、函数、文件等标识符例:sumgood123student_name2、变量的定义用变量定义语句定义变量及其类型(1)变量定义语句的格式类型关键字变量名

实型字符型

char(2)类型关键字整型基本型

int短整型

short长整型

long无符号型

unsigned单精度型

float双精度型

double(4)说明①必须在程序执行部分之前对程序中的所有变量进行定义

②C语言中整型和字符型数据通用(3)定义变量的目的:根据变量类型的不同在内存中分配不同字节个数的内存空间③不同类型的变量所能表示数的范围不同④可在定义变量的同时给其赋初值例:

inta=3,b=4,c=5;floatx,y,z=0.5;charw=‘a’;§2.2算术运算符与算术表达式一、C运算符简介算术运算符

+-*/%++--关系运算符

><==>=<=!=逻辑运算符

!&&||赋值运算符

=条件运算符

?:逗号表达式

,指针运算符

*&强制类型转换运算符

(类型关键字)二、算术表达式1、定义:用算术运算符和括号将运算对象连接起来且符合C语法规则的式子2、运算顺序3、运算类型(1)同类型运算结果类型不变不同类型运算先按类型级别由低向高转换成同一类型,再计算Double

floatlongunsignedintchar,short

高低

(类型关键字)(表达式)例:

(int)a(float)(5%3)(double)(x+y)三、强制类型转换运算四、自增、自减运算1、运算规则++i--i

使用前使i值加(减)1i++i--

使用后使i值加(减)12、注意(1)只能用于变量(2)右结合方向(3)使用时谨防出错3、例§2.3赋值运算符和赋值表达式一、赋值运算符及其操作=

将一个表达式的值赋给一个变量二、赋值表达式<变量><赋值运算符><表达式>说明:(1)发生类型转换(2)右结合例:x=-b/(2*a)a=b=c=5a=(b=4)+(c=6)三、复合赋值运算

含复合赋值运算符的表达式的一般形式:例:a+=3 a+=3 a=a+3a*=x+y a*=x+y a=a*(x+y) a%=b a%=b a=a%b

A=B

A=AB其中A为变量,B为C表达式,为任一双目运算符a+=(a-=a*a)a+=(a=a-a*a)a=a+(a=a-a*a)-12a+=a-=a*a例2.1设a=3

求下列表达式的值§2.4逗号运算符和逗号表达式1、逗号表达式表达式1,表达式2,,表达式n2、运算规则依次计算各表达式的值,以表达式n的值作为最终值。(其优先级最低)例:比较(设a=3)a=3*5,a*4a=(3*5,a*4)计算后:值60,a=15a=12

本章作业第66页3.9、3.12§3.1C语句概述第三章最简单的C程序设计C语句控制语句(条件、分支、循环)函数调用语句(函数加分号)表达式语句(表达式加分号)空语句(一个单独的分号)复合语句(用{}将若干语句括起)§3.2赋值语句语句格式:赋值表达式;例1.2已知三角形三边a,b,c,求面积

/*example1.2*/

main(){floata,b,c,p,s;

scanf(“%f,%f,%f”,&a,&b,&c);

p=(a+b+c)/2;s=sqrt(p*(p-a)*(p-b)*(p-c));

printf(“p=%fs=%f”,p,s);}§3.2赋值语句语句格式:赋值表达式;例3.1已知整型变量x,y的值分别是3和5,

试将它们的值互换。intx=3,y=5,z;z=x;x=y;y=z;zxy35§3.3数据的输入/输出(I/O)C语言中数据的I/O由函数实现一、字符的I/O2、语句功能:从指定设备读一个字符输出c的值1、语句格式输入:getchar();输出:putchar(c);字符变量3、说明使用标准I/O函数时,应在程序前加预编译命令:

#include“stdio.h”例3.1输入一个字符并把它输出出来

#include“stdio.h”main(){charc;c=getchar();

putchar(c);}二、格式I/O1、语句格式输入

scanf(格式控制,地址表列);输出

printf(格式控制,输出表列);2、语句功能按格式控制描述的格式给地址表列中的量输入值或输出输出表列中各量的值3、格式控制格式控制是由“”括起来的字符序列,其中包括格式字符和普通字符。普通字符是需要原样输出(输入)的字符,格式字符是用来描述对应的输出(输入)项的输出(输入)形式。例:scanf(“x=%d,y=%f”,&i,&x);格式字符输入项地址printf(“x=%d,y=%f\n”,13/4,12.34*6);格式字符输出项4、格式字符在输出是,可在%和格式字符之间使用l,m和n等附加的格式说明字符,具体的格式及允许使用的附加格式字符及作用见下表:

注:①对f、e而言,省略n(即%m.f或%m.e),则输出实数的小数点后有6位数字。②对f、e而言,省略m(即%.nf或%.ne),则m自动取保证正确输出的最小的字段宽度值③若指定的m值不能保证数据的正确输出,则输出数据时按数据实际所占字段宽度输出例:若i为整形,其值为-1,f为实型,其值为123.4567,则下列输出函数的输出结果为:1、printf(“%d,%3d,%o,%x”,i,i,i,i);2、printf(“%d,%c,%3c”,i+98,i+98,i+98);3、printf(“%f,%10.3f,%-10.3f,\n%e,%15.2e,%.4e,%15e”,f,f,f,f,f,f,f);输出:-1,-1,177777,ffff输出:97,a,a输出:123.456700,123.457,123.457,

1.234567e+002,1.23e+002,1.2346e+002,1.234567e+002

#include“math.h”

main(){floata,b,c,p,s;

scanf(“%f,%f,%f”,&a,&b,&c);p=(a+b+c)/2;s=sqrt(p*(p-a)*(p-b)*(p-c));

printf(“p=%f,s=%f”,p,s);}§3.4程序举例例3.2已知三角形三边a,b,c,求面积2(设

b-4ac>0

)例3.3求一元二次方程

ax+bx+c=0

的解2开始d=b-4ac2求根:x1、x2x1、x2enda,b,c#include“math.h”main(){floata,b,c,d,x1,x2;

scanf(“%f%f%f”,&a,&b,&c);d=b*b-4*a*c;x1=(-b+sqrt(d))/(2*a);x2=(-b-sqrt(d))/(2*a);printf(“x1=%8.4f\nx2=%8.4f\n”,x1,x2);}第三章作业第84页4.4;第85页4.6(书面)第85页4.8;第86页4.10(上机)第三章课堂练习1、P85习题4.5inta=5,b=7;printf(“%d%d\n”,a,b);printf(“%3d%3d\n”,a,b);5757输出结果:1、P85习题4.5floatx=67.8564,y=-789.124;printf(“%f,%f\n”,x,y);printf(“%-10f,%-10f\n”,x,y);

67.856400,-789.12402367.856400,-789.124023

输出结果:1、P85习题4.567.86,-789.12,67.8564,-789.12406.78564e+01,-7.9e+02输出结果:floatx=67.8564,y=-789.124;printf(“%8.2f,%8.2f,%.4f,%.4f\n”,x,y,x,y);printf(“%e,%10.2e\n”,x,y);

1、P85习题4.5charc=‘A’;printf(“%c,%d,%o,%x\n”,c,c,c,c);printf(“%s,%5.3s\n”,

“COMPUTER”,“COMPUTER”);

A,65,101,41COMPUTER,COM输出结果:2、P85习题4.7scanf(“%5d%5d%c%c%f%f%*f,%f”,&a,&b,&c1,&c2,&x,&y,&z);

a=10,b=20,c1=‘A’,c2=‘a’,x=1.5,y=-3.75,z=67.8使:第四章逻辑运算和判断选取控制§4.1关系运算符和关系表达式一、运算符与优先级<<=>>===!=同级同级高低算术运算关系运算赋值运算高低二、关系表达式1、关系表达式的形式<表达式><关系运算符><表达式>2、关系表达式的值1——真0——假下列是合法的关系表达式:a+b>c+d(a=3)<(b=5)‘a’!=‘A’(a>b)==(c<d)§4.2逻辑运算符和逻辑表达式一、运算符与优先级!

算术运算关系运算

&&||高低逻辑运算真值表二、逻辑表达式1、逻辑表达式的值1——真0——假2、逻辑运算的对象并非仅限于逻辑量C判断处理的原则非0——真0——假例:设

a=4

,

b=5

,则

!a

为0

(假)

a&&b-1

为1

(真)3、运算中一旦能确定其值,终止计算如计算:

a&&b&&ca||b||c第四章逻辑运算和判断选取控制C语言程序设计50计算机教研室沈建京§4.3if语句(条件语句)一、语句格式123m格式1:if(e)语句格式2:if(e)语句1else语句2格式3:if(e)语句1

elseif(e)语句2

elseif(e)语句3…...

elseif(e)语句melse语句n表达式语句或复合语句第四章逻辑运算和判断选取控制C语言程序设计51计算机教研室沈建京二、语句功能e语句非00下条语句下条语句语句1语句2e非00格式1:if(e)语句计算

e

的值并判断。

e值非0,则执行语句;否则,执行下条语句。格式2:if(e)语句1else语句2计算

e

的值并判断。

e

值非0,则执行语句1;否则,执行语句2。第四章逻辑运算和判断选取控制C语言程序设计52计算机教研室沈建京格式3:if(e)语句1

elseif(e)语句2

elseif(e)语句3…...

elseif(e)语句melse语句n123m计算e1

的值并判断,其值非0执行语句1;否则,判断e2

的值,其值非0执行语句2;否则,判断e3

的值,其值非0执行语句3;否则,.…..判断em

的值,其值非0执行语句m

;否则,执行语句n00e1e3eme2语句1语句3语句2语句m语句n

下条语句非0非0非0非000….第四章逻辑运算和判断选取控制C语言程序设计53计算机教研室沈建京例4.1输入互不相等的三个数,按从小到大顺序输出它们。分析:设已知的三个数为a,b,c.(1)可直接通过逻辑表达式和条件语句设计程序。(2)可通过条件语句和互换变量值设计程序,即经过处理后使:a<b<c第四章逻辑运算和判断选取控制C语言程序设计54计算机教研室沈建京方法(1):main(){floata,b,c;

scanf(“%f%f%f”,&a,&b,&c);if(a<b&&b<c)printf(“%f,%f,%f”,a,b,c);if(a<c&&c<b)printf(“%f,%f,%f”,a,c,b);

if(b<a&&a<c)printf(“%f,%f,%f”,b,a,c);if(b<c&&c<a)printf(“%f,%f,%f”,b,c,a);

if(c<b&&b<a)printf(“%f,%f,%f”,c,b,a);if(c<a&&a<b)printf(“%f,%f,%f”,c,a,b);}第四章逻辑运算和判断选取控制C语言程序设计55计算机教研室沈建京方法(2):main(){floata,b,c,t;

scanf(“%f%f%f”,&a,&b,&c);if(a>b){t=a;a=b;b=t;}if(a>c){t=a;a=c;c=t;}if(b>c){t=b;b=c;c=t;}printf(“%5.2f,%5.2f,%5.2f”,a,b,c);}C语言程序设计56计算机教研室沈建京例4.2求一元二次方程

ax2+bx+c=0

的解求x1、x2x1、x2endd>=0无实根yn第四章逻辑运算和判断选取控制开始d=b-4ac2求根:x1、x2x1、x2enda,b,c开始d=b2-4aca,b,c第四章逻辑运算和判断选取控制C语言程序设计57计算机教研室沈建京main(){floata,b,c,d,x1,x2;

scanf(“%f%f%f”,&a,&b,&c);d=b*b-4*a*c;

if(d>=0){x1=(-b+sqrt(d))/(2*a);x2=(-b-sqrt(d))/(2*a);printf(“x1=%f,x2=%f”,x1,x2);}elseprintf(“Itisnorealroots.”);}第四章逻辑运算和判断选取控制C语言程序设计58计算机教研室沈建京例4.3某运输公司吨公里基本运费为p,根据距离s的远近计费标准如下:

s<250km 没有折扣 250

s<500 2%折扣 500s<1000 5%折扣 1000s<2000 8%折扣 2000s<3000 10%折扣 3000s 15%折扣根据货物重量w和运距s,求运费f。第四章逻辑运算和判断选取控制C语言程序设计59计算机教研室沈建京main(){floatp,s,w,d,f;

scanf(“%f%f%f”,&p,&s,&w);if(s>=3000)d=0.15;

elseif(s>=2000)d=0.10;

elseif(s>=1000)d=0.08;

elseif(s>=500)d=0.05;

elseif(s>=250)d=0.02;elsed=0.0;f=p*w*s*(1-d);printf(“f=%15.2f”,f);}第四章逻辑运算和判断选取控制C语言程序设计60计算机教研室沈建京三、if

语句的嵌套嵌套if

的一般形式if()

if()语句1

else语句2else

if()语句3

else语句4内嵌if内嵌if注意:else总是与它上面最近的if配对第四章逻辑运算和判断选取控制C语言程序设计61计算机教研室沈建京分析:a=0

不是二次方程。

b2-4ac=0

有两个相等实根。b2-4ac>0

有两不等实根。b2-4ac<0

有两共轭复根。

#include“math.h”main(){floata,b,c,d,x,x1,x2,xr,xi;

scanf(“%f%f%f”,&a,&b,&c);编程:例4.2求一元二次方程

ax2+bx+c=0

的解C语言程序设计62计算机教研室沈建京第四章逻辑运算和判断选取控制end求x1、x2x求xr、xix1、x2xr、xiNO!d=0d>=0求xyynnd=b-4ac2yna=0开始a,b,c第四章逻辑运算和判断选取控制C语言程序设计63计算机教研室沈建京If(fabs(a)<1e-6)printf(“No!”);else{d=b*b-4*a*c;

if(fabs(d)<1e-6){x=-b/(2*a);

printf(“Twoequalroots:%f”,x);}

elseif(d>0){x1=(-b+sqrt(d))/(2*a);x2=(-b-sqrt(d))/(2*a);

printf(“Tworealroots:%f,%f”,x1,x2);}else{xr=-b/(2*a);xi=sqrt(-d)/(2*a);

printf(“Complexroots:%f,%f”,xr,xi);}

}}第四章逻辑运算和判断选取控制C语言程序设计64计算机教研室沈建京四、条件运算符与条件表达式1、条件表达式的一般形式<表达式1>?<表达式2>:<表达式3>2、运算规则先计算表达式1,若为非0,则以表达式2的值作为条件表达式的值;否则,以表达式3的值为条件表达式的值。3、优先级算术、关系、逻辑运算条件运算赋值运算高低左结合第四章逻辑运算和判断选取控制C语言程序设计65计算机教研室沈建京§4.4switch语句一、语句格式switch(表达式){case常量表达式1:语句1

case常量表达式2:语句2

……

case常量表达式n:语句ndefault:语句n+1}第四章逻辑运算和判断选取控制C语言程序设计66计算机教研室沈建京二、执行过程当switch后的表达式的值与某一个case后的常量表达式的值相等时,执行其后的语句;若无匹配,则执行default后的语句。三、break语句使流程跳出switch结构,终止switch语句的执行。第四章逻辑运算和判断选取控制C语言程序设计67计算机教研室沈建京例4.5用switch语句设计“例4.3运费程序”第四章逻辑运算和判断选取控制C语言程序设计68计算机教研室沈建京例4.3某运输公司吨公里基本运费为p,根据距离s的远近计费标准如下:

s<250km 没有折扣 250

s<500 2%折扣 500s<1000 5%折扣 1000s<2000 8%折扣 2000s<3000 10%折扣 3000s 15%折扣根据货物重量w和运距s,求运费f。第四章逻辑运算和判断选取控制C语言程序设计69计算机教研室沈建京main(){floatp,w,s,d,f;intc;

scanf(“%f”,&s);

scanf(“%f%f”,&p,&w);if(s>=3000)c=12;elsec=s/250;switch(c){case0:d=0;break;case1:d=0.02;break;case2:case3:d=0.05;break;case4:

case5:case6:case7:d=0.08;break;case8:case9:case10:case11:d=0.1;break;case12:d=.15;break;}f=p*w*s*(1-d);

printf(“f=%15.2f”,f);}C语言程序设计70计算机教研室沈建京第四章作业第104页5.3(书面)第四章课堂练习第105页5.5、5.6、5.7、5.10第105页5.6,5.7,5.8(上机)第四章逻辑运算和判断选取控制第四章逻辑运算和判断选取控制C语言程序设计71计算机教研室沈建京习题5.5已知x,求分段函数值y

main() {floatx,y;

scanf(“%f”,&x); if(x<1)y=x; if(x>=1&&x<10)y=2*x-1; if(x>=10)y=3*x-11;

printf(“x=%f,y=%f\n”,x,t);}程序1:第四章逻辑运算和判断选取控制C语言程序设计72计算机教研室沈建京

main() {floatx,y;

scanf(“%f”,&x); if(x<1)y=x; elseif(x<10)y=2*x-1; elsey=3*x-11;

printf(“x=%f,y=%f\n”,x,y);}程序2:第四章逻辑运算和判断选取控制C语言程序设计73计算机教研室沈建京习题5.6分析:设百分制成绩为x,成绩等级为y‘A’ x90‘B’ 80x<90‘C’ 70x<80‘D’ 60x<70‘E’ x<60y=第四章逻辑运算和判断选取控制C语言程序设计74计算机教研室沈建京习题5.1010 a||b||c||d0 其他h=分析:设坐标为(x,y),高度为h

设:

a=(x-2)+(y-2)1 b=(x+2)+(y-2)1 c=(x+2)+(y+2)1 d=(x-2)+(y+2)122222222第四章逻辑运算和判断选取控制C语言程序设计75计算机教研室沈建京习题5.7给一个不多于5位的正整数,要求:(1)求出它是几位数;(2)分别打印出每一位数字;(3)按逆序打印出各位数字;第五章循环控制C语言程序设计76计算机教研室沈建京第五章循环控制C循环控制if-goto循环

while循环

do-while循环 for循环

所谓循环是指当满足一定条件时,程序流程重复执行某一固定的程序段。该固定程序段称为循环的循环体。C实现循环控制的语句有:第五章循环控制C语言程序设计77计算机教研室沈建京§5.1goto语句及其构成的循环一、goto语句1、语句格式

goto

语句标号写在语句前的标识符(后加:)2、语句功能使流转到语句标号所标识的语句执行

gotoL1; L2:语句…… …...L1:语句 gotoL2;例:第五章循环控制C语言程序设计78计算机教研室沈建京二、if语句和goto语句联合实现循环L1:if(e) {循环体

gotoL1;}

(当型循环)L2:循环体

if(e)

gotoL2;

(直到型循环)第五章循环控制C语言程序设计79计算机教研室沈建京例5.1求s=1+2+3+….+n的值。

main(){inti=1,s=0,n;

scanf(“%d”,&n);L1:s=s+i;i++;if(i<=n)gotoL1;

printf(“s=%d”,s);}

main(){inti=1,s=0,n;

scanf(“%d”,&n);

L1:if(i<=n){s=s+i;i++;

gotoL1;}

printf(“s=%d”,s);}第五章循环控制C语言程序设计80计算机教研室沈建京§5.2while语句—“当型”循环一、语句格式While(e)循环体单语句或复合语句二、执行过程(先判断后执行)当表达式e值为非0时,执行循环体,然后重复执行while语句;当e的值为0时,结束循环,执行后继语句。非00循环体e第五章循环控制C语言程序设计81计算机教研室沈建京例5.2求s=1+2+3+….+n的值(用while循环)。main(){inti=1,s=0,n;

scanf(“%d”,&n);

while(i<=n){s=s+i;i++;}

printf(“s=%d”,s);}main(){inti=1,s=0,n;

scanf(“%d”,&n);

while(i<=n)s+=i++;

printf(“s=%d”,s);}第五章循环控制C语言程序设计82计算机教研室沈建京§5.3do-while语句—“直到型”循环一、语句格式do循环体while(e);单语句或复合语句二、执行过程(先执行后判断)先执行do后的循环体,然后判断表达式e的值,若为非0,重复执行循环体,直到while中的表达式e为0,结束循环。循环体e0非0第五章循环控制C语言程序设计83计算机教研室沈建京例5.3求s=1+2+….+n的值(用do-while循环)。main(){inti=1,s=0,n;

scanf(“%d”,&n);

do{s=s+i;i++;}while(i<=n);

printf(“s=%d”,s);}main(){inti=1,s=0,n;

scanf(“%d”,&n);

dos+=i++;while(i<=n);

printf(“s=%d”,s);}第五章循环控制C语言程序设计84计算机教研室沈建京§5.4for语句及其构成的循环一、语句格式for(表达式1;表达式2;表达式3)循环体计算表达式1计算表达式3表达式2循环体下一条语句0非0二、执行过程1、计算表达式1。2、判断表达式2。若非0,执行循环体,转3;否则,结束循环,转4。3、计算表达式3。转2。4、执行for语句的下一条语句。第五章循环控制C语言程序设计85计算机教研室沈建京三、说明1、for语句最简单、最常用的应用形式for(循环变量赋初值;循环条件;循环变量增值)循环体例5.4求s=1+2+….+n的值(用for循环)。main(){inti,s=0,n;

scanf(“%d”,&n);for(i=1;i<=n;i++)s=s+i;

printf(“s=%d”,s);}第五章循环控制C语言程序设计86计算机教研室沈建京2、for语句中的三个表达式均可省略

注意:(1)分号不能省略。(2)应保证循环正确执行。例main(){inti,s,n;

scanf(“%d”,&n);for(i=1,s=0;i<=n;)s+=i++;

printf(“s=%d”,s);}main(){inti=1,s=0,n;

scanf(“%d”,&n);for(;i<=n;)s+=i++;

printf(“s=%d”,s);}第五章循环控制C语言程序设计87计算机教研室沈建京例5.5求Fibonacci数列:1,1,2,3,5,8,….的前30项。分析:f1=f2=1,fn=fn-1+fn-2(n>=3)

main(){longi=1,j=1,k;intn;printf(“%8ld%8ld”,i,j);for(n=3;n<=30;n++){k=i+j;printf(“%8ld”,k);if(n%3==0)printf(“\n”);i=j;j=k;}}第五章循环控制C语言程序设计88计算机教研室沈建京四、循环的嵌套—多重循环1、循环的嵌套概念对各种循环结构是一样的,即某一循环的循环体内包含另一循环结构。2、各种循环结构可以互相嵌套。例for嵌套for(;;){….

for(;;){….}….}for-while嵌套for(;;){….

while(){….}….}第五章循环控制C语言程序设计88计算机教研室沈建京3、嵌套循环的循环变量应互不相同,而并列循环的循环变量可以相同例for(i=0;i<10;i++){for(j=0;j<10;j++)

printf(“i=%d,j=%d”,i,j);

printf(“\n”);}for(i=0;i<10;i++)

printf(“i=%d”,i);printf(“\n”);for(i=0;i<10;i++)

printf(“i=%d”,i);第五章循环控制C语言程序设计89计算机教研室沈建京§5.5break语句和continue语句一、break语句1、用来跳出switch结构。2、用来跳出当前循环。二、continue语句用来结束本次循环,即跳过当前循环中后继尚未执行的语句,进行下一次循环循环break;循环continue;第五章循环控制C语言程序设计91计算机教研室沈建京例5.6打印100以内个位数为6,且能被3整除的数。main(){inti,j;

for(i=0;i<=9;i++){j=i*10+6;if(j%3!=0)continue;

printf("%d",j);}}第五章循环控制C语言程序设计91计算机教研室沈建京例5.7写出下列程序的运行结果。main(){inti,j;for(i=1;i<9;i++){for(j=1;j<=i;j++)printf(“%3d*%3d=%4d”,i,j,i*j);

printf(“\n”);}}第五章循环控制C语言程序设计92计算机教研室沈建京例5.8写出下列程序的运行结果。

main(){inti,j,a=0;for(i=0;i<2;i++)

{

for(j=0;j<4;j++)

{if(j%2)break;a++;}a++;

}

printf("%d\n",a);}第五章循环控制C语言程序设计92计算机教研室沈建京§5.6程序举例例1:判断一个整数m是否为素数例2:输入两个正整数m和n,求其最大公约数和最小公倍数。例3:输出以下图形:

*************************C语言程序设计93计算机教研室沈建京第五章作业5.2,5.3,5.5,5.7,5.8(上机)第五章循环控制第七章数组C语言程序设计97计算机教研室沈建京第六章数组§6.1一维数组一、定义类型关键字数组名[常数表达式];标识符数组体积二、数组元素数组名[下标]下界为0,上界为常数表达式-1定义数组的目的是为了定义一批数组元素,来存储一批类型相同的数据第七章数组C语言程序设计98计算机教研室沈建京定义一维整型数组a和实型数组ba数组中的元素是:a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9];b数组中的元素是:b[0],b[1],b[2],b[3],b[4]

数组元素的作用和变量的作用完全相同例:

inta[10];floatb[5];第七章数组C语言程序设计99计算机教研室沈建京三、数组的引用以数组元素作为引用对象例6.1求s=a1+a2+……+a10

main(){inti;floats=0,a[10];for(i=0;i<10;i++){scanf(“%f”,&a[i]);s=s+a[i];}

printf(“s=%f\n”,s);}第七章数组C语言程序设计100计算机教研室沈建京四、一维数组的初始化在定义数组时,给数组元素赋初值1、只有静态存储(static)和外部存储(extera)的数组才能初始化。例:staticinta[6]={1,2,3,4,5,6};2、可只给一部分数组元素赋初值。

例:staticinta[6]={1,2,3};3、未赋初值的静态数组,系统给各元素赋0值第七章数组C语言程序设计101计算机教研室沈建京例6.2求Fibonacci数列的前30项。main(){staticlongf[30]={1,1};inti;for(i=2;i<30;i++)f[i]=f[i-1]+f[i-2];for(i=0;i<30;i++){printf(“%8ld”,f[i]);if(i%3==0)printf(“\n”);}}第七章数组C语言程序设计102计算机教研室沈建京例6.3已知一组数(n个,n<=20),找出其中最小者。main(){inti,j,n;floata[20],b;

scanf(“%d”,&n);for(i=0;i<n;i++)scanf(“%f”,&a[i]);b=a[0];j=0;for(i=1;i<n;i++)if(b>a[i]){b=a[i];j=i;}

printf(“Min=%f\n”,b);}第七章数组C语言程序设计103计算机教研室沈建京例6.4对任意10个数按从大到小排序。main(){floata[10],t;inti,j;for(i=0;i<10;i++)scanf(“%f”,&a[i]);for(i=0;i<9;i++)for(j=i+1;j<10;j++)if(a[i]<a[j]){t=a[i];a[i]=a[j];a[j]=t;}for(i=0;i<10;i++)printf(“%f”,a[i]);}第七章数组C语言程序设计104计算机教研室沈建京§6.2二维数组一、定义类型关键字数组名[常量表达式][常量表达式]例:inta[3][4];该语句也可解释为定义了一个含三个元素的一维数组(其元素为a[0],a[1],a[2]),而其中的每一个元素本身是一含四个元素的一维数组。二、数组元素数组名[下标][下标]三、二维数组的存放按行存放第七章数组C语言程序设计104计算机教研室沈建京a[0][0]a[0][1]a[0][2]a[0][3]a[1][0]a[1][1]a[1][2]a[1][3]a[2][0]a[2][1]a[2][2]a[2][3]前面定义的a数组的元素在内存中的排列顺序如右图第七章数组C语言程序设计105计算机教研室沈建京四、二维数组的初始化1、分行初始化例:staticinta[2][3]={{1,2,3},{4,5,6}};2、按存放顺序整体初始化例:staticinta[3][2]={1,2,3,4,5,6};3、部分元素初始化例:staticinta[3][3]={{1},{},{4,5,6}};第七章数组C语言程序设计106计算机教研室沈建京例6.5打印以下的杨辉三角形。(要求打印出10行)11112113311464115101051…….第七章数组C语言程序设计107计算机教研室沈建京main(){inty[10][10],i,j;for(i=0;i<10;i++){y[i][0]=1;y[i][i]=1;}for(i=2;i<10;i++)for(j=1;j<=i-1;j++)y[i][j]=y[i-1][j]+y[i-1][j-1];for(i=0;i<10;i++){for(j=0;j<=i;j++)printf(“%5d”,y[i][j]);

printf(“\n”);}}第七章数组C语言程序设计108计算机教研室沈建京main(){inty[11][11],i,j;for(i=1;i<=10;i++){y[i][1]=1;y[i][i]=1;}for(i=3;i<=10;i++)for(j=2;j<=i-1;j++)y[i][j]=y[i-1][j]+y[i-1][j-1];for(i=1;i<=10;i++){for(j=1;j<=i;j++)printf(“%5d”,y[i][j]);

printf(“\n”);}}第七章数组C语言程序设计109计算机教研室沈建京§6.3字符数组用来存放字符串二、初始化1、用字符常量例:staticcharc[6]={’H’,’a’,’p’,’p’,’y’,’!’};staticchard[]={’G’,’o’,’o’,’d’,’’,’B’,’y’,’e’};例:chara[15],b[20];一、定义第七章数组C语言程序设计110计算机教研室沈建京注:c数组长度为7,其中c[6]=’\0’d数组长度为9,其中d[8]=’\0’不能用赋值语句将一个字符常量或字符数组直接赋给一个字符数组。c=”Happy!”;d=c;

()例:staticcharc[]={”Happy!”};staticchard[]=”GoodBye”;2、用字符串常量第七章数组C语言程序设计111计算机教研室沈建京二、I/O1、用%c——逐个元素的I/O2、用%s——整个字符串I/O

例:scanf(“%s”,c);printf(“%s”,c);

c为数组名,其作为输入项时不加&,

且输入的字符串中不允许有空格字符3、用字符串I/O函数——puts(c)和gets(c)

第七章数组C语言程序设计111计算机教研室沈建京例6.6从键盘中输入一行文字,统计出其中单词的个数(单词间用空格分开)。voidmain(){charstr[81],c;intword=0,i,num=0;

gets(str);for(i=0;(c=str[i])!='\0';i++)if(c=='')word=0;elseif(word==0){num++;word=1;}

printf("Thereare%dwordsintheline\n",num);}三、字符串处理函数1、字符串连接函数strcat(str1,str2)2、字符串拷贝函数strcpy(str1,str2)3、字符串比较函数strcmp(str1,str2)4、求字符串长度函数strlen(str)5、大写转换小写函数strlwr(str)6、小写转换大写函数strupr(str)第七章数组C语言程序设计111计算机教研室沈建京§6.4数组应用举例1、某班20人期末参加了数学、英语、政治和程序四门课程的考试。请按学生平均成绩由高到底排序,并给出每个学生平均成绩在班上的排名。该问题的解决可分以下几大部分:

•原始数据的输入

•求每个学生的平均成绩

•按平均成绩排序

•排名次

•按一定格式输出结果main(){floatstd_score[20][5],x;longstd_no[20],t;

intstd_order[20],i,j,k;for(i=0;i<20;i++){scanf("%ld",&std_no[i]);for(j=0;j<4;j++){scanf("%f",&x);std_score[i][j]=x;}}/*以下为求平均成绩过程*/for(i=0;i<20;i++){std_score[i][4]=0;for(j=0;j<4;j++)std_score[i][4]+=std_score[i][j]/4;}/*以下为比较交换法排序过程*/for(i=0;i<19;i++)for(j=i+1;j<20;j++)if(std_score[i][4]<std_score[j][4]){t=std_no[i];std_no[i]=std_no[j];std_no[j]=t;for(k=0;k<5;k++){x=std_score[i][k];std_score[i][k]=std_score[j][k];std_score[j][k]=x;}}/*以下为排名次过程*/

std_order[0]=1,j=2;for(i=1;i<20;i++)if(std_score[i][4]==std_score[i-1][4]){std_order[i]=s

温馨提示

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

评论

0/150

提交评论