《简单的C程序设计》PPT课件.ppt
本章要求:,进一步理解C程序的组成,了解C语句的分类掌握C语言中数据的输入/输出方法,常用输入/输出函数的使用掌握顺序结构程序设计方法,能编写简单的C程序,本章难点:数据输出格式复杂控制符的使用,本章重点:格式输入/输出函数(scanf()/printf())的使用,第3章 简单的C程序设计,3.1 顺序结构的基本语句3.2 数据的输入与输出3.3 字符数据的输入输出*3.4 较复杂的输入输出问题本章小结,第3章 顺序结构程序设计,内容要点提示:顺序结构中基本的语句有哪些?输出函数printf有哪些格式说明符?利用scanf函数输入数据时,要注意什么?,程序设计其实是对数据的设计和对操作的设计。数据设计是通过一系列的数据描述语句来实现,主要用来定义数据的类型,完成数据的初始化等;操作设计是通过一系列的操作控制语句来完成,其作用是向计算机系统发出操作指令,以完成对数据的加工计算和流程控制。程序的结构分为顺序结构、选择结构和循环结构,程序的三种结构,3.1 顺序结构的基本语句,C语句是C程序的最基本成分。C语句必须由分号“;”结尾,哪怕只有一个分号也能构成一个空语句。在C语言中只有“可执行语句”,没有“非执行语句”。,一个大型C程序的结构如右图所示,即一个C程序可以由若干个源程序文件组成,一个源文件可以由若干个函数和预编译命令组成,一个函数又由数据定义部分和执行部分组成。,顺序结构主要使用的是简单语句(包括数据输入输出语句)、空语句和复合语句。,简单语句,1.表达式语句由表达式组成的语句称为表达式语句。即在表达式后面加上分号就成为表达式语句。表达式;/*分号是C语言语句的结束符*/例如:i+;-j;,3.1 顺序结构的基本语句,2.赋值语句例如:y=10;/*把10赋值给变量y*/x=y+1;x=x*6*sin(x);/*计算右边表达式的值,并赋值给变量x*/3.函数调用语句函数调用语句由函数名和实际参数加上分号组成。形式如下:函数名(实际参数列表);例如:scanf(“%d”,3.1 顺序结构的基本语句,空语句只有一个分号的语句,它什么也不做。有时用作转向语句或后面章节提到的循环语句中的循环体。例如:while(getchar()!=n)/*这是循环控制语句*/;/*这是空语句*/复合语句 把多条语句用花括号“”括起来组成的语句称为复合语句。在程序中应把复合语句看成是单条语句,即在语法上相当于一条语句。,3.1 顺序结构的基本语句,复合语句的形式:数据说明 语句1;语句2;语句n;注意:在复合语句的“数据说明”中定义的变量是局部变量,仅在复合语句中有效;复合语句结束花括号“”之后不需再加分号。例如:int x=3,y=7;/*x,y变量仅在复合语句中有效*/x=x+y;printf(“x=%dn”);,3.1 顺序结构的基本语句,【例3-1】输入三角形的三条边长,计算并输出三角形的面积。假设输入的三条边能构成三角形的。根据三条边的边长,计算三角形面积的公式如下:,#include#include/*数学函数的头文件*/void main()float x,y,z,s,area;printf(“input a,b,c:n);scanf(%f,%f,%f,/*输出三角形面积*/,思考:输入任意3个值作为三角形的边都能计算出三角形面积?,如何输入数据?,3.1 顺序结构的基本语句,3.2.1 数据输入/输出的概念,数据输入/输出是相对计算机内存,3.2 数据的输入/输出,在语言中所有的数据输入输出都是由库函数完成的。因此都是函数语句。在C语言中使用库函数时,要使用预编译命令#include 将相关的头文件(*.h)包含到用户源文件中。使用形式:#include“头文件”或#include,说明:1.标准输入/输出头文件是:stdio.h 2.常用的输入输出函数有:printf()scanf()putchar()getchar()getch()getche()函数等,3.2 数据格式输入/输出,3.2.1 数据格式输出printf()函数,格式化输出函数printf()功能:按控制字符串规定的格式,向输出设备输出各输出项基本格式:printf(“控制字符串”,输出项列表),3.2 数据格式输入/输出,输出项可以是常量、变量、表达式,其类型与个数必须与控制字符串中格式字符的类型、个数一致、当有多个输出项时,各项之间用逗号分隔。控制字符串由格式说明和普通字符两部分组成。,1格式说明一般格式为:%格式字符规定了输出项的输出格式,常用格式字符见表3-2,表3-2输出格式字符,3.2.1 数据格式输出printf()函数,int数据使用%d输出,float数据用%f输出。,int a=65;long b=123456789;float x=1.23;double y=3.1415926;,printf(%ld,b),(1)字段宽度修饰符 该修饰符用于确定数据输出的宽度、精度、小数位数、对齐方式等,用于产生更规范整齐的输出,表3-3列出了字段宽度修饰符。,表3-3 字段宽度修饰符,3.2.1 数据格式输出printf()函数,例如:void main()int a=123;float x=12.345678;printf(%5d,%5.2fn,a,x);printf(%2d,%2.1fn,a,x);程序的运行结果如下:,说明:当指定宽度小于数据的实际宽度时,对整数,按该数的实际宽度输出。对浮点数,相应小数位的数四舍五入。若度宽小于等于浮点数整数部分的宽度,则该浮点数按实际位数输出,但小数位数仍遵守宽度修饰符给出的值。,3.2.1 数据格式输出printf()函数,(2)对齐方式修饰符一般的输出数据为右对齐格式,加“-”号,变为“左对齐”方式。例如:void main()int i=123;float a=12.34567;printf(%6d%10.4fn,i,a);printf(%-6d%10.4fn,i,a);printf(%6d%-10.4fn,i,a);,3.2.1 数据格式输出printf()函数,程序运行结果如图所示:,(3)长度修饰符 l和h可以与输出格式字符d、f、u等连用,以说明是用long型或short型格式输出数据,如:hd 短整型lf 双精度型ld 长整型hu 无符号短整型,2普通字符普通字符包括可打印字符和转义字符。可打印字符是一些说明字符,这些字符按原样显示在屏幕上转义字符是不可打印的字符,它们其实是一些控制字符,控制产生特殊的输出效果。常用的有“t”,“n”,其中t为水平制表符,作用是跳到下一个水平制表位,“n”为回车换行符,遇到“n”,显示自动换到新的一行。,3.2.1 数据格式输出printf()函数,例如:void main()int i=123;long n=456;float a=12.34567,y=20.5;printf(i=%4dta=%7.4fntn=%lun,i,a,n);printf(y=%5.2f%n,y);程序运行的输出结果如下:,3.2.1 数据格式输出printf()函数,3.2.2 数据格式输入scanf()函数,scanf()的功能:从键盘上输入数据,该输入数据按指定的输入格式被赋给相应的输入项。函数一般格式为:scanf(控制字符串,输入项地址列表);控制字符串规定数据的输入格式,其内容由格式说明和普通字符两部分组成。输入项地址列表由一个或多个变量地址组成,各变量地址之间用逗号“,”分隔。scanf()中各变量要加地址操作符,表示如下:&变量名,3.2 数据格式输入/输出,【例3-2】已知华氏温度求对应的摄氏温度。转换公式为:y=5*(x-32)/9 x表示华氏温度,y摄氏温度。源程序文件名:exp3_2.cpp#include void main()int fahr,sius;/*变量fahr表示华氏温度,变量sius表示摄氏温度*/printf(请输入华氏温度=);scanf(%d,例3.2:输入一double型的数,使此数保留小数点后二位,对第三位进行四舍五入处理,输出此数.void main()double x;printf(“Enter x:”);scanf(“%lf”,控制字符串的两个组成部分:格式说明和普通字符。,1.格式说明格式说明规定输入项中的变量以何种类型的数据格式被输入,形式是:%各个格式字符及其意义见下表,3.2.2 数据格式输入scanf()函数,各修饰符是可选的,这些修饰符是:(1)字段宽度例:scanf(%3d,&a);输入123456,按宽度输入一个整数123赋给变量a(2)l和h可与d、o、x一起使用,l表示输入数据为长整数,h表示输入数据为短整数,例:scanf(%ld%hd,&x,&i);x按长整型读入,i按短整数读入。(3)字符*表示按规定格式输入但不赋予相应变量,作用是跳过相应的数据。例如:scanf(“%d%*d%d”,&x,&y,&z);执行该语句,若输入为“”结果为x=1,y=3,z未赋值,被跳过。,3.2.2 数据格式输入scanf()函数,2.普通字符普通字符包括空格、转义字符和可打印字符。(1)空格在有多个输入项时,一般用空格或回车作为分隔符,若以空格作分隔符,则当输入项中包含字符类型时,可能产生非预期的结果,例如:scanf(%d%c,当输入为:1,2,q 即:a=1,b=2,ch=q若输入为1 2 q 除a=1正确赋值外,对b与ch的赋值都不能正确赋值。这些不打印字符应是输入数据分隔符.,3.2.2 数据格式输入scanf()函数,使用scanf函数还必须注意以下几点!:(1)scanf函数中没有精度控制。如:scanf(%5.2f,是非法的。,(2)在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔则可用空格或回车作间隔。,(3)如果格式控制串中有非格式字符则输入时也要输入该非格式字符。例如:scanf(%d,%d,%d,则输入应为 a=5,b=6,c=7,3.2.2 数据格式输入scanf()函数,为了减少不必要的输入,防止出错,编写程序时,在scanf()函数的格式控制字符串中尽量不要出现普通字符,尤其不要将输入提示放入其中。显示输入提示应该放在printf()函数中。,#include void main()int a,b,c;printf(input a b cn);/*输入提示*/scanf(%d%d%d,1字符输入函数getchar()getchar()函数的格式:getchar();getchar()函数的作用:从系统的输入设备(键盘)输入一个字符。从功能角度来看,scanf()函数可以完全代替getchar()函数。例:char c1;c1=getchar();可使用等价语句:scanf(%c,3.3 字符数据非格式输入/输出函数,说 明:(1)getchar()函数一次只能返回一个字符,即调用一次只能输入一个字符。(2)程序第一次执行getchar()函数时,系统暂停等待用户输入,直到按回车键结束,如果用户输入了多个字符,则该函数只取第一个字符,多余的字符(包括换行符n)存放在键盘缓冲区中,如果程序再一次执行getchar()函数,则程序就直接从键盘缓冲区读入,直到读完后,如果还有getchar()函数才会暂停,再次等待用户输入。,3.3 字符数据非格式输入/输出函数,2.getch()和getche()函数 这两个函数也都是从键盘上读入1个字符,与getchar()函数的区别是输入不需要回车键结束,即输入一个字符就自动结束输入。它们的调用格式为:getch();getche();,两者的区别是:getch()函数不将读入的字符回显在显示屏幕上getche()函数将读入的字符回显到显示屏幕上,3.3 字符数据非格式输入/输出函数,3字符输出函数putchar()putchar()函数的格式:putchar(ch);该函数的功能是向显示器终端输出一个字符。其中,ch可以是一个字符变量或常量,也可以是一个转义字符。说明:(1)putchar()函数只能用于单个字符的输出,且一次只能输出一个字符。(2)从功能角度printf()函数可以完全代替putchar()函数,其等价形式:printf(%c,ch)。,3.3 字符数据非格式输入/输出函数,例3-8 输入一个字符,回显该字符并输出其ASCII码值。#include void main()char ch1,ch2;ch1=getchar();ch2=getchar();putchar(ch1);putchar(ch2);printf(%cn%c,ch1,ch2);程序运行后,若ch1、ch2分别得到字符A、B,应输入AB,如果输入A,则实际上ch1被赋值为字符A,ch2被赋值为字符换行符n,3.3 字符数据非格式输入/输出函数,补充例子:编一程序,从键盘输入一个大写字母,要求改用小写字母输出(提示:大写字母对应的ASCII码序号比相应的小写字母的ASCII码序号小32)。#include stdio.hvoid main()char c1,c2;c1=getchar();printf(%c,%dn,c1,c1);c2=c1+32;printf(%c,%dn,c2,c2);,应用程序举例,程序运行情况:AA,65a,97,补充例子:输入时间(小时,分和秒)然后使用输出消息框输出其计多少秒。分析:hh代表小时,mm代表分钟,ss代表秒,tss代表总的秒数值,则:其总时间秒:tss=hh*3600+mm*60+ss程序代码如下:void main()int hh,mm,ss;long tss;/*定义为长整型数据,因int整数的最大数据是32767*/printf(Enter hh:mm:ss=);/*提示用户输入数据*/scanf(%d:%d:%d,应用程序举例,补充例子:编一程序,求一内半径R1=10cm外半径R2=20cm的球环的体积。要求按四舍五入保留到小数点后4位。#define PI 3.1415926/*定义符号常量PI代表*/void main()double r1,r2;/*r1,r2 表示球的内外半径*/double vol;/*vol表示体积*/printf(Enter r1,r2=);scanf(%lf,%lf,程序运行结果如下:,3.5 应用程序举例,本章小结,本章介绍C语言的基本语句及输入/输出函数的使用,它们属于顺序结构程序设计,是一种简单的程序结构。赋值语句是由赋值表达式加上一个分号“;”构成。printf函数称为格式输出函数,一般形式:printf(格式字符串,输出项列表),是向终端(或系统隐含指定的输出设备)输出若干个任意类型的数据。scanf函数称为格式输入函数,一般形式:scanf(格式字符串,地址列表),是按用户指定的格式从键盘上把数据输入到指定的变量之中。可以用来输入任何类型的多个数据。getchar()函数是从终端(或系统隐含指定的输入设备)输入一个字符,它的返回值为一整型数,即是被输入字符的ASCII码。putchar()函数是向终端输出一个字符。,本章小结,注意事项:(1)当输入长整数时,必须用%ld;输入double类型时,必须用%lf,否则得不到正确的数据。(2)在格式控制串中格式说明的个数%应该与输入项的个数相同。(3)输入的数据少于scanf函数要求输入的数据时,这时将等待输入,直到满足要求或遇到非法字符为止。输入的数据多于scanf函数要求输入的数据时,这时多余的数据将留在缓冲区作为下一次输入操作的输入数据。(4)再次提醒,scanf函数中的格式控制串是为输入数据用的,其间的字符不能输出到屏幕上,如果想在屏幕上输出字符串来提示输入,应该使用printf函数。若在scanf的格式控制串中插入了其它字符,则在键盘输入时必须要求按一一对应的位置原样输入这些字符。输入数据时不能使用scanf(“%7.2f”,&x)这样的语句。,