《c语言第篇顺序结构程序设计.pptx》由会员分享,可在线阅读,更多相关《c语言第篇顺序结构程序设计.pptx(35页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、一、什么是算法 算法是解决一个问题采取的方法和步骤的描述。1有穷性:算法须在执行有穷多个计算步骤后终止2确定性:算法的每个步骤必须都是精确定义的、无二义性的;3有效性:算法中的每一个步骤必须有效地执行,并能得到确定结果;4输入:一个算法中可以没有输入,也可以有一个或多个输入信息5输出:一个算法应有一个或多个输出算法的特性:第1页/共35页(一)自然语言与伪代码表示算法自然语言就是指人们日常使用的语言,可以是汉语、英语或其它语言。伪代码是用介于自然语言和计算机语言之间的文字和符号(包括数学符号)来描述算法。二、算法的表示第2页/共35页例的伪代码表示如下:Begin(算法开始)输入 A,B,C
2、IF AB 则 AMax 否则 BMax IF CMax 则 CMaxPrint MaxEnd(算法结束)例:输入三个数,然后输出其中最大的数。算法可以写成:(1)输入A,B,C。(2)若AB,则MAX A;否则MAXB。(3)若CMAX,则MAX C。(4)输出MAX,MAX即为最大数。结构化程序的算法描述:第3页/共35页1常用的流程符号l起止框:表示算法的开始和结束。l处理框:表示初始化或运算赋值等操作。l输入输出框:表示数据的输入输出操作。l判断框:表示根据一个条件成立与否,决定执行两种不同操作中的其中一个。l流程线:表示流程的方向。(二)用流程图表示算法第4页/共35页用流程图表示如
3、下图所示:例:输入三个数,然后输出其中最大的数。第5页/共35页(三)用NS流程图表示算法第6页/共35页C语言中实现顺序结构的语句:赋值语句、变量声明语句、符号常量声明语句等。三、赋值语句 赋值语句是由赋值表达式再加分号构成的表达式语句。其一般形式为:变量=表达式;1赋值符“=”右边的表达式可以又是一个赋值表达式因此,下述形式是正确的:变量=(变量=表达式);其展开之后的一般形式为:变量=变量=表达式;例如:a=b=c=d=e=5;按照赋值运算符的右结合性,因此实际上等效于:e=5;d=e;c=d;b=c;a=b;第7页/共35页2.注意变量说明中给变量赋初值和赋值语句的区别。给变量赋初值是
4、变量说明的一部分,赋初值后的变量与其后的其它同类变量之间仍必须用逗号间隔,而赋值语句则必须用分号结尾。3.在变量说明中,不允许连续给多个变量赋初值。如下述说明是错误的:int a=b=c=5;必须写为 int a=5,b=5,c=5;而赋值语句允许连续赋值。4.注意赋值表达式和赋值语句的区别。赋值表达式是一种表达式,它可以出现在任何允许表达式出现的地方,而赋值语句则不能。下述语句是合法的:if(x=y+5)0)z=x;下述语句是非法的:if(x=y+5;)0)z=x;说明:右边的表达式可以是变量、常量、函数调用等表达式。第8页/共35页5语句中的“=”称为赋值号,它不同于数学中的等号,如A=A
5、+1在数学中是不成立的,但在程序设计中表示取变量A单元中的值,将其加1后,仍然放回到A变量的存储单元。6、赋值符号“=”左边一定只能是变量名,不能是常量、符号常量、表达式。例如:z=x+y;是合法的。下面的赋值语句都是错的:5=x;/*左边是常量*/sin(x)=20;/*左边是函数调用,即是表达式*/第9页/共35页7赋值符号“=”两边的数据类型一般要求应一致。如果两边的类型不同,则以左边变量或对象属性的数据类型为基准,如果右边表达式结果的数据类型能够转换成左边变量或对象属性的数据类型,则先强制转换后,赋值给左边的变量。若都是数值型,但精度不同,强制转换成左边变量的数据精度。例如,有定义in
6、tx;floaty;x=3.5415926;/*取其整数赋值给x,x的值为3*/y=123;/*将整数123转换实数123.0,赋值给y,执行后,y的值是123.0(小数点补六个0)*/第10页/共35页数据输入/输出的概念内存RAM从键盘将数据输入从数据文件读入将数据输出到屏幕将数据输出到文件数据输入/输出是相对计算机内存第11页/共35页在语言中所有的数据输入输出都是由库函数完成的。因此都是函数语句。在C语言中使用库函数时,要使用预编译命令#include将相关的头文件(*.h)包含到用户源文件中。使用形式:#include“头文件”或#include说明:1.标准输入/输出头文件是:st
7、dio.h2.printf()和scanf()函数不需要头包含文件3.常用的输入输出函数有:printf()scanf()putchar()getchar()第12页/共35页四、数据格式输入scanf()函数 scanf()的功能:从键盘上输入数据,该输入数据按指定的输入格式被赋给相应的输入项。函数一般格式为:scanf(控制字符串,输入项地址列表);控制字符串规定数据的输入格式,其内容由格式说明和普通字符两部分组成。输入项地址列表由一个或多个变量地址组成,各变量地址之间用逗号“,”分隔。scanf()中各变量要加地址操作符,表示如下:&变量名scanf(%d,%d,%c,&a,&b,&ch
8、);第13页/共35页控制字符串的两个组成部分:格式说明和普通字符。1.格式说明格式说明规定输入项中的变量以何种类型的数据格式被输入,形式是:%各个格式字符及其意义见表3-3。表3-3输入格式字符格式字符意义举例输入形式d,i输入一个十进制整数scanf(%d,&a)15o输入一个八进制整数scanf(%o,&a)015X(x)输入一个十六进制整数scanf(%x,&a)0 x15f输入一个小数形式的浮点数scanf(%f,&x)35680E(e)输入一个指数形式的浮点数scanf(%e,&x)3.568e+3c输入一个字符scanf(%c,&ch)As输入一个字符串scanf(%s,ps)A
9、BCD第14页/共35页各修饰符是可选的,这些修饰符是:(1)字段宽度(2)l和h:可与d、o、x一起使用,l表示输入数据为长整数,h表示输入数据为短整数。(3)字符*:表示按规定格式输入但不赋予相应变量,作用是跳过相应的数据。例:scanf(“%3d”,&a);输入123456,按宽度输入一个整数123赋给变量a。例:scanf(%ld%hd,&x,&i);x按长整型读入,i按短整数读入。例如:scanf(“%d%*d%d”,&x,&y,&z);执行该语句,若输入为“”结果为x=1,y=3,z未赋值,被跳过。第15页/共35页/*EX3-11.C*/#includemain()intx,y;
10、scanf(%2d%*3d%4d,&x,&y);/*注意%*3d的作用*/printf(nx=%d,y=%dn,x,y);第16页/共35页2.普通字符普通字符包括空格、转义字符和可打印字符。(1)空格在有多个输入项时,一般用空格或回车作为分隔符,若以空格作分隔符,则当输入项中包含字符类型时,可能产生非预期的结果,(2)可打印字符例如:scanf(%d%c,&a,&ch);输入32 q期望a=32,ch=q,但实际上,分隔符空格被读入并赋给ch。例如:scanf(%d,%d,%c,&a,&b,&ch);当输入为:1,2,q 即:a=1,b=2,ch=q若输入为1 2 q 除a=1正确赋值外,对
11、b与ch的赋值都不能正确赋值。这些不打印字符应是输入数据分隔符,scanf在读入时自动去除与可打印字符相同的字符。第17页/共35页使用scanf函数还必须注意以下几点:(1)scanf函数中没有精度控制。如:scanf(“%5.2f”,&a);是非法的。(2)在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔则可用空格或回车作间隔.(3)如果格式控制串中有非格式字符则输入时也要输入该非格式字符。例如:scanf(%d,%d,%d,&a,&b,&c);其中用非格式符“,”作间隔符,故输入时应为:5,6,7又如:scanf(a=%d,b=%d,c=%d,&a,&b,&c);则
12、输入应为a=5,b=6,c=7第18页/共35页五、数据格式输出printf()函数 格式化输出函数printf()功能:按控制字符串规定的格式,向输出设备输出各输出项其基本格式为:printf(“控制字符串”,输出项列表)输出项可以是常量、变量、表达式,其类型与个数必须与控制字符串中格式字符的类型、个数一致、当有多个输出项时,各项之间用逗号分隔。控制字符串由格式说明和普通字符两部分组成。第19页/共35页1格式说明一般格式为:%格式字符规定了输出项的输出格式,常用格式字符见表3-2格式字符意义举 例输出结果d按十进制整数输出printf(%d,a)65o按八进制整数输出printf(%o,a
13、)101x 或X按十六进制整数输出printf(%x,a)41u按无符号整数输出printf(%u,a)65c按字符型输出printf(%c,a)As按字符串输出printf(%s,abc)abcf按浮点型小数输出printf(%f,x)3.141593E(或e)按科学计数法输出printf(%e,x)3.141593e+00g按e和f格式中较短的一种输出printf(%g,x)3.141593表3-2输出格式字符第20页/共35页(1)字段宽度修饰符该修饰符用于确定数据输出的宽度、精度、小数位数、对齐方式等,用于产生更规范整齐的输出,下表列出了字段宽度修饰符。修饰符格式说明意义m%md以宽度
14、m输出整型数,不足m时,左补空格0m%0md以宽度m输出整型数,不足m时,左补零m.n%m.nf以宽度m输出实型小数,小数位为n位字段宽度修饰符第21页/共35页例如:void main()int a=123;float x=12.345678;printf(%5d,%5.2fn,a,x);printf(%2d,%2.1fn,a,x);程序的运行结果如下:说明:当指定宽度小于数据的实际宽度时,对整数,按该数的实际宽度输出。对浮点数,相应小数位的数四舍五入。若度宽小于等于浮点数整数部分的宽度,则该浮点数按实际位数输出,但小数位数仍遵守宽度修饰符给出的值。第22页/共35页(2)对齐方式修饰符一般
15、的输出数据为右对齐格式,加“-”号,变为“左对齐”方式。例如:voidmain()inti=123;floata=12.34567;printf(%6d%10.4fn,i,a);printf(%-6d%10.4fn,i,a);printf(%6d%-10.4fn,i,a);程序运行结果如图所示:第23页/共35页(3)l和h可以与输出格式字符d、f、u等连用,以说明是用long型或short型格式输出数据,如:hd 短整型lf 双精度型ld 长整型hu 无符号短整型2普通字符普通字符包括可打印字符和转义字符。v可打印字符是一些说明字符,这些字符按原样显示在屏幕上v转义字符是不可打印的字符,它们
16、其实是一些控制字符,控制产生特殊的输出效果。常用的有“t”,“n”,其中t为水平制表符,作用是跳到下一个水平制表位,“n”为回车换行符,遇到“n”,显示自动换到新的一行。第24页/共35页例如:voidmain()inti=123;longn=456;floata=12.34567,y=20.5;printf(%d=4dta=%7.4fntn=%ldn,i,a,n);printf(y=%5.2f%n,y);程序运行的输出结果:第25页/共35页【注意】(1)输出项从右向左计算后,按格式说明的顺序、类型和要求对应输出。格式说明和输出项的个数类型应相同,如不匹配系统不能正确输出格式说明的个数少于输
17、出项个数,多余的输出项将不输出;格式说明的个数多于输出项个数,多余的格式说明将输出随机的值。整型数据按%f输出或者实型数据按%d输出,均出现输出错误结果。第26页/共35页(2)格式字符除X(表示输出的十六进制数用大写字母输出)、E(表示输出的指数e用大写字母E输出)、G(表示若选用指数形式输出,则用大写字母E输出)外,必须是小写字母。如%d不能写成%D。(3)若想输出字符“%”,则在格式字符串中用连续两个%表示。如:printf(“%f%”,1.0/4);则输出:0.250000%【注意】第27页/共35页试编写求梯形面积的程序,数据由键盘输入。分析:设梯形上底为A,下底为B,高为面职为,则
18、S=(AB)*2程序如下:voidmain()floata,b,h,s;printf(pleaseinputa,b,h:);scanf(%f%f%f,&a,&b,&h);s=0.5*(a+b)*h;printf(a=%6.3fb=%6.3fh=%6.3fn,a,b,h);printf(s=%8.4fn,s);第28页/共35页六、字符数据非格式输入/输出函数 1字符输入函数getchar()getchar()函数的格式:getchar();getchar()函 数 的 作 用:从 系 统 的 输 入 设 备 键 盘 输 入 一 个 字 符。从功能角度来看,scanf()函数可以完全代替getc
19、har()函数。例:char c1;则c1=getchar();可使用等价语句:scanf(%c,&c1);第29页/共35页说明:(1)getchar()函数一次只能返回一个字符,即调用一次只能输入一个字符。(2)程序第一次执行getchar()函数时,系统暂停等待用户输入,直到按回车键结束,如果用户输入了多个字符,则该函数只取第一个字符,多余的字符(包括换行符n)存放在键盘缓冲区中,如果程序再一次执行getchar()函数,则程序就直接从键盘缓冲区读入,直到读完后,如果还有getchar()函数才会暂停,再次等待用户输入。第30页/共35页2字符输出函数putchar()putchar()
20、函数的格式:putchar(ch);该函数的功能是向显示器终端输出一个字符。其中,ch可以是一个字符变量或常量,也可以是一个转义字符。说明:(1)putchar()函数只能用于单个字符的输出,且一次只能输出一个字符。(2)从功能角度printf()函数可以完全代替putchar()函数,其等价形式:printf(%c,ch)。第31页/共35页例输入一个字符,回显该字符并输出其ASCII码值。#includevoidmain()charch1,ch2;ch1=getchar();ch2=getchar();putchar(ch1);putchar(ch2);printf(%cn%c,ch1,c
21、h2);程序运行后,若ch1、ch2分别得到字符A、B,应输入AB,如果输入A,则实际上ch1被赋值为字符A,ch2被赋值为字符换行符n第32页/共35页【例3-16】从键盘上输入一个英文小写字母,编程输出该字母所对应的ASCII码和所对应的大写字母【分析】在ASCII字符集中,大写字母AZ是连续的(ASCII值从6590),小写字母az也是连续的(ASCII值从97122)。因此每对字母的ASCII码值差是相同的,都是32,即a-A、b-B、c-C、z-Z都是32。所以将小写字母的ASCII码值减去32,则得到的是所对应的大写字母ASCII码值。同理,将大写字母的ASCII码值加上32,则得到的是所对应的小写字母ASCII码值。第33页/共35页上机内容:第2章课后习题(其中读程序写运行结果题要上机验证)P44 例3-15,例3-17,例3-18,例3-19,例3-20第34页/共35页感谢您的欣赏!第35页/共35页