资源描述
,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,主要内容:(思考题),1.,为什么要学,C,语言?,2.C,语言程序的基本结构是?,3.,如何用,C,语言编程解决实际问题?,Ch1.1,程序与程序设计语言,问题,1,:计算机为什么能工作?比如,图书查询、售票系统、一卡通系统等。,答:软件与硬件(裸机)配合,即由程序控制硬件执行一系列的操作。,问题,2,:什么是程序?什么是程序设计语言?,答:程序是指用计算机语言编写的能完成特定功能的一系列操作的集合。,计算机能够识别的语言即程序设计语言。,问题,3,:为什么要学习,C,语言?,答:,C,语言是程序设计语言中的常青树。,几乎所有的处理器芯片都支持,C,语言,而用于计算机的只占不足,20%,,其他广泛用于其它智能设备、电器等。,是理工科学生的最佳编程入门语言。,Ch1.1,程序与程序设计语言,Ch1.2 C,语言,程序,结构,C,程序功能演示:,例,1.1,输出一行信息。,例,1.2,求任意两数之和。,例,1.3,小学生算术练习系统。,例,1.4,计时器。,Ch1.2 C,语言程序结构,例,1.1,输出一行信息,:,This is a C program.,.,#include,/*,主函数,*/,int,main(),printf(,This is a C program.n,);,/,输出语句,return 0;,说明:,主函数,main(),、分号、注释、函数体,Ch1.2 C,语言程序结构,例,1.2,求任意两个整数之和。,#include,/,包含输入输出函数的头文件,int main(),int a,b,sum;scanf(%d%d,printf(sum is%d,n,sum);,return 0;,/*,可执行语句*,/,/,说明性语句:定义,3,个整型变量,例,1.3,求,2,个数中较大者。,#include int main()int max(int x,int y);,/*,对被调用函数,max,的声明*,/,int a,b,c,;,/*,定义变量,a,、,b,、,c*/,scanf,(,d,d,/*,输入变量,a,和,b,的值*,/,c=,max(a,b);,/*,调用,max,函数,结果赋给,c*/,printf,(max=,dn,c,);,/*,输出,c,的值*,/,return 0;,int max(int x,int y),int z;,if (xy)z=x;,else z=y;,return(z);,说明:功能复杂的程序可用多个函数实现,如,本程序包括主函数,main,和被调用函数,max,两个函数。,C,程序的基本组成单位是,函数,(,主函数、被调用函数),Ch1.2 C,语言程序结构,小结,(2),函数:一个函数由,函数头,和,函数体,两部分组成。,函数体包括两部分:,声明部分、执行部分。,int max(int x,int y),int z;,if (xy)z=x;,else z=y;,return(z);,(3),一个程序,有且仅有一个,main(),函数,。,因为:,C,程序,总是从,main,函数开始执行,的,Ch1.2 C,语言程序结构,小结,(4)C,语言的语句以分号结束。,(5)C,程序书写格式自由,一行内可以写几个语句,一个语句可以分写在多行上,,C,程序没有行号。,注意合理的缩进,遵循,规范的程序设计风格,。,(6)C,语言本身没有输入输出语句。,输入和输出的操作是由库函数,scanf,和,printf,等函数来完成的。,(7),注释,:,两种形式,,/,*,/,常用于一段程序的注释,,/,常用于对本行语句作注释。,Ch1.3 C,语言,的基本语法单位,(2),关键字,(3),运算符,(,4,)流程控制语句 (,5,)函数,(1),标识符:,程序中的变量名、函数名、符号常量名等统称为标识符,标识符的命名规则:,只能由字母、数字和下划线三种字符组成,且不能以数字开头;,不能与关键字同名;,尽量做到,“,见名知义,”,,比如:变量,student,表示学生,,name,表示姓名等。,练一练:下列标识符,哪一组是合法的?为什么?,A.,sum 2day _total,B.,month Student_name lotus_1_2_,C.while if int,D.,_sum no*3&aa,E.,M.D.John,¥,123 stu-score,思考:如何编写程序来解决实际问题?,比如:,计算任意两数的平均值,,找出任意输入的两个数的较大者,,求,5,!等等。,解题思路,:,先找解决问题的方法,后用,C,语言编程实现。,Ch1.4,用,C,语言编程,解决问题的一般过程,分析问题,从两个方面分析:,数据分析:分析任务中要处理的数据及其类型,功能分析:明确要实现的功能,即数据从哪里来、进行怎样的数据处理、处理结果送到哪里。,Ch1.4.1,分析问题与设计算法,例,1.4,计算任意两数的平均值。,(,1,)定义数据:设用,a,和,b,表示输入的任意两个数,用,average,表示平均值。,(,2,)算法:,步骤,1,:先输入两个数,分别存入,a,和,b,。,步骤,2,:将,a,和,b,相加再除以,2,,将结果送入,average,。,步骤,3,:将结果,average,的值输出。,Ch1.4.1,分析问题与设计算法,设计算法,解决问题的操作步骤就是算法。,起止框,判断框,处理框,输入,/,输出框,注释框,流向线,连接点,用自然语言描述算法可读性较差,常用流程图表示。,Ch1.4.1,分析问题与设计算法,三种基本结构:,顺序结构、选择结构、循环结构,结构化程序设计:用这三种基本结构作为表示一个良好算法的基本单元。,Ch1.4.1,分析问题与设计算法,(a),顺序结构,(b),选择结构,(c),循环结构,三种基本结构的流程图表示:,Ch1.4.1,分析问题与设计算法,例,1.4,找出任意输入的两个数的较大者。,数据定义:,设输入的两个数分别用,a,和,b,表示。,Ch1.4.1,分析问题与设计算法,例,1.5,求,5!,的流程图。,数据定义:,设用,t,表示部分积,,i,表示每次要乘的,15,之间的一个数。,Ch1.4.1,分析问题与设计算法,编辑:,输入,/,修改源程序,.,编译:,翻译并检查语法错误,.,连接,:与库函数和其他函数等连接成可执行文件。,运行,:,提示:,在VC+6.0下编辑的源程序文件名为,f.cpp,Ch1.4.2,编写,C,程序,与上机调试,阶段小结与思考,小结:,1.,C,语言是程序设计语言中最常用的一种,,2.C,语言程序的基本组成单位是函数,每个程序有且只有一个,main(),函数;,3.,用,C,语言编程解决问题的基本步骤:分析问题、编写程序、调试运行,4.C,程序的运行包括,4,个基本步骤;,1.,一个,C,程序的执行是从()。,A.,本程序的,main,函数开始,到,main,函数结束,B,.,本程序文件的第一个函数开始,到本程序文件的最后一个函数结束,C.,本程序的,main,函数开始,到本程序文件的最后一个函数结束,D.,本程序的第一个函数开始,到本程序,main,函数结束,随堂练习,2.,以下叙述不正确的是()。,A,.,一个,C,源程序可由一个或多个函数组成,B.,一个,C,源程序必须包含一个,main,函数,C.C,程序的基本组成单位是函数,D.,在,C,程序中,注释说明只能位于一条语句的后面,随堂练习,2.1,为什么要用数据类型和运算符,例,2.1,输入任意半径,计算圆的周长和面积。,思路:,先分析算法,(,包括数据说明,),,后编程序;,数据说明:,设用,r,表示半径、,length,表示周长、,area,表示面积。,算法:,(,1,)输入半径;,(,2,)计算周长、面积,(,3,)输出结果,实例:,例,2,.1,输入任意半径,计算圆的周长和面积。,#define PI 3.1415926,#include,int,main(),double r,length,area;/,定义变量,printf,(,n enter the radius:);/,提示,scanf,(%lf,/,输入半径,length=2*PI*r;/,计算周长,area=PI*r*r;/,计算面积,printf,(n r=%f,length=%f,area=%f n,r,length,area,);/,输出结果,return 0;,问题提出:,为何要用数据类型和运算符,【,结合 例,2.1,分析,】,如何数据说明定义变量?,如何根据算法编写程序呢?,即:在,C,语言中,,如何描述要处理的数据,?,数据类型,如何描述对数据的基本操作,?,运算符,2.2.1,C,的,数据类型,【,了解,】,数据类型,构造类型,指针类型,空类型(,无值类型),void,枚举类型,enum,数组类型,结构类型,struct,联合类型,union,基本类型,整型,int,字符型,char,实型(浮点型),单精度实型,float,双精度实型,double,数据类型预习检测:,假设程序中要用变量,age,表示学生的年龄,则变量,age,应该定义为()类型。,1 char,2 int,3 float,4 double,2.2.2,常量与变量,数据类型用于描述要处理的,数据。,如 整数、实数、字符数据等。,程序,中数据有两种表现形式:,常量与变量,符号常量,:,用,#define,指令定义一个符号名称代表一个常量。如,PI,代表,3.1415926,使用符号常量的好处:提高可读性,便于修改。,2.2.2,常量与变量,(一),常量和符号常量,在程序运行过程中,其值不能被改变的量,称为常量。,比如:,2,,,1500,,,-3,是整型常量,2.5,,,-5.78,,,是实型常量,A,*,是字符常量,提示:符号常量一般用,大写,,而变量名一般用小写,以示区别。,(二)变量,变量代表内存中具有特定属性的一个存储单元,它是用来存放数据的,这就是变量的值,在程序运行期间,这些值是可以改变的。,可以将变量看作一个存放数据的,“,容器,”,2.2.2,常量与变量,(三)常变量:,const int a=3;,如何区分不同的变量呢?,变量名,如何给变量起名呢?,【,下页:标识符的命名规则,】,2.2.3,整型数据,基本整型:,int,修饰符:,long ,short,unsigned,共六种,(,了解,),有符号基本整型,有符号短整型,有符号长整型,无符号基本整型,无符号短整型,无符号长整型,(signed)int,(signed)short(int),(signed)long(int),unsigned int,unsigned short(int),unsigned long(int),如何描述整型数据?,2.2.3,整型,数据,整型变量,:用于存放整型数据。,例如,:,int,a,b,;,/,定义变量、为整型,unsigned short,c,d,;,/,定义无符号短整型变量,,d,long,e,f,;/,指定变量、为长整型,整型常量:如,2,,,2L,多个变量之间以逗号分开,2.2.3,整型,数据,例,3.2,设程序中要处理的数据为:,1024,和,65536,,分别用变量,x,和,y,保存,问:如何定义,x,和,y,?,结论:根据数据的类型和大小确定变量的具体类型。,int x;long y;,不同类型的数据所占的存储空间不同、表示的数据的范围不同。,【,详见表,3.2,,了解,】,应用:根据实际要处理的数据大小,合理选择数据类型。,分析:如何正确使用各种类型?,重点,2.2.4,实型(浮,点,型)数,据,不同类型的数据所占的存储空间不同、表示的数据的范围不同。,【,详见表,3.4,,了解,】,单精度(,float,型),双精度(,double,型),长双精度型(,long double,),如何描述实型数据?,2.2.4,实型,数据,(一)实型常量的表示方法,两种表,示形式,小数,指数,0.123,3,e-3,3*10,-3,注意,:,字母,e(,或,E),之前必须有数字,且,e,后面的指数必须为整数,1e3,1.8e-3,-123e-6,e3 2.1e3.5,提示:,C,编译系统将浮点型常量作为,双精度,来处理。,如在数的后面加字母,f,或,F,,则表示,float,型(如,1.65f,654.87F,)。,思考;,12.3,是什么类型的数据?,2.2.4,实型数据,实型变量是用来保存实型数据的。,实型变量的定义:如,float x;double area;,例,3.4,有两个数据,123.5,和,123.456789e10,,设分别用变量,m,和,n,表示,如何定义变量?,(二),实型变量,float m;double n;m=123.5;n=123.456789e10;,结论:根据数据的类型和大小确定变量的具体类型。,2.,2.5,字符型,数据,(一),字符常量,(1),用单引号包含的一个字符,存储时占一个字节,例,a,A,1,$,abc,、,”a”,(2),用单引号包含的转义字符。如,n,t,转义字符:以,“,”,开头的特殊字符。,【,详见表,3.1】,如何描述符号数据?,字符类型,char,2.2.5,字符型,数据,(二)字符变量,字符型变量用来存放字符,一个字符变量在内存中占一个字节,只能放一个字符。,字符变量的定义形式如下:,char c1,c2;,2.2.5,字符型数据,(三),字符数据在内存中的存储形式及其使用方法,字符变量保存的实际上是字符的,ASCII,代码。,比如,,c,a;d,b;,等价于,c=97;d=98;,结论:字符型数据和整型数据之间在一定范围内可以通用,。,#include,int main(),char c,d;,c=a;d=b;,printf(n%c%c,c,d);,printf(n%d%dn,c,d);,return 0;,运行结果:,a b,97 98,例,2.2,定义字符变量,c,和,d,,分别用于保存字符,a,和,b,,然后按照字符和数值两种形式输出变量的值。,数据类型 小结,如何描述程序要处理的数据?,基本数据如整数、实数、字符如何表示?,如何确定数据的类型?,应用:如何确定数据的类型?,练习:如何定义年龄,age,、成绩,score,、性别,sex,三个变量,?,讨论,:,要表示一个班的学生成绩,用常量还是变量?,问题,2,:,如何表示对数据的基本操作?,使用运算符组成表达式,学习提示:,掌握运算符的功能,、操作数,的个数及类型、优先,级和结,合方,向。,2.3,用基本运算符实现简单操作,运算符规定了对数据的基本操作。,语言中共提供了丰富的运算符,以后逐步学习。,本章学习基本的运算符:,算术运算符、赋值运算符,2.3.1,算术运,算符,和表,达式,(,1,)基本的算术运算符和表达式,问题:如何表示数学中常用的算数运算?即如何将算数表达式写成,C,语言中的表达式?,比如,,a+b,5-c,2,表达式预习检测:,请将数学中的表达式,a+b,5-c,2,写成,C,语言中的表达式,2.3.1,算术运算符和表达式,(,加法运算符,如,:,、),(,减法运算符,如,:,、),*,(乘法运算符。如,:,*),(,除法运算符。如,:,),(,模运算符,或称求余运算符,两侧均应为,整型数据,,,如,:,的值为)。,2.3.1,算术运算符和算术表达式,操作数:,2,个,即双目运算符,除求余(,%,)运算符外,其余四种运算符的操作数可以为整型或实型。,加(,+,)、减(,-,)也可作为数据的正负号,只需一个操作数。,优先级:,先乘除,后加减,结合性,:,从左向右,提示:两个,同类型数据,的算术运算结果仍为原来的类型。,如,7/3,2,2.4/1.2 2.0,计算,25/4,与,25%4,的值。,A.6 6,B.6.25 6,C.6 1,D.6.25 1,2.3.1,算术运算,符和算术表达式,说明:,C,语言中没有乘方、开方等运算符,通过调用数学函数来实现。,如:,sqrt,(x),表示,x,的开平方,pow(,x,y,),表示,x,y,思考:如何表示乘方、开方、求正弦等数学运算?,2.3.1,算术运算符和算术表达式,(2),自增(,+,)、自减(,-,)运算符,单目运算符,,功能:,使变量的值增或减,,即,i=i+1,或,i=i-1,如,:,前缀用法:,(在使用之前,先使的值加(减),后缀用法:,(在使用之后,使的值加(减),2.3.1,算术运算,符和算术表达式,i+,与,+i,的区别:,;,i,的值先变成,4,再赋给,j,的值均为,;,先将,i,的值,3,赋给,的值为,然后变为,练习:设,int,i,=6,j=6,k=6,h=6,m,n,x,y;,m=,i,+;n=+j;x=k-;y=-h;,则执行上述语句后,各变量的值为:,i,=7,j=7,,,k=5,,,m=6,n=7,,,x=6,h=5,y=5,2.3.1,算术运算符和算术表达式,提示:,和的结合方向是,“,自右至左,”,。,应用提示:为避免误解,不要写成,i+j,的形式,而应写成,(i+)+j,的形式,.,应用:,自增(减)运算符常用于循环语句中使循环变量,自动加。也用于指针变量,使指针指向下一个地址。,2.3.2,不同类型数据间的混合运算,问题:当一个表达式中包含不同类型的数据时,如何计算?,如:,1+3.5 5-1.0/2,(,1,)隐式转换:(每一步运算前)当参加运算的两个操作数类型不同时,系统自动进行类型转换,转换规则如图,(,低类型转换为高类型,。,),。,练习:,设,int a=3,b=2;float c=4;,计算,/,*,.5,a,2.3.2,不同类型,数据间的混合运算,问题:当自动转换不能满足用户需要时,如何处理?,如:,float r,;,r=1.53,;,编译时提示,“,警告,”,:,warning:truncation from const double to float,(,2,)强制类型转换:当自动转换不能满足用户需要时,可以使用强制类型转换运算符将数据转换成指定的类型。,改为:,r=(float)1.5;,2.3.3,赋值运算符和赋值表达式,问题:如何将要处理的数据送给变量?,比如,将学生成绩,96,送给变量,score,(设,float score;,),方法一:从键盘等输入,scanf(%f,方法二:给变量赋值,score=96;/,或者初始化,float score=96;,(,3,),结合方向,:自右向左,例如,:,a=b=5,等价于,a=(b=5),分析,(,4,),优先级,:比算术运算符低。,如:,x=a/4+2,(,2,)赋值表达式的值:,即赋给左边变量的值。如:,表达式,b*,的值,:27,提示:,当右边表达式的值与左边变量的类型不同时,首先将右边表达式的值转换为左边变量的类型,然后赋值。分析:,float c,d;c=3*4;d=2.5;,(1),赋值运算符,:,赋值表达式:变量,=,表达式,如:,int a,b=9;,表达式:,a=b*3,执行过程:,计算,“,”,右边表达式的值,,赋给左边的变量。,重点,2.3.3,赋值运算符和赋值表达式,(5),复合赋值运算符与复合赋值表达式,在赋值符,“,”,之前加上其他双目运算符,即构成复合赋值运算符。如:,+=*=/=,复合赋值表达式:,变量,op=,表达式,等价于:,变量,=,变量,op,(表达式),例如,:,等价于 ,+,练习:*等价的表达式,?,等价的表达式,?,提示:注意计算时合理使用括号,以保证原来的表达式的含义。,*(,+,),2.3.4,变,量初,始化,(1),语言允许在定义变量的同时,给,变量,赋初值,。,如,:,int a=3;/,指定为整型变量,初值为,float f=3.56;/,指定为浮点型变量,初值为,.56,char c=a;/,指定为字符变量,初值为,a,(,2,)如果对几个变量赋以同一个初值,,应写成:,int a=3,b=3,c=3;/,表示,b,的初值都是,不能写成,int a=b=c=3;/why?,第二章 第二阶段小结,如何描述算术运算、赋值操作等基本操作?,算术运算符和表达式、赋值运算符和表达式,重点掌握运算符的功能、操作数、优先级和结合方向。,当一个表达式中含有不同类型的数据时,如何计算?,自动转换规则:低类型转换成高类型,作业,上机:习题,p25,第二题,课下练习:第一题,预习,如何输入数据、如何输出结果?如何设置输出格式?,比如,将习题,7,改为:用户输入圆的半径和圆柱体的高度,计算圆周长、圆面积、圆球表面积、圆球体积和圆柱体体积。,问题:用程序处理数据的一般过程包括哪几步?,例,1,:将用户给出的华氏温度转换成摄氏温度。,分析问题:,(,1,)数据定义:设,f,表示华氏温度,,c,表示摄氏温度。,(,2,)算法描述:,输入华氏温度,f,;,按照转换公式,c=5/9*(f-32),计算;,输出结果。,编写程序:,#include,int main(),float f,c;,printf(enter a Fahrenheit:);,scanf(%f,/,输入华氏温度,c=(float)5.0/9*(f-32);/,计算,printf(f=%f,c=%f,f,c);/,输出结果,return 0;,简单程序分析:,1.,数据说明:定义变量,2.,数据处理:,(1),数据的输入,(2),计算处理,(3),结果的输出,问题:如何实现数据的输入和结果的输出呢?,主要内容,简单的输入输出,学习要求:,学会根据要处理的数据的类型不同合理选用合适的输入,/,输出函数和格式。,Ch3,简单的输入输出,ch3.1,数据的输入,/,输出概念,例,3.1,中用,scanf(),实现了数据的输入,用,printf(),实现了数据的输出。,输入输出,:,相对于计算机的主机。,输入,是指从计算机的外部设备将数据读入主机,,,输出,是指将数据从主机送到外设(显示器、打印机、磁盘等)。,输入设备(如键盘),主机,输出设备(如显示器),输入,输出,ch3.1,数据的输入,/,输出实现,输入输出的实现:,调用库函数,输入输出函数的使用:,编程时必须先将输入输出函数所在的,头文件:,stdio.h,包含进本程序中。使用命令:,#include ,约定:,C,语言中的标准输入输出设备约定为用户终端,即键盘和显示器。,Ch3.2.1,格式输出函数,1.printf(),函数的一般调用格式:,printf(,格式控制字符串,输出表列);,如前面例题中:,printf(n enter a Fahrenheit:);,printf(f=%f,c=%f,f,c);,提示:格式控制串包含两部分,即格式控制符、普通字符。,其中,普通字符原样输出,而每个格式控制符控制输出表列中的一个数据的输出格式。,#include,int main(),int a=354,b=-2;,printf(n%d%d,a,b);,printf(n%d,,,%d,a,b);,printf(na=%d,b=%d,a,b);,printf(na=%dnb=%d,a,b);,printf(n%6d%6d,a,b);,printf(n%-6d%-6d,a,b);,printf(n%6dn%6d,a,b);,return 0;,理解以上几种格式的使用,,添加:,float x=1.25,b=289.4766;,输出,控制小数位数为,2,位。,将,float,改为,double,并比较,double,和,float,的区别*,/,printf(),中格式字符的作用:,理解常用的格式控制符:,%d%f%c%6d%6.2f%lf%ld,具体的格式说明符参见,P74,表,3.6,其他格式符的使用:对照例题,上机调试,熟悉其功能。,ch3.2.2,格式输入函数,2.scanf(),的一般调用格式:,scanf(,格式控制串,地址表列);,例如:设,int a,b,c;,输入三角形的三边。,方法一:格式控制串中只包含格式控制符,scanf(,%d%d%d,/*,常用*,/,方法二:格式控制串中包含普通字符,;,scanf(,a=%d,b=%d,c=%d,/*,不常用,,why?*/,用,scanf(),时数据的输入格式:,scanf(,%d%d%d,/*,常用*,/,运行时输入:,3 4 5,或者每个数据之后按一下回车。,总之,数据之间以空格或回车分隔即可。,scanf(,a=%d,b=%d,c=%d,运行时输入:,a=3,b=4,c=5,提示:必须在对应位置上输入对应的字符,否则出错。,比较两种方式:若无特别要求,哪种更方便?,scanf(),应用提示:,(,1,)地址表列中的每个参数都是地址,即指出数据的存放位置;如:,scanf(%d%d%d,&a,&b,&c,);,(,2,)约定:输入,数值数据,时,当遇到,空格、回车、,Tab,键,等则认为该数据结束。,若无特别要求,一般在格式控制串中不使用普通字符或其他复杂的格式符。,(,3,)格式符与数据类型要匹配。如,%d,控制输入整数,,%f,控制输入浮点数据,,%c,控制字符输入,,%s,控制字符串输入。,综合应用:,例,2,输入三角形的三边长(设为整数),求三角形的面积。,要求:输出三条边、面积,并且每个数据占,7,列宽度、小数点后保留,2,位。,分析:,首先定义变量保存要处理的数据和结果;,然后设计算法:输入、计算、输出结果,;,最后编写程序。,/*,输入三角形的三边,求面积*,/,#include,#include,int main(),int a,b,c;double s,area;,printf(n enter 3 sides(integer):);,scanf(%d%d%d,/,输入数据,s=(a+b+c)/2.0;,area=sqrt(s*(s-a)*(s-b)*(s-c);/,计算面积,printf(,3 sides:a=%7d,b=%7d,c=%7dn,a,b,c);,printf(,area=%7.2fn,area);/,输出结果,return 0;,enter 3 sides(integer):3 4 5,3,sides:a,=3,b=4,c=5,area=6.00,ch3.3,字符输入,/,输出,getchar(),和,putchar(),putchar(),函数:,调用格式:,putchar(c);,功能:,输出一个字符到显示屏的当前光标处。,如:,putchar(A);,char ch=*;putchar(ch);,putchar(65);/,输出,A,字符输入:,2.,getchar(),函数:,调用格式:,getchar(),函数功能:从标准输入设备(一般指键盘)读取一个字符,返回该字符的,ASCII,码。,常用以下方式得到输入的字符:,char ch;,ch=getchar();,例,4,:输入两个小写字符,转换成大写。,#include void main()char c1,c2;c1=getchar();c2=getchar();c1=c1-32;c2=c2-32;printf(%c%cn,c1,c2);,说明:,从,ASCII,码表中可以看到,:,每一个小写字母比它相应的大写字母的,ASCII,码大,32,。,语言允许字符数据与整数直接进行算术运算。,运行结果:,ab,混合数据输入,例,5:,用,scanf(),和,getchar(),实现:输入某商品的编号(整型)、类别(,AZ,字符型)、价格(实型),并输出该信息。,#include,int main(),int num;char class1;float price;,printf(enter NO:);,scanf(%d,getchar();,printf(enter class(AZ):);,class1=getchar();,getchar();,printf(enter price:);,scanf(%f,getchar();,printf(no=%d,class=%c,price=%6.2fn,num,class1,price);,return 0;,enter NO:10,enter class(AZ):B,enter price:80.8,no=10,class=B,price=80.80,数值型和字符型数据的混合输入,本程序中分别用,scanf(),和,getchar(),输入编号、价格和类别。,并且每次用输入数据后,用,getchar(),读取多余的回车符,以免影响后面的正确输入。,混合数据输入,有两种处理方法:,一是在一个,scanf,(),函数中实现所有数据的输入;,【,易出错,】,二是将数值与字符分别输入,而不是用一个,scanf,(),函数完成。,【,方便、灵活,】,通常采用第二种方法,用第一种方法输入时容易出错。,getchar(),的使用技巧:,放在程序的适当位置,用于暂停程序的执行,查看运行结果。,用法,1,:,在程序结束前添加语句,getchar();,可以实现在直接运行可执行文件时,显示结果、等待用户按回车键才结束。,用法,2,:,在大量数据输出时,在输出一段数据后使用,getchar(),语句,可以让用户能够看到每段输出结果,否则只能看到最后的一屏。,Enter,键的作用:,特别提示,:,从键盘输入数据时,并不是键入一个字符后立即将其送入主机,而是等到按下回车键(,Enter,)后,才能把这一行字符送入计算机的数据缓冲区,然后输入函数从缓冲区的第一个字符开始逐个读取数据。,只有当缓冲区中无数据可读时,才等待用户输入。,输入输出 小结,如何输入,/,输出?,scanf()printf(),getchar()putchar(),注意问题:混合输入的输入要合理使用,scanf(),和,getchar(),练习:输入一个学生的代号(字符)、年龄、高数成绩,按照以下格式输出:,NO,:,H,Age:19,Math:86.5,并且每一项占,8,列宽度。,注:以下例题供大家阅读、总结知识点及其用法。,3.4,顺序结构程序设计举例,例,6,交换两个整型变量的值。,分析:首先定义程序中要用到的变量,设两个整型变量为,a,、,b,。,然后设计算法:输入两个整数,a,、,b,交换,a,、,b,的值 输出交换后的,a,、,b,的值。,其中,实现 的方法有两种:,一是用第三个变量,c,暂存其中一个数,如程序,1,。,二是不使用第三个变量,利用其中一个变量保存两数之和,通过减法来实现,如程序,2,。,程序,1,:利用中间变量交换两个变量的值。,#include,int main(),int a,b,c;,/,定义变量,,a,、,b,表示输入的两个整数,,c,为中间变量,printf(n enter 2 integers to a,b:);,scanf(%d%d,c=a;a=b;b=c;,/*,交换*,/,printf(na=%d,b=%d,a,b);,return 0;,思考,:,若将三个交换语句的顺序调整,结果如何?,运行结果,:,enter 2 integers to a,b:4 6,a=6,b=4,程序,2:,不使用中间变量交换两个变量的值。,#include,int main(),int a,b;,printf(n enter 2 integers to a,b:);,scanf(%d%d,a=a+b;b=a-b;a=a-b;/*,交换*,/,printf(na=%d,b=%d,a,b);,return 0;,顺序结构程序设计,例,7,输入一个数字符号,并转换成相应的整数输出。如读入字符,8,,转换成整数,8,输出。,分析:,首先数据说明:定义程序中要使用的变量,设字符变量,ch,存放读入的字符,整型变量,d,存放转换后的整数。,然后设计算法:,输入一个字符给,ch,将字符,ch,转换成对应的数值,d,输出,d,。,其中第二步如何转换呢?,即:将字符转换成对应的数字。,利用,ASCII,码的编码规律:,0,,,1,,,29,的,ASCII,码值是连续的,即,48,、,49,、,5057,。,因此,只要将数字字符与字符,0,相减,结果就是该字符对应的数值。如,8-0,值为,8,。,程序:,#include,int main(),char ch;int d;,printf(n enter a character(09):);,ch=getchar();/*,读入一个字符并赋给,ch*/,d=ch-0;,printf(d=%d,d);,return 0;,思考:如何将数字转换成对应的字符呢?,第三章 小结:,程序处理数据的过程包括数据数据、计算、输出结果;,输入输出是相对于主机而言的;,printf(),函数实现了数据的格式化输出,,scanf(),实现了数据的格式化输入,学会根据数据的类型和要求的格式选择合适的格式控制符。,数值型和字符型数据混合输入时最好分别输入,每次输入数据后用,getchar(),读取多余的回车符。,作业:,改写习题,7,:从键盘输入圆的半径、圆柱体的高度,然后计算并输出结果。,(课后练习),预习作业:选择结构,1,、用流程图描述以下问题的算法:,(,1,)用户输入,x,,根据以下函数计算,y,的值并输出,。,(,2,),输入一个学生的高考成绩,判断他能否被山大录取(设录取分数线,578,分)。,(,3,)改进第二题:输入一个学生的高考成绩和考试类别(理工为,A,、文科为,B,),判断他能否被山大录取(为理工,584,、文科,578,)。,(,4,)用多分支描述:输入数字,17,,输出对应的星期几(如:输入,2,,则输出:,Today is Tuesday.,),y=,2x,3,-6x+7 (x0),x+5-1 (x=!=,例如下列关系表达式,:,ab,表示条件 “,a,大于,b“,,,x,!,=0,表示条件 “,x,不等于,0“,,,a+b,关系运算符,赋值运算符,且,=,高于,=!=,如:,f=ag+1,表示,f=(abb)a,问题,2:,如何表示复杂条件?,比如:温度在,1520,度之间,数学中的,a x b ,即判断,x,在,ab,之间,0y15&temperature600&score=85,(2),判断某年是润年应满足以下两个条件之一:该年能被,4,整除但不能被,100,整除,或该年能被,400,整除。该条件对应的逻辑表达式为:,year%4=0&year%100!=0|year%400=0,思考:,“a,和,b,中只有一个为,0”,的逻辑表达式为?,4.2.2,逻辑运算符和逻辑表达式,3,逻辑运算符的优先级和结合性,优先级:,!,算术运算符,关系运算符,&|,赋值运算符,结合性:,逻辑与(,&,)、逻辑或(,|,)的结合性,:,自左向右,,,逻辑非,!,的结合性,:,自右向左,随堂练习:(下页),运算符 的优先级与结合性练习:,设,int h=3,j=3,k=3;double x=0,y=2.3;,计算下列表达式的值:,h&j&k,等价于,(h&j)&k,hj&xy,等价于(,hj,),&(xy),hk|xy,等价于,(hk)|(xn),bigger=m;/,语句,1,else,bigger=n;/,语句,2,printf(nthe bigger num is:%d,bigger);,return 0;,if,语句练习,网购费用计算:,设网购的物品金额由用户输入,如果一次网购超过,500,元,则免运费;否则运费,10,元。计算并输出网购的全部费用(含物品金额和运费)。,2.if,语句的简化形式,应用场景:当条件不成立时若
展开阅读全文