1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2,*,2,1,顺序程序设计,2,2,结构化程序设计,目标:将学习三种结构的程序设计方法,顺序结构程序设计,选择结构程序设计,循环结构程序设计。,2,3,三种控制结构,顺序结构,选择结构,循环结构,A,B,B,A,P,yes,no,no,P,A,yes,2,4,C,语句概述,实现顺序结构的语句,实现选择结构的语句,实现循环结构的语句,赋值语句,函数调用语句,复合语句,if,语句,switch,语句,while,语句,do-while,语句,for,语句,2,5,实现顺序结构的语句,顺序结构的程序中的语句是按照从
2、上到下的顺序逐行排列的;,程序的执行顺序是按语句的排列顺序进行的。,完成顺序程序设计的语句包括:,赋值语句,函数调用语句,复合语句,2,6,赋值语句,赋值语句,由赋值表达式加上一个分号构成,作用是,将一个确定的值赋给一个变量,。,语句格式:,例:,;,=,y,sin,(,x,),+cos,(,x,),变量名,=,表达式;,2,7,赋值语句的作用:,将“,=”,右侧表达式的值送到“,=”,左侧的变量所对应的单元中。,赋值语句中的“,=”,是赋值号而不是数学意义上的等号;它代表的是一种操作,赋值操作,;赋值号两侧的内容不能调换,;,A=B,;,和,B=A,;,具有不同的含义;,A=B,;,B=A,
3、;,意味着将,B,的值送给,A,;,意味着将,A,的值送给,B,;,2,8,赋值的意义:,在计算机内部,一个变量对应一块内存存储空间;具有一个名字。,赋值的过程:就是将指定的值送入指定的存储空间的过程。,赋值的结果:指定的变量所对应的存储空间具有了指定的值。,x,X=10,10,2,9,例:顺序执行以下三个赋值语句,结果如何?,a=0,;,b=10,;,a=b,;,a,b,1.a=0,;,2.b=10,;,3.a=b,;,0,10,10,2,10,复合语句,由一组语句组成,并放在一对花括号“,”,中间。,语句格式:,说明部分;,执行部分;,复合语句,复合语句是一个整体,在语法结构上与一个单一语
4、句相同。,2,11,函数调用语句,C,程序中,需要使用很多复杂的功能,例如,输入数据、输出数据、数学公式的使用(,sinx,、,cosx,、,e,x,等)。这些功能的使用是通过,函数调用,来实现的。,系统把一些独立的功能编制成标准函数,提供给使用者调用的格式。,下面我们先介绍两个最常用的标准函数:,格式输出函数和格式输入函数,2,12,格式,输出函数,2,13,格式,输出函数语句,格式:,printf,(,格式控制,,输出变量列表,),;,函数名,参数表,#include,输出的变量名列表,功能:,printf,函数可以将任意类型的多个数据,按指定格式输出到标准输出设备上,(,一般为显示器,)
5、,。,2,14,由双引号括起来的字符串,;,形式:,控制字符,由“,%”,和格式字符组成,它的作用是将对应的变量按照指定的类型输出。,需要原样输出的字符,用于控制输出,普通字符,格式说明,转义字符,格式控制,printf,(,格式控制,,输出变量列表,),;,2,15,格式说明符:,由,%,和格式字符组成,作用是将输出的数据按照指定的格式输出。,2,16,指数形式输出单、双精度实数,%e,输出十六进制 无符号整数,%x,小数形式输出单、双精度实数,%f,输出一个字符,%c,输出十进制 无符号整数,%u,输出一个字符串,%s,当指数小于,-4,或大于指定精度使用,%e,格式,否则用,%f,格式,
6、%g,输出八进制无符号整数,%o,输出十进制 带符号整数,%d,含义,格式字符,2,17,附加格式说明,字符,含义,L,输出长整型,可用在格式符,d,、,o,、,x,、,u,f,的前面,整数,输出数据的最小宽度,.,整数,对实数表示输出的小数位数;对字符串表示截取的字符个数,-,输出数字或字符在域内向左靠齐,例:,%ld,%lf,对应长整型数据的输入输出格式描述,对应,double,型数据的输入输出格式描述,2,18,附加格式说明,字符,含义,L,输出长整型,可用在格式符,d,、,o,、,x,、,u,f,的前面,整数,输出数据的最小宽度,.,整数,对实数表示输出的小数位数;对字符串表示截取的字
7、符个数,-,输出数字或字符在域内向左靠齐,例:,%5d,%8.3f,对应的整型数据的输入输出宽度为,5,对应,float,型数据的输出,;,输出的数据宽度为,8,个字符,小数点后保留,3,位。,2,19,main,(,),int a,,,b,;,float x,;,char c,;,a=123,;,b=-1,;,x=3.14,;,c=A,;,printf,(,%d,,,%6dn,,,a,,,a,),;,printf,(,%d,,,%x,,,%o,,,%un“,b,b,b,b,),;,printf,(,%c,,,%dn,,,c,,,c,),;,printf,(,%f,,,%6.1fn,,,x,,
8、,x,),;,写出程序运行结果,2,20,printf,(,%d,,,%6dn,,,a,,,a,),;,1111,1111,1111,1111,-1,在内存中的存放,运行结果,a=123,;,b=-1,;,x=3.14,;,c=A,;,printf,(,%d,,,%x,,,%o,,,%un,,,b,,,b,,,b,,,b,),;,printf,(,%c,,,%dn,,,c,,,c,),;,123,,,123,-1,,,ffff,,,177777,,,65535,A,,,65,printf,(,%f,,,%6.1fn,,,x,,,x,),;,3.140000,,,3.1,2,21,转义字符,转义
9、字符是一组以,“,”,开头的特殊字符序列,用,单引号,括起来。用来表示任何可以输出的字母字符、专用字符、控制字符、图形字符。,在,printf,的格式控制串中,控制输出格式。,常用的有:,b,、,f,、,n,、,r,、,t,、,ooo,、,xhh,、,0,;,2,22,课上练习:写出以下程序段的运行结果,#include,void main(),char c1=a,c2=b,c3=c,c4=101,c5=116;,printf(“a%c b%ctc%ctabcn”,c1,c2,c3);,printf(“tbc%c%cn”,c4,c5);,2,23,用实验来学习和验证,2,24,#include
10、,void main,(),/*,没有,n,时*,/,printf,(,this is one program in c,),;,printf,(,this is one program in c,),;,/*,在格式控制串尾有,n,时*,/,printf,(,this is one program in c,n,),;,printf,(,this is one program in c,),;,/*,在格式控制串首有,n,时*,/,printf,(,this is one program in c,),;,printf,(,n,this is one program in c,),;,思考题
11、:转义字符,n,在格式控制中的作用是什么?,2,25,/*,转义字符,/b,在控制串中的作用*,/,#include,void main,(),/*,在控制串中不使用转义字符,/b*/,printf,(,this is one program in c,),;,printf,(,this is one program in cn,),;,/*,在控制串中使用转义字符,/b*/,printf,(,this is one program in c,),;,printf,(,bb,this is one program in c n,),;,思考题:转义字符,b,在格式控制中的作用是什么?,2,26
12、,/*,转义字符,/r,在控制串中的作用*,/,#include,void main,(),/*,在控制串中不使用转义字符,/r*/,printf,(,this is one program in c,),;,printf,(,this is one program in cn,),;,/*,在控制串中使用转义字符,/r*/,printf,(,this is one program in c,),;,printf,(,r,this is one program in c n,),;,思考题:转义字符,r,在格式控制中的作用是什么?,2,27,/*,转义字符,/t,在控制串中的作用*,/,#in
13、clude,void main,(),/*,在控制串中不使用转义字符,/t*/,printf,(,this is one program in c,),;,printf,(,this is one program in cn,),;,/*,在控制串中使用转义字符,/t*/,printf,(,this is one program in c,),;,printf,(,t,second program n,),;,思考题:转义字符,t,在格式控制中的作用是什么?,2,28,/*,转义字符,/ooo,和,/xhh,在控制串中的作用*,/,#include,void main,(),printf,(,
14、this is one program in c,),;,printf,(,101,this is the second program n,),;,printf,(,x1a,this is second program n,),;,思考题:转义字符,ooo,和,/xhh,在格式控制中的作用各是什么?,2,29,普通字符,在,printf,的格式控制串中,除了以上的特殊字符(,%+,格式符、转义字符)以外的字符,都是需要原样输出的字符,称为普通字符。,例:,printf,(,x1a,this is second program n,),;,在一个,printf,语句的格式控制串中,首先将处理特
15、殊字符(转义字符控制输出的状态、格式控制符(,%+d,等)控制对应位置的变量的值的显示格式),控制串中的其它字符都将按原样输出。,2,30,同理,学习和验证每一个格式控制符的作用,2,31,标准格式,输入函数,2,32,格式,输入函数,格式:,scanf,(,格式控制,,地址表列),;,与,printf,中的含义相同,函数名,将输入的数据放入此变量中,2,33,标准格式,输入函数的功能:,scanf,函数可以从标准输入设备输入任意类型的多个数据(一般为键盘),存入指定的变量单元中。,例:,scanf,(“,%d,,,%f”,,,&,a,,,&,b,);,意味着从键盘读入两个数据,分别存入变量,
16、a,和,b,中。,%d,:按十进制整数格式读入;,%f,:按实数格式读入;,2,34,格式,输入函数,scanf,中,格式控制串的格式,应与,地址表列中变量的顺序,相一致;,scanf,中,格式控制串的格式,应与,输入数据的格式,相一致;,当语句格式如下时:,scanf,(“,%d,,,%f,”,,,&,a,,,&,b,);,输入数据的格式应为:,12,,,3.14,如果语句写成:,scanf,(“,%d%f,”,,,&a,,,&b,);,输入数据的格式应为:,12 3.14,2,35,怎样保证输入数据的正确性?,在对数据进行输入时,需要解决两方面的问题:,输入语句格式的正确;,输入数据格式的
17、正确;,虽然说,在输入语句中的格式控制串与在输出中的意义一样,但在使用时,还是有很多不同点的。,2,36,格式控制串的意义:,%d,等:控制对应于该控制符的变量的数据的类型,转义字符:用于控制输入时的状态控制意义和输出时一致;,普通字符:在输入语句中的普通字符在输入数据是必须原样写的;,思考:,当输入数据的类型与格式说明符不一致时会出现什么现象?,如果在输入数据时,不写输入语句中的普通字符会如何?,2,37,用隐含的分隔符。,语句格式为:,scanf,(“,%d%d,”,&a,&b,),;,输入数据时,在输入数据中用空格或换行符分隔数据。输入数据的格式应为:,3 4,或:,3,4,使用显示分隔
18、符。,语句格式为:,scanf,(,%d,%d,&a,&b,),;,如果在格式控制串中有其它字符,在输入数据时在相应位置应输入与这些字符相同的字符。例:,输入语句的几种格式:,输入结果:,a=3,b=4,3,4,2,38,#include,void main,(),int a,b;,scanf,(“,%d%d“,&a,&b,),;,printf,(“,a=%d,b=%d n”,a,b,),;,变量顺序与输入数据顺序对输入结果的影响;,输入数据:,读入的数据:,输出结果:,输入数据:,读入的数据:,输出结果:,3 5,5 3,a=3,b=5,a=5,b=3,a=3,,,b=5,a=5,,,b=3
19、,2,39,#include,void main,(),int a;float x;,scanf,(“,%d%f”,&a,&x,),;,printf,(“,a=%d,x=%f n”,a,x,),;,格式控制字符对输入结果的影响,输入数据:,读入的数据:,输出结果:,输入数据:,读入的数据:,输出结果:,3 5.6,5.6 3,a=3 x=5.6,a=5 x=0.6,a=3,,,x=5.6,a=5,,,x=0.6,2,40,#include,void main,(),int a,b;,/*,没有显示分格符时*,/,scanf,(“,%d%d“,&a,&b,),;,printf,(“,a=%d,b
20、=%d n”,a,b,),;,/*,有显示分格符时*,/,scanf,(“,%d,,,%d“,&a,&b,),;,printf,(“,a=%d b=%d n”,a,b,),;,格式控制字符之间有无显示分隔符对输入的影响,输入数据:,读入的数据:,输出结果:,输入数据:,读入的数据:,输出结果:,3 5,3,,,5,a=3 b=5,a=3 b=5,a=3,,,b=5,a=3 b=5,3,,,5,a=3 b=,?,a=3,,,b=,?,3 5,a=3 b=,?,a=3 b=,?,2,41,#include,void main,(),int a,b;,scanf,(“,%d%d,“,&a,&b,),
21、;,printf,(“,a=%d,b=%d n”,a,b,),;,scanf,(“,%2d%3d,“,&a,&b,),;,printf,(“,a=%d,b=%d n”,a,b,),;,格式控制字符,%,后面添加域宽与否对输入的影响,输入数据:,读入的数据:,输出结果:,输入数据:,读入的数据:,输出结果:,123 5,12456,a=123 b=5,a=12 b=456,a=123,,,b=5,a=12,,,b=456,124 56,a=12 b=4,a=12,,,b=4,2,42,提示:,格式控制符对输入的结果的影响,还有很多,开动脑筋,可以试验出很多结论,2,43,顺序结构程序设计举例,2
22、,44,void main(),char c1,,,c2,;,char c,;,printf(Please enter a character,:,n),;,c=getchar(),;,c1=c-1,;,c2=c+1,;,printf(%c%c%cn,,,c1,,,c,,,c2),;,例:给出一个大写字母,要求按字母顺序打印出,3,个字母,指定的字母是三个字母中间的一个字母。输入的字母不能为,A,或,Z,。,求解过程,#include stdio.h,输入一个字母。,求出它的前趋和后继。,输出三个字母。,2,45,输入三角形的三边长,求三角形的面积。,分析:三角形面积计算公式:,area=,s
23、(s-a)(s-b)(s-c),s=(a+b+c)/2,安排计算步骤:,写出完整的程序,2,46,解决问题的步骤:,定义变量,area=,s(s-a)(s-b)(s-c),输入:,a,,,b,,,c,;,计算,s,;,计算,area,;,输出,area,;,float,a,,,b,,,c,,,s,,,area,;,scanf(“%f,%f,%f”,&,a,&,b,&,c);,s=(a+b+c)/2.0;,area=sqrt(s*(s-a)*(s-b)*(s-c);,printf(“the area is%fn”,,,area);,2,47,写出完整程序:,#include,#include,v
24、oid main(),float a,,,b,,,c,,,s,,,area;,scanf(“%f,%f,%f”,s=(a+b+c)/2.0;,area=,sqrt(s*(s-a)*(s-b)*(s-c);,printf(“the area is%fn”,,,area);,2,48,设,1990,年我国工业产值是,100,,如果每年以,7.4%,的速度增长,求,20,年后我国的工业产值是多少?,分析:,计算产值的公式是:,安排计算步骤:,写出完整的程序,p,1,=p,0,(1+r),n,其中:,p,1,为,n,年后的产值,,p,0,为初始值,,r,为增长率,,n,为年数。,2,49,解决问题的步
25、骤:,定义变量,:,输入:,p0,,,n,,,r,;,计算,p1,;,输出,p0,,,n,,,r,,,p1,;,float,p1,,,p0,,,r;,p,1,=p,0,(1+r),n,其中:,p,1,为,n,年后的产值,,p,0,为初始值,,r,为增长率,,n,为年数。,int,n;,2,50,写出完整程序:,/*,功能:计算工业产值*,/,#include,#include,void main(),int n;,float p0,p1,r;,scanf(%d,%f,%f,p1=p0*,pow(1+r/100,n),;,printf(p1=%10.4fn,p1);,2,51,例,.,求华氏温度
26、,100F,对应的摄氏温度。,摄氏温度,C=(5/9)(F-32),#include,int main(void),int celsius,fahr;,fahr=100;,celsius=5*(fahr-32)/9.0;,printf(fahr=,%d,celsius=,%d,n,fahr,celsius,);,return 0;,编写程序,输入一个,F,值,输出对应的,C,值。,scanf(“%f”,2,52,扩展阅读,2,53,常用数学库函数,库函数,C,语言处理系统提供事先编好的函数,供用户在编程时调用。,scanf(),printf(),exp(),在相应的系统文件(头文件)中定义一些
27、必需的信息。,#include,命令,用户调用库函数时,将相应的头文件包含到源程序中。,例如,调用,scanf,printf,,需要,#include,调用,sqrt,,需要,#include,2,54,常用数学库函数,平方根函数,sqrt(x),绝对值函数,fabs(x),:,fabs(-3.56),的值为,3.56,幂函数,pow(x,n),:,x,n,pow(1.1,2),的值为,1.21,(即,1.12,),指数函数,exp(x),:,e,x,exp(2.3),的值为,e,2.3,以,e,为底的对数函数,log(x),:,ln x,log(123.45),的值为,ln123.45,,即
28、:,4.815836,以,10,为底的对数函数,log10(x),:,log,10,x,log10(123.45),的值为,2.091491,。,2,55,计算存款的本息,C,语言语句,:,输入存款金额,money,、存期,year,和年利率,rate,,根据公式计算存款到期时的本息合计,sum,(税前),输出时保留,2,位小数。,sum=money(1+rate),year,sum=money*pow(1+rate),year),;,pow(x,n),x,n,#include,#include,void main(void),int money,year;,double rate,sum;,printf(“Enter money:);,scanf(%d,printf(“Enter year:);,scanf(%d,printf(“Enter rate:);,scanf(%,lf,sum=money*pow(1+rate),year);,printf(sum=%.2f,sum);,Enter money:,1000,Enter year:,3,Enter rate:,0.025,sum=,1076.89,56,2025/1/4 周六,2,57,实验二,