版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言程序设计第2章基本数据类型和运算第1章C语言概述第2章基本数据类型和运算第3章结构化程序设计第5章函数第6章指针第7章复合结构类型第8章编译预处理第4章数组及字符串●课程概述
附录2.1C语言的数据类型 2.2常量及其类型2.3变量及其类型2.4运算符与表达式2.5不同数据类型的输出2.6不同数据类型的输入
第9章位运算第10章文件基本数据类型和运算第2章教学目标►掌握C语言提供的整型、双精度型、字符型和字符串常量的表示方法,变量的定义和初始化方法►掌握算术运算、赋值运算、逗号运算、关系运算和逻辑运算的实现和运算规则►了解测试数据长度运算和位运算的基本功能►掌握不同类型数据的输入和输出操作2.1.1C语言具有的数据类型什么是数据类型?
数据类型是指数据的内在表现形式。不同的数据类型在内存中的存储方式不同,在内存中所占的字节数也不相同。C语言的数据类型2.1C语言的数据类型2.1.2C语言的基本数据类型什么是基本数据类型?
基本数据类型是不可再分的最基本的数据类型,是构造其他数据类型的基础。C语言的基本数据类型2.1C语言的数据类型数据类型关键字字符型char整型int浮点(单精度)型float双精度型double无值型voidchar型数据可以用signed、unsigned加以修饰,即可以有char、signed
char、unsignedchar三种形式int
型数据可以用signed、unsigned、short、long加以修饰,即可以有int、signed
int、unsigned
int、short
int、long
int、signedlongint、unsignedlongint等形式。对于int而言,当使用类型修饰后,关键字int可省略不写,例如signedlongint可以写成long,unsignedlongint可以写成unsignedlong。C语言生成目标代码质量高,程序执行效率高。(1)char型数据的修饰。(2)int型数据的修饰。(3)ANSIC标准有关规定2.1.3基本数据类型的修饰2.1C语言的数据类型2.八进制整数3.十六进制整数十进制是整数的通常写法,十进制整数没有前缀,其数码为0~9。例如:437、-124、65535、3723都是合法的十进制整数;而下列各数是不合法的十进制整数:●0x46:含有非法的前缀0x。●46A:含有非十进制数码A。2.2常量及其类型1.十进制整数2.2.1整型常量2.八进制整数3.十六进制整数八进制整数必须以数字0开头,即以0作为八进制数的前缀。数码取值范围为0~7。以下各数是合法的八进制数:●0123:表示八进制数123,即(123)8,其值为1×82+2×81+3×80,等于十进制数83。●0101:表示十进制数65。●-011:表示八进制数-11,即十进制数-9。以下各数不是合法的八进制数:●389:由于无前缀0,所以是非法的八进制数。●092B4:包含了非八进制数码B。2.2常量及其类型1.十进制整数2.2.1整型常量2.八进制整数3.十六进制整数十六进制整常数的前缀为0X或0x。其数码为0~9,A~F或a~f。以下各数是合法的十六进制整常数:●0X123:代表十六进制的123,即(123)16=1×162+2×161+3×160=256+32+3=291。●0XA0:表示十进制为160。●-0X12:表示十进制为-18。下面各数是不合法的十六进制整常数:●7A:没有前缀0X。●0X8K:含有非十六进制数码K。2.2常量及其类型1.十进制整数2.2.1整型常量2.2.2实型常量1.小数形式
2.指数形式2.2常量及其类型由正负号、整数部分、十进制小数点和小数部分组成。整数部分和小数部分是由数字0~9和小数点组成,其中小数点是不能缺少的。例如:0.0、32.0、4.654等均为合法的实数。3.程序举例2.2.2实型常量1.小数形式
2.指数形式2.2常量及其类型在小数的基础上,后面加阶码标志(“e”或“E”)以及阶码组成。其一般形式为:
aEn或aen其中的a为十进制数,E或e为阶码标志,n为十进制整数。需要注意的是,字母“e”或“E”之前必须有数字,且e后面的指数必须为整数,如e5、3.24e3.2、e等都是不合法的指数形式。3.程序举例2.2.2实型常量1.小数形式
2.指数形式2.2常量及其类型例2.1以实数的形式输出三个数。main(){
printf("%f\n",365.);
printf("%f\n",365);
printf("%f\n",365f);}该程序的运行结果如下:3.程序举例365.0000000.000000365.0000002.2.3字符型常量1.单引号表示法
2.转义字符表示法2.2常量及其类型对于可显示的字符常量,可直接用单引号将该字符括起来,如‘a’、‘9’、‘Z’、‘=’、‘+’、‘?’等。也可用字符的ASCII码值表示字符,如十进制数85表示大写字母'U',八进制数0102表示大写字母'B'。3.字符常量的特点2.2.3字符型常量1.单引号表示法
2.转义字符表示法2.2常量及其类型转义字符是一种特殊的字符常量。转义字符以反斜线“\”开头,后面跟一个或几个字符。转义字符具有特定的含义,它不同于字符原有的意义,所以称“转义”字符。常用的转义字符及其含义如下表所示。3.字符常量的特点2.2.3字符型常量2.2常量及其类型转义字符含义ASCII代码
\n换行10\r回车13\f换页12\t水平制表(Tab)9\v垂直制表11\b退格符(backspace)8\\反斜杠符"\"92\’单引号符39\”双引号符34\ddd
1~3位八进制数所代表的字符\xhh
1~2位十六进制数所代表的字符2.2.3字符型常量1.单引号表示法
2.转义字符表示法2.2常量及其类型(1)字符常量只能用单引号括起来,不能用双引号或其他符号。(2)字符常量只能是单个字符,不能是字符串。(3)C语言对字符型和整型是不加区分的,字符型常量被视为1字节的整数,其值就是该字符的ASCII码,可以像整数一样参加数值运算。例如,'C'的ASCII码为67,'C'-2的值为65,即字符'A'的ASCII码。3.字符常量的特点2.2.4字符串常量1.字符串常量
2.字符串的长度2.2常量及其类型3.字符串常量与字符常量的区别字符串常量是用双引号括起来的零个或多个字符序列。例如:“”,“Goldhuman!”,“010278”等都是字符串常量。两个双引号连写("")表示空字符串。当字符串中包含像单引号、双引号或反斜杠线这类有特定用途的字符时,应该分别使用转义字符,即分别用\‘、\“、\\来表示。例如:“Hesaid:\"hello!\"”代表的英文句子应该是“Hesaid:"hello!"”C语言规定,字符串中的字母是区分大小写的,所以"a"和"A"是不同的字符串。2.2.4字符串常量1.字符串常量
2.字符串的长度2.2常量及其类型3.字符串常量与字符常量的区别一个字符串中所有字符的个数称为该字符串的长度,其中每个转义字符只当做一个字符。例如,字符串"1234567","xyz","BbedsQd","\\ABCD\\","\101\102\x43\x44"的长度分别为7、3、7、6、4。C语言规定,每个字符串在内存中占用的字节数等于字符串的长度加1。其中最后一个字节存放的字符称为“空字符”,其ASCII码为0,书写时常用转义字符'\0'来表示,是字符串结束的标记。2.2.4字符串常量1.字符串常量
2.字符串的长度2.2常量及其类型3.字符串常量与字符常量的区别(1)字符常量只能用单引号括起来,不能用双引号或其他符号。(2)字符常量只能是单个字符,不能是字符串。(3)C语言对字符型和整型是不加区分的,字符型常量被视为1字节的整数,其值就是该字符的ASCII码,可以像整数一样参加数值运算。例如,'C'的ASCII码为67,'C'-2的值为65,即字符'A'的ASCII码。2.2.5符号常量1.符号常量的定义
2.符号常量的优点
2.2常量及其类型宏定义是用指定的标识符来代表一串字符,其一般形式为:#define标识符
字符串
例如:#definePI3.14159265其中,标识符PI称为宏名,也叫符号常量,习惯上用大写英文字母表示;字符串3.14159265称为宏体,没有类型和值的含义。1)宏定义2)const定义2.2.5符号常量1.符号常量的定义
2.符号常量的优点
2.2常量及其类型const定义的符号常量既有类型又有值,与宏定义不同,其一般的形式为:const数据类型标识符=常量表达式;例如:
constintmax=300;constfloatx=max+3.14;上述语句定义了一个整型符号常量max,其值等于300;一个浮点型符号常量x,其值为303.14。1)宏定义2)const定义2.2.5符号常量1.符号常量的定义
2.符号常量的优点
2.2常量及其类型使用const定义符号常量应注意以下几点:(1)const定义是以关键字const开头,以分号结尾的C语言语句。(2)每个const语句可以定义多个同类型的符号常量,相互之间用逗号隔开。(3)const定义既可以出现在函数外部,也可以出现在函数内部。不同位置定义的符号常量的作用域也不同。(4)const定义是在程序编译时完成对标识符的赋值,这个值被存放在内存的常量区中,而宏定义则是在编译时完成标识符的赋值,在编译时按上下文对替换的字符串进行解释,宏名作为标识符被放在内存的代码区中。2.3.1变量及其定义1.什么是变量2.变量的定义格式2.3变量及其类型3.变量定义时的注意事项变量是指在程序运行过程中其值可以发生变化的量。一般情况下,变量用来保存程序运行过程中输入的数据、计算获得的中间结果以及程序的最终结果。2.3.1变量及其定义1.什么是变量2.变量的定义格式2.3变量及其类型3.变量定义时的注意事项变量的定义格式为:
类型说明符变量名表;其中,类型说明符包括int、float、double、char等,用来指定变量的数据类型;变量名表如果有多个变量,则彼此间要用逗号分隔开;分号是语句结束符。例如:intx;/*定义了一个类型为整型的变量x*/inty,z;/*定义了一个整型变量y和一个整型变量z*/floata,b,c;/*定义了三个浮点型变量a、b、c*/2.3.1变量及其定义1.什么是变量2.变量的定义格式2.3变量及其类型3.变量定义时的注意事项(1)允许在一个类型说明符后,定义多个相同类型的变量。各变量名之间用逗号间隔。(2)类型说明符与变量名之间至少用一个空格间隔。(3)变量定义必须放在变量使用之前,一般放在函数体的开头部分。(4)最后一个变量名之后必须以分号“;”结尾。2.3.2整型变量2.3变量及其类型整型变量的基本类型符为int●
可以根据数值的范围将整型变量定义为基本整型、短整型、长整型和无符号型,具体如下所述:(1)基本整型:类型说明符为int。(2)短整型:类型说明符为shortint或short。(3)长整型:类型说明符为longint或long。(4)无符号型:类型说明符为unsigned。其中,无符号型又可与上述三种类型匹配而构成如下类型:无符号基本型:类型说明符为unsigned
int或unsigned。无符号短整型:类型说明符为unsignedshort。无符号长整型:类型说明符为unsignedlong。2.3.2整型变量2.3变量及其类型●各种无符号类型的量所占的内存空间字节数与相应的有符号类型的量相同。●有符号整型变量的最大取值为32767,而无符号整型变量的最大取值为65535。●以IBMPC机为例,各类整型变量所分配的内存字节数及表示范围如表所示。类型类型说明符字节取值范围
基本整型int
2-32768~32767
短整型shortint
2-32768~32767
长整型longint
4-2147483648~2147483647
无符号整型unsignedint
20~65535
无符号长整型unsignedlong
40~4294967295
2.3.2变量及其定义2.3变量及其类型3.例2.3的调整1.例2.2例2.2整型变量的定义与使用举例一。#include<stdio.h>main(){
int
x,y,m,n;/*指定x,y,m,n为整型变量*/unsignedu;/*指定u为无符号整型变量*/x=-21;y=18;u=40;m=x+u;n=y+u;
printf("x+u=%d,y+u=%d\n",m,n);}程序的运行结果为:
x+u=19,y+u=58
2.例2.32.3.2变量及其定义2.3变量及其类型2.例2.31.例2.2#include<stdio.h>main(){int
a,b,c,d;/*定义整型变量a、b、c、d*/longx,y;/*定义长整型变量x、y*/x=7;/*变量赋初值*/y=8;a=9;b=10;c=x+a;/*求x与a的加和*/d=y+b;/*求y与b的加和*/
printf("c=x+a=%d,d=y+b=%d\n",c,d);/*输出c、d值*/}程序的输出结果为:c=x+a=16,d=y+b=183.例2.3的调整2.3.2变量及其定义2.3变量及其类型2.例2.31.例2.2C语言中,可以在程序的一行中写入多条语句,因此上面的程序可以调整为:main(){int
a,b,c,d;longx,y;x=7;y=8;a=9;b=10;c=x+a;d=y+b;
printf("c=x+a=%d,d=y+b=%d\n",c,d);}3.例2.3的调整调整后的程序只是其表示形式发生了变化,程序的本质并没有改变,该程序的运行结果为:
c=x+a=16,d=y+b=182.3.3实型变量2.3变量及其类型在C语言中,实型变量分为单精度、双精度两类,具体如下所述:●单精度型:类型说明符为float。●双精度型:类型说明符为double。在一般系统中一个float型的数据占4个字节(32位)内存空间,一个double型的数据占8个字节(64位)内存空间。单精度实数提供7位有效数字,双精度实数提供15~16位有效数字,数值的取值范围随机器系统而异。每一个实型变量都应在使用前进行定义。例如:floatm,n;/*定义两个变量x和y,并且指定它们为单精度实型量*/doublea,b,c;/*指定a、b、c为双精度实型量*/1.实型变量2.例2.42.3.3实型变量2.3变量及其类型#include<stdio.h>main(){ floata; doubleb; a=5555.55555; b=5555.5555555555;
printf("%f\n%f\n",a,b);}1.实型变量2.例2.4该程序的运行结果如下:5555.5556645555.5555562.3.4字符型变量2.3变量及其类型字符型变量用来存放字符常量,一个字符型变量只能存放一个字符,不要存放一个字符串。字符变量的类型说明符是char。下面是几个字符型变量的定义:charm1,m2,m3;上述语句将m1、m2和m3定义为字符型变量,其内可以各放一个字符,下面给这三个字符变量分别赋值a、b、c:m1='a';m2='b';m3='c';1.字符型变量2.例2.52.3.4字符型变量2.3变量及其类型#include<stdio.h>main(){ charc1,c2; c1=97; c2=98;
printf("%c%c",c1,c2);
printf("%d%d\n",c1,c2); c1=c1-32;/*小写字母的ASCII码值比对应的大写字母大32*/ c2=c2-('a'-'A');
printf("%c%c\n",c1,c2);}1.字符型变量2.例2.5程序的运行结果为:ab9798AB2.3.5字符串变量2.3变量及其类型
C语言没有专门的字符串变量,可以用字符数组来实现。详见第4章的介绍。2.4.1运算符及运算对象2.4运算符与表达式1.运算符2.运算对象基本运算符C语言运算符号专用运算符算术运算符关系运算符逻辑运算符赋值运算符逗号运算符长度运算符位运算符基本算术运算符自增自减运算符位移位运算符位逻辑运算符强制类型转换运算符下标运算符成员运算符指针运算符2.4.1运算符及运算对象2.4运算符与表达式1.运算符2.运算对象运算对象也称为操作数,C语言中的运算对象有下列三种情况:(1)运算符的运算对象可以是一个,此时的运算符称为“单目运算符”。单目运算符如果放在运算对象的前面称为“前缀单目运算符”;如果放在运算对象的后面称为“后缀单目运算符”。(2)运算对象最常见的有两个,此时参与运算的运算符称为“双目运算符”。双目运算都是放在两个运算对象的中间。(3)运算对象还可以是三个,称“三目运算符”。三目运算符在C语言中只能是条件运算符,夹在三个运算对象之间。2.表达式语句表达式是用运算符与圆括号将操作数(运算对象)连接起来所构成的式子。C语言的操作数包括常量、变量和函数值等。例如,表达式sin(2.0)+(a-b)*5/sqrt(2.0)中包括的运算符有+、-、*、/,操作数包括常量5,变量a、b以及函数sin(2.0)和sqrt(2.0)。表达式按照运算符的运算规则进行运算可以获得一个值,称为“表达式的值”。1.表达式的定义2.4.2表达式2.4运算符与表达式2.表达式语句C语言中,在一个表达式的后面加上分号“;”就构成了表达式语句,即简单语句。有的表达式语句是有意义的简单语句,例如:x=x+1;和x++;都表示使x单元的内容加1。而有的表达式语句是无意义的,例如:3++;是无意义的表达式语句,因为这条语句没有引起任何存储单元中数据的变化。1.表达式的定义2.4.2表达式2.4运算符与表达式2.自增自减运算符3.算术表达式4.算术运算符的结合性和优先级(1)加法运算符“+”:加法运算符为双目运算符,即应有两个操作数参与加法运算。如5+4等。但“+”也可作正值运算符,此时为单目运算,如+5等。(2)减法运算符“-”:减法运算符为双目运算符。但“-”也可作负值运算符,此时为单目运算,如-5等。(3)乘法运算符“*”:乘法运算符为双目运算符,如8*9。但“*”在指针运算中也可以表示单目的“取内容”运算。1.基本算数运算符2.4.3算术运算符2.4运算符与表达式2.自增自减运算符3.算术表达式4.算术运算符的结合性和优先级(4)除法运算符“/”:除法运算符为双目运算符。参与的操作数均为整型时,结果也为整型,舍去小数。如果运算量中有一个是实型,则结果为实型。(5)求余运算符“%”:求余运算符也叫求模运算,为双目运算符,用来求两个整数的的余数,如:9%2=1。1.基本算数运算符2.4.3算术运算符2.4运算符与表达式2.自增自减运算符3.算术表达式4.算术运算符的结合性和优先级(4)除法运算符“/”:除法运算符为双目运算符。参与的操作数均为整型时,结果也为整型,舍去小数。如果运算量中有一个是实型,则结果为实型。(5)求余运算符“%”:求余运算符也叫求模运算,为双目运算符,用来求两个整数的的余数,如:9%2=1。1.基本算数运算符2.4.3算术运算符2.4运算符与表达式2.自增自减运算符3.算术表达式4.算术运算符的结合性和优先级1.基本算数运算符2.4.3算术运算符2.4运算符与表达式基本算术运算符的运算对象、运算规则与结合性如表所示。对象数名称运算符运算规则结合性单目正+取正值自右向左负﹣取负值双目加+加法自左向右减﹣减法乘*乘法除/除法模%整除取余2.自增自减运算符3.算术表达式4.算术运算符的结合性和优先级1.基本算数运算符2.4.3算术运算符2.4运算符与表达式例2.6运算符“/”应用举例#include<stdio.h>main(){ printf("%d,%d\n",30/8,-30/8); printf("%f,%f\n",30.0/8,-30.0/8);}程序的运行结果为:3,-33.750000,-3.7500002.自增自减运算符3.算术表达式4.算术运算符的结合性和优先级自增自减运算符都是单目运算符,用来对整型、字符型、指针型以及数组元素等变量进行算术运算,其运算结果与原来的类型相同,并存回原来的运算对象,例如:(1)++m:先使m的值加1,再使用变量m。(2)m++:先使用m的值,再使变量m加1。(3)--m:先使m的值减1,再使用变量m。(4)m--:先使用m的值,再使变量m减1。1.基本算数运算符2.4.3算术运算符2.4运算符与表达式2.自增自减运算符3.算术表达式4.算术运算符的结合性和优先级当出现难以区分的若干个+或-组成的表达式运算时,C语言规定,自左向右取尽可能多的符号组成运算符。例如:设整型变量m和n的值均为6,则:m+++n:应理解为(m++)+n,最后的计算结果为12,m的值为7,n不变。m---n:则理解为(m--)-n,最后的计算结果为0,m的值为5,n不变。1.基本算数运算符2.4.3算术运算符2.4运算符与表达式2.自增自减运算符3.算术表达式4.算术运算符的结合性和优先级1.基本算数运算符2.4.3算术运算符2.4运算符与表达式例2.7自增自减运算符应用举例。#include<stdio.h>main(){ inty=6;
printf("%d\n",++y);
printf("%d\n",--y);
printf("%d\n",y++);
printf("%d\n",y--);
printf("%d\n",-y++);
printf("%d\n",-y--);}程序的输出结果为:7667-6-72.自增自减运算符3.算术表达式4.算术运算符的结合性和优先级1.基本算数运算符2.4.3算术运算符2.4运算符与表达式例2.8由自增运算符构成的表达式应用举例。#include<stdio.h>main(){ intp,q; intx=8,y=8; p=(x++)+(x++)+(x++); q=(++y)+(++y)+(++y); printf("%d,%d,%d,%d",p,q,x,y);}程序的输出结果为:24,33,11,112.自增自减运算符3.算术表达式4.算术运算符的结合性和优先级1.基本算数运算符2.4.3算术运算符2.4运算符与表达式算术表达式是用算术运算符连接数值型的运算对象构成的表达式,用来完成数值计算的功能。如5%6+12,(3+5)/(6%4)等。使用算术运算符时,应注意以下几点:(1)乘法运算符“*”在表达式中既不能省略,也不能用“.”或“×”代替;除法运算符也不能用“÷”代替。(2)C语言没有乘方运算,可以通过连乘的方式实现乘方运算,也可以使用数学函数,如pow(10,n)表示10的n次方,pow(x,y)表示x的y次方。2.自增自减运算符3.算术表达式4.算术运算符的结合性和优先级1.基本算数运算符2.4.3算术运算符2.4运算符与表达式(3)表达式中不允许使用方括号或花括号,但允许使用多重圆括号嵌套配对使用。如x/(12*(a+b))。(4)算术表达式应能正确地表达数学公式。例如:数学表达式(4+y)/2b对应的C语言算术表达式为:(4+y)/(2*b)或(4+y)/2/b。(5)算术表达式的结果应该不超过其所能表示的数的范围。例如,最大的整数是32767,则32767+12就是错误的结果。2.自增自减运算符3.算术表达式4.算术运算符的结合性和优先级1.基本算数运算符2.4.3算术运算符2.4运算符与表达式运算符的结合性是指如果一个操作数左边和右边的两个运算符的优先级相同,应该优先计算的操作符。计算机在进行表达式的计算时,通常严格按照运算符的优先级和结合性进行,就算术表达式而言,括号最优先,其次是一元运算符,然后是乘、除和求模,最后是加、减;当同一优先级的运算符同时出现时,按它们的结合性确定其优先次序。详见附录一。3.关系表达式4.关系运算符的优先次序1.关系运算符2.4.4关系术运算符2.4运算符与表达式所谓“关系运算”实际上是“比较运算”,首先将两个值进行比较,然后判断其比较的结果是否符合给定的条件。关系运算符的运算对象、运算规则和结合性如表所示。对象数目名称运算符运算规则结合性双目小于<条件满足则为真,结果为1;否则为假,结果为0。自左向右小于等于<=大于>大于等于>=等于==不等于!=3.关系表达式4.关系运算符的优先次序1.关系运算符2.4.4关系术运算符2.4运算符与表达式在C语言中所有关系运算符优先级别如表所示。序号关系运算符优先级别1<优先级相同(级别高)2<=3>4>=5==优先级相同(级别低)6!=3.关系表达式4.关系运算符的优先次序1.关系运算符2.4.4关系术运算符2.4运算符与表达式用关系运算符将两个表达式连接起来的式子称为关系表达式。其中,表达式可以是算术表达式或关系表达式,也可以是随后将要学习到的逻辑表达式和字符表达式。例如:'a'+1<cm+10==-i-3*j由于关系表达式中的表达式也可以又是关系表达式。因此,C语言也允许出现嵌套的情况。例如:a!=(c==d)关系表达式的值是一个逻辑值,即“真”或“假”,分别用“1”和“0”表示。如(a=3)>(b=5),由于3>5不成立,故其值为0。3.关系表达式4.关系运算符的优先次序1.关系运算符2.4.4关系术运算符2.4运算符与表达式例2.9关系表达式应用举例。#include<stdio.h>main(){ charc='k';
inti=4,j=2,k=5; floatx=3e+5,y=7.56; printf("%d,%d\n",'a'+3<c,-i-2*j>=k+1);
printf("%d,%d\n",j<6,x-4.85<=x+y);
printf("%d,%d\n",i+j+k==-3*j,k==j==i+7);}程序的运行结果为:1,01,1
0,03.关系表达式4.关系运算符的优先次序1.关系运算符2.4.4关系术运算符2.4运算符与表达式例2.10设变量定义如下:chara1='a',a2='A';/*a1、a2可以看成整型,其值分别为97、65*/
intn1=65,n2=97;floatf1=0.3E1,f2=3.0001;则:a1>a2、n1<n2、f1==f2的值依次是1、1、0。a1>=n1、a2>=n2、f1==n1、a1==n2的值依次是1、0、0、1。f1>a1、f2<a2、f1==n1-62的值分别为0、1、1。2.逻辑运算符的优先级和结合性2.4.5逻辑运算符2.4运算符与表达式C语言中的逻辑运算符对两个关系式或逻辑值进行运算,共有逻辑与(&&)、逻辑或(||)、逻辑非(!)三个运算符。其中逻辑与和逻辑或是双目运算符,逻辑非是单目运算符。逻辑运算符的运算规则常用真值表表示,如表所示。1.逻辑运算符及其运算规则3.逻辑表达式aba&&ba||b!a000010101110010111102.逻辑运算符的优先级和结合性2.4.5逻辑运算符2.4运算符与表达式逻辑运算符中逻辑非“!”的优先级最高,其次是逻辑与“&&”,最后是逻辑或“||”。与其他运算符相比,逻辑非的优先级高于算术运算符(当然也高于关系运算符)和赋值运算符,而逻辑与和逻辑或高于赋值运算符,但低于算术运算符和关系运算符,详见附录一。1.逻辑运算符及其运算规则3.逻辑表达式优先级2.逻辑运算符的优先级和结合性2.4.5逻辑运算符2.4运算符与表达式
三种逻辑运算符的结合性如下所述:(1)逻辑运算符“!”的结合性是自右向左的,也就是先计算最右边的“!”,再依次向左计算其他的逻辑运算。例如:“!!!!8”的计算顺序相当于“!(!(!(!8)))”,其结果为1。(2)逻辑运算符“&&”和“||”的结合性是自左向右的,即先计算最左边的“&&”或“||”,再依次向右计算其他的“&&”或“||”。例如:“8&&2&&0”的计算顺序相当于“(8&&2)&&0”,表达式的结果为0。1.逻辑运算符及其运算规则3.逻辑表达式结合性2.逻辑运算符的优先级和结合性2.4.5逻辑运算符2.4运算符与表达式用逻辑运算符连接关系表达式或其他任意数值型表达式就构成逻辑表达式。通常用逻辑运算符连接关系表达式,这时先计算关系表达式的值,然后再进行逻辑运算。C语言规定任何非0值都被视为逻辑真,而0则被视为逻辑假。例如:下面的表达式是判断变量char1的值是不是字母:char1>='A'&&char1<='Z'||char1>='a'&&char1<='z'1.逻辑运算符及其运算规则3.逻辑表达式2.逻辑运算符的优先级和结合性2.4.5逻辑运算符2.4运算符与表达式例2.11判断某一年是否为闰年。判断闰年的条件是符合下面两者之一:①能被4整除,但不能被100整除。②能被4整除,又能被400整除。上面的闰年判断条件可以用下面的逻辑表达式表示:(year%4==0&&year%100!=0)||year%400==0判断非闰年的逻辑表达式为:!((year%4==0&&year%100!=0)||year%400==0)或者(year%4!=0)||(year%100==0&&year%400!=0)1.逻辑运算符及其运算规则3.逻辑表达式2.逻辑运算符的优先级和结合性2.4.5逻辑运算符2.4运算符与表达式逻辑运算符、算术运算符和关系运算符之间的优先级比较如表所示。1.逻辑运算符及其运算规则3.逻辑表达式运算符优先级逻辑非(!)高低算术运算符关系运算符逻辑与(&&)和逻辑或(||)2.逻辑运算符的优先级和结合性2.4.5逻辑运算符2.4运算符与表达式在一个逻辑表达式中,如果有多个逻辑运算符,如下面的表达式:!m&&n||a<b&&c则C语言将按以下原则进行处理:(1)逻辑运算符!优先于逻辑运算符&&,逻辑运算符&&又优先于逻辑运算符||,即“!”为三者中最高的。(2)逻辑运算符中的“&&”和“||”低于关系运算符,而“!”高于算术运算符。例如:(m<n)&&(a>=b)可以写成m<n&&a>=b。1.逻辑运算符及其运算规则3.逻辑表达式2.4.6逗号运算符和条件表达式2.4运算符与表达式1.逗号运算符和逗号表达式2.条件运算符在C语言中逗号(,)也是一种运算符,称为逗号运算符。其功能是把两个表达式连接起来组成一个表达式,称为逗号表达式,有时也称为“顺序求值运算符”。如:8+9,6+3逗号表达式的一般形式为:表达式1,表达式2表达式的求值过程为:首先分别求两个表达式的值,得出结果后,以表达式2的值作为整个逗号表达式的值。例如,求逗号表达式“8+9,6+3”的值时,首先得出两个表达式的值分别为17,9;然后整个逗号表达式的值为9。2.4.6逗号运算符和条件表达式2.4运算符与表达式1.逗号运算符和逗号表达式2.条件运算符条件运算符由“?”和“:”组成,是一个三目运算符。其中,第一个运算对象可以是任何类型的表达式,通常按逻辑表达式来理解,后两个运算对象是类型相同的任何表达式。条件运算符的语法格式为:表达式1?表达式2:表达式3表达式1条件表达式取表达式2的值条件表达式取表达式3的值真(非0)假(0)2.4.6逗号运算符和条件表达式2.4运算符与表达式1.逗号运算符和逗号表达式2.条件运算符例2.12条件运算符应用举例。#include<stdio.h>main(){int
m,n,max;
printf("\nPleaseinputtwonumbers:");
scanf("%d,%d",&m,&n);/*输入两个整数*/
printf("max=%d",m>n?m:n);/*用条件运算符求两个数的最大值*/}程序的运行情况为(用↙代表回车符):Pleaseinputtwonumbers:45,690↙max=6902.4.7长度(求字节)运算符2.4运算符与表达式1.长度运算符2.例2.13长度运算符sizeof是一种单目运算符,用来求某一类型变量的长度。其运算对象可以是任何数据类型符或变量。其语法格式为:
sizeof(表达式)其中的表达式可以是变量名、常量以及数据类型名。其功能是求表达式中变量名所代表的存储单元所占的字节数;或求表达式中常量的存储单元所占的字节数;或是求表达式中的数据类型表示的数据在内存单元中所占的字节数。2.4.7长度(求字节)运算符2.4运算符与表达式1.长度运算符2.例2.13#include<stdio.h>main(){ intn; shorts; unsignedshorta; unsignedintu1; longu2; unsignedlongu3; floatf; charc; doubled;
printf("sizeof(n)=%d\n",sizeof(n));2.4.7长度(求字节)运算符2.4运算符与表达式1.长度运算符2.例2.13
printf("sizeof(s)=%d\n",sizeof(s));
printf("sizeof(long)=%d\n",sizeof(long));
printf("sizeof(unsigned
int)=%d\n",sizeof(unsigned
int));
printf("sizeof(unsignedshort)=%d\n",sizeof(unsignedshort)); printf("sizeof(u3)=%d\n",sizeof(u3));
printf("sizeof(f)=%d\n",sizeof(f));
printf("sizeof(double)=%d\n",sizeof(double));
printf("sizeof(c)=%d\n",sizeof(c));}2.4.7长度(求字节)运算符2.4运算符与表达式1.长度运算符2.例2.13程序的运行结果为:sizeof(n)=2sizeof(s)=2sizeof(long)=4sizeof(unsigned
int)=2sizeof(unsignedshort)=2sizeof(u3)=4sizeof(f)=4sizeof(double)=8sizeof(c)=12.4.7长度(求字节)运算符2.4运算符与表达式1.长度运算符2.例2.13sizeof运算符使用上较灵活,例如,求整型int数据所占的字节数,可以使用以下三种方法:(1)求sizeof(int)。(2)求sizeof(100)。(3)使用inta;定义一个整型变量a,求sizeof(a)。2.4.8赋值运算符2.4运算符与表达式1.简单赋值运算符2.复合赋值运算符赋值表达式的格式为:变量名=表达式其中“=”称为赋值号或赋值运算符,赋值表达式的功能是计算“=”右边表达式的值并存入“=”左边的变量中。C语言提供两种赋值运算符:简单赋值运算符和复合赋值运算符。简单赋值运算符“=”是一种二元运算符,必须连接两个运算量,其左边只能是变量或数组元素(详见第4章),右边可以是任何表达式。例如:a=a+1,b=a+c等是正确的赋值表达式,而2=c,a+2=1等则是错误的赋值表达式。2.4.8赋值运算符2.4运算符与表达式1.简单赋值运算符2.复合赋值运算符复合赋值运算符由简单赋值运算符“=”和另外一个二元运算符组成,具有计算和赋值双重功能,共有10种,分别是+=、-=、*=、/=、%=、&=、|=、^=、<<=、>>=。其中,前五种复合赋值运算符具有算术运算和赋值的双重功能;后五种复合赋值运算符则具有位运算和赋值的双重功能。复合赋值运算符的规则是:Mop=N等价于M=MopN设op为一个二元运算符,M、N为两个操作数。例如:x/=2等价于x=x/2x%=y+5等价于x=x%(y+5)2.强制转换2.4.9数据之间的混合运算2.4运算符与表达式自动转换发生在不同数据类型的量混合运算时,由编译系统自动完成。自动转换遵循的规则如图所示。1.自动转换3.赋值表达式的强制转换char,shortintunsigneddoublelongfloat级别高级别低2.强制转换2.4.9数据之间的混合运算2.4运算符与表达式强制转换的格式为:(数据类型名)操作对象强制转换并不改变操作对象的数据类型和数值。例如(float)x确切的含义将x转换成浮点型参与运算,而x本身的数据类型和数值并没有任何改变。1.自动转换3.赋值表达式的强制转换2.强制转换2.4.9数据之间的混合运算2.4运算符与表达式例2.15高精度整数转换成低精度整数应用举例。#include<stdio.h>main(){doublem=65536;doublen=65535;
printf("\n%d,%d",(int)m,(int)n);
/*把m和n分别转换成int型的整数后输出*/}1.自动转换3.赋值表达式的强制转换程序的运行结果为:0,-12.强制转换2.4.9数据之间的混合运算2.4运算符与表达式例2.16强制类型转换在函数参数方面的应用举例。#include<math.h>#include<stdio.h>main(){ inta=100; doubleb; b=sqrt((double)a);/*求a的平方根*/
printf("\n%f",b);}1.自动转换3.赋值表达式的强制转换程序的运行结果为:10.0000002.强制转换2.4.9数据之间的混合运算2.4运算符与表达式当左边的变量与右边的表达式的数据类型相同时,不需要进行数据类型的转换。当左边的变量与右边的表达式的数据类型不相同时,系统负责将右边的数据类型转换成左边的数据类型。此时会发生以下两种情况:(1)转换后不丢失数据(2)转换后丢失数据。1.自动转换3.赋值表达式的强制转换2.5.1printf函数2.5不同数据类型的输出程序中用到printf函数时要在程序的开头部分用以下的命令:#include<stdio.h>或#include"stdio.h"printf函数是C程序设计中用得最多的输出函数,使用不同的格式转换符,可以将各种不同类型的数据输出到标准输出设备上。printf函数的调用格式为:
printf("格式控制字符串",输出项清单);其中,函数中的参数“格式控制字符串”用来规定输出项的格式,包括格式转换说明符、转义字符和普通字符三种形式。2.转义字符2.5.1printf函数2.5不同数据类型的输出1.格式转换说明符3.普通字符格式转换说明符与各个输出项相对应,用来规定待输出项的显示格式。下表列出了与不同种输出项对应的常用的格式说明符。格式转换说明符
功能%d以带符号的十进制形式输出整数(正数不输出符号)%f以小数形式输出单、双精度数,隐含输出6位小数%c以字符形式输出,只输出一个字符%s输出字符串%e按指数格式输出浮点数(规格化表示)%g选用%f或%e格式中输出宽度较小短的一种格式,不输出无意义的0%u以无符号十进制形式输出整数%o以无符号八进制形式输出整数(不输出前导符0)%x以无符号十六进制形式输出整数(不输出前导符0x)2.转义字符2.5.1printf函数2.5不同数据类型的输出1.格式转换说明符3.普通字符
%d格式转换说明符有以下几种形式:(1)%d,按整数的实际长度进行输出,整数有几位就输出几位。(2)%md,m为指定的输出宽度。如果整数的位数小于m,则左补空格,如果整数的位数大于m,则按实际的位数输出。(3)%ld,输出长整型。长整型的输出也可以指定宽度,即%mld,有关m的说明见(2)中的介绍。%d2.转义字符2.5.1printf函数2.5不同数据类型的输出1.格式转换说明符3.普通字符
%f用来以小数的形式输出实数,有以下几种用法:(1)%f,不指定字段宽度,由系统自动指定,整数部分全部输出,小数部分输出6位。(2)%m.nf,指定输出的实数的宽度为m,其中n位为小数位。如果实际长度小于m,则左侧补空格。(3)%-m.nf,指定输出的实数的宽度为m,其中n位为小数。如果实际长度小于m,则右侧补空格。%f2.转义字符2.5.1printf函数2.5不同数据类型的输出1.格式转换说明符3.普通字符
%c用来输出单个字符。一个0~255之间的整数可以用字符形式输出,字符也可以用0~255之间的整数形式输出。例2.20格式控制符“%c”的应用举例。#include<stdio.h>main(){ inta=100; charch='c';
printf("\na=%d,%c\n",a,a);
printf("ch=%d,%c\n",ch,ch);}%c程序的输出结果为:
a=100,d
ch=99,c2.转义字符2.5.1printf函数2.5不同数据类型的输出1.格式转换说明符3.普通字符
%s用来输出字符串。有以下几种用法:(1)%s,基本字符串输出形式。(2)%ms,输出的字符串占m列。如果字符串的长度大于m,按实际长度输出,如果小于m,则左侧补空格。(3)%-ms,输出的字符串占m列。如果字符串的长度大于m,则按实际长度输出,如果小于m,则右侧补空格。(4)%m.ns,字符串输出占m列。如果n小于m,则只取字符串左端的n个字符,这些字符输出在右侧,左侧补空格;如果n大于m,则n个字符全部输出。(5)%-m.ns,字符串输出占m列。如果n小于m,则只取字符串左端的n个字符,这些字符输出在左侧,右侧补空格;如果n大于m,则n个字符全部输出。%s2.转义字符2.5.1printf函数2.5不同数据类型的输出1.格式转换说明符3.普通字符例2.21格式控制符“%s”的应用举例。#include<stdio.h>main(){char*ch="Human";printf("%s,%7s,%-7s,%7.3s,%-7.3s,%3.2s",ch,ch,ch,ch,ch,ch);}%s程序的输出结果为(代表空格):Human,Human,Human,Hum,Hum,Hu2.转义字符2.5.1printf函数2.5不同数据类型的输出1.格式转换说明符3.普通字符
%e表示用指数形式输出实数,有以下几种用法:(1)%e,不指定输出数据所占的宽度和数字部分小数位数,由系统指定给出的6位小数;指数部分占5位,其中“e”占1位,指数符号(+或-)占1位,指数占3位,例如e+123。按规范化指数形式输出,即小数点前面只能有1位非零数字。(2)%m.ne,指定输出位共占m列,n为小数的位数。如果实际长度小于m,则左侧补空格。(3)%-m.ne,指定输出位共占m列,n为小数的位数。如果实际长度小于m,则右侧补空格。
%e的输出控制方法和实数控制字符%f类型,读者可参考%f的介绍,此处不再重复举例说明。%e2.转义字符2.5.1printf函数2.5不同数据类型的输出1.格式转换说明符3.普通字符转义字符主要用于控制数据的显示位置,如换行、换页、间隔长度。使用转义字符可以使程序的输出更加整齐。例2.23转义字符应用举例。#include<stdio.h>main(){printf("\na\tb\nc\td");}程序的输出结果为:a bc d2.转义字符2.5.1printf函数2.5不同数据类型的输出1.格式转换说明符3.普通字符格式控制字符串中除格式控制符和转义字符以外的其他字符都视为普通字符,与输出项无关,输出时按原样显示。1.putchar函数的一般格式2.用putchar函数输出字符2.5.2putchar函数2.5不同数据类型的输出C语言提供的putchar用于单字符的输出,其调用的一般格式为:putchar(c);其中c是一个字符型常量或变量,也可以是一个不大于255的整型常量或变量。该函数的功能是向标准输出设备(一般指屏幕终端)输出一个字符。程序中用到putchar函数时要在程序的开头部分用以下的命令:#include<stdio.h>或#include"stdio.h"1.putchar函数的一般格式2.用putchar函数输出字符2.5.2putchar函数2.5不同数据类型的输出用putchar输出可以显示的字符时,只需把待输出的字符作为其参数即可。例如,输出字符c可以有以下几种形式:(1)charx;x='c';putchar(x);(2)putchar('c');(3)putchar(99);用putchar还可以输出不可显示的字符,例如,输出一声响铃可以用以下两种形式:(1)putchar(7);(2)putchar('\007');再如用putchar('\n');可以控制换行。2.6.1scanf函数2.6不同数据类型的输入scanf函数可以用于所有类型数据的输入,使用不同的格式转换符可以将不同类型的数据从标准输入设备读入内存。程序中用到scanf函数时要在程序的开头部分用以下的命令:#include<stdio.h>或#include"stdio.h"scanf函数的调用格式为:
scanf("格式控制字符串",地址表列);其中的参数有“格式控制字符串”和“地址列表”两项。2.地址列表3.特殊控制4.注意事项常用的格式转换说明符如表所示。1.格式控制字符串2.6.1scanf函数2.6不同数据类型的输入格式转换说明符功能%d用来输入十进制整数%o用来输入八进制整数%x用来输入十六进制整数%f用来输入实数,可以用小数形式或指数形式输入%e输入一个浮点数%c用来输入单个字符%s用来输入字符串,将字符串送到一个字符数组中,在输入时以非空白字符开始,以第一个空白字符结束。字符串以串结束标志'\0'作为其最后一个字符%h用来输入短整型数据(可用%hd,%ho,%hx)%l用来输入长整型数据(可用%ld,%lo,%lx),以及double型数据(用%lf或%le)2.地址列表3.特殊控制4.注意事项scanf函数中的“地址列表”由一个或几个地址组成,多个地址之间用逗号隔开。如果格式控制中没有逗号,则输入的各个数之间可以使用一个或多个空格键、回车键、Tab键来分隔。scanf函数中的“&”是取地址运算符,后面接变量。如:&a表示取变量a的地址,“scanf("%d",&a);”的意思是将输入的数据存放到变量a所指的存储单元中。1.格式控制字符串2.6.1scanf函数2.6不同数据类型的输入2.地址列表3.特殊控制4.注意事项#include<stdio.h>main(){
int
a,b,c,d;
printf("Pleaseinputfournumber:\n");
scanf("%d,%d,%d,%d",&a,&b,&c,&d);/*输入4个整数*/
printf("Thenumberyouinputare:\n");
printf("%d,%d,%d,%d",a,b,c,d);
/*输出4个整数*/}1.格式控制字符串2.6.1scanf函数2.6不同数据类型的输入例2.24使用scanf输入4个在整数程序的输出结果为(↙表示回车):Pleaseinputfournumber:1,2,3,4↙Thenumber
youinputare:1,2,3,42.地址列表3.特殊控制4.注意事项在百分号“%”之后、转换控制字符之前加上一个星号“*”时,scanf函数将正常读入对应的数据,但不赋值。例如,%*c将抑制一个输入的字符;%*d将抑制一个输入的整数。1.格式控制字符串2.6.1scanf函数2.6不同数据类型的输入1)抑制赋值2.地址列表3.特殊控制4.注意事项#include<stdio.h>main(){
int
a,b;
scanf("%d%*c%d",&a,&b);
printf("%d,%d",a,b);/*输出a和b的值*/}程序的输出结果为:1.格式控制字符串2.6.1scanf函数2.6不同数据类型的输入例2.25“*”号应用举例10,202.地址列表3.特殊控制4.注意事项在百分号“%”之后、转换控制字符之前加上一个整数,可以规定从输入数据中接收的字符的个数。如果连续输入的字符个数超过指定的长度,则多余的字符被截断;反之若连续输入的字符的个数尚未达到指定的长度而提前遇到分隔符,则只接收分隔符之前的字符。1.格式控制字符串2.6.1scanf函数2.6不同数据类型的输入2)限制接收字符的个数2.地址列表3.特殊控制4.注意事项#include<stdio.h>main(){int
a,b;
printf("Pleaseinputtwonumber:\n");scanf("%4d%4d",&a,&b);
printf("a=%d,b=%d\n",a,b);}程序的输出结果为:1.格式控制字符串2.6.1scanf函数2.6不同数据类型的输入例2.26限制接收字符个数特殊控制举例a=123,b=32652.地址列表3.特殊控制4.注意事项在使用scanf函数时需要注意以下几个问题:(1)用%c作格式控制字符时,输入的任何字符均被当成有效的输入。(2)可以规定输入的字符的宽度,系统对输入的数据自动截取。(3)输入实数时,不能规定精度。(4)至少有一个输入项,输入项必须用地址表示。(5)格式转换说明符以外的字符按原样输入。1.格式控制字符串2.6.1scanf函数2.6不同数据类型的输入2.地址列表3.特殊控制4.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024铁路物业买卖正式协议文件版B版
- 2025年度海洋资源开发承包经营合同3篇
- 商品房销售合同范本
- 2025年私募基金代持资产清算与分配合同3篇
- 二零二四年度专业农场灭鼠及作物保护合同2篇
- 2025年度航空航天装备采购合同3篇
- 2025年新能源电动车租赁及绿色出行服务合同范本2篇
- 2025版铝模回收利用与环保处理服务合同4篇
- 二零二五年度环保节能设施安全生产合同范本3篇
- 二零二五年高速公路建设土石方供应合同3篇
- 劳动合同续签意见单
- 大学生国家安全教育意义
- 2024年保育员(初级)培训计划和教学大纲-(目录版)
- 河北省石家庄市2023-2024学年高二上学期期末考试 语文 Word版含答案
- 企业正确认识和运用矩阵式管理
- 分布式光伏高处作业专项施工方案
- 陈阅增普通生物学全部课件
- 检验科主任就职演讲稿范文
- 人防工程主体监理质量评估报告
- 20225GRedCap通信技术白皮书
- 燃气有限公司客户服务规范制度
评论
0/150
提交评论