版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第1章 C语言概述目录CONTENTS程序设计与程序设计语言C语言的发展历史C语言的特点C语言的词法记号C语言的简单实例1.11.21.31.41.5集成开发环境的介绍及使用方法1.6程序设计与程序设计语言1.1 程序设计程序设计语言程序设计步骤01分析问题设计算法编写程序运行程序,分析结果编写程序文档程序设计语言02第三代高级语言第四代非过程化语言第一代机器语言第二代汇编语言C语言的发展历史1.2 C语言之父C语言的发展历史C语言之父01C语言之父里奇(D.M.Ritchie)C语言的发展历史0210 七月 2022ALGOL60CPLBCPLBC1960年出现的ALGOL60是一种高级语言
2、,它离硬件比较远,不宜用来编写系统程序。1963年英国的剑桥大学推出了CPL(Combined Programming Language)语言。CPL语言在ALGOL60的基础上接近硬件一些,但规模比较大,难以实现。1967年英国剑桥大学的Matin Richards对CPL语言作了简化,推出了BCPL(Basic Combined Programming Language)语言。1970年美国贝尔实验室的KenThompson以BCPL语言为基础,又作了进一步简化。这个很简单的而且很接近硬件的语言就是B语言。B语言过于简单,功能有限,并且和BCPL都是“无类型”的语言。1972年至1973年
3、间,贝尔实验室的D.M.Ritchie在B语言的基础上设计出了C语言。C语言既保持了BCPL和B语言的优点(精练,接近硬件),又克服了它们的缺点(过于简单,数据无类型等)。最初的C语言只是为描述和实现UNIX操作系统提供一种工具语言而设计的。10C语言的特点1.3 C语言的特点语言简洁、目标代码质量高具有结构化的控制语句丰富的运算符可对物理地址进行直接操作较好的可移植性丰富的数据类型C语言的词法记号1.4 C语言的词法记号标识符字符集关键字字符集01英文字母:26个大写字母和26个小写字母阿拉伯数字:10个十进制的数字(09)空白符:空格符、制表符、换行符等特殊字符:通常由12个符号表示的运算
4、符下划线:(“_”)在C语言中起一个字母的作用。例如:算术运算符:+ - * / % + -关系运算符: = 条件运算符: ?: 和赋值运算符:= 其他分隔符: ( ) . , ;标识符02用来对各种用户定义对象如变量、函数、数组、文件等进行命名。C语言规定,标识符由字母、数字或下划线组成,它的第一个字符必须是字母或下划线。标识符中同一个字母的大写与小写被看作是不同的字符。如a和A是互不相同的标识符。02例:判断下列标识符是否合法,为什么? c 3xy x2+y3 x1 Mn3 max-b2 sumabc_5 $xz_1238 M.J.ttY (以数字开头) (出现非法字符+) (以号开头)
5、(出现非法字符-) (出现非法字符$)(出现非法字符.) 标识符03数据类型关键字void char short int unsigned signed longfloat doublestruct union enum控制类型关键字if else switch case default do while for break continue goto return存储类型关键字auto register static extern其他关键字const sizeof typedef volatile关键字关键字:有特殊含义和特定用途的标识符。语言关键字绝大多数是由小写字母构成的字符序列 C语言
6、的简单实例1.5 简单实例C函数基本结构C程序的基本结构C程序书写格式简单实例01【例1.1】在屏幕上输出一串字符“知识点亮人生,学习成就未来!欢迎进入C语言的世界!”。程序如下:#includeint main() printf(知识点亮人生,学习成就未来!欢迎进入C语言的世界!n); return 0; 程序运行结果:简单实例01【例1.2】输入两个整数,求两数之和。程序如下: #include int main() int a, b, sum;/*定义变量*/ scanf(%d%d,&a,&b);/*输入变量的值*/ sum = a + b;/*求和*/ printf(sum=%dn,s
7、um);/*输出两数的和值*/ return 0; 程序运行结果:12 81sum=93 #include int sum_f(int x, int y)/*定义函数sum_f,形式参数x、y为整型*/ int s;/*定义整型变量s*/ s = x + y;/*将x与y相加求和,并存入变量s之中*/ return s;/*返回,并将s的值作为函数运算结果带回本函数被调用之处*/ int main() int a, b, sum;/*定义变量*/ scanf(%d%d, &a, &b);/*输入变量的值*/ sum =sum_f(a,b);/*调用函数sum_f求出a、b之和,存入变量sum之
8、中*/ printf(sum=%dn, sum);/*输出两数的和值*/ return 0; 简单实例01【例1.3】输入两个整数,求两数之和。(求和功能使用自定义函数完成)2 3sum=5程序运行结果:C程序的基本结构02C程序由函数构成,函数是C程序的基本单位(1)一个C源程序至少包含一个main函数,也可以包含一个 main函数和若干个其它函数。(2)被调用的函数可以是系统提供的库函数,也可以是用户根据需要自己编写设计的函数。(3)main函数是每个程序执行的起始点。C程序的基本结构02C语言源程序源文件1源文件2预处理命令函数1函数2函数n源文件mC函数的基本结构03一个函数由函数首部
9、和函数体两部分组返回值类型 函数名(函数参数) 声明部分:定义本函数所用的变量 执行部分:由若干条语句组成命令序列函数首部(函数头)函数体C程序书写格式04C程序由函数构成,函数是C程序的基本单位(1)一行可以写几个语句,一个语句也可以写在多行上。(2)C程序没有行号。(3)每条语句的最后必须有一个分号“;”表示语句的结束。(4)使用 “/* */”可以对C程序中的任何部分作注释,可以提高程序可读性,使用注释是编程人员的良好习惯。集成开发环境的介绍及使用方法1.6 C语言程序编译、连接和执行过程Visual C+ 2010 的工作界面Visual C+ 2010使用介绍Visual C+ 20
10、10 的工作界面01C语言程序编译、连接和执行过程02用户编辑源文件.c文件编译目标文件.obj文件连接可执行文件.exe文件执行结果出错出错出错Visual C+ 2010使用介绍031、新建项目:直接点击“新建项目”或者选择菜单【文件】【新建(N)】【项目(P)】Visual C+ 2010使用介绍03在“新建项目”对话框中“已安装的模板”选项卡中选定“Visual C+”选项,并选定“Win32 控制台应用程序”项目类型,然后确定项目存储的位置,最后输入项目名称。Visual C+ 2010使用介绍03点击“下一步”Visual C+ 2010使用介绍03点击“完成”Visual C+
11、2010使用介绍032、添加源程序:在“解决方案资源管理器”选项卡中,鼠标右键单击“源文件”,在弹出菜单中选择【添加(D)】【新建项(W)】Visual C+ 2010使用介绍03在“新建项”对话框中,选择文件类型为“C+文件(.cpp)”,确定源文件存储位置,并输入文件名,扩展名为“.c”,最后点击【添加】按钮Visual C+ 2010使用介绍033、编辑源程序代码:在程序代码编辑区输入源程序代码Visual C+ 2010使用介绍034、编译:点击主菜单项【生成(B)】,在下拉菜单中单击【编译(M)】,对源文件进行编译Visual C+ 2010使用介绍035、连接:点击主菜单项【生成(
12、B)】,在下拉菜单中单击【生成解决方案(B)】,对项目进行连接Visual C+ 2010使用介绍036、执行:点击主菜单项【调试(D)】,在下拉菜单中单击【开始执行(不调试)(H)】,执行程序Visual C+ 2010使用介绍03运行窗口第2章 C语言基础目录CONTENTSC语言的数据类型常量和变量运算符与表达式数据类型转换2.12.22.32.4 C语言的数据类型2.1 常用编码方式和存储格式为什么要设置数据类型语言规定的数据类型为什么要设置数据类型?01 要使计算机能够通过程序来完成特定任务,首先要解决的是数据的存储问题,包括数据的存储编码格式、存储二进制数位,不同数据之间存在的某些
13、联系等等 。C语言提供了多种数据类型,用以适应不同情况的需要。数据类型不同,它所表达的数据范围、精度和所占据的存储空间均不相同。常用编码方式和存储格式02常用编码方式:原码、反码、补码、ASCII码。常用存储格式:定点型、浮点型。存取数据必须先确定数据的编码方式、存储格式和所占的存储长度, C语言中把这三者结合起来,给出几种固定的形式,这些形式就是最基本的数据类型。语言规定的数据类型03数据类型基本类型构造类型指针类型空类型字符型实 型整 型双精度实型单精度实型枚举类型结构体数 组共用体常量和变量2.2 什么是常量和变量符号常量直接常量变量变量的定义及初始化什么是常量和变量?01常量:指在程序
14、运行中,其数值不能被改变的量常量分为直接常量和符号常量变量:指以标识符为名字,其值可以改变的量直接常量02整型常量实型常量字符型常量字符串型常量直接常量分类0301040102直接常量021、十进制形式:与数学上的整数表示相同例如: 12, -100, 0整型常量012、八进制形式:在数码前加数字0例如: 012=1*81+2*80=10(十进制)3、十六进制形式:在数码前加0X例如:0 x12=1*161+2*160=18(十进制)注意! * 八进制的数码范围为07; 018 * 十六进制的数码除了数字09外, 还使用英文字母a f (或A F)表示1015。 如:0 x1e 直接常量021
15、、十进制小数形式:由数字和小数点组成例如: 3.4, 4., .3实型常量022、指数形式:十进制小数+e(或E)+十进制数整数例如: 12.5e-6 表示12.510-6 注意! 小数点不能单独出现; 0. .0 . e或E的两边必须有数,且其后面必须为整数; 如: 6E0.2 e5 直接常量021、用单引号括起来的一个字符例如:A、 1、?字符型常量032、用单引号括起来的由反斜杠()引导的转义字符例如:n、 t、101、0 x41字符形式含 义 n换行t横向跳格(Tab) v竖向跳格 b退格 r回车 反斜杠 单引号”双引号 xhh1到2位16进制ASCII码值所代表的字符 ddd1到3位
16、8进制ASCII码值所代表的字符注意!字符A的ASCII码为:65D(十进制)=41H(十六进制)=101Q(八进制) 字符A可以表示为A、x41、101。直接常量02字符串常量04字符串常量:是用一对双引号括起来的字符序列。 注意:每个字符串的后面都有一个0结束符。 如:“SHANGHAI”,“AbcdeFGHijk”,“How are you”。 符号常量03符号常量:是用标识符来表示一个数据;在程序中不能给它赋值。 定义形式: #define 标识符 常量数据 例如: #define PI 3.14159 在程序预处理时,凡是出现标识符PI的地方都将用数据3.14159来替换。 如: 2
17、*2.3*PI 就等价于 2*2.3*3.14159。变量04 变量是指以标识符为名字,其值可以改变的量。 变量代表计算机内存中的某一存储空间,该存储空间 中存放的数据就是变量的值。 在同一程序块中,变量不能被重复定义。 使用变量时必须“先定义,后使用”。 变量04整型变量实型变量字符型变量基本变量分类03010102变量04整型变量01整型变量分类根据数据所占的存储长度的不同分为:int、short、long; 同样存储长度的数据又分unsigned、signed; 故可组合出六种类型。整型变量的值域由机器中数据的存储长度决定 关键字 所占位数 取值范围 short 16 -32768327
18、67 unsigned short 16 065535 int 16 -3276832767 unsigned 16 065535 long 32 -21474836482147483647 unsigned long 32 04294967295变量04实型变量02实型变量的分类及值域关键字 字节数 取值范围 精度(位)float 4 3.410-38 3.41038 7double 8 1.710-308 1.710308 15变量04字符型变量03关键字:char 每个字符型数据在内存中占一个字节;包括ASCII字符表中的所有字符(可显示字符和非显示字符)变量的定义及初始化05变量初始化
19、在定义变量的同时给变量一个初始值。变量定义的语法规定可扩展为: =常量 ,=常量 ; 例:定 义 形 式 , ;例如:int a,b,c ; float x,y; char c1,c2; 或 int c1,c2; 定义变量就是在内存中划出一块相应类型的存储空间存放该变量的值。自己设定,满足标识符的规定。如:int,float,char;不可省int a=5, b=3; int a=b=c=3; int a,b,c; a=b=c=3; 运算符与表达式2.3 运算符分类关系运算符及表达式算术运算符及表达式逻辑运算符及表达式赋值运算符及表达式其它运算符运算符分类01赋值运算符按位运算符其它运算符算术
20、运算符关系运算符逻辑运算符关系运算符按位运算符关系运算符表达式:是由操作数和运算符组成的序列算术运算符及表达式023-51-1-33*5ab 错误a.b 错误3/5=03./5=0.63/5.=0.6+:加法/正号-:减法/负号*:乘法/:除法%:取余或模3+51+1+3a%b=a-n*b (a、b必须为整型,n为a/b的值)5%(-3)=5-(-1)*(-3)=2(-12)%(-5)=(-12)-2*(-5)=-2算术运算符01算术运算符及表达式02算术运算符的优先级和结合性02优先级:+(正号)-(负号)* / %+ -结合性:自右向左(+正号、-负号) 自左向右(*、/ 、%、+、-)结
21、合性是指同级运算时运算符的结合方向。 如 a#b#c (#代表某一运算符)若先运算a#b,再将其结果与c运算,称为左结合性;从左至右运算规则若先运算b#c,再将a与其结果运算,则称右结合性;从右至左运算规则算术运算符及表达式02算术表达式03 例1:已知: float a=2.0; int b =6,c =3; 求解: a*b/c-1.5+ A +abs(-5)=?12.0/34.0 - 1.52.5+65(int)67.5572.5算术运算符及表达式02自增与自减运算符 (重点和难点)04+i,-i先增(减)1,再使用ii+,i-先使用i,再增(减)1(1) 单独使用时+i;等 价i+;等
22、价i=i+1;(2) j=+i;(3) j=i+;若i的初始值为3i=4;j=4;i=4;j=3;注意:自增自减运算符的操作数必须为一个变量算术运算符及表达式02自增与自减运算符 (重点和难点)04结合性:自右向左例:i = 2; j = -i+;分析:(1)+、-、+(正号)、-(负号)是同级运算符,结合方向:自右向左。(2) -i+等价于-(i+)(3) 对于括号内的自增运算,又要先使用i,再使i增加1。运算结果:i的值为3,j的值为-2。优先级:第2级(单目运算) 关系运算符及表达式03关系运算符01关系运算:比较运算,比较两个操作数,看是否满足给定的关系。:小于 ,53, 35=:小于
23、等于,5=3,3:大于,53,35=:大于等于,5 =3,3 =5 ,与数学上()不同=:等于,5=3 ,与数学上(=)不同!=:不等于,5!=3 ,与数学上()不同关系运算符及表达式03关系表达式02用关系运算符将表达式连接起来的式子优先级结合方向:自左向右表达式的值:关系成立,即为真,结果为1;关系不成立,即为假,结果为0;算术运算符 =高 低= !=高 低逻辑运算符及表达式04逻辑运算符01!:逻辑非,一元运算符运算规则:取反,真假,假真&:逻辑与 。又称逻辑乘。运算规则:两个操作数均为真,结果为真。|:逻辑或 。又称逻辑加。运算规则:只要两个操作数有一个为真,结果为真。逻辑运算符及表达
24、式04逻辑表达式02用逻辑运算符将表达式连接起来的式子。优先级关系运算符高 低&逻辑与算术运算符高 低!逻辑非高 低高 低|逻辑或结合性!:自右向左&、|:自左向右逻辑运算符及表达式04例2:int a=5; float b=3.5;!a0!b0a&b1a|b1 !a&!b 0逻辑运算符及表达式04特别注意:03在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。(1)a & b & c例:a=0; b=1; c=2; d=a+&b+&- -c;d=(a+)&(b+)&(- -c);运算结果: d=0,a=1,b=1,c=2
25、求解方法:只有a为真(非0),才需要判断b的值,只有a和b都为真,才需要判断c的值。只要a为假,就不必判断b和c,运算立即中止。逻辑运算符及表达式04(2)a | b | c求解方法:只要a为真(非0),就不必判断b和c;只有a 为假,才判断b;a和b都为假,才判断c。例:a=0; b=1; c=2; d=a+|b+|- -c; d=(a+)|(b+)|(- -c); 运算结果: d=1,a=1,b=2,c=2 赋值运算符及表达式05赋值运算符= (数学上的等号)赋值表达式语法形式: =求值规则: 将“=”右侧表达式的值赋给左侧的变量结合性:自右至左 优先级:第14级 赋值运算符及表达式05例
26、3:分析以下各个表达式(1) x=(y=12)/4y值为12,x值为3,表达式的值为3(2) x=y=12/4y值为3,x值为3,表达式的值为3 (3) (x=y)=12/4语法错误。该赋值运算符左边不是变量,而是一个表达式赋值运算符及表达式05复合赋值运算符*=、/=、%=、+=、-=、=、&=、=、=共10个,由赋值运算符与算术、位运算符组成。复合运算符是一个运算符,但功能上,是两个运算符功能的组合。例:a+=ba*=b+c思考:a=2; a+=a*=a;以上语句执行结束之后,变量a的值是什么?相当于 a=a+b相当于 a=a*(b+c)优先级、结合性与赋值符相同其它运算符06语法形式:子
27、表达式1,子表达式2,子表达式n 求值规则:从左至右依次计算各子表达式的值优先级:最低 结合性:自左至右(左结合性) 表达式的值:最后一个子表达式的值。1、逗号运算符及逗号表达式其它运算符06例4: 表达式 a b y y=a=4,b=5,a+b; 4 5 4 y=(a=4,b=5,a+b); 4 5 9 y=(a=4,b=5),a+b; 4 5 5 1、逗号运算符及逗号表达式形式:sizeof 变量名sizeof (类型名/变量名)功能:求变量或某种数据类型所需的字节数。运算结果:整型数结合性:自右至左(右结合性) 优先级:第2级(单目运算) 2、sizeof运算符其它运算符06例5:cha
28、r a;float x;sizeof a,sizeof x,sizeof(char),sizeof(float) 其它运算符062、sizeof运算符其它运算符063、条件运算符有两个符号:?、:,它与三个操作数组成三元运算。一般形式: ? :求值规则和表达式的值:求解表达式1真(非0)求解表达式2假(0)求解表达式3表达式的值其它运算符063、条件运算符优先级:逻辑 条件 赋值结合性: 自右至左C语言中唯一的一个三目运算符其它运算符063、条件运算符特别说明条件表达式中的表达式2和表达式3可以是数值表达式、赋值表达式或函数表达式;如: max=ab?(a=5):b; ab?printf(“a
29、大于b”):printf(“a不大于b”);右结合性 ab?a=c?a:c:b=c?b:c 等价于 ab?(a=c?a:c):(b=c?b:c)表达式1和表达式2、表达式3的类型不同时,条件表达式的类型为后者类型中较高的类型。如: 5?x:y 表达式类型为字符型 ab?4.5:6 表达式类型为实型 4.5或6.0数据类型转换2.4 数据类型转换赋值转换自动转换强制转换数据类型转换C语言允许整型、实型、字符型数据进行混合运算。三种转换方式:自动转换赋值转换强制转换 自动转换(隐式转换)01intunsigned intlong intdoublefloatchar, short存储长度较短存储长
30、度较长总趋势:自动转换(隐式转换)01例6:int x=2;float y=1.6;char c=A;c+x*y=?65(char)2(int)1.6 (float)3.2(double)68.2(double)赋值转换02有效位不同,补充小数位例:float f=123456789; 123456792.00000 (7位)Double f=123456789; 123456789.000000 (15位)(1) 实型整型(字符型)取整数部分,去掉小数部分(2) 整型、字符型实型赋值转换02(3) 对char、int、short、long、unsigned型数据赋值符右边数据(a位)赋值符左
31、边变量(b位)a=b 原样照赋ab 截断高a-b位,送低b位ab无符号数据或正数:有符号数据:低位照赋,高a-b位符号扩展强制转换03形式:(类型名)表达式注意:强制类型转换时,并不改变操作数子表达式中变量的值和类型。例:int a=2, b=5; (float)b/a2.5(float)(b/a)2.0第3章 顺序结构程序设计目录CONTENTS程序的灵魂算法C语言基本语句数据的输入和输出顺序结构程序设计3.13.23.33.4程序的灵魂算法3.1 程序的灵魂算法算法概述算法的描述结构化程序设计方法算法是对问题求解过程的操作步骤的描述,是为解决一个或一类问题给出的一个确定的、有限的操作序列。
32、算法概述01算法概述01“算法”就是能让程序员编写出可靠、高效的计算机程序的“菜谱”按菜谱做菜的流程按算法解决问题的流程解决一个问题可以用不同的方法和步骤,因而针对同一问题的算法也有多种问题:找出1到1000之间能被9整除的数(考虑最优算法)算法1:设x=9 输出x的值 将x的值加9 判断x的值是否超过1000,没有超过则回到步骤,否则算法结束。 共需执行加法111次算法2:设x=1 x除以9,若余数为0,则x能被9整除,输出x的值 将x的值加1 判断x的值是否超过1000,没有超过则回到步骤,否则算法结束。 共需执行除法和加法各1000次算法3:设x=1 输出x*9的值 将x的值加1 判断x
33、*9的值是否超过1000,没有超过则回到步骤,否则算法结束。 共需执行乘法112次,加法111次算法概述01算法独立于任何程序设计语言,同一算法可以用不同的程序设计语言来实现,因此,算法才是根本。算法1用Python语言实现:x=9while x=1000: print(x) x=x+9算法1用C语言实现:#include int main()int x=9;while (xb?输出第二个数b输出第一个数aYi=1i=100s=s+ii=i+1Y输出sNNC语言基本语句3.2 C语言基本语句表达式语句控制语句函数调用语句复合语句空语句表达式语句01表达式语句可分为运算符表达式语句和赋值表达式语
34、句,其作用是计算表达式的值或改变变量的值。由表达式加上“;”组成的语句称为表达式语句。它的一般形式为:表达式;表达式语句01赋值表达式语句z=x+y; /*先计算x+y的值,再将值赋给z*/x=2; /*将x赋值为*/x=x*sin(x); /*先计算表达式x*sin(x),再将值赋给x*/运算符表达式语句x+y; /*加法运算语句,不保留运算结果*/i+; /*自增运算语句,使i的值加*/-i; /*自减运算语句,使i的值减*/02C语言有丰富的标准函数库,可提供各类函数供用户调用(参见附录)。标准库函数完成预先设定好的任务,可直接调用,不需要用户再编写程序。函数调用语句是由函数调用表达式后
35、加上“;”组成。它的一般形式为:函数名(参数列表);例如:scanf(“%d”,&a); /*输入函数调用语句,输入变量a的值*/printf(“中国是一个伟大的国家”) /*输出函数调用语句,原样输出引号中的字符串*/02调用标准库函数时,应注意:(1)程序中要包含相应的头文件例如:#include 或#include “stdio.h” /*文件名可放在尖括号中或双引号中*/(2)调用函数有的是为了得到函数返回值,这类函数的调用出现在表达式中,不作为函数调用语句,而作为表达式语句的一部分。得到函数返回值y=3*sin(x)+10;y=cos(2.6);在表达式中调用函数,实际是转而去执行一
36、段预先设计好的程序,求得结果后返回到调用点。完成相应任务 printf(“%6.4f”,a);调用printf不是为了得到返回值,而是为了完成结果输出的任务。控制语句032控制语句用于控制程序流程,以实现程序的各种结构方式,C语言共有11个控制语句,分为三类:分类语句形式功能说明条件判断语句if()条件语句,用于分别实现单/双/多分支选择结构():表示判断条件:表示内嵌语句if()elseif()else if()elseswitch()case多分支选择结构循环执行语句while()循环语句,用于实现循环结构do while()for()转向语句break 改变循环执行状态语句提前终止循环c
37、ontinue 改变循环执行状态语句提前结束本次循环goto 改变循环执行状态语句提前终止多重循环return从函数返回语句复合语句043注意!(1)复合语句中每条语句都必须以“;”结尾,右花括号“”后不能有分号。(2)允许多条语句写在同一行:如上例也可写为c=a; a=b; b=c;。把多个语句用“”括起来组成的一个语句称为复合语句。在程序中应把复合语句看作是单条语句而不是多条语句。c=a;a=b;b=c; 该复合语句完成了变量a,b的交换。空语句05空语句用一个分号表示一般形式为:;空语句占一个简单语句位置,执行该语句不做任何操作。程序中空语句可用来作空循环体。数据的输入和输出3.3 C语
38、言基本语句格式数据的输入/输出输入和输出的概念及实现字符数据的输入/输出输入输出的概念及实现01输入/输出是相对计算机主机而言的输出:从计算机向外部输出设备(如显示器、打印机等)输出数据输入:从外部输入设备(如键盘、鼠标等)向计算机输入数据注意!C语言本身不提供输入/输出语句,输入输出功能由C语言的标准输入输出(I/O)库函数提供。其对应头文件为“stdio.h”。字符数据的输入/输出02C语言标准I/O函数库提供了putchar()和getchar()两个函数来分别实现对于单个字符的输出与输入。字符数据的输入/输出02(1)putchar()函数 putchar()函数是向标准输出设备输出一
39、个字符, 其调用格式为: putchar(ch); 其中ch为一个字符变量或常量。 putchar()函数的作用等同于printf(%c, ch); #include int main() char c; /*定义字符变量*/ c=B; /*给字符变量赋值*/ putchar(c); /*输出该字符*/ putchar(x42); /*输出字母B*/ putchar(0 x42); /*直接用ASCII码值输出字母B*/ return 0; 从本例中的连续四个字符输出函数语句可以分清字符变量的不同赋值方法。 字符数据的输入/输出02(2)getchar()函数 getchar()函数是从键盘上
40、读入一个字符, 并带回显。它与前面两个函数的区别在于:getchar()函数等待输入直到按回车才结束, 回车前的所有输入字符都会逐个显示在屏幕上。但只有第一个字符作为函数的返回值。 例 #include int main() char c; c=getchar(); /*从键盘读入字符直到回车结束*/ putchar(c); /*显示输入的第一个字符*/ getchar(); /*等待按任一健*/ return 0; 字符数据的输入/输出02注意!(1)getchar函数只接受单个字符,输入多于一个字符时,只接收第一个字符。如教材例3.3输入65,则输出:a=6 。(2)getchar函数值可
41、赋给一个字符变量,也可赋给一个整型变量。如教材例3.3第4行也可定义为:int a;(3)执行getchar()输入字符时,键入字符后需敲回车键,程序才会响应继续执行后续语句。(4)putchar函数只能用于单个字符输出格式数据的输入/输出03(1) 格式输出函数printf()函数格式:printf(“格式控制字符串”,输出项列表); “格式控制字符串”:用双引号括起来的字符串。 它一般包括两部分,即格式字符串和非格式字符串(需原样输出)两部分组成,它的作用是控制输出项的格式和输出一些提示信息。 如果只有非格式字符串,则输出项列表省略。例 1 printf(“送你一朵小红花”);只有非格式字
42、符串原样输出结果非格式字符串:送你一朵小红花格式数据的输入/输出03例 2输出结果为:x的值为65,x对应ASCII字符为A(换行)格式数据的输入/输出03说明!(1)格式字符串与输出项列表在数量和类型上要按顺序一一对应。(2)格式字符串由%开始,并以格式字符结束,用于指定各输出项的输出格式。格式字符串用法说明%d输出带符号的十进制整数,正数的符号省略如:int x=65;printf(%d ,x); 输出:65%u以无符号的十进制整数形式输出如:int x=-1;printf(%u ,x); 输出:65535%o以无符号的八进制整数形式输出,不输出前导符o如:int x=65;printf(
43、%o , x); 输出:101%x或%X以无符号的十六进制整数形式输出,不输出前导符ox如:int x=65;printf(%x, x); 输出:41%c输出一个字符如:int x=65;printf(%c,x); 输出:A%s输出字符串如:char x=china;printf(%s,x); 输出:china%f以十进制小数形式输出实数(包括单、双精度),整数部分全部输出,小数输出6位(四舍五入,不足添零)。如:float x=4.8; print(“%f”,x); 输出:4.800000double x=4.6786786; print(“%f”,x); 输出:4.678679%e或%E以
44、数形式输出实数,要求小数点前必须有且仅有一位非零数字如:float x=0.06; printf(%e,x); 输出:6.000000e-002%g或%G自动选取f或e格式中输出宽度较小的一种使用,且不输出无意义的0如:float x=0.0600; printf(%g,x); 输出:0.06%输出百分号%函数printf()的常用格式字符串(3)格式修饰符:在%与格式字符中间还可插入格式修饰符,用于对输出格式进行微调,如指定数据域宽、小数位数、左对齐等格式数据的输入/输出03格式修饰符用法说明英文字母l表示以长整型输出整数或以双精度输出浮点数英文字母h表示以短整型输出整数指定域宽m (m为整
45、数)指定输出项所占列数当m为正整数,数据宽度小于m时,在域内右靠齐,左边用空格补足;数据宽度大于m时,按实际宽度全部输出。当m为负整数,则输出数据在域内左靠齐显示精度.n (n=0)n为正整数,位于域宽m之后,表示为m.n对于浮点数,用于指定输出小数位数对于字符串,用于指定从字符串左侧开始截取的子串字符个数%m.n表示输出实数共占m个字符位置(包括小数点),其中n位小数注意!函数printf()的格式修饰符例:格式输出示例1 #include 2int main()34 int x=65535;5 float y=123.1234567; 6 double z=12345678.1234567
46、;7 char w=p;8 printf(x=%hd,%ld,%6dn,x,x,x);9 printf(y=%f,%lf,%8.2lfn,y,y,y); 10 printf(z=%f,%lf,%5.4lfn,z,z,z);11 printf(w=%c,%8c,%-8c n,w,w,w);12 return 0;13格式数据的输入/输出03例 运行时输入:x=10,y=20非格式字符串部分“x= ,y=”部分需原样输入格式数据的输入/输出03(1) 格式输入函数scanf()函数格式:scanf(“格式控制字符串”,参数地址列表);“格式控制字符串”: 用双引号括起来的字符串,包括格式字符串和非
47、格式字符串两部分。格式字符串和printf函数相同,非格式字符串和printf函数相对(在printf中照原样输出,在scanf中照原样输入)格式数据的输入/输出03说明!(1)格式字符串与参数地址列表在数量和类型上要按顺序一一对应(2)格式字符串由%开始,并以格式字符结束,用于指定各输入项的格式。格式字符串用法说明%d输入十进制整数%o输入八进制整数%x输入十六进制整数%c输入一个字符,空白字符(包括空格、回车、制表符)也作为有效字符输入%s输入字符串,遇空白字符(包括空格、回车、制表符)时,系统认为读入结束;(但在开始读之前遇到空白字符会被系统跳过)%f或%e输入实数,以小数或指数形式输入
48、均可%输入一个百分号%函数scanf()的常用格式字符串(3)格式修饰符:与printf()类似,在函数scanf的%与格式字符中间也可以插入格式修饰符格式数据的输入/输出03格式修饰符用法说明英文字母l表示输入长整型数(如 %ld )或双精度浮点数(如 %lf )英文字母h表示输入短整型数或单精度浮点数。指定域宽m (m为整数)用十进制整数指定输入数据的宽度(即字符数),若输入字符数超出指定值,超出部分被截去。如:scanf(%5f,&Pi); printf(%f,Pi);输入:3.1415925 /*只是把 3.141 这 5 个字符存储在了变量中,其余部分被截去*/输出:3.141000
49、。函数scanf()的格式修饰符(4)scanf( )函数没有精度控制,即用scanf输入实型数据时不能规定精度如:scanf(%.2f”,&pi); /*非法的格式控制字符串*/(5)在输入字符数据时,若格式控制字符串中没有指定分隔符,则所有输入的字符均为有效字符(包括空格)。如:scanf(%c%c%c%c%c,&a,&b,&c,&d,&e);输入:Hi China输出:Hi Ch /*把 H 存储在变量 a 中,i 存储在变量 b 中,空格存储在变量 c 中,C存储在变量 d 中,h存储在变量 e 中,剩余部分被截去*/(6)在输入字符串时,如果输入空格,则认为输入已结束。如: char
50、 x=;scanf(%s,x);printf(%s,x);输入:John Smith输出:John /*scanf( ) 只把 John 存储在字符数组 x中,空格后的 Smith 被截去*/格式数据的输入/输出03程序结构程序设计举例3.4 例1:输入一个华氏温度,输出对应的摄氏温度。输出取1位小数。转换公式为 注意数学表达式到C语言表达式的转换 #include stdio.hint main() float c,f; scanf(%f,&f); c=5.0/9*(f-32); printf(%.1fn,c); return 0;例2:输入圆的半径,输出圆的周长和面积#include in
51、t main() float r,l,s; scanf(%f,&r); l=2*3.1415*r; s=3.1415*r*r; printf(n圆的周长为:%6.2f,l); printf(n圆的面积为:%6.2f,s); return 0;程序运行时输入:2.4程序运行结果:圆的周长为:15.08圆的面积为:18.10#include int main() float r; scanf(%f,&r); printf(n圆的周长为:%6.2f,2*3.1415*r ); printf(n圆的面积为:%6.2f,3.1415*r*r ); return 0;变量l和s,程序可改如下所示,运行结果
52、一样:例3:输入三个字符,将它们反向输出也可用格式数据输入/输出函数实现,程序可改如下所示,运行结果一样:#include int main() char ch1,ch2,ch3; ch1=getchar(); ch2=getchar(); ch3=getchar(); putchar(ch3);putchar(ch2);putchar(ch1); putchar(n); return 0;#include int main() char ch1,ch2,ch3; scanf(%c%c%c,&ch1,&ch2,&ch3); printf(%c,ch3); printf(%c,ch2); pri
53、ntf(%cn,ch1); return 0;#include stdio.hint main() int a,b,t; /*t就相当于空杯子*/ scanf(%d,%d,&a,&b); printf(a=%d,b=%dn,a,b); /*观察原来的值*/ t=a;a=b;b=t; printf(a=%d,b=%dn,a,b); /*观察交换后的值*/ return 0;例4:输入两个整数a、b,将它们交换,例如a为3,b为5,交换后a为5,b为3。 两两交换#include #include int main() float a,b,c,disc,x1,x2,p,q; scanf(a=%f,
54、b=%f,c=%f,&a,&b,&c); disc=b*b-4*a*c; p=-b/(2*a); q=sqrt(disc)/(2*a); x1=p+q; x2=p-q; printf(x1=%5.2fnx2=%5.2fn,x1,x2); return 0;第4章 选择结构程序设计目录CONTENTS简单选择结构多分支选择结构选择结构程序举例4.14.24.3简单选择结构4.1 简 单 选 择 结 构单分支if语句双分支if语句if语句分类if语句分类01if语句是条件选择语句,它通过给定的条件来进行判断,从而决定要执行的操作03单分支if语句0201双分支if语句多分支if语句单分支if语句0
55、2格式: if(表达式)语句;功能:首先计算表达式的值。若表达式的值为“真”(非0),则执行语句;若表达式的值为“假”(为0),则直接转到此if语句的下一条语句去执行。例如:if(xy)printf(”%d”,x);如果xy为真,则打印x的值,否则执行下面的语句。单分支if语句执行流程图例1:输入两个整数,输出其中的较大数运行结果:Input two numbers:-23 45max=45#include stdio.hint main() int a,b,max; printf(n input two numbers: ); scanf(%d%d,&a,&b); max=a; if (ma
56、xb) max=b; printf(max=%dn,max); return 0; 例2:小明的姐姐在假日旅行社工作,旅行社为了争取更多的游客,给出优惠措施:团购五人(及以上),团费8折。姐姐请小明帮忙,做一个可以根据输入的人数和团费,计算实际支付团费的程序。小明该怎么写这个程序呢?运行结果:输入人数p=6团费c=430总费用为:344.00#includeint main()int p;float c;printf(输入人数p=);scanf(%d,&p);printf(输入团费c=);scanf(%f,&c);if(p=5)c=c*0.8;printf(总费用为:%.2fn,c);retu
57、rn 0;双分支if语句03格式: if(表达式) 语句1; else 语句2;功能:首先判断表达式的值,若表达式的值为“真”(非0),则执行语句1;否则,执行语句2。例如:if(xy)printf(“%d”,x);else printf(“%d”,y);如果如果xy为真,则打印x的值,否则xy为假,执行else语句,打印y值。 双分支if语句执行流程图例3:用双分支if语句形式改写例1为:#include stdio.hint main() int a,b,max; printf(n input two numbers: ); scanf(%d%d,&a,&b); max=a; if (ma
58、xb) max=a; else max=b; printf(max=%dn,max); return 0;练习:用双分支if语句形式改写例2例4:从键盘输入一个整数,判断它是偶数还是奇数,并输出结果分析:一个数如果能被2整除,则是偶数,否则是奇数。我们用对2取余的方法来验证这个是否为偶数。若n%2余数为0,说明n是一个偶数,或n%2余数不为0,则n是一个奇数。#include “stdio.h”int main() int n; printf(input a number:); /*提示输入一个数 */ scanf(%d,&n); if (n%2=0) /*若n%2余数=0,则说明数n是一个偶
59、数 */ printf(The number is even!n); /*打印数n是一个偶数 */ else printf(The number is odd!n); /*否则,打印数n是一个奇数 */ return 0;多分支选择结构4.2 多分支if语句多分支switch语句if语句的嵌套switch语句和多分支if语句比较多分支if语句01多分支if语句一般形式为:if (表达式1) 语句1;else if (表达式2) 语句2; else if (表达式n) 语句n;else 语句n+1; 多分支if语句执行流程图例1:根据x的值,判断输出y的值。#include int main()
60、 int x,y; printf(please input x:); scanf(%d,&x); if(x0) printf(y=1n); else if(x0) printf(y=-1n); else printf(y=0n); return 0;运行结果:please input x:-7y=-1例2:小明在进一步的学习中了解到,根据车辆超速情况的不同,是有不同处罚的,(1)超过10%以内,不罚款,记3分;(2)超过10%以上未达20%的,罚50元,记3分;(3)超过20%以上未达50%的,罚200元,记3分;(4)超过50%以上未达70%的,罚1000元,记6分,可以并处吊销驾驶证;(5
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 船用桁项目运营指导方案
- 利用可再生资源生产电能行业营销策略方案
- 玩具棱镜项目营销计划书
- 侦探服务行业经营分析报告
- 药用薄荷醇项目运营指导方案
- 含药物的糖果产业链招商引资的调研报告
- 人寿保险承保行业市场调研分析报告
- 医用充气软垫产品供应链分析
- 化妆台梳妆台产业链招商引资的调研报告
- 市场调查的设计行业经营分析报告
- 油田酸化工艺技术
- JOA腰痛疾病治疗效果评分标准
- 东软信息安全体系管理培训2023
- 注塑模具设计英文参考文献
- 2022《中国诗词大会》真题题库汇总(含答案)
- 锅炉水压试验报告
- 医疗质量管理与管理工具
- ALC轻质内隔墙施工工艺
- 某隧道监控量测数据回归分析方法
- 第15讲 椭圆中6大最值问题题型总结(原卷版)
- 附表2.基础开挖施工作业票实用文档
评论
0/150
提交评论