资源描述:
《《顺序结构》课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
第三章顺序结构程序设计湖南工业大学计算机与通信学院湖南省普通高等学校省级精品课程《C语言程序设计》 目录一种多方互动式学教系统(发明专利)问题提出一种多方互动式学教系统(发明专利)C语言的基本语句一种多方互动式学教系统(发明专利)数据输入与输出一种多方互动式学教系统(发明专利)算法与程序实现一种多方互动式学教系统(发明专利)总结与扩展 学习目标:了解C语言程序的结构。掌握基本语句。掌握格式输入输出函数的用法。掌握字符输入输出函数的用法。了解最简单的C顺序程序编写方法。本章重点、难点※:语句的概念格式输入输出函数的用法※字符输入输出函数的用法※学习目标、重点、难点 3.1问题提出顺序结构是最简单的一种结构,即按书写的先后顺序执行它所包含的内容。循环结构选择结构顺序结构3种基本结构BA顺序结构中的语句只执行一次 3.1问题提出计算机完成一个任务的具体步骤设计程序,也就是设计解题步骤算法01将描述好的算法输入计算机程序输入03编写程序02利用一种计算机能理解的语言来描述算法 3.1问题提出图3-1C程序的构成C程序的构成 C语言有九种控制语句。可分成以下三类:(1).条件判断语句:if语句、switch语句;(2).循环执行语句:dowhile语句、while语句、for语句;(3).转向语句:break语句、goto语句(此语句尽量少用)、continue语句、return语句。3.2C语言的基本语句C程序的执行部分是由语句组成的。程序的功能也是由执行语句实现的。C语句:以“;”作分隔符,编译后产生机器指令。控制语句用于控制程序的流程,以实现程序的各种结构方式。它们由特定的语句定义符组成。由表达式加上分号“;”组成。其一般形式为:表达式;执行表达式语句就是计算表达式的值。表达式语句任何表达式都可以加上分号而成为语句。例如:y+z是一个加法表达式y+z; 加法运算语句,但计算结果不能保留,无实际意义;i++; 自增1语句,i值增1。x=y+z; 赋值语句 3.2C语言的基本语句由函数调用加上分号“;”组成。其一般形式为:函数名(实际参数表);只有分号“;”组成的语句称为空语句。空语句是什么也不执行的语句。在程序中空语句可用来作空循环体或程序流程的转向点。把多个语句用括号{}括起来组成的一个语句称复合语句。在程序中应把复合语句看成是单条语句,而不是多条语句。函数调用语句空语句复合语句例如:printf(“hello”);scanf(“%d”,&a); 复合语句在什么情况下使用复合语句?条件语句和循环语句在语法上只允许带一条语句当分支和循环中需要进行多项操作时{t=x;x=y;y=t;}被当作一条语句来处理 3.3.1字符输入输出函数字符输出函数:putchar()格式:putchar(字符变量);功能:在显示器上输出单个字符。如:putchar('A');(输出大写字母A)putchar(x);(输出字符变量x的值)putchar('101');(也是输出字符A)putchar(' ');(' '是控制字符,表示换行)对控制字符则执行控制功能,不在屏幕上显示。使用本函数前必须要用文件包含命令:#include或#include“stdio.h”注意 3.3.1字符输入输出函数举例比较例:输出单个字符。#includevoidmain(){intc;chara;c=65;a='B';putchar(c);putchar(' ');putchar(a);}程序运行结果为:AB控制字符,表示换行 3.3.1字符输入输出函数格式:getchar();功能:从键盘上输入一个字符。说明:(1)无参数(2)函数值是从输入设备接收的字符通常把输入的字符赋予一个字符变量,构成赋值语句,如:charc;c=getchar();注意键盘输入函数:getchar() 3.3.1字符输入输出函数举例说明例:输入单个字符。#includemain(){intc;printf("Enteracharacter:");c=getchar();printf("%c--->hex%x ",c,c);}运行程序时会显示“Enteracharacter:”,光标闪烁,等待输入数据。假设输入A,则输出结果为:A--->hex41 3.3.1字符输入输出函数注意getchar()函数只能接受单个字符,输入数字也按字符处理。输入多于一个字符时,只接收第一个字符。使用本函数前必须包含文件“stdio.h”。使用getchar()函数还应注意几个问题 #includemain(){charch;printf("PressakeyandthenpressEnter:");ch=getchar();printf("Youpressed");putchar(ch);putchar(' ');}PressakeyandthenpressEnter:A↙YoupressedA3.3.1字符输入输出函数举例说明预处理命令 3.3.2printf()函数格式:printf(“格式控制字符串”,输出项列表)功能:按控制字符串规定的格式,向缺省输出设备输出在输出项列表中列出的各输出项。这两部分数据类型与个数要一致有多个时,则各项之间用逗号分隔。可以是常量、变量、表达式。用双引号括起,由格式说明和普通字符两部分组成。 3.3.2printf()函数printf("a=%db=%f",a,b);函数名输出表列普通字符格式说明举例说明 3.3.2printf()函数普通字符、格式说明普通字符包括可打印字符和转义字符可打印字符普适计算格式说明一些说明字符,这些字符按原样显示在屏幕上。不可打印的字符,它们其实是一些控制字符,控制产生特殊的输出效果。如要输出%,则在控制字符中用两个%表示,即%%。格式为:%[<修饰符>]<格式字符>修饰符是可选的,用于确定数据输出的宽度、精度、小数位数、对齐方式等,用于产生更规范整齐的输出,当没有修饰符时,以上各项按系统缺省设定显示。可打印字符转义字符 修饰符功能m(十进制正整数)表示输出的最小位数。数据长度m,则自动取n值,即保证n个字符正常输出。%s:用来输出一个字符串。具体用法如下: 3.3.2printf()函数举例说明staticchara[]=“Hello,word!”;printf(“%s %15s %10.5s %2.5s %.3s ”,a,a,a,a,a);运行结果:Hello,world!Hello,world!HelloHelloHel 3.3.2printf()函数%f:不指定宽度,整数部分全部输出并输出6位小数。%m.nf:输出共占m列,其中有n位小数,如数值宽度小于m左端补空格。%-m.nf:输出共占n列,其中有n位小数,如数值宽度小于m右端补空格。%f:用来输出实型数,以小数形式输出。例如:floatf=123.456;printf(“%f,%10.2f,%-10.1f ”,f,f,f);输出结果为:123.456001,123.46,123.5 3.3.2printf()函数%e:以指数形式输出实型数。floatf=123.456;printf(“%e,%.2e ”,f,f);输出结果:1.234560e+002,1.23e+002%e:数字部分(又称尾数)输出6位小数,指数部分占5位或4位。%m.ne和%-m.ne:m、n和”-”字符含义与前相同。此处n指数据的数字部分的小数位数,m表示整个输出数据所占的宽度。%g:自动选f格式或e格式中较短的一种输出,且不输出无意义的零。举例 思考(写出程序结果)#includemain(){floatf1=100.15799,f2=12.55,f3=1.7;intn1=123,n2=45,n3=6;printf("printfWITHOUTwidth: ");printf("%f %f %f ",f1,f2,f3);printf("%d %d %d ",n1,n2,n3);printf("printfWITHwidth: ");printf("%5.2f %6.1f %3.0f ",f1,f2,f3);printf("%5d %6d %3d ",n1,n2,n3);} 3.3.3scanf()函数格式:scanf(“格式控制字符串”,输入项列表);功能:从键盘上输入数据,该输入数据按指定的输入格式被赋给相应的输入项。有多个变量地址时,则各项之间用逗号分隔。各变量要加地址操作符,即在变量名前加“&”。规定数据的输入格式用双引号括起由格式说明和普通字符两部分组成。 scanf("%d,%f”,&a,&b);格式说明地址列表3.3.3scanf()函数普通字符 3.3.3scanf()函数d输入一个十进制整数o输入一个八进制整数x输入一个十六进制整数f输入一个小数形式的浮点数e输入一个指数形式的浮点数c输入一个字符s输入一个字符串格式说明:规定了输入项中的变量的类型,形式是:%[<修饰符>]<格式字符>表3–3scanf()格式字符 3.3.3scanf()函数中的修饰符(1)字段宽度:表示该输入最多可输入的字符个数。例如:scanf("%4d%2d%2d",&yy,&mm,&dd);(若输入19991015,则1999传给yy,10传给mm,15传给dd)例scanf("%3c%2c",&c1,&c2);输入abcde则‘a’传给c1,‘d’传给c2 3.3.3scanf()函数中的修饰符(2)l和h(d、o、x一起使用)例如:scanf("%10ld%hd",&x,&i)则x按宽度为10的长整型读入,而i按短整数读入。加l:输入数据为长整型数据加h:输入数据为短整型数据(3)字符*:*表示按规定格式输入但不赋予相应变量,作用是跳过相应的数据。例如:scanf(“%3d%*4d%f”,&k,&f);输入12345678765.43则123传给k,8765.43传给f,4567被跳过,不赋给任何变量 Scanf()的格式控制字符串中普通字符是不显示的,而是规定了输入时必须输入的字符3.3.3scanf()函数中的普通字符举例说明scanf("%d,%d",&a,&b);当输入为:1,2。即:a=1,b=2若输入为12呢?则将1传给a,因缺少普通字符“,”,对b赋值将以失败告终普通字符在输入数据也要输入哦 学以致用运行语句:scanf("a=%d",&a);输入格式应该是什么样? (1)scanf函数的“格式控制”后面应当是变量地址,而不是变量名。(2)scanf函数输入数据时,数据之间需要分隔符。当格式控制串中没有其它普通字符来分隔各格式控制时,一般以空格、TAB或回车键作为分隔符。当格式串中两个格式符间有其它字符时,就必须以其做分隔符。例如:scanf(“%d%d”,&a,&b);输入如下:56(5和6中间可以是一个或多个空格)要注意的问题 (3)scnaf函数输入数据时不能规定精度。例如:scanf(“%5.2f”,&a);是不合法的。(4)用“%c”格式符时,空格和转义字符作为有效字符输入。例如:scanf(“%c%c%c”,&c1,&c2,&c3);若输入abc,则a传送给c1,空格传送给c2,b传送给c3(5)输入数据时,遇空格、TAB、回车、遇宽度结束、遇非法输入认为该数据结束。要注意的问题 3.4算法与程序实现(根据具体而定)编求梯形面积的程序,梯形的上底、下底和高由键盘输入。定义变量程序中要用到上底、下底、高及面积,故先定义一些实形变量,用存放这些值。(上底:a,下底:b,高:h,面积:s)数据提供调用输入函数输入上底、下底和高的值。(scanf())数据运算利用公式S=(a+b)×h÷2,求出面积。调用输出函数输出面积。(printf())结果输出 3.4算法与程序实现(根据具体而定)编写求梯形面积的程序,梯形的上底、下底和高由键盘输入。main(){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.2fh=%5.2f",a,b,h);printf("s=%7.4f",s);}程序定义变量数据输入计算结果输出 3.4算法与程序实现(根据具体而定)定义变量程序中要用到三门课程的成绩及平均分,则定义四个变量yu、shu、wai、average来存放三门课程的成绩及平均分。数据提供调用输入函数输入三门课程成绩存入变量yu、shu、wai。(scanf())数据运算计算三门课程的平均分赋给变量average。调用输出函数输出average。(printf())结果输出已知某同学三门课程的成绩,求平均分。 3.4算法与程序实现已知某同学三门课程的成绩,求平均分。#includevoidmain(){floatyu,shu,wai,average;printf("pleaseinputyu,shu,wai:");scanf("%f,%f,%f",&yu,&shu,&wai);average=(yu+shu+wai)/3.0;printf("theaverageis:%7.2f ",average);}分析程序注意:输入分数时要输入, 3.4算法与程序实现根据求根公式,先求b*b-4*a*c的值存入变量d,再调用求平方根函数sqrt(),求出sqrt(d)/(2*a)的值存入q;求出-b/(2*a)的值存入p求方程ax2+bx+c=0的实根。分析完成了,你会编程序吗?分析定义变量a,b,c,x1,x2,d,p,q调用scanf函数输入实数a,b,c,且要求满足a不等于0,b2-4ac>0求方程的根x1、x2,x1=p+q;,x2=p-q;编程调用printf函数输出方程的根 3.4算法与程序实现#include#includemain(){floata,b,c,d,x1,x2,p,q;scanf("a=%f,b=%f,c=%f",&a,&b,&c);d=b*b-4*a*c;p=-b/(2*a);q=sqrt(d)/(2*a);x1=p+q;x2=p-q;printf(" x1=%5.2f x2=%5.2f ",x1,x2);}求方程ax2+bx+c=0的实根。你写对了吗? 学写简单的顺序结构程序常见错误分析3.5总结与扩展总结与扩展 3.5.1学写简单的顺序结构程序一个最简单的顺序结构程序是由一些编译预处理命令和一个主函数组成。编译预处理命令如果要使用库函数(标准函数),应该使用编译预处理命令,将相应的头文件包含进来。主函数说明部分。主要定义函数中要用到的一些变量。数据提供部分,主要有scanf()、getchar()函数、赋值语句。数据运算部分,现阶段最主要是利用运算符和基本语句;结果输出部分,主要用printf()、putchar()函数。如果我们使用scnaf()、printf()、getchar()、putchar()函数,就要写编译预处理命令#include。注意后面没有“;”。包含包含着按顺序执行的一些语句 3.5.2常见错误分析忘记地址运算符用scanf()输入数据时忘记地址运算符&。多写 在scanf函数中加入“ ”。变量未定义忘记定义变量。变量没值先用引用还未赋值的变量。变量赋值超范围变量赋值超过取值范围。括号不匹配初学者很容易忘记main主函数后面的圆括号()和函数体的花括号{}。忘记分号“;”是C语句结束的标志,一定不能忘记。 学以致用:看看问题出在哪?如何修改?#includevoidmain(){inta,b,c;scanf("%d,%d",a,b);c=a+b;printf("%d",c);}想一想 学以致用:看看问题出在哪?如何修改?#includevoidmain(){inta,b,c;scanf("%d,%d ",&a,&b);c=a+b;printf("%d",c);}想一想 学以致用:看看问题出在哪?如何修改?#includevoidmain(){a=b=3;c=a+b;printf("%d",c);}想一想 学以致用:看看问题出在哪?如何修改?#includevoidmain(){inta,b,c;c=a+b;printf("%d",c);}想一想 END