基本结构程序设计主要内容C语言的基本语句程序_第1页
基本结构程序设计主要内容C语言的基本语句程序_第2页
基本结构程序设计主要内容C语言的基本语句程序_第3页
基本结构程序设计主要内容C语言的基本语句程序_第4页
基本结构程序设计主要内容C语言的基本语句程序_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

1、基本结构程序设计主要内容C语言的基本语句程序基本结构程序设计主要内容C语言的基本语句程序3.1.1 3.1.1 算法算法1算法:是解决问题的一系列操作步骤的集合。 例例3.1 3.1 求解一元二次方程axax2 2+bx+c=0(a0)+bx+c=0(a0)的两个根。 s1 s1:输入数据 a,b,ca,b,c s2 s2:求根x1,x2x1,x2 s3 s3:输出结果 可以将求解算法(s2s2)进行细化设计如下: s2_1 s2_1:输入数据 a,b,ca,b,c s2_2 s2_2:求判别式d的值,d=bd=b* *b-4b-4* *a a* *c c s2_3 s2_3:判断:如果d=0

2、d=0,则按实根求法计算: x1=(-b+sqrt(d)/(2x1=(-b+sqrt(d)/(2* *a)a) x2=(-b-sqrt(d)/(2 x2=(-b-sqrt(d)/(2* *a)a) 否则,按复根求法计算: 实部 r=-b/(2r=-b/(2* *a)a) 虚部 p=p= sqrt(-d)/(2sqrt(-d)/(2* *a)a) 依次读入30个学生成绩,输出平均成绩及最高成绩具体算法描述:具体算法描述: s1 s1:0=I0=I s2 s2:0=sum0=sum,0=max0=max s3 s3:读入一个学生成绩存入读入一个学生成绩存入scorescore s4 s4:I+1=

3、II+1=I s5 s5;sum+score=sumsum+score=sum s6 s6:如果如果scorescore大于大于maxmax,则则score= maxscore= max s7 s7:如果如果I I小于小于3030,转移至,转移至s3s3 s8 s8: sum/30=average sum/30=average s9 s9:打印打印averageaverage,maxmaxs3,s4,s5,s6,s7s3,s4,s5,s6,s7这些步骤会被重复执行3030次,变量I I用于统计已处理的学生人数 当I I值小于3030时,流程转至s3s3读下一个学生成绩 当I I值等于3030时

4、,所有学生成绩处理完毕,到s8,s9s8,s9输出结果。3. 3. 算法的特性算法的特性算法是解决问题逻辑思路的表述。同一个问题有不同的解题方法和步骤,设计出不同的算法。正确的算法应该具备以下特性。有穷性:有穷性:包含有限的操作步骤,不能无限制地执行下去。确定性:确定性:算法中所描述的每个步骤都应该是明确的 有若干个输入数据(有若干个输入数据(0 0 n n)输入是指在算法执行过程中需要用户输入的信息。有若干个输出数据(有若干个输出数据(1 1 n n)一般地,算法都有一个或多个输出数据,因为设计算法的目的就是进行数值运算或进行某种数据处理,给用户输出处理结果是必然的要求。有效性有效性在一个算

5、法中,要求每个步骤都能被有效地执行3.2 3.2 顺序结构程序设计顺序结构程序设计3.2.1 3.2.1 顺序执行语句概述顺序执行语句概述C程序是由语句组成,每个语句以分号结束。语句分类: 控制语句空: 控制程序执行流程控制程序执行流程 表达式语句 函数调用语句:调用函数调用函数 空语句: 执行空操作执行空操作 复合语句: 执行一组语句执行一组语句 用用把一些语句括起来,相当于一个语句把一些语句括起来,相当于一个语句 如: x1=-(-b+sqrt(d)/(2*a); x2=-(-b-sqrt(d)/(2*a); 3.2.2 3.2.2 数据的输入输出数据的输入输出输入:指将数据送入计算机输出

6、:指将计算机处理的结果数据送出保存或显示出来。 语言中,数据输入输出是由库函数完成。 使用库函数时,用预编译命令将有关“头文件”包括到源文件中。 标准输入输出库函数: “”文件 源文件开头应有以下预编译命令: # #include include # #include stdio.hinclude stdio.h 1. putchar 函数(字符输出函数)格式: putchar( c )参数: c为字符常量、变量或表达式功能:把字符c输出到显示器上返值:正常,为显示的代码值;出错,为EOF(-1)#include main三 int c; char a; c=65; a=B; putchar(

7、c); putchar(n); putchar(a);运行结果:A B例输出表:要输出的数据(可以没有,多个时以“,”分隔)格式控制串:包含两种信息 格式说明:%修饰符格式字符,用于指定输出格式 普通字符或转义序列:原样输出格式字符 d格式符:按十进制格式输出 f格式符:按实数格式输出 c格式符:以字符形式输出一个字符格式:printf(“格式控制串”,输出表)功能:按指定格式向显示器输出数据返值:正常,返回输出字节数;出错,返回EOF(-1)说明:标准库函数,函数原型在头文件“”中例char a=3,b=4; printf(“%c %cn”,a,b); printf(“a=%c , b=%c

8、n”,a,b);输出结果:34a=3, b=4输出结果:34a=3, b=4例int a=3,b=4; printf(“%d %dn”,a,b); printf(“a=%d , b=%dn”,a,b);例float a=3.14, b=2.1828; printf(“%f %fn”,a,b); printf(“a=%f , b=%cf”,a,b);输出结果:3.1400002.182800a=3.140000, b=2.1828002.printf函数(格式输出函数)格式:getchar( )功能:从键盘读一字符返值:正常,返回读取的代码值;出错,返回EOF(-1)3. getchar函数(字

9、符输入函数)例/*ch3_4.c*/#includemain三intc;printf(Enteracharacter:);c=getchar三;printf(%c-hex%xn,c,c);运行结果:Enter a character:AA-hex41格式: scanf(“格式控制串”,地址表)功能:按指定格式从键盘读入数据,存入地址表指定的存储单元中,并按回车键结束返值:正常,返回输入数据个数说明:标准库函数,函数原型在头文件“”中 地址表:变量的地址,用取地址运算符& 格式字符:d,c,f例int a scanf(“%d”,&a); 输入:10则a=10例char a; sc

10、anf(“%c”,&a); 输入:m则a=m例float a scanf(“%f”,&a); 输入:则函数 (格式输入函数)输入分隔符的指定格式串中两个格式符间隔字符格式串两个格式符无间隔字符,以空格、TAB或回车键作为分隔例scanf(“%d:%d:%d”,&h,&m,&s); 输入12:30:45则12h, 30 m, 45 s例scanf(“%d,%d”,&a,&b) 输入3,4则3a, 4 b例scanf(“%d%d%d”,&a,&b,&c); 输入12 24 36 #include #include ma

11、in( ) float a, b, c, s, area; printf(input a, b, c: ); scanf(%f, %f, %f, &a, &b, &c); s=(a+b+c)/2; area=sqrt(s*(s-a)*(s-b)*(s-c); printf(area=%7.2fn,area);输入三角形边长,求面积输入三角形边长,求面积 input a, b, c: 3,4,6 从键盘上输入一个字符,求出它的前导与后继字符,然后按由小到大的顺序输出这些字符及ASCIIASCII字符。注意: 字符的输入/输出函数,在程序包含头文件stdio.h.stdio

12、.h. C C语言中字符型和整型数据可以互通#include #include mainmain三三 char c; char c; int c1,c2; int c1,c2; c=getchar c=getchar三三; ; c1=c-1;c2=c+1; c1=c-1;c2=c+1; printf(%c,%c,%cn,c1,c,c2); printf(%c,%c,%cn,c1,c,c2); printf(%d,%d,%dn,c1,c,c2); printf(%d,%d,%dn,c1,c,c2); 3.3 3.3 选择结构选择结构选择结构:根据条件决定执行两组或多组操作中的一组。二路分支 if

13、 if else else 语句语句多路分支 switchswitch语句语句3.3.1 3.3.1 关系运算和逻辑运算关系运算和逻辑运算条件:是一个关系表达式或者逻辑表达式 结果是逻辑值:真或假, 用整数1 1表示“真真”,用整数0 0表示“假假”。1.关系运算关系运算是一种比较运算,有六个用于进行比较的运算符, 大于 = 大于等于 小于 = 小于等于 = = = 等于 ! =! = 不等于说明:说明:六个关系运算符都是双目运算符, 如: int a=2,b=3;int a=2,b=3; ab a100j100 结果为假。 关系运算运算对象为字符数据,比较按其ASCIIASCII码进行 如:

14、 表达式:a a b b 值为假与数学表达式的区别=!=优先级高优先级低算术运算赋值运算 关系运算(3) (3) 运算符的优先级问题运算符的优先级问题z=iz=i* *i+ji+j* *j100j100 结果为0z变量的值为0 如: 33x100 x100 数学解释 判断x是否在区间(3,100)之内 C语言解释 按从左向右的次序进行计算 如 x=0 关系运算(33x x)的结果取得值0 0 0100的运算结果为1 整个表达式结果为12.2. 逻辑运算符与逻辑表达式逻辑运算符与逻辑表达式由逻辑运算符连接关系表达式而形成的式子称为逻辑表达式。在C C语言中有三个逻辑运算符 & 逻辑与 |

15、 逻辑或 ! 逻辑非意义: a & ba & b 当a和b同时为真时,该逻辑表达式的值为真。 a | b a | b 当a 和 b之一为真时,该逻辑表达式的值为真。 ! ! a a 当a的值为真,则表达式的值为假。ab!a!ba&ba|b真真假假真真假假假假假假真真真真真真假假假假假假假假假假真真真真假假假假真真真真真真假假真真真真说明:说明:(1 1)&和|是双目运算符 !是单目运算符 逻辑表达式与关系表达式的运算结果都是逻辑值真或假 注意: 在进行判别时, “非0”作为“真”,“0”作为“假”(2 2)&和|的运算级别低于关系运算符, ! !的运算级

16、别高于关系运算符,也高于算术运算符, 注意: &和|的结合方向是从左向右, ! !的结合方向是从右向左。(3 3) 不能确定的情况下,添加括号保证运算次序。 尽量避免复杂烦琐的逻辑表达式。关系运算注意:例 若a=0; b=0.5; x=0.3; 则 a=x0 结果为 A100 结果为10关系运算注意:例 注意区分“=”与“=” int a=0,b=1; if(a=b) printf(“a equal to b”); else printf(“a not equal to b”);例 应避免对实数作相等或不等的判断 如 1.0/3.0*3.0=1.0 结果为 可改写为:fabs(1.0/

17、3.0*3.0-1.0)y) max=x; else max=y;1不带elseelse的ifif语句形式: if (if (表达式表达式) ) 语句语句执行过程:表达式为真(非0)时,执行其后的语句,然后执行ifif的下一个语句,否则直接执行ifif的下一个语句。 例: if(xy)printf(“%d”,x);3.3.4 3.3.4 条件运算符与条件表达式条件运算符与条件表达式条件表达式:实现简单的二路分支结构。格式: 表达式1?表达式2:表达式3是C语言中唯一的三目运算符,它要求三个运算对象。表达式1:一般为逻辑表达式意义:如果表达式1为真(非0),条件表达式取表达式2的值 如果表达式1

18、为假(0), 条件表达式取表达式3的值。 如:max=(ab)?a:b例 (a=b)?Y:N (x%2=1)?1:0 (x=0)?x:-x (c=a & c=z)?c-a+A:c3.3.5 3.3.5 switch 语句语句形式:switch ( (表达式表达式) ) case 常量常量1:语句序列:语句序列1 ; break; case 常量常量2:语句序列:语句序列2 ; break; case 常量常量n:语句序列语句序列n ; break; default: 语句序列语句序列n+1 ; switch表达式表达式语句组语句组1语句组语句组2语句组语句组n语句组语句组n+1.E 1

19、E 2Endefaultcase 3.4 3.4 循环结构程序设计循环结构程序设计循环结构是重要的程序结构,它是指对某段程序的重复执行。C C语言中提供了三种循环控制语句 whilewhile语句语句 do-whiledo-while语句语句 for for 语句语句3.4.1 3.4.1 whilewhile语句语句while语句用来实现当某个条件满足时,对一段程序进行重复执行的操作(当型循环)。while语句的一般格式: while while (表达式)表达式) 语句语句 当表达式的值为真(非零)时,重复执行语句,直到表达式的值为假,跳出循环。 说明:如果需要重复执行的部分(循环体)为多

20、条语句,则需要构成一个复合语句。例 用while循环求1100的和 1001nn/#includemain三inti,sum=0;i=1;while(i=100)sum=sum+i;i+;printf(%d,sum);循环初值循环终值循环变量增值循环条件循环体例 计算并输出ex,lnx,其中x=1,2,10。例例3.16 3.16 输入若干个学生成绩,输入输入若干个学生成绩,输入-1-1表示结束,求平均表示结束,求平均成绩。成绩。用while语句书写的程序如下main三 int i,score,sum=0; i=0; printf(please input score:n); scanf(%d

21、,&score); while (score!=-1) sum=sum+score; i+; scanf(%d,&score); printf(average=%fn,(float)sum/i);在在whilewhile循环中特别需要注意:循环中特别需要注意:1 1、防止、防止“死循环死循环”的发生的发生在循环体中一定要有使得循环逐渐趋向于结束的语句。例如,在上面的例中,x+x+;2 2、正确使用复合语句正确使用复合语句当循环体中包含两个以上的语句时,需要用花括号将这些语句括起来,如例中所示,构成一个复合语句。如果丢掉了这个花括号,编译系统也不会检查出语法错误,因为它可以认为:

22、y=exp(x);y=exp(x);这一个语句是需要重复执行的,这样,就客观上造成了“死循环”。 例 显示110的平方/*#includemain三inti=1;while(i=10)printf(%d*%d=%dn,i,i,i*i);i+;运行结果:1*1=12*2=43*3=94*4=165*5=256*6=367*7=498*8=649*9=8110*10=1003.4.2 3.4.2 do-whiledo-while语句语句一般形式是:do do 语句语句while (while (表达式表达式) )执行语句,当表达式为真时执行语句,当表达式为真时( (直到型循环直到型循环) )。具体

23、的执行过程是:先执行。具体的执行过程是:先执行dodo之后的之后的语句,然后判断语句,然后判断whilewhile中的表达式是否为中的表达式是否为真,若为真,则继续循环,否则,跳出真,若为真,则继续循环,否则,跳出循环(循环(whilewhile下面的语句)。下面的语句)。 例3.17 任意输入一个整数,将该数倒序输出。程序一:用while语句实现 main三 int number,digit; printf(please input data:); scanf(%d,&number); while (number!=0) digit=number%10; printf(%d,digi

24、t); number=number/10; 程序二:用程序二:用do-whiledo-while语句实现语句实现mainmain三三 int number,digit; int number,digit; printf(please input printf(please input data:);data:); scanf(%d,&number); scanf(%d,&number); do do digit=number%10; digit=number%10; printf(%d,digit); printf(%d,digit); number=number/10; nu

25、mber=number/10; while (number!=0); while (number!=0); 例 用dowhile循环求1100的和1001nn#include main三 int i,sum=0; i=1; do sum+=i; i+; while(i=100); printf(%d,sum);v特点:先执行循环体,后判断表达式v说明:l至少执行一次循环体ldowhile可转化成while结构expr循环体假假(0 0)真(非0)循环体While循环3.4.3 3.4.3 for for 语句语句forfor语句是应用最为广泛的循环语句,for 语句的一般形式为: for(fo

26、r(表达式表达式1 1;表达式;表达式2 2;表达式;表达式3) 3) 语句语句 表达式1:循环进行初始化,即给循环的控制变量赋初值。表达式2:一个逻辑表达式,其作用是给出是否继续循环的条件,如果该表达式为真,则循环继续进行;否则跳出循环。表达式3:对于循环控制变量进行增量或减量运算的表达式,它使得在有限次数内,循环可以正常结束。语句:需要重复执行的部分,称为循环体。 某人在其存款帐号上存入了1000元,年利率为2.18%。计算并打印10年内各年的存款数。存款数计算公式为: a=p(1+r)n公式中,p:本金 n:年数 r:年利率 a:n年后的存款数#include main三 int yea

27、r; float amount, principal=1000, rate=0.0218; printf(%s%21sn,year,amount on deposit); for (year=1; year=10; year+) amount=principal*pow(1.0+rate,year); printf(%4d%21.2fn,year,amount); v说明:lfor中expr1, expr2 ,expr3 类型任意可省略,分号;不可省l无限循环:for(;)lfor语句可以转换成while结构expr1;while(expr2)循环体语句;expr3;例用for循环求1100和

28、1001nn#include main() int i,sum=0; for(i=1;i=100;i+) sum+=i; printf(%d,sum);for(expr1; expr2;expr3)循环体语句;3.4.4 3.4.4 循环嵌套循环嵌套循环嵌套是在一个循环的循环体中又包含另一个循环语句。例例3.20 3.20 输出九九乘法表,形式如下:输出九九乘法表,形式如下:mainmain三三 int i,j; int i,j; for (i=1;i=9;i+) for (i=1;i=9;i+) for(j=1;j=i;j+) for(j=1;j=i;j+) printf(%2d print

29、f(%2d* *%2d=%2d,i,j,i%2d=%2d,i,j,i* *j);j); printf(nn); printf(nn); 循环的嵌套v三种循环可互相嵌套,层数不限v外层循环可包含两个以上内循环,但不能相互交叉v嵌套循环的执行流程(1)while三while三.(2)dodowhile();.while();(3)while三dowhile();.(4)for(;)dowhile三;while三.内循环内循环外循环外循环内循环内循环v嵌套循环的跳转从外层跳入内层l跳入同层的另一循环l向上跳转3.4.5 break语句和语句和continue语句语句1.1.breakbreak语句b

30、reakbreak语句在C C程序中只能出现在两种场合其一:用于switch语句中,其作用是跳出switch语句;其二:是用于循环语句,作用是提前结束循环的执行例例3.21 3.21 打印出打印出31003100之间的所有素数。之间的所有素数。#include #include mainmain三三 int m,i,k,n=0,flag; int m,i,k,n=0,flag; for (m=3;m=100;m=m+2) for (m=3;m=100;m=m+2) k=sqrt(m); flag=1; k=sqrt(m); flag=1; for(i=2;i=k;i+) for(i=2;i=k

31、;i+) if (m%i=0) if (m%i=0) flag=0; break; flag=0; break; if (flag=1) if (flag=1) printf(%5d,m); n=n+1; printf(%5d,m); n=n+1; if (n%10=0) printf(n); if (n%10=0) printf(n); printf(n); printf(n); 2. continue语句形式: continue ; 只能用于循环语句的循环体中作用是使执行流程跳过循环体中continuecontinue下面的语句,即提前结束本次循环,开始下一次循环。在whilewhile 和do-whiledo-while语句中,执行continuecontinue语句就立即测试是否继

温馨提示

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

评论

0/150

提交评论