第三章 顺序程序设计_第1页
第三章 顺序程序设计_第2页
第三章 顺序程序设计_第3页
第三章 顺序程序设计_第4页
第三章 顺序程序设计_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

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

文档简介

第三章顺序程序设计,顺序程序设计,学习的意义,程序对数据的处理流程程序的主要功能就是对数据的处理,其整个流程主要包括数据的输入、数据的处理、数据的输出。,C程序中如何实现数据输入?,C程序中如何实现数据输出?,写文章有文章的结构建房子有房子的结构制造机械产品由机械产品的结构那么编写程序是否有程序的结构呢?,YES!,本章讨论,第4章讨论,第5章讨论,顺序程序设计,学习的意义,掌握c语句的种类;掌握字符数据的非格式化输入输出方法;掌握各种类型数据的格式化输入输出方法;理解三种程序控制结构的流程图;学会简单顺序程序的设计;,学习目标,顺序程序设计,字符数据的输入输出,格式输入输出,流程图与算法的结构化描述,顺序程序设计举例,学习内容,顺序程序设计,C语句的类型,4、空语句,5、控制语句,6、复合语句,2、表达式语句,C语句的类型,3、函数调用语句,1、说明性语句,说明性语句,C语句的类型,对程序中使用的变量、数组、函数等操作对象进行定义、声明的描述语句。只起说明作用,不产生可执行的机器指令代码。,例如:inta,b;floatfunction(intx,inty);,由表达式加上分号“;”组成。其一般形式为:表达式;,a=10赋值表达式a=10;赋值语句k+表达式k+;表达式语句,表达式语句,C语句的类型,由函数名、实际参数加上分号“;”组成。其一般形式为:函数名(实际参数表);,printf(CProgram)函数调用;printf(“CProgram”);函数调用语句其功能是输出字符串CProgram。,函数调用语句,while(getchar()!=n);本语句的功能是,只要从键盘输入的字符不是回车则重新输入。这里的循环体为空语句。,只有分号“;”组成的语句称为空语句。空语句是什么也不执行的语句。在程序中空语句可用来作空循环体。,空语句,用来实现一定的控制功能的语句称为控制语句。C语言用控制语句来实现选择结构和循环结构。C语言有九种控制语句。可分成以下三类:,C语句的类型,控制语句,C语句的类型,说明:(1)“”后不加分号(2)语法上和单一语句相同(3)复合语句可嵌套(4)复合语句内定义的变量只能在复合语句内使用。,用括起来的一组语句。,一般形式为:数据说明部分;执行语句部分;,复合语句,例:inta=2,b=3,c;c=a+b;printf(c=%dn,c);,C语句的类型,例:#includevoidmain()intx=10,y=20,z;z=x+y;intz;z=x*y;printf(z=%dn,z);/输出复合语句中z的值printf(z=%dn,z);/输出复合语句外z的值,输出结果:z=200z=30,格式输入输出,流程图与算法的结构化描述,顺序程序设计举例,学习内容,顺序程序设计,1、字符数据的输出,格式:putchar(c);/应包含的.h文件为stdio.h功能:在显示器上输出字符c。返值:正常,返回字符的代码值;出错,返回EOF(-1)。说明:该函数带有一个参数c,它为要显示字符的ASCII码值,有一个int型返回值。,字符数据的输入输出,例:putchar函数的应用,#includevoidmain()inta=65;charb=B;putchar(a);putchar(n);/起回车换行作用putchar(b);,字符数据的输入输出,字符数据的输入输出,2.字符数据的输入,格式:getchar();/应包含的.h文件为stdio.h功能:从键盘读一字符返值:正常,返回读取字符的ASCII码值;出错,返回EOF(-1)。说明:以回车符为输入结束条件;输入多个字符时,返回第一个字符的值;输入字符回显。,#includevoidmain()charch1,ch2;inta;ch1=getchar();ch2=getchar();scanf(%d,字符数据的输入输出,例:getchar函数的应用,流程图与算法的结构化描述,顺序程序设计举例,学习内容,顺序程序设计,格式输入输出,格式化输出printf,一般格式,printf(格式控制字符串,表达式1,表达式2,表达式n);,功能,按照“格式控制字符串”的要求,将表达式1,表达式2,表达式n的值显示在计算机屏幕上。,说明,格式控制字符串用于指定输出格式。它包含两类字符:常规字符:包括可显示字符和用转义字符表示的字符。格式控制符:以%开头的一个或多个字符,以说明输出数据的类型、形式、长度、小数位数等。其格式为:,%修饰符格式转换字符,格式输入输出,例:longintx=0 x8AB6;printf(“TheValueofxis%ldn”,x);,常规字符,常规字符(转义符),格式控制符(修饰符),格式控制符(格式转换符),格式输入输出,printf使用时的注意事项,printf(“howareyou?n”);/只有一个字符串参数,输出为:howareyou?printf(“howoldareyou?n”,20);/带有两个参数,20没有意义,输出为:howoldareyou?,格式控制字符串可以不包含任何格式控制符。,当格式控制字符串中既含有常规字符,又包含有格式控制符时,则表达式的个数应与格式控制符的个数一致。此时,常规字符原样输出,而格式控制符的位置上输出对应的表达式的值,其对应的顺序是:从左到右的格式控制符对应从左到右的表达式。,格式输入输出,printf(5+3=%d,5-3=%d,5*3=%d,5+3,5-3);输出结果将是:5+3=8,53=2,5*3=-28710,输出随机,charch=A;printf(ch=%c,ch);/输出结果:ch=A(以字符形式输出)printf(ch=%d,ch);/输出结果:ch=65(以A字符的ASCII码形式输出),printf使用时的注意事项,如果格式控制字符串中格式控制符的个数多于表达式的个数,则余下的格式控制符的值将是不确定的。,不同类型的表达式要使用不同的格式转换符,同一表达式如果按照不同的格式转换符来输出,其结果可能是不一样的。,格式输入输出,printf函数中的格式转换字符及其含义,格式输入输出,printf函数中的格式转换字符及其含义,格式输入输出,printf函数中的格式转换字符及其含义,格式输入输出,:表示可选项,可缺省。:表示输出的数据左对齐,缺省时是右对齐。:输出正数时,在数的前面加上号。数字0:右对齐时,如果实际宽度小于width,则在左边的空位补0。width:无符号整数,表示输出整数的最小域宽(即占屏幕的多少格)。若实际宽度超过了width,则按照实际宽度输出。.precision:无符号整数,表示至少要输出precision位。若整数的位数大于precision,则按照实际位数输出,否则在左边的空位上补0。字母l:如果在d的前面有字母l(long),表示要输出长整型数据。字母h:如果在d的前面有字母h(short),表示要输出短整型数据。,#includevoidmain()inta=123;longL=65537;printf(12345678901234567890n);printf(a=%d-(a=%d)n,a);printf(a=%2d-(a=%2d)n,a);printf(a=%6d-(a=%6d)n,a);printf(a=%+2d-(a=%+2d)n,a);printf(a=%+6d-(a=%+6d)n,a);printf(a=%-2d-(a=%-2d)n,a);printf(a=%-6d-(a=%-6d)n,a);printf(a=%02d-(a=%02d)n,a);printf(a=%06d-(a=%-06d)n,a);printf(a=%-02d-(a=%-02d)n,a);printf(a=%-06d-(a=%-06d)n,a);,12345678901234567890a=123-(a=%d)a=123-(a=%2d)a=123-(a=%6d)a=+123-(a=%+2d)a=+123-(a=%+6d)a=123-(a=%-2d)a=123-(a=%-6d)a=123-(a=%02d)a=000123-(a=%06d)a=123-(a=%-02d)a=123-(a=%-06d),运行结果:,#includevoidmain()inta=123;longL=65537;printf(12345678901234567890n);printf(a=%+02d-(a=%+02d)n,a);printf(a=%+06d-(a=%+06d)n,a);printf(a=%2.2d-(a=%2.2d)n,a);printf(a=%3.2d-(a=%3.2d)n,a);printf(a=%6.2d-(a=%6.2d)n,a);printf(a=%6.5d-(a=%6.5d)n,a);printf(a=%6.7d-(a=%6.7d)n,a);printf(a=%+6.4d-(a=%6.6d)n,a);printf(a=%+6.7d-(a=%-6.5d)n,a);printf(a=%-6.4d-(a=%-6.7d)n,a);printf(a=%-6.7d-(a=%-6.7d)n,a);printf(L=%ld-(L=%ld)n,L);printf(L=%hd-(L=%hd)n,L);,12345678901234567890a=+123-(a=%+02d)a=+00123-(a=%+06d)a=123-(a=%2.2d)a=123-(a=%3.2d)a=123-(a=%6.2d)a=00123-(a=%6.5d)a=0000123-(a=%6.7d)a=+0123-(a=%+6.4d)a=+0000123-(a=%+6.7d)a=0123-(a=%-6.4d)a=0000123-(a=%-6.7d)L=65537-(L=%ld)L=1-(L=%hd),运行结果:,L是一长整型数65537,其值为十六进制0X00010001,所以要将其转换成短整型,即取低16位0 x0001,将其输出,故输出为1。,格式输入输出,:表示可选项,可缺省。|:表示互斥关系。#:表示当以八进制形式输出数据(%o)时,在数字前输出0;当以十六进制形式输出数据(%x或%X)时,在数字前输出0 x或0X。.precision的含义与前面介绍的相同,但要注意,在TC下,precision所指定的位数也包含了0 x或0X所占的位数,可在VC下,则不包含0 x或0X所占的位数。其它字段的含义与前面介绍的相同。,#includevoidmain()inta=-1;unsignedu=32767;unsignedlongL=-32768;printf(a=%d,a=%u-(a=%d,a=%u)n,a,a);printf(a=%hx,a=%X-(a=%hx,a=%X)n,a,a);printf(u=%o,u=%X-(u=%o,u=%X)n,u,u);printf(u=%#010X-(u=%#010X)n,u);printf(u=%#10.10X-(u=%#10.10X)n,u);printf(L=%lX-(L=%lX)n,L);printf(L=%-#14.10X-(L=%-#14.10X)n,L);,a=-1,a=65535-(a=%d,a=%u)a=ffff,a=FFFF-(a=%hx,a=%X)u=77777,u=7FFF-(u=%o,u=%X)u=0X00007FFF-(u=%#010X)u=0X00007FFF-(u=%#10.10X)L=FFFF8000-(L=%lX)L=0X00008000-(L=%-#14.10X),运行结果(在TC3.0下):,格式输入输出,:表示可选项,可缺省。|:表示互斥关系。#:必须输出小数点。.precision:规定输出实数时,小数部分的位数。l:输出double型数据(缺省时也是输出double型数据)。L:输出longdouble型数据。其它字段的含义与前面介绍的相同。,#includevoidmain()doublef=2.5e5;printf(12345678901234567890n);printf(f=%15f-(f=%15f)n,f);printf(f=%015f-(f=%015f)n,f);printf(f=%-15.0f-(f=%-15.0f)n,f);printf(f=%#15.0f-(f=%#15.0f)n,f);printf(f=%+15.4f-(f=%+15.4f)n,f);printf(f=%15.4E-(f=%15.4E)n,f);,12345678901234567890f=250000.000000-(f=%15f)f=00250000.000000-(f=%015f)f=250000-(f=%-15.0f)f=250000.-(f=%#15.0f)f=+250000.0000-(f=%+15.4f)f=2.5000E+005-(f=%#15.4E),运行结果:,格式输入输出,:表示可选项,可缺省。.precision:表示只输出字符串的前precision个字符。其它字段的含义与前面介绍的相同。,#includevoidmain()charch=A;printf(12345678901234567890n);printf(ch=%c-(ch=%c)n,ch);printf(ch=%4c-(ch=%4c)n,ch);printf(ch=%-4c-(ch=%-4c)n,ch);printf(ch=%04c-(ch=%04c)n,ch);printf(st=%s-(st=%s)n,CCNU);printf(st=%6s-(st=%6s)n,CCNU);printf(st=%06.3s-(st=%06.3s)n,CCNU);printf(st=%-6.7s-(st=%-6.7s)n,CCNU);printf(st=%-3.4s-(st=%-6.7s)n,CCNU);,12345678901234567890ch=A-(ch=%c)ch=A-(ch=%4c)ch=A-(ch=%-4c)ch=000A-(ch=%04c)st=CCNU-(st=%s)st=CCNU-(st=%6s)st=000CCN-(st=%06.3s)st=CCNU-(st=%-6.7s)st=CCNU-(st=%-3.4s),运行结果:,格式输入输出,辅助格式控制符(修饰符)小结,格式输入输出,辅助格式控制符(修饰符)小结,辅助格式控制符(修饰符)小结,格式输入输出,此外,在使用printf函数时还要注意以下几点:格式控制字符串后面表达式的个数一般要与格式控制字符串中的格式控制符的个数相等。格式转换符中,除了X、E、G以外,其它均为小写。表达式的实际数据类型要与格式转换符所表示的类型相符,printf函数不会进行不同数据类型之间的自动转换。象整型数据不可能自动转换成浮点型数据,浮点型数据也不可能自动转换成型数数据。,#includevoidmain()inta=10,b=100;floatf=2;printf(a=%d,b=%dn,f,b);printf(a=%f,b=%dn,a,b);printf(a=%ld,b=%dn,120,b);,格式输入输出,格式化输入scanf,一般格式,scanf(“格式控制字符串”,变量1的地址,变量2的地址,变量n的地址);,功能,在格式控制字符串的控制下,接受用户的键盘输入,并将输入的数据依此存放在变量1、变量2、变量n中。,格式控制符与后续参数中的变量地址的对应关系,格式输入输出,格式化输入scanf,格式输入输出,scanf函数中的格式转换字符及其含义,scanf函数的格式控制符,%*widthl|hType,一般形式:,:表示可选项,可缺省。|表示互斥关系。width:指定输入数据的域宽,遇空格或不可转换字符则结束。Type:各种格式转换符(参照printf)。*:抑制符,输入的数据不会赋值给相应的变量。l:用于d、u、o、x|X前,指定输入为long型整数;用于e|E、f前,指定输入为double型实数。h:用于d、u、o、x|X前,指定输入为short型整数。,格式输入输出,格式输入输出,scanf使用时的注意事项,如果相邻两个格式控制符之间,不指定数据分隔符(如逗号、冒号等),则相应的两个输入数据之间,至少用一个空格分隔,或者用Tab键分隔,或者输入一个数据后,按回车,然后再输入下一个数据。,例如:scanf(%d%d,假设给num1输入12,给num2输入36,则正确的输入操作为:1236或者1236使用“”符号表示按回车键操作,在输入数据操作中的作用是,通知系统输入操作结束。,格式输入输出,scanf使用时的注意事项,格式控制字符串中出现的常规字符(包括转义字符),务必原样输入。,例如:scanf(num1=%d,num2=%dn,假设给num1输入12,给num2输入36,正确的输入操作为:num1=12,num2=36n,例如:scanf(%d:%d:%d,假设给h输入12,给m输入30,给s输入10,正确的输入操作为:12:30:10,格式输入输出,例如:将scanf(num1=%d,num2=%dn,例如:scanf(%3c%3c,假设输入abcdefg,则系统将读取的“abc”中的a赋给变量ch1;将读取的def中的d赋给变量ch2。,scanf使用时的注意事项,为改善人机交互性,同时简化输入操作,在设计输入操作时,一般先用printf()函数输出一个提示信息,再用scanf()函数进行数据输入。,当格式控制字符串中指定了输入数据的域宽width时,将读取输入数据中相应的width位,但按需要的位数赋给相应的变量,多余部分被舍弃。,格式输入输出,scanf使用时的注意事项,当格式控制字符串中含有抑制符*时,表示本输入项对应的数据读入后,不赋给相应的变量(该变量由下一个格式指示符输入)。,例如:scanf(%2d%*2d%3d,假设输入123456789输出结果为:num1=12,num2=567。,使用格式控制符%c输入单个字符时,空格和转义字符均作为有效字符被输入。,例如:scanf(%c%c%c,假设输入:ABC,则系统将字母A赋值给ch1,空格赋值给ch2,字母B赋值给ch3。,格式输入输出,scanf使用时的注意事项,例如:scanf(%d,a);如果输入为:12a3,a的值将是12。,例如:scanf(%d,%d,如果输入为:12a34,那么a的值将是12,b的值将无法预测。正确的输入是:12,34,输入数据时,遇到以下情况,系统认为该数据结束:遇到空格,或者回车键,或者Tab键。遇到输入域宽度结束。例如“%3d”,只取3列。遇到非法输入。比方说,在输入数值数据时,遇到字母等非数值符号。,当一次scanf调用需要输入多个数据项时,如果前面数据的输入遇到非法字符,并且输入的非法字符不是格式控制字符串中的常规字符,那么,这种非法输入将影响后面数据的输入,导致数据输入失败。,例:输入一学生的学号(8位数字)、生日(年-月-日)、性别(M:男,F:女)及三门功课(语文、数学、英语)的成绩,现要求计算该学生的总分和平均分,并将该学生的全部信息输出(包括总分、平均分)。,#includevoidmain()unsignedlongno;/学号unsignedintyear,month,day;/生日(年、月、日)unsignedcharsex;/性别floatchinese,math,english;/语文、数学、英语成绩floattotal,average;/总分、平均分printf(inputthestudentsNO:);scanf(%8ld,printf(inputthestudentsScores(chinese,math,english):);scanf(%f,%f,%f,假设输入:inputthestudentsNO:20040101inputthestudentsBirthday(yyyy-mm-dd):1987-9-8inputthestudentsSex(M/F):MinputthestudentsScores(chinese,math,english):90,80,90,输出结果:=NO=birthday=sex=chinese=math=english=total=average200401011987-09-08M90.080.090.0260.086.7,流程图与算法的结构化描述,顺序程序设计举例,学习内容,顺序程序设计,沃思公式,程序是解决某种问题的一组指令的有序集合。,对数据的描述,对操作的描述,流程图与算法的结构化描述,流程图与算法的结构化描述,例:输入三个数,然后输出其中最大的数。总体思路:首先,得先有个地方装这三个数,我们定义三个变量A、B、C,将三个数依次输入到A、B、C中,另外,再准备一个MAX装最大数。由于计算机一次只能比较两个数,我们首先把A与B比,大的数放入MAX中,再把MAX与C比,又把大的数放入MAX中。最后,把MAX输出,此时MAX中装的就是A、B、C三数中最大的一个数。具体步骤:(1)输入A、B、C。(2)A与B中大的一个放入MAX中。(3)把C与MAX中大的一个放入MAX中。(4)输出MAX,MAX即为最大数。其中的(2)、(3)两步仍不明确,无法直接转化为程序语句,可以继续细化:(2)把A与B中大的一个放入MAX中,若AB,则MAXA;否则MAXB。(3)把C与MAX中大的一个放入MAX中,若CMAX,则MAXC。,算法最后可以写成:(1)输入A,B,C。(2)若AB,则MAXA;否则MAXB。(3)若CMAX,则MAXC。(4)输出MAX,MAX即为最大数,流程图与算法的结构化描述,猴子吃桃问题:有一堆桃子不知数目,猴子第一天吃掉一半,觉得不过瘾,又多吃了一只,第二天照此办理,吃掉剩下桃子的一半另加一个,天天如此,到第十天早上,猴子发现只剩一只桃子了,问这堆桃子原来有多少个?总体思路:假设第一天开始时有a1只桃子,第二天有a2只,第9天有a9只,第10天是a10只,在a1,a2,,a10中,只有a10=1是知道的,现要求a1,而我们可以看出,a1,a2,,a10之间存在一个简单的关系:a9=2*(a10+1)a8=2*(a9+1)a1=2*(a2+1)也就是:ai=2*(ai+1+1)i=9,8,7,6,1这就是此题的数学模型。再考察上面从a9,a8直至a1的计算过程,这其实是一个递推过程,这种递推的方法在计算机解题中经常用到。另一方面,这九步运算从形式上完全一样,不同的只是ai的下标而已。由此,我们引入循环的处理方法,并统一用a0表示前一天的桃子数,a1表示后一天的桃子数。,算法最后可以写成:(1)a1=1(第10天的桃子数,a1的初值)i=9(计数器初值为9)(2)a0=2*(a1+1)(计算当天的桃子数)(3)a1=a0(将当天的桃子数作为下一次计算的初值)(4)i=i-1(5)若i=1,转(2)(6)输出a0的值其中(2)(5)步为循环,流程图与算法的结构化描述,流程图是运用几何图框来表示各种操作,流程图与算法的结构化描述,流程图与算法的结构化描述,算法的结构化描述,流程图与算法的结构化描述,3种结构的共同特点:,只有一个入口。只有一个出口。结构内的每一部分都有机会被执行到。结构内不存在“死循环”。,流程图与算法的结构化描述,1973年美国学者I.Nassi和B.Shneiderman提出N-S结构化流程图。,(1)顺序结构,(2)分支结构,(3)循环结构,流程图与算法的结构化描述,流程图与算法的结构化描述,顺序程序设计举例,学习内容,顺序程序设计,顺序程序设计举例,例1、数据交换。从键盘输入a、b的值,输出交换以后的值。,设计思路:在计算机中交换变量a和b的值,不能只写下面两个赋值语句a=b;b=a;正确的交换方法:c=a;a=b;b=c;,#includemain()inta,b,c;printf(ninputa,b:);scanf(%d,%d,程序运行结果:inputa,b:32,57beforeexchange:a=32b=57afterexchange:a=57b=32,顺序程序设计举例,例2、已知三条边a、b、c,求三角形面积。,设计思路:整型变量a、b、c代表三角形的三条边。实型变量s、area用于计算面积。,顺序程序设计举例,#include#includemain()inta,b,c;floats,area;scanf(%d,%d,%d,程序运行结果:3,4,5area=6.000,顺序程序设计举例,例3:从键盘输入大写字母,用小写字母输出,设计思路:将大写字母的ASCII码+32=对应小写字母ASCII码,#includemain()charc1,c2;c1=getchar();printf(%c,%dn,c1,c1);c2=c1+32;printf(%c,%dn,c2,c2);,程序运行结果:输入:A输出:A,65a,97,顺序程序设计举例,例4:任意从键盘输入一个三位整数,要求正确地分离出它的个位、十位和百位数,并分别在屏幕上输出。程序

温馨提示

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

评论

0/150

提交评论