第2章C语言程序设计基础_第1页
第2章C语言程序设计基础_第2页
第2章C语言程序设计基础_第3页
第2章C语言程序设计基础_第4页
第2章C语言程序设计基础_第5页
已阅读5页,还剩99页未读 继续免费阅读

下载本文档

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

文档简介

第2章C语言程序设计基础

本章主要内容2.1程序设计的引入2.2算法与流程图2.3标识符、常量与变量2.4基本数据类型2.5运算符与表达式2.6类型转换2.7常用库函数2.8程序设计基础应用举例问题1:已知三角形的边长,如何求它的面积?问题2:如何求一元二次方程的实根?2.1程序设计的引入

1.

计算机的工作过程存储程序控制——冯·诺依曼原理。

分析问题→编写程序并保存到计算机→执行程序→计算机按程序要求自动工作。2.1程序设计的引入

2.

程序设计过程

对于复杂程度较高的问题,必须从问题描述入手,经过对解题算法的分析、设计直至程序的编写、调试和运行等一系列过程,最终得到能够解决问题的计算机应用程序,此过程称为程序设计。

2.1程序设计的引入程序设计过程(1)问题分析(2)算法设计(3)程序设计(4)编辑、编译与连接(5)运行与调试(6)编写程序文档

3.程序设计思想

程序设计思想就是用某种语言编写程序的思考方式和步骤,是程序设计的灵魂。(1)结构化程序设计思想:以C语言为代表;(2)面向对象的程序设计思想:JAVA,C++语言;

(3)事件驱动的程序设计思想:代表语言有VisualBasic;

(4)逻辑式对象程序设计思想:代表语言Prolog、LISP。

2.1程序设计的引入2.2.1

算法的概念及特性1.算法的概念算法是一组(有限个)规则,它为某个特定问题提供了解决问题的运算序列。

算法—为解决某个问题而采取的方法和步骤。2.两大类计算机算法

数值运算算法(求数值解、成熟)

非数值运算算法(事务管理、广泛)2.2算法与流程图【引例】有黑和蓝两个墨水瓶,但却错把黑墨水装在了蓝墨水瓶子里,而蓝墨水错装在了黑墨水瓶子里,要求将其互换。算法分析:这是一个非数值运算问题。因为两个瓶子的墨水不能直接交换,所以,解决这一问题的关键是需要引入第三个墨水瓶。设第三个墨水瓶为白色,其交换步骤如下:2.2算法与流程图白瓶黑瓶蓝瓶①将黑瓶中的蓝墨水装入白瓶中;②将蓝瓶中的黑墨水装入黑瓶中;③将白瓶中的蓝墨水装入蓝瓶中。①②③2.2算法与流程图方法2:100+(1+99)+(2+98)+…+(49+51)+50=100+49×100+50加51次

对同一个问题,可有不同的解题方法和步骤。【例2.1】求1+2+3+…+100的算法。方法1:1+2,+3,+4,一直加到100加99次方法3:直接用高斯公式2.2算法与流程图算法是程序设计的灵魂。对数据的描述:数据结构(datastructure)对操作和行为的描述:算法(algorithm)著名计算机科学家沃思提出一个公式:

数据结构+算法=程序

算法+数据结构+程序设计方法+语言工具完整的程序设计:描述数据的类型、组织形式描述对数据的操作步骤2.2算法与流程图计算机解题的核心是算法设计。3.算法的特性(1)确定性:算法的每一步是确切定义且无二义性。(2)有穷性:一个算法必须在执行有限次运算后结束。(3)可行性:算法中的每一个步骤都能有效执行,并且得到确定的结果。(4)有零个或多个输入:在执行算法时需要从外界取得必要的信息。(5)有一个或多个输出:算法的目的是为了求解问题,无任何输出的算法是没有意义的。2.2算法与流程图常用算法介绍递推法——逐步推导的过程(倒推和顺推)。顺推法——从边界条件出发,根据递推关系式推出后项,由后项值按递推关系式推出再后项值,依此类推,直到求解。如:菲波拉契数列。倒推法——已知解或目标,根据递推关系,采用倒推手段,一步步倒推直至求得这个问题的初始值方法。如:猴子吃桃。递归法——一个对象部分地由它自己组成,或者自己定义自己。如:汉诺塔,阶乘问题枚举法——从可能的解集中一一列举各元素,用题目给定的检验条件判定哪些能使命题成立。分治法——也称二分法,缩小规模,分成N个。如:归并排序。模拟法——有些问题很难建立枚举、递归等模型,也建立不了数学模型,但可以根据问题的描述,用程序进行模拟,从而跟踪结果。如约瑟夫问题,猴子选大王。贪心法——若在求解一个问题时,能根据每次所得到的局部最优解,推导出全局最优或最优目标。如:背包问题。常用算法介绍2.2.2算法描述可以用不同的方法表示算法,常用的方法有:自然语言传统流程图结构化流程图伪代码2.2算法与流程图2.2.2算法描述1.自然语言

自然语言就是人们日常使用的语言,可以是汉语或英语或其它语言。

自然语言易懂却不直观,不严格。2.2算法与流程图2.2.2算法描述2.流程图用特定的图形符号来描述算法。用图形表示算法,直观形象,易于理解。起止框输入输出框处理框判断框流程线连接点虚线2.2算法与流程图【例2.2】求1+2+3+……+100的算法流程图开始s=0,i=1s=s+ii=i+1i>100输出s结束Ny3.N-S结构化流程图N-S图,也称盒图:完全去掉了带箭头的流程线,算法的所有处理步骤都写在一个大矩形框中。2.2算法与流程图N-S图表示简单,符合结构化思想。3.N-S结构化流程图计算1+2+3+……+100的算法用N-S图表示。s=0i=1s=s+ii=i+1当i>100输出s2.2算法与流程图4.伪代码

伪代码是介于程序代码和自然语言之间的一种算法描述方法,书写时比较紧凑、自由,也比较好理解,方便转化为程序。2.2算法与流程图开始

置s的初值为0

置i的初值为1

当i<=100,执行下面操作:使s=s+i

使i=i+1

{循环体到此结束}输出s的值结束也可以写成以下形式:

BEGIN{算法开始}

0

s1

iwhilei≤100{s+1

si+1

i}printsEND{算法结束}计算1+2+3+……+100的算法用伪代码表示思考和引申1.s=1+2+3+……+1002.s=1+3+5+……+993.4.结构化程序设计以模块化设计为中心,规定了三种基本结构:顺序结构、分支结构、循环结构。AB2.2.3结构化程序设计(1)顺序结构:按语句先后顺序依次执行。(2)

选择结构:程序执行时,根据不同的条件执行不同分支中的语句。ABYpNAYpN2.2.3结构化程序设计(3)循环结构:在给定条件下,重复执行多次。分为当型循环和直到型循环。①当型循环结构AYp1NAp2NY2.2.3结构化程序设计4.结构化程序设计原则采取以下方法保证得到结构化的程序:(1)自顶向下;(2)逐步细化;(3)模块化;(4)结构化编码;(5)避免使用goto语句。2.2.3结构化程序设计结构化程序设计的过程(1)确定算法:分析问题(建立数学模型,

选择公式),写出算法描述。(2)编写程序:用计算机语言写出实现算法的程序。(3)上机调试:输入(编辑)程序编译→

编译、连接、执行程序→输出结果。2.3.1标识符:用户根据需要定义的符号

C语言规定标识符只能由字母、数字和下划线3种字符组成,且第一个字符必须为字母或下划线合法的标识符:如sum,average,_total,Class,day,BASIC,li_ling不合法的标识符:M.D.John,¥123,3D64,a>b大小写字母是不同的字符标识符的长度因系统而异。不能将关键字作为标识符2.3标识符、常量与变量C语言中,标识符可分为3类:即关键字、预定义标识符和用户自定义标识符。关键字关键字,又称保留字,是编程语言预定义的具有专门用途的一些名字,不允许作为用户程序的标识符使用。

预定义标识符预定义标识符是指C语言提供的库函数名和预编译处理命令等。用户自定义标识符在编程时,要给一些变量、函数、数组、文件等命名,这类由用户根据需要自己定义的标识符称为用户自定义标识符。标识符的分类注意:见名知义、对齐与缩排、注释称为良好的源程序书写风格的“三大原则”。程序设计设计风格2.3.2常量1.常量:在程序运行过程中,其值不能被改变的量,分为直接常量和字符常量。整型常量:不带小数点的整常数。如1000,12345,0,-345实型常量:由0~9数字和小数点组成。十进制小数形式:如0.34-56.790.00.指数形式:如12.34e3(代表12.34

103)注意:e/E之前必须有数字,后面的指数必须为整数,且不能省略,如:

1e0e/E的前后不能有空格如:E3.5e3.6.e3e都是不合法的。八进制开头必须是数字“0”如:016,十六进制用“0x”或“0X”开头,如:0x10,0Xde1.以下选项中正确的整型常量是()A)12B)-20C)1,000D)4562.以下选项中正确的实型常量是()A)0B)3.14C)0.329*122(上标)D).8713.以下选项中不正确的实型常量是()A)2.707E-1B)0.8103E2C)-77.77D)456e-2思考与讨论2.3.2常量字符常量:由一对单引号括起来的单个字符,转义字符是一种特例。如:’a’

、’\n’字符串常量:由一对双引号括起来的字符序列。如:"boy"符号常量:用标识符表示一个直接常量,先定义后使用。#definePI3.1416

2.3.3变量2.变量:在程序运行过程中其值可以改变的量。它用标识符(变量名)来表示,在内存中占据一定的存储单元。变量的定义方法:

类型符标识符如:inta3;floatx;必须有一个名字作为标识,且符合标识符的命名规则。2.3.3变量定义变量时指定该变量的名字和类型变量名和变量值是两个不同的概念变量名实际上是以一个名字代表的一个存储地址习惯上,符号常量名用大写,变量名用小写,以示区别

从变量中取值,实际上是通过变量名找到相应的内存地址,从该存储单元中读取数据。

数据类型变量1[,变量2,…,变量n];变量初始化:定义时赋初值例:inta,b,c;floatdata;决定分配字节数和数的表示范围例:inta=2,b,c=4;floatdata=3.67;charch=’A’;intx=1,y=1,z=1;

intx=y=z=1;变量的使用:先定义,后使用变量定义位置:一般放在函数开头,可执行语句之前变量的定义

变量初始化的一般格式:[存储类型]数据类型

变量名1[=初值1],变量名2[=初值2],…;例如:floatr=3.5,l=3,area;//该语句定义了r,l,area三个实型变量,同时初始化了变量r,l。charc1,c2;//定义2个字符型变量c1,c2变量的初始化2.4基本数据类型程序处理的对象是数据。所谓类型,就是对数据分配存储单元的安排,包括存储单元的长度(占多少字节)以及数据的存储形式不同的类型分配不同的长度和存储形式C语言的数据类型

数据是操作的对象,数据类型是指数据的内在表现形式(代码、存储、运算)。数据类型构造类型指针类型(*)空类型(无值类型)void枚举类型enum数组类型结构类型struct共用体类型

union基本类型整型int字符型char实型(浮点型)单精度实型

float双精度实型

double基本数据类型类型符号关键字数的表示范围所占位数整型字符型实型有无(signed)int16-32768~32767(signed)short16-32768~32767(signed)long32-2147483648~214748364716unsigned

int0~65535320~4294967295unsigned

longunsigned

short160~65535有float323.4e-38~3.4e38有double641.7e-308~1.7e308有char8-128~127无unsignedchar80~255说明:数据类型所占字节数随机器硬件不同而不同,上表以IBMPC机为例。注意:可以使用sizeof(数据类型),由系统显示其占用字节数。

比如:sizeof(int),在VC++环境中结果为4,而在TC环境中结果为2。C语言的数据类型(2)长度: 长整型(后缀L): 23L o23L -ox123L

无后缀L时根据大小决定(3)符号位: 无符号整型(后缀U): 23U 256U 0xFFU

无后缀U的整数都是有符号的2.4.1整型数据1.整型常量(1)数制: 十进制: 23 0 -123

八进制(前缀0): 023 0 -0123

十六进制(前缀0x): 0x23 0x0 -0x123(1)整型变量的分类整型(int)

短整型(shortint或short)

长整型(longint或long)

无符号整型(unsigned)2.整型变量2.4.1整型数据VC++与TC中整型数据的字节数及取值范围某种数据类型所占内存的字节数随计算机系统不同而有差异。2.4.1整型数据(2)整型数据在内存中的存放形式整数在存储单元中以整数的二进制补码形式存放一个正数的补码是其本身。求负数补码的方法是:先将此数的绝对值写成二进制形式,然后对其后面所有各二进位按位取反,再加1。2.整型变量注意:整数在计算机内是以补码表示的:正数的补码和原码相同;负数的补码:将该数的绝对值的二进制形式按位取反再加1。2.4.1整型数据1.实型常量:分为单精度型(float)和双精度型(double)两种

小数形式:0.123345.0-34..6790.00.

注意:小数形式实型常量必须有小数点,小数点不能省略

指数形式:1.4E-3 -45e7 1e0 0e0

①字母e或E之前必须要有数字;

②字母e或E之后的指数必须为整数;

③在字母e或E的前后及数字之间不能插入空格精度:单精度(后缀F):6-7位有效数字,如:0.1000000000012F双精度:15-16位有效数字,如:0.1000000000012345无后缀实数的精度缺省为双精度。2.4.2实型数据2.实型变量单精度(float型):如floatx,y;双精度(double型):如doublea,b,c;长双精度(longdouble型)(1)实型数据在内存中的存放形式实型数据一般占4个字节(32位)内存空间,按指数形式存储。(2)实型变量的分类关键字字节数取值范围精度(有效位)float43.4E-38~3.4E+386~7double81.7E-308~1.7E+30815~16longdouble103.4E-4932~1.1E+493218~192.4.2实型数据2.4.3字符型数据字符类型的数据简称字符数据,用char表示,占一个字节(8个二进制位)内存。1.字符常量定义:用单引号括起来的单个普通字符。

如:’A’——65,’a’——97

’0’——48,’\n’——10

’\101’----’A’字符常量的值:该字符的ASCII码值。如:'a'、'A'2.转义字符:反斜线后面跟一个字符或一个代码值表示。2.4.3字符型数据转义字符转义字符的意义ASCII代码\n换行10\t横向跳到下一制表位置9\b退格8\r回车13\f走纸换页12\\反斜线符"\"92\'单引号符39\''双引号符34\a响铃7\0字符串结束符0\dddddd为八进制形式的ASCII值\xhhhh位为十六进制形式的ASCII值【例2.3】转义字符举例main(){printf("\101\x42C\n");printf("Isay:\"Howareyou?\"\n");printf("\\CProgram\\\n");printf("Turbo\'C\'");}运行结果:(屏幕显示)ABCIsay:”Howareyou?”\CProgram\Turbo'C'2.4.3字符型数据字符变量用来存放字符,且只能存放一个字符。例如:charc1,c2;unsignedcharc3,c4;字符型变量的赋值方法:

c1='a';c2='\101';c3=53;c4='\n';3.字符变量4.字符数据在内存中的存储形式及使用方法2.4.3字符型数据

字符'1'和整数1是不同的概念:字符'1'只是代表一个形状为'1'的符号,在需要时按原样输出,在内存中以ASCII码形式存储,占1个字节整数1是以整数存储方式(二进制补码方式)存储的,占2个或4个字节00110001

00000000000000012.4.3字符型数据3.字符常量与字符串常量不同1.字符串常量定义:用双引号(")括起来的字符序列。hello\0例:字符串"hello"

在内存中a

a\0例:'a'"a"例:空串""\0例:charch;ch=“A”;2.字符串的存储每个字符串尾自动加一个'\0'作为字符串结束标志。定界符不同长度不同存储要求不同2.4.4字符串常量

2.4.5符号常量用一个标识符代表的一个常量,称为符号常量。定义方法:#define标识符常量【例2.4】

#definePRICE30//大写,没有分号,没有等于voidmain(){ intnum,total;num=10; //10是常量 total=num*PRICE;//PRICE是符号常量 printf("total=%d",total);}注意:

(1)命名时见名知意,符合命名规则

(2)不占内存,只是一个临时符号,不能在程序过程中重新赋值,为了和变量区分,通常用大写字母来表示符号常量2.4.6空值

值集为空的类型,称为空值型,用void表示。void类型用于描述函数没有返回值、函数没有参数及无类型指针。

2.4.5符号常量2.5运算符和表达式名

称功

能符

号算术运算符用于各类数值运算+-*/%++--关系运算符用于比较运算><==>=<=!=逻辑运算符用于逻辑运算&&||!赋值运算符用于赋值运算=+=-=*=/=%=<<=>>=&=^=|=条件运算符三目运算符?:位操作运算符按二进制位进行运算&|~^<<>>逗号运算符

,求字节数运算符

sizeof指针运算符

*&特殊运算符

()[].->1.基本的算术运算符+:正号运算符(单目运算符)-:负号运算符(单目运算符)*:乘法运算符(乘号不能省略)/:除法运算符(两个整数相除结果为整数)%:求余运算符(左右操作数需为整数)+:加法运算符-:减法运算符2.5.1算术运算符和表达式两个整数相除的结果为整数,两个实数相除结果是双精度。如:5/3的结果值为1,舍去小数部分。如果除数或被除数中有一个为负值,舍入方向不固定。如:-5/3,有的系统中得到的结果为-1,在有的系统中则得到结果为-2。VC++采取“向零取整”的方法

如:5/3=1,-5/3=-1,取整后向零靠拢。%运算符要求参加运算的运算对象(即操作数)为整数,结果也是整数。如:8%3,结果为2。算术运算说明2.自增、自减运算符(++、--):使变量值加1或减1种类:前置++i,--i(先执行i+1或i-1,再使用i值)后置i++,i--(先使用i值,再执行i+1或i-1)说明:++--不能用于常量和表达式,如5++,(a+b)++++--结合方向:优先级:--++-------->*/%----->+-

(1)(2)(3)例:-i++i=3;printf("%d",-i++);//-3

例:j=3;k=5

j+++k;j++)+k;例:

inta,b,c; a=2; b=2; c=a++; printf("a=%d,c=%d\n",a,c); c=++b; printf("b=%d,c=%d\n",b,c);2.5.1算术运算符和表达式例:

j=3;k=++j;j=3;k=j++;j=3;printf("%d",++j);j=3;printf("%d",j++);a=3;b=5;c=(++a)*b;a=3;b=5;c=(a++)*b;

//k=4,j=4//k=3,j=4//4//3//c=20,a=4//c=15,a=4#include<stdio.h>main(){ inta,b; a=1; b=-a++; printf("%d%d\n",a,b);}//b=-(a++);//2-13.算术表达式和运算符的优先级与结合性(1)算术表达式

算术表达式是用算术运算符和括号将运算对象(也称操作数)连接起来的、符合C语言语法规则的式子。例如:a+b、(a*2)/c、(x+r)*8-(a+b)/7、++i、sin(x)+sin(y)等均为合法的算术表达式。(2)算术运算符的优先级与结合性运算符说

明优先级()圆括号

低-、++、--单目运算符,取负、自加、自减*、/、%双目运算符,乘、除、取余+、-双目运算符,加、减2.5.1算术运算符和表达式隐式转换什么情况下发生赋值转换------把一个值赋给与其类型不同的变量时运算转换------不同类型数据混合运算时输出转换------输出时转换成指定的输出格式函数调用转换------实参与形参类型不一致时转换运算转换规则:不同类型数据运算时先自动转换成同一类型2.5.1算术运算符和表达式显式转换(强制转换)一般形式:(类型名)(表达式)例(int)(x+y)(int)x+y(double)(3/2)(int)3.6说明:强制转换得到所需类型的中间变量,原变量类型不变例main(){floatx;inti;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);}结果:x=3.600000,i=3精度损失问题较高类型向较低类型转换时可能发生

【例2.6】

给定一个大写字母,要求用小写字母输出。解题思路:关键是找到大、小写字母间的内在联系同一个字母,用小写表示的字符的ASCII代码比用大写表示的字符的ASCII代码大322.5.1算术运算符和表达式#include<stdio.h>voidmain(){charc1,c2;c1='A';c2=c1+32;printf("%c\n",c2);printf("%d\n",c2);}//将字符'A'的ASCII代码65放到c1中//将65+32的结果放到c2中//用字符形式输出//用十进制形式输出2.5.1算术运算符和表达式2.5.2关系运算符和表达式1.关系运算符及优先级6种关系运算符:<、<、>、>=、==(等于)、!=(不等于)优先次序:前4种关系运算符(<,<=,>,>=)的优先级别相同,后两种(==,!=)也相同。前4种运算符的优先级高于后2种。例:c>a-b等价于c>(a-b)a>b==c等价于

(a>b)==ca==b<c等价于

a==(b<c)优先级别:算术运算符、关系运算符、赋值运算符、逗号运算符高

低如:c>a+bc>(a+b)a==b<ca==(b<c)注意:区分“=”与“==”a=b<ca=(b<c)2.5.2关系运算符和表达式2.关系表达式用关系运算符将两个表达式(可以是算术表达式或关系表达式,逻辑表达式,赋值表达式,字符表达式)接起来的式子,称关系表达式。例:a>b,a+b>b+c,(a=3)>(b=5),’a’<’b’,(a>b)>(b<c)关系表达式的值是一个逻辑值,即“真”或“假”。例:关系表达式“a>b”的值为“真”,表达式的值为1。

C语言中没有专用的逻辑值,1代表真,0代表假2.5.2关系运算符和表达式2.5.3逻辑运算符和表达式1.逻辑运算符及其优先次序逻辑运算符名

称使用规则逻辑表达式表达式的值!逻辑非单目运算符!a与a的真假相反&&逻辑与双目运算符a&&ba和b有假结果为假||逻辑或双目运算符a||ba和b有真结果为真!(逻辑非)→算术运算符→关系运算符→&&(逻辑与)→||(逻辑或)→赋值运算符高低1.逻辑运算符及其优先次序(1)&&(逻辑与)(2)||(逻辑或)(3)!(逻辑非)例:a&&b若a,b为真,则a&&b为真。

a||b若a,b之一为真,则a||b为真。!a若a为真,则!a为假。优先次序:!(非)

&&(与)

||(或)逻辑运算符中的“&&”和“||”低于关系运算符,“!”高于算术运算符

!(非)高算术运算符关系运算符&&(与)||(或)

赋值运算符低2.5.3逻辑运算符和表达式2.逻辑表达式用逻辑运算符将关系表达式或逻辑量连接起来的式子就是逻辑表达式。逻辑表达式的值应该是一个逻辑量“真”或“假”。例:设a=4,b=5:!a的值为0a&&b的值为1a||b的值为1!a||b的值为14&&0||2的值为1任何非零的数值被认作为“真”2.5.3逻辑运算符和表达式例:5>3&&8<4-!0

自左向右运算

1&&0逻辑值为08<3逻辑值为04-1值为3!0逻辑值为15>3逻辑值为1表达式值为02.5.3逻辑运算符和表达式

在逻辑表达式的求解中,并不是所有的逻辑运算符都要被执行。短路现象(1)a&&b&&c只有a为真时,才需要判断b的值,只有a和b都为真时,才需要判断c的值。(2)a||b||c只要a为真,就不必判断b和c的值,

只有a为假时,才判断b,a和b都为假才判断c例:(m=a>b)&&(n=c>d)当a=1,b=2,c=3,d=4,m和n的原值为1时,由于“a>b”的值为0,因此m=0,而“n=c>d”不被执行,因此n的值不是0而仍保持原值1。2.5.3逻辑运算符和表达式2.5.4赋值运算符和表达式1.简单赋值运算符赋值符号“=”就是赋值运算符,它的作用是将一个表达式的值赋给一个变量。赋值运算符的一般形式为:变量=表达式

例如:inta=3;

c=a*a+b*b;注意:被赋值的变量必须是单个变量,且必须在赋值运算符的左边。2.不同类型赋值转换表达式值的类型与被赋值变量的类型不一致,但都是数值型或字符型时,系统会自动将右边表达式的值转换成左边被赋值变量的数据类型,然后再赋值给左边变量。(截断和按符号扩展)(1)实型赋予整型,舍去小数部分。(2)整型赋予实型,数值不变,但将以浮点形式存放,即增加小数部分(小数部分的值为0)。(3)字符型赋予整型,由于字符型为1个字节,而整型为2个字节,故将字符的ASCII码值放到整型量的低八位中,高八位为0。整型赋予字符型,只把低八位赋予字符量。1.条件运算符条件运算符由两个符号组成(?和:一起使用)。要求有3个操作对象,称为三目运算符。(C语言中唯一的三目运算符)2.条件表达式的一般形式:表达式1?表达式2∶表达式3功能:先判断表达式1的值,如果成立就执行表达式2,

否则就执行表达式3使用场合:

若在if语句中,当被判别的表达式的值为“真”或“假”时,都执行一个赋值语句且向同一个变量赋值时,可以用一个条件运算符来处理。

2.5.5条件运算符和表达式(1)条件运算符的执行顺序:先求解表达式1,若为非0(真)则求解表达式2,此时表达式2的值就作为整个条件表达式的值。若表达式1的值为0(假),则求解表达式3,表达式3的值就是整个条件表达式的值。

(2)条件运算符优先级高于赋值运算符,低于关系运算符和算术运算符。

(3)条件运算符的结合方向为“自右至左”。

(4)“表达式2”和“表达式3”不仅可以是数值表达式,还可以是赋值表达式或函数表达式。(5)条件表达式中,表达式1的类型可以与表达式2和表达式3的类型不同。

2.5.5条件运算符和表达式例:

if(a>b)max=a;

elsemax=b;当a>b时将a的值赋给max,当a≤b时将b的值赋给max,可以看到无论a>b是否满足,都是向同一个变量赋值。可以用下面的条件运算符来处理:

max=(a>b)?a∶b;条件运算符条件表达式2.5.5条件运算符和表达式

2.5.6逗号运算符和表达式1.逗号运算符:又称“顺序求值运算符”。

逗号表达式的一般形式:<表达式1,表达式2>[,……,表达式n]2.逗号运算符的求值过程按从左到右的顺序依次求出各个表达式的值,并把最后一个表达式n的值作为整个逗号表达式的值。3.逗号运算符的优先级与结合性逗号运算符的结合性是自左向右,其优先级在所有运算符中是最低的。例如:x=(a=3,a*3,a+6);x=(a=3,3*3);inta=3,b=4,x,y;x=a+b,y=b*2+x,x+y;2.5.6逗号运算符和表达式2.5.7求字节运算符C语言的sizeof是一个单目运算符,sizeof运算符的作用是用于测试数据类型所占的字节数。其一般格式为:

格式1:sizeof(变量)或sizeof变量

格式2:sizeof(常量)或sizeof常量

格式3:sizeof(表达式)或sizeof表达式

格式4:sizeof(数据类型关键字)例如:shortinta=234,x,y,z,m;x=sizeof(a);

//将变量a所分配的内存字节数2赋给xy=sizeof(int);//在VC环境中y=4,而在TC环境中y=2z=sizeof(double);

//把double所需的字节长度8赋给zm=sizeof("abcd");//把字符串所占内存空间5赋给m,字符串结束标志也占用1个字节2.5.7求字节运算符2.5.8运算符的优先级和结合性在C语言中,运算符的运算优先级共分为15级,1级最高,15级最低。当一个表达式中有多个运算符时,优先级较高的先于优先级较低的进行运算。同一优先级的运算符,运算次序由结合方向决定。运算符的结合性分为左结合性(自左向右)和右结合性(自右向左)两种。一般情况下,单目运算符的优先级较高,赋值运算符优先级较低;算术运算符优先级较高,关系和逻辑运算符优先级较低;所有运算符中逗号运算符的优先级最低。多数运算符具有左结合性。单目运算符、条件运算符、赋值运算符等具有右结合性。C语言运算符的优先级与结合性详见附录B.2。2.6类型转换

变量的数据类型是可以转换的。转换的方法有两种,一种是隐式转换(自动进行),一种是强制转换。2.6.1隐式类型转换隐式类型转换的规则:(1)若参与运算量的类型不同,则先转换成同一类型,然后进行运算。(2)转换按数据长度增加的方向进行,以保证精度不降低。

(3)所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再作运算。(4)char型和short型参与运算时,必须先转换成int型。(5)在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换为左边量的类型。如果右边量的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度,丢失的部分按四舍五入向前舍入。【例2.7】阅读分析数据类型转换。#include<stdio.h>voidmain(){floatp=3.14159;ints,r=5;s=r*r*PI;printf("s=%d\n",s);}思考:若要使得程序的运算结果正确,应如何修改程序?2.6.2强制类型转换强制类型转换是通过类型转换运算来实现的,其一般形式为:(类型说明符)(表达式)其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。例如:(float)a//把a转换为实型(int)(x+y)//把x+y的结果转换为整型2.7常用库函数C语言提供了丰富的库函数,分为数学函数、字符函数、字符串函数、输入输出函数、动态分配存储函数等几大类。每一个函数都包含在一个后缀为.h的文件中(也称头文件),在程序中要使用系统提供的库函数,需要在程序的开头加上包含预处理命令。其格式如下:#include"头文件名"

或#include<头文件名>常用数学函数数学函数大都包含在math.h头文件中,在使用之前,在程序开头加上:#include<math.h>函数名功能sqrt(x)求x的平方根,x≥0log(x)log10(x)求自然对数(以e为底的对数),x>0求以10为底的对数,x>0exp(x)求以e为底的幂值,即求exabs(x)求整数x的绝对值fabs(x)求实数x的绝对值pow(x,y)幂函数,求xy的值srand(seed)初始化随机数生成器,不同的seed,不同的随机整数rand()随机函数,产生一个在(0,32767)的随机整数sin(x)求x的正弦值,x单位是弧度cos(x)求x的余弦值,x单位是弧度tan(x)求x的正切值,x单位是弧度常用数学函数数学函数函数含义示例结果abs返回整数的绝对值abs(6)6fabs返回实数的绝对值fabs(-3.2)3.2函数含义示例结果exp返回e的指定次幂exp(1)2.718281828pow(x,y)幂函数,求xy的值pow(2,3)8log(x)求自然对数log(e2)2sqrt(x)求平方根sqrt(64)8srand(seed),初始化随机数生成器,不同的seed种子,产生不同的随机整数,在使用中有时希望每次都得到不同的序列,那么就可以使用srand随机数种子生成器语句,使用在rand函数之前,这样可以使得rand函数产生的随机数为不同的序列。如:srand(100);y=rand();函数含义示例结果rnd()返回0-32767的随机数rnd()%100rnd()%9+10-99之间的随机数1-9之间的随机数数学函数

字符函数(头文件ctype.h)函数含义示例结果isalnum(ch)测试参数ch是否为字母或数字isalnum('3'),isalnum('A')真真假isalpha(ch)测试参数ch是否为字母isalpha('3')isalpha('A')假真isdigit(ch)测试参数ch是否为数字isdigit('8')isdigit('*')真假islower(ch)测试参数ch是否为小写字母islower('b')isupper(ch)测试参数ch是否为大写字母isupper('B')isspace(ch)测试参数ch是否为空格isspace('')字符串函数(头文件string.h)函数含义strcat(s1,s2)字符串连接函数,把字符串s2复制连接到字符串s1后面strchr(str,ch)查找字符函数,查找字符串str中某个给定字符(ch中的值)第一次出现的位置strcmp(s1,s2)字符比较函数,把字符串s1与另一个字符串s2进行比较。当两个字符串相等时,函数返回0;s1<s2返回负值;s1>s2返回正值。strcpy(s1,s2)字符复制函数,把s2字符串复制到s1字符

温馨提示

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

评论

0/150

提交评论