谭浩强c语言教程 结构性程序的开发课件_第1页
谭浩强c语言教程 结构性程序的开发课件_第2页
谭浩强c语言教程 结构性程序的开发课件_第3页
谭浩强c语言教程 结构性程序的开发课件_第4页
谭浩强c语言教程 结构性程序的开发课件_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

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

文档简介

第三章结构化程序的开发1.理解解决问题的基本方法2.学会制定简单程序的算法3.掌握一种选择结构(if/else)4.掌握一种循环结构(while)5.掌握自增、自减的运算本章目标:§3.1C程序结构和语句一、C程序结构·每一个源文件由预编译命令和若干函数组成(对每个文件分别编译,然后连接)·一般地,一个C程序可由多个源文件组成·每一个函数由说明部分和语句部分组成C程序结构:C程序源程序文件1源程序文件i源程序文件n预编译命令函数1函数n说明部分执行部分(语句)………2.控制语句––改变语句的执行顺序if()~else~(条件)for()~(循环)while()~(循环)do~while(循环)switch(多分支选择)()表示条件,~表示语句

continue(结束本次循环)

break(中止整个循环)

return(函数返回)3.限定转向(无条件转向)语句5.终止程序运行语句4.无条件转移语句gotoexit6.复合语句(语句体)用{}括起来的一系列语句。如:{z=x+y;t=z/100;printf("%f",t);}三、结构化程序设计概念

从结构化程序设计角度出发,程序只有三种结构:·顺序结构·选择结构·循环结构2.选择结构表示为ABPTFBTPFA存在某条件P,若P为真,则执行A,否则执行B。3.循环结构表示为PFTAAP为T(1)

当型结构当P条件成立时(T),反复执行A,直到P为“假”时才停止循环.有两种结构:当型和直到型§3.2算法1.按指定的语句和顺序来解决问题的过程称为算法。2.算法的两个重要方面:顺序语句3.算法的图形表示:流程图4.流程图符号:椭图矩形判断框小圆圈代表程序的开始或结束代表程序所执行的动作代表程序的分支代表程序的连接所有的流程图用一带箭头的线(流线)相连,就构成了程序的流程(顺序)如:§3.3if选择结构–––条件判断一、if的三种形式功能:当表达式值非0时,执行语句体A,否则不执行语句体A.形式1if(表达式)语句体A表达式语句体A=00例如:if(x>y);

{x=x%2;

printf("%d",x);

}其流程图:表达式语句体A语句体B0=0例:if(x>y) printf("%d",x); else

printf("%d",y);形式3if(表达式1)elseif(表达式2)elseif(表达式3)……elseif(表达式n)else语句体1语句体2语句体3语句体n语句体n+1如:if(3)prinf("o.k");if('a')…1.表达式可以是逻辑、关系,甚至是算术表达式。2.语句必须以分号结束3.若语句不止一条,则必须用{}括起来。在{}外可以不用分号.二、注意的问题:例1,

有3个整数a、b、c,由键盘输入,输出其中最大的数。

0输入a、b、ca>b?b>c?a>c?max=amax=cmax=bmax=c输出max10110main(){inta,b,c,max;scanf(“%d,%d,%d”,&a,&b,&c);if(a>b)if(a>c)max=a;elsemax=c;elseif(b>c)max=b;elsemax=c;printf(“Maxis%d\n”,max);}

开始输入a、b、ca>ba>c交换a、b的值b>c交换b、c的值交换a、c的值打印a、b、c的值YYYNNN结束例3

输入三个数,按大小顺序输出。#include<stdio.h>

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);

}运行情况如下:3,7,1

7.00,3.00,1.00三、if语句的嵌套if(表达式1)内嵌ifelse内嵌注意:else与最近的if配对.一般形式

在上述形式的if语句中,又可以是if语句–––称为嵌套。if(表达式2)语句1if(表达式3)语句3else语句2else语句4例3

有一函数:y=–1(x<0)0(x=0)1(x>0)编一程序,输入一个x值,输出y值。有以下几种写法,请判断哪些是正确的?程序2:将程序1的if语句改为:

/*exp52.c*/

#include<stdio.h>

main()

{intx,y;

scanf("%d",&x);

if(x>=0)

if(x>0)

y=1;

else

y=0;

else

y=-1;

printf("x=%d,y=%d\n",x,y);

}

注意if—else对齐程序1:

/*exp51.c*/

#include<stdio.h>

main()

{intx,y;

scanf("%d",&x);

if(x<0)

y=–1;

elseif(x==0)

y=0;

else

y=1;

printf("x=%d,y=%d\n",x,y);

}程序4:将程序1的if语句改为:/*exp54.c*/#include<stdio.h>main(){intx,y;scanf("%d",&x);

y=0;if(x>=0)if(x>0)y=1;elsey=-1;printf("x=%d,y=%d\n",x,y);}

程序3:将程序1的if语句改为:/*exp53.c*/#include<stdio.h>main(){intx,y;scanf("%d",&x);

y=-1;if(x!=0)if(x>0)y=1;elsey=0;printf("x=%d,y=%d\n",x,y);}1.程序1和程序2是正确的。

它们代表的函数为:2.程序3和程序4是错误的。

它们代表的函数为:y=0(x<0)–1(x=0)1(x>0)y=–1(x<0)0(x=0)1(x>0)结论:思考练习:分别画出一个程序的流程图四、条件运算符

C语言提供了一个简单的条件赋值语句或条件表达式。问题:当判断条件不论是“真”是“假”,均给同一变量赋值时。简化条件语句运算符书写方式:?:属三目运算符。功能:先判表达式1,若非0,则值为表达式2的值,否则为表达式3的值。一般形式:表达式1?表达式2:表达式3

max=a>b?a:b;当a>b.maxa.否则maxb注意:1.条件运算符优先于赋值运算符.

例:max=(a>b?a:b)可去掉()

2.条件运算符低于关系运算符和算术运算符。

3.条件运算符结合性为从右至左。例:max=a>b?a:b+1

max=a>b?a:(b+1)并不是max=(a>b?a:b)+1如:a>b?a:c>d?c:d

相当于a>b?a:(c>d?c:d)4.条件表达式不能取代一般的if语句,只有当if的两个分支为给同一变量赋值时才可替代if.if(a>b)

printf("%d",a);else

printf("%d",b);可写成:printf("%d",a>b?a:b);如:例#include<stdio.h>main(){floatx=1.0;inta=2,b=3;x=(a>b)?a:b;printf(“%f”,x);}输出为:3.0000条件表达式(a>b)?a:b的值为整型数据,但x为实型数据,所以输出为实型数据.5.表达式1、表达式2、表达式3的类型可以不同。

#include<stdio.h>

main()

{charch;

scanf("%c",&ch);

ch=(ch>='A'&&ch<='Z')?(ch+32):ch;

printf("%c",ch);

}例4

输入一个字符,判别它是否大写字母,如果是,

将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。运行结果如下:

A

a一、复合赋值运算符:在"="号之前加一个其它运算符。C语言规定:凡是二目运算符均可构成复合运算符。例:

a+=3;相当于a=a+3x=y+8;相当于x=x(y+8)x%=3;相当于x=x%3一般形式:<变量><赋值运算符><表达式>二、复合赋值表达式例:

x=10为一赋值表达式其中<表达式>又可以是一个赋值表达式。例:

x=(y=10)相当于y=10;x=y由于赋值号为右结合性,于是"()"可省略,即为:x=y=10;例:a+=a–=aa(设a12)又:a=5+(c=6)c=6,a=11a=(b=4)+(c=6)

b=4,c=6,a=10a=(b=10)/(c=2)b=10,c=2,a=5还可用复合赋值运算符作下列运算:步骤:aa144.a–=aaa=a–aa=12–144=–132a+=–132a=a+(–132)=–264§3.4逗号运算符和逗号表达式

一般形式:

表达式1,表达式2其计算规则:先计算表达式1,再计算表达式2,最后值为表达式2的值。例:ina,b;

a=35,a4;

b=(3*5,a*4);结果:a=15

b=60略若:b=((a=35,a4),a+5);扩展形式:表达式1,表达2,…,表达式n,结果b=20(作为逗号表达式的值)a+5b即20b.35=15aa4=60(此时a值仍未变)结果为表达式n的值略四、自增,自减运算符例如:

若有:

inti=3;++自增1––自减1++i:先使i值+1,再使用i值;i++:先使用i值,再使i值+1.则:j=++i;结果为:j=4,i=4.相当于i=i+1;j=i;则:j=i++;结果为:j=3,i=4.相当于j=i;i=i+1同理:––i,i––,均使i值–1,但:––i:先使i值–1,再使用i值;i––:先使用i值,再使i值–1例如:

inti=3,j;则:j=––i;结果为:j=2,i=2.相当于i=i–1;j=i;则:j=i––;结果为:j=3,i=2.相当于j=i;i=i–1;1.

++和––运算法只能用于变量,不得用于常量和表达式.如:

5++,(a+b)++均为不合法.几点注意:2.++,–

–,的结合性为从右至左,而一般算术运算符为从左至右。如:–i++"–"和"++"为同一优先级.–i++相当于–(i++)例: #include<stdio.h> main() {inti=3,j; j=-i++; printf("i=%d,j=%d\n",i,j); }运行结果:i=4,j=-31.要慎用++、––运算符。五、有关表达式使用中的问题说明对于表达式(i++)+(i++)+(i++);

我们可能会认为应从左至右:3+4+5=12例:

#include<stdio.h>main(){inti=3,j;

j=(i++)+(i++)+(i++);printf("i=%d,j=%d\n",i,j);}实际运行结果:i=6,j=9先对i进行3次自加,结果i的值为6,然后三个i值相加为18。3+3+3=9然后再把6赋给i值如果表达式j=(i++)+(i++)+(i++);改为:j=(++i)+(++i)+(++i);则运行结果:i=6,j=18这是因为运算时是先取i的原值:32.

在表达式中,有的运算符为一个字符,有的为两个字符。一般地:自左至右尽可能多地将若干字符组成一个运算符。如:

i+++j,究竟理解为(i++)+j还是i+(++j)?例:#include<stdio.h> main() {inti=3,j=3,m; m=i+++j; printf("i=%d,j=%d,m=%d\n",i,j,m); }运行结果:i=4,j=3,m=6对语句m=i+++j;系统理解为m=(i++)+j;3.

在函数调用时要注意参数的计算顺序,printf("i=%d,i=%d",i,i++);如:inti=3;intj=3;printf("j=%d,j=%d",j++,j);输出结果:i=4,i=3;j=3,j=3;原因:参数的计算顺序从右到左。数据输出

格式:putchar(c)参数:c为字符常量、变量或表达式功能:把字符c输出到显示器上返值:正常,为显示的代码值;出错,为EOF(-1)

C语言无I/O语句,I/O操作由函数实现

字符输出函数

#include<stdio.h>putchar()函数1、功能:将一个字符输出到标准输出设备。2、格式:putchar(c)3、使用要点:putchar(c)中的c可以是字符型或整型数据;

c=98;putchar(c)输出字符b

putchar(‘a’)

输出字符a

putchar(0x41)

输出字符A使用输出函数需要调用c的标准I/O库函数,故需用预编译命令:

#include<stdio.h>

将stdio.h文件包含在用户源程序文件中;putchar()也可以输出一个控制字符或其它转义字符。如:putchar(‘\n’)

输出一个换行符

putchar(‘\101’)

输出字符A

putchar(‘\’’)

输出字符单引号’4、举例:格式:getchar()功能:从键盘读一字符返值:正常,返回读取的代码值;出错,返回EOF(-1)字符输入函数

例/*ch3_4.c*/#include<stdio.h>main(){intc;printf("Enteracharacter:");c=getchar();printf("%c--->hex%x\n",c,c);}运行结果:Enteracharacter:AA--->hex41数据输入putchar()函数[例]输入一个字符,回显该字符并输出其ASCII码值。#include<stdio.h>main(){charch;ch=getchar();putchar(ch);printf("%d\n",ch);}运行程序:gg103本章主要介绍的内容:1.C程序语句的分类2.C程序结构的分类3.if语句和条件运算符4.逗号表达式5.自增、自减运算符本章小结6.输入输出作业1:有一函数:

x(x<1)y=2x-1(1≤x<10)3x-11(x≥10)

用if-else-if结构,输入x值,输出y值作业2:写一程序,输入年号,判断是否为闰年。

算法:当年号能被4整除但不能被100整除时,它为闰年。当年号能被400整除时,它为闰年。根据闰年的判断条件为下列条件之一:例如:判断年号是否为润年。润年必须满足下列条件中的任意一个:年号能被400整除。

年号能被4整除但不能被100整除。当(year%4!=0)¦¦(year%100==0&&year%400!=0)

为1时,year为非润年。设用变量year表示年号当((year%4==0&&year%100!=0)¦¦(year%400==0)为1时,year为润年,否则为非润年。如果要判别非润年可在上述表达式前加非(!)运算符.当!((year%4==0&&year%100!=0)¦¦(year%400==0)

为1时,year为非润年。或者:即:则:程序举例作业:写一程序,输入年号,判断是否为闰年。1.

算法:当年号能被4整除但不能被100整除时,它为闰年。当年号能被400整除时,它为闰年。根据闰年的判断条件为下列条件之一:

流程图开始输入年号判断是否为润年?打印是润年打印非润年结束YNif((year%4==0)&&year%100!=0)¦¦(year%400==0))#include<stdio.h>main(){intyear;scanf("%d",&year); printf("%dis",year);elseprintf("%disnot",year);printf("aleapyear\n");}程序:第四章程序控制例有一函数:

x(x<1)y=2x-1(1≤x<10)3x-11(x≥10)

这是一个求三个分支的函数值的的情况,选用if-else-if结构比较方便。

main(){floatx,y;scanf(“%f”,&x);if(x<1)y=x;elseif(x<10)y=2*x-1;elsey=3*-11;printf(“y=%f\n”,y);}[例]试编写求梯形面积的程序,数据由键盘输入。分析:设梯形上底为A,下底为B,高为H面职为S,则S=(A+B)×H÷2[例]试编写求梯形面积的程序,数据由键盘输入。分析:设梯形上底为A,下底为B,高为H面职为S,则S=(A+B)×H÷2main(){floata,b,h,s;printf("pleaseinputa,b,h:");scanf("%f%f%f",&a,&b,&h);s=0.5*(a+b)*h;printf("a=%5.2fb=%5.2f=%5.2f",a,b,h);printf("s=%7.4f",s);}运行结果如下:pleaseinputa,b,h:3.54.22.8a=3.50b=4.20h=2.80s=1

温馨提示

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

评论

0/150

提交评论