版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学习目标
掌握C语言的基本字符、标识符和关键字
理解和掌握数据类型、常量与变量
掌握数据间的混合运算
理解和掌握运算符与表达式
遵章守法,做事细致耐心、一丝不苟的工匠精神案例导入案例2饮料交换问题小明、景天和婷婷三人常在一起玩游戏。有一天,小明带来一杯雪碧,而婷婷带来一杯可乐。景天看了看他两的饮料,突然问道:你两把饮料对换,但各自的杯不变,该怎么办?聪明的小明想了想,便立即给出了答案:准备同样大小的第三个杯子,把雪碧倒入第三个杯子,可乐倒入盛雪碧的杯子,然后将第三个杯子中的雪碧倒入盛可乐的杯子。知识学习【知识准备】两杯饮料交换问题,数值化后,将涉及到C语言数据类型、变量定义等相关知识。要完成上面的任务,必须要理解C语言的标识符、关键字、变量、数据类型、运算符和表达式等知识点。本章学习内容如下:2.1字符集、标识符和关键字2.2C语言的数据类型2.3常量与变量2.4运算符与表达式2.5综合应用第二知识空间:数据的字长及取值范围*2.1字符集、标识符和关键字2.1.1字符集C语言的字符集由下列字符构成:(1)数字字符:0~9;(2)大小写英文字母:a~z,A~Z;(3)特殊字符:!#%^&*_(下划线)-+=~<>/\|.,:;?‘“()[]{}(4)空白字符:空格符、换行符、制表符等。2.1字符集、标识符和关键字2.1.2关键字(保留字)在C语言中,有32个关键字。是由系统预先定义的专用词,它们有特别的含义。如:int用来定义整数类型。表2-1C语言关键字2.1字符集、标识符和关键字2.1.3标识符用来标识变量名、符号常量、数组名、函数名、文件名等的有效字符序列称为“标识符”(identifier)。通俗地讲,标识符就是名字。对标识符有如下规定:(1)由字母(a~z,A~Z)、数字(0~9)及下划线(_)三种字符组成,且不能以数字开头。(2)大写和小写字母代表不同意义(即大小写敏感)。(3)不能与关键字同名。(4)尽量“见名知意”,应该受一定规范的约束。2.2C语言的数据类型2.2.1数据分类2.2C语言的数据类型2.2.2整型数据1.整型的类别基本整型、短整型、长整型三大类。其中每一类又分为无符号和有符号两种情况,在Dev-C++编译系统中对应的数值范围见表2-2。类型类型标识符字节取值范围有符号基本整型int4-231~231-1无符号基本整型unsignedint40~232-1有符号短整型short[int]2-215~215-1无符号短整型unsignedshort[int]20~216-1有符号长整型long[int]4-231~231-1无符号长整型unsignedlong[int]40~232-1表2-2整型数据的分类
2.2C语言的数据类型2.整型数据的存储形式以二进制数补码的形式存储的。对有符号数据,最高位为符号位,1表示负数,0表示正数。对无符号数据,则没有符号位,所有的存储单元均为数据位。以短整型数据在内存中占2个字节(16位)为例,来说明有符号数据和无符号数据在内存中占用存储单元的区别,如下图所示。2.2C语言的数据类型2.整型数据的存储形式例如,13的补码是其原码1101,在内存中的存储形式如图2-3所示。而-13的补码是0xfff3,在内存中的存储形式如图2-4所示。00000000000011011111111111110011图2-3十进制数13在内存中的存储形式图2-4十进制数-13在内存中的存储形式2.2C语言的数据类型2.2.3实型数据1.实型数据的类别实型数据也称为浮点型数据。为单精度型(float)、双精度型(double)和长双精度型(longdouble)三种。实型数均为有符号数据,在64位Dev-C++编译系统中对应的数值范围见表2-3。类型类型标识符字节取值范围十进制精度单精度型float4-3.4X10-38
~3.4X10387位双精度型double8-1.7X10-308
~1.7X1030815位长双精度型longdouble16-3.4X10-4932
~1.1X10493219位表2-3实型数据的分类2.2C语言的数据类型2.实型数据的存储形式实型数据在内存中是以指数形式存放的。系统把一个实型数据分成小数部分和指数部分,分别存放。其中,指数部分采用规范化的指数形式。一个实型数据3.14159=+0.314159X101在内存中的存放形式如图2-5所示。图2-5实型数据的存储形式+(符号).3141591(指数部分)2.2C语言的数据类型2.2.4字符型数据字符型数据分字符型和无符号字符型2种,如表2-4所示。表2-4字符型数据类型分类类型类型标识符字节取值范围字符型char1-128~127无符号字符型unsignedchar10~2552.2C语言的数据类型2.2.4字符型数据【例2.1】字符型数据和整型数据通用举例。#include<stdio.h>intmain(){intc1,c2; //定义整型变量c1,c2c1='a’; //将字符常量'a'赋给变量c1c2=97; //将97('a'的ASCII码)赋给变量c2printf("c1=%c,c2=%c\n",c1,c2);//用字符格式输出变量c1,c2printf("c1=%d,c2=%d\n",c1,c2);//用整数格式输出变量c1,c2return0;}运行结果如下:c1=a,c2=ac1=97,c2=972.3常量与变量2.3.1常量常量可分为:整型常量、实型常量、字符常量、字符串常量和符号常量。1.整型常量常用整型常量有十进制、八进制和十六进制表示。(1)十进制常量没有前缀,所含数字为0~9,例如:198,-345,0。(2)八进制常量有前缀0(零),所含数字为0~7,例如:0571,0165。(3)十六进制常量有前缀0x(或0X),所含数字为0~9、A~F(或a~f),例如:0x5a2b,0xff65。2.3常量与变量1.整型常量整型常量即整型常数。常用整型常量有十进制、八进制和十六进制表示。
【例2.2】三种进制表示方法的输出。#include<stdio.h>intmain(){intx=4783,y=02537,z=0x12AF;printf("\nx:%d,%#o,%#x",x,x,x);/*x按十进制、八进制、十六进制格式输出*/printf("\ny:%d,%#o,%#x",y,y,y);/*y按十进制、八进制、十六进制格式输出*/printf("\nz:%d,%#o,%#x",z,z,z);/*z按十进制、八进制、十六进制格式输出*/return0;}运行结果如下:x:4783,011257,0x12af2.3常量与变量2.实型常量实型常量也称实数,又称浮点数,在计算机中是近似表示,且只有十进制表示,有小数形式和指数形式两种表示形式:(1)小数形式小数形式由正负号、数字和小数点组成。如:123.9、-20.234、0.1234等都是合法的实型常量。(2)指数形式指数形式也称科学记数法。指数表示法中1.23e4表示1.23X104,且1.23称为尾数,4称为指数。只含一位非零整数尾数的指数形式称为规范化的指数形式。例如:1.23e5,1.23e-5,2.03e2//规范化的指数形式12.3e4,0.123e6,0.0123e7//合法的指数形式,但非规范化的指数形式E5,3e2.5,1.23e//不合法指数形式,无尾数或指数是小数或无指数2.3常量与变量3.字符常量字符型常量是用一对单引号(即撇号)括起来的单个字符,占一个字节。例如:'a','b','2','$','A'、'#'//正确的字符常量'AB'、"AB"、"a"//错误的字符常量(1)一个字符常量的值是该字符对应的ASCII码值(参见附录A)。例如,字符常量'a'~'z'对应的ASCII编码值是97~123;字符常量'0'~'9'对应的ASCII编码值是48~57。显然'0'与数字0是不同的。(2)C语言中还允许一种特殊形式的字符常量,即以反斜线“\”开头的字符序列,称为转义字符。例如,printf()函数中的'\n',代表换行,而不是字符'n'。2.3常量与变量4.字符串常量用双引号括起来的字符序列。比如:"CHINA","","teacherandstudent","12345.456","a"等都是字符串常量。字符串常量一般用一个字符数组(参见第6章)来存储,每个字符占一个字节,存放其对应的ASCII码。在内存中存储时,系统自动加上串尾标志'\0'。每个字符串常量在内存中占用的存储单元数目应为该字符串长度(字符个数)加1。2.3常量与变量2.3.1常量5.符号常量用一个特定的符号来代替一个常量或一个较为复杂的字符串,这个符号称为符号常量。它通常由预处理命令#define来定义。符号常量一般用大写字母表示,以便与其他标识符区别。符号常量的一般定义形式:#define符号常量标识符常量值(或"字符串")2.3常量与变量2.3.2变量变量是指在程序运行过程中,其值可以改变的量。使用变量前必须先定义(声明),变量是用来保存常量的。变量有三个要素:名称、类型和值。1.变量的名字变量名字是一个标识符,所以要符合标识符的命名规则。例如:a,_abc,AREA,x1,x2//合法的变量名4ac,#g,a+1,fn!a,a$//不合法的变量名2.3常量与变量2.变量的定义变量在使用之前必须先定义,要声明自己的数据类型、存储类型。一般格式为:
数据类型变量名1,变量名2,…,变量n;例如:intiSum,iLength,x,y;//定义了4个整型变量iSum,iLength,x,yfloatfSum,fWidth;//定义了2实型(单精度)变量fSum,fWidth2.3常量与变量3.变量的初始化C语言允许在定义变量的同时使变量初始化。如:inta=2; //定义a为整型变量,初值为2charb='A'; //定义b为字符型变量,初值为'A'floatx=2.1234F; //定义x为实型变量,初值为2.1234F也可对被定义的变量的部分变量进行初始化。如intu,v=10,w; //定义u,v,w为整型变量,v的初值为102.3常量与变量【例2.5】单精度和双精度变量的用法。#include<stdio.h>intmain(){floata=123456.111F;//定义单精度变量a并初始化doubleb=123456.111;//定义双精度变量b并初始化printf("a=%f,b=%f\n",a,b);//输出变量a,b的值return0;}【例2.6】字符变量的定义形式和用法。#include<stdio.h>intmain(){charc1,c2;//定义字符型变量c1,c2c1='a';//将字符a放到变量c1中c2='\101';//将字符’\101’放到变量c2中printf("c1=%c,c2=%c\n",c1,c2);printf("c1=%d,c2=%d\n",c1,c2);return0;}2.4运算符与表达式2.4.1C语言运算符常用的C语言的运算符有以下几类:(1)算术运算符:+-*/%(2)关系运算符:<>>=<===!=(3)逻辑运算符:!&&||(4)强制类型转换运算符:()(5)自增、自减运算符:++――(6)赋值运算符:=(7)条件运算符:?:(8)逗号运算符:,(9)指针运算符:*&(10)求字节数运算符:sizeof(11)位运算符:<<>>~|^&(12)分量运算符:.->(13)下标运算符:[]2.4运算符与表达式2.4.2算术运算符和算术表达式C语言的算术运算符:基本算术运算符、强制类型转换运算符和自增、自减运算符。1.基本算术运算符基本算术运算符及其功能见下表。
运算符名称例子功能+加法运算x+y求x与y的和-减法运算x-y求x与y的和*乘法运算x*y求x与y的和/除法运算x/y求x与y的和%模运算x%y求x除以y的余数2.4运算符与表达式【例2.7】简单的算术运算。#include<stdio.h>intmain(){inta=5,b=2,c,d,e,f,g;c=a+b;d=a/b;e=a%b;f=-5%2;g=5%(-2);printf("c=%d,d=%d,e=%d,f=%d,g=%d\n",c,d,e,f,g);return0;}运行结果:c=7,d=2,e=1,f=-1,g=12.4运算符与表达式2.自增(++)与自减(--)运算符自增、自减运算符是单目运算符,即对一个运算对象施加运算,运算结果仍赋予该对象,见下表。运算符名称例子等价于++加1x++或++xx=x+1--减1x--或--xx=x-12.4运算符与表达式【例2.8】分析以下程序的运行结果。#include<stdio.h>intmain(){intx1=1,x2=1,y1,y2;y1=++x1; //使用x1之前先自身加1,等价{x1=x1+1;y1=x1;}y2=x2++; //使用x2之后再自身加1,等价{y2=x2;x2=x2+1;}printf("x1=%d,y1=%d\n",x1,y1);//输出x1=2,y1=2printf("x2=%d,y2=%d\n",x2,y2);//输出x2=2,y2=1printf("x1=%d\n",x1--); //先输出2,后减1,x1=1printf("x1=%d\n",--x1); //x1先减1后输出,x1=0return0;}2.4运算符与表达式2.4.2算术运算符和算术表达式C语言的算术运算符包括基本算术运算符、强制类型转换运算符和自增、自减运算符。3.算术表达式用算术运算符和括号将运算对象(也称操作数)连接起来的式子,称为算术表达式。运算对象可以是常量、变量、函数等。例如:2*(a+4)/18-2.98+'A'/*正确,合法的C算术表达式*/sin(x)+cos(x)/2,(int)a+4+(--z)/*正确,合法的C算术表达式*/sin300+y×e9/*错误,不是合法的C算术表达式*/9+|x|/*错误,不是合法的C算术表达式*/3a+5/*错误,不是合法的C算术表达式*/2.4运算符与表达式2.4.2算术运算符和算术表达式C语言的算术运算符包括基本算术运算符、强制类型转换运算符和自增、自减运算符。4.算术运算符的优先级和结合方向在表达式求值时,先按运算符的优先级别高低次序执行,再按运算符的结合方向结合(相同优先级时),例如,先乘除后加减。算术运算符的优先级和结合性见表2-8。运算种类结合性优先级
++,--从右到左高
低*,/,%从左到右
+,-从左到右表2-8算术运算符的优先级和结合性2.4运算符与表达式2.4.3数据间的混合运算与类型转换C语言中,不同的基本数据类型的数据可以进行混合运算。在进行混合运算时,先转换为同一类型,然后再进行运算。不同类型的数据的转换有两种方式:自动类型转换(隐式转换)和强制转换(显式转换)。1.自动类型转换(隐式转换)C语言允许在整数、单精度浮点型数据之间进行混合运算。在进行混合运算时,首先将不同类型的数据由低向高转换成同一类型,然后进行运算。转换规则如图2-10所示,其中,向左的横向箭头和向上的纵向箭头,表示当运算对象类型不同时的转换方向。2.4运算符与表达式2.4.3数据间的混合运算与类型转换2.强制类型转换(显示转换) 在C语言中,常常要把一些表达式的类型转换成所需的类型。强制类型转换的一般格式为: (强制转换的类型名)(表达式)功能:把表达式强制转换为指定的类型。例如:(int)(a)或(int)a /*将a强制转换成整型*/(double)(x+y) /*将x+y强制转换成double型*/(float)(45%8) /*将45%8的值强制转换成float型*/2.4运算符与表达式2.4.4位运算和位运算符所谓位运算,是指对一个数据的某些二进制位进行的运算。每个二进制位只能存放1位二进制数“0”或者“1”。通常把组成一个数据的最右边的二进制位称做第0位,从右到左以此称为第1位,第2位……最左边一位称做最高位,如图2-11所示。图2-11位(bit)的排列顺序示意图2.4运算符与表达式2.4.4位运算和位运算符1.按位与运算符“&”“按位与”是指两个运算对象按对应二进制位进行“逻辑与”运算,即当且仅当参加运算的两个对象的对应二进制位都为1时,结果的对应二进制位为1,否则为0。即0&0=0;0&1=0;1&0=0;1&1=1;例如,设shortx=3,y=5;x=0000000000000011(0x0003)y=0000000000000101(0x0005)x&y=0000000000000001(0x0001)主要应用:“与0清零、与1保留”,即将一个数据中的某些位清零,某些位保留不变。例如,将字符型常量’A’(ASCII码是0x41),把它的高4位保留不变,低4位清0。2.4运算符与表达式2.4.4位运算和位运算符2.按位或运算符“|”“按位或”运算是指两个运算对象按对应二进制位进行“逻辑或”运算,即:当参加运算的两个对象的对应二进制位有一个为“1”时,结果的对应二进制位为“1”。0|0=0;0|1=1;1|0=1;1|1=1;例如,设shortx=3,y=-5;x=0000000000000011(0x0003)y=1111111111111011(0xFFF3)x|y=1111111111111011(0xFFFb)主要应用:“或1置1、或0保留”,即常用于对一个数据中的某些位置1,某些位保留不变。例如,将一个无符号短整数0x0233的第9位置1,其它位保留不变。x=0000001000110011(0x0233)|0000000100000000(0x0100)0000001100110011(0x0333) 2.4运算符与表达式2.4.4位运算和位运算符3.按位异或运算符“^”“按位异或”运算是指两个运算对象按对应二进制位进行“逻辑异或”运算,即当参加运算的两个对象的相应二进制位一个为“0”,另一个为“1”时,结果的对应二进制位为1,如下所表示:
0^0=0;0^1=1;1^0=1;1^1=0;4.按位取反运算符“~”“按位取反”运算为单目运算,它将运算对象的各位取反。即将1变0,0变1,例如~024是对八进制数24(即二进制数00010100)按位求反。
即八进制数353。2.4运算符与表达式2.4.4位运算和位运算符5.左移运算符“<<”左移是将一个二进制操作数按指定的移动位数向左移,左边(高位端)溢出的位被丢弃,右边(低位端)的空位用0补充。左移相当于乘以2的幂。例如,操作数41883(0xa39b)的二进制是1010001110011011,左移一位变成18230(0x4736),左移两位变成36460(0x8e6c),运行过程如图2-12所示。10100011100110110xa39b移动前101000111001101100x4736溢出左移一位1010001110011011000x8e6c溢出左移两位图2-12左移位运算过程2.4运算符与表达式2.4.4位运算和位运算符6.右移运算符“>>”右移运算符“>>”的使用方法为:运算对象>>右移位数右移运算符将运算对象的每个二进制位同时向右移动指定的位数,从右边移出的低位部分被丢弃。对无符号数,左边空出的高位补0;对有符号数,正数的高位部分补0,负数高位部分补0还是1跟计算机系统有关。移入0的称为“逻辑右移”,移入1的称为“算术右移”。例如,操作数41883(0xa39b)的二进制是1010001110011011,右移一位变成20941(0x51cd),右移两位变成10470(0x28e6),运行过程如图2-13所示。2.4.4位运算和位运算符【例2.12】移位运算#include<stdio.h>voidmain(){unsignedshortinta=41883,a1,a2; printf("原值:a=%d---%#x\n",a,a); a1=a<<1;//左移一位
a2=a<<2;//左移二位
printf("左移:a<<1=%d---%#x\n",a1,a1); printf("左移:a<<2=%d---%#x\n",a2,a2); a1=a>>1; //右移一位
a2=a>>2;//右移二位
printf("右移:a>>1=%d---%#x\n",a1,a1); printf("右移:a>>2=%d---%#x\n",a2,a2);}运行结果如下:原值:a=41883---0xa39b左移:a<<1=18230---0x4736左移:a<<2=36460---0x8e6c右移:a>>1=20941---0x51cd右移:a>>2=10470---0x28e62.4运算符与表达式7.位复合赋值运算符类似于算术运算的复合运算符,位运算符和赋值运算符也可以构成“复合赋值运算符”。如表2-9所示。表2-9复合赋值运算符及意义2.4运算符与表达式2.4.5赋值运算符和赋值表达式所谓赋值,是指将一个数据存储到某个变量对应的内存存储单元的过程。赋值运算符有两种类型:基本赋值运算符和复合赋值运算符。1.基本赋值运算符在C语言中,等号“=”被作为是一种运算符,称为赋值运算符。一般形式:
<变量名>=<表达式>;功能:将右边表达式的值赋给左边的变量。例如:a=3;/*将右边数据3值赋给左边的变量a*/x=a+5;/*将右边表达式(a+5)的值8赋给左边的变量x*/2.4运算符与表达式2.4.5赋值运算符和赋值表达式所谓赋值,是指将一个数据存储到某个变量对应的内存存储单元的过程。赋值运算符有两种类型:基本赋值运算符和复合赋值运算符。2.复合赋值运算符在赋值运算符的前面加上一个其它运算符后就构成复合赋值运算符。一般形式:<变量><双目运算符>=<表达式>;等价于:<变量>=<变量><双目运算符><表达式>;2.4运算符与表达式2.4.5赋值运算符和赋值表达式所谓赋值,是指将一个数据存储到某个变量对应的内存存储单元的过程。赋值运算符有两种类型:基本赋值运算符和复合赋值运算符。3.赋值表达式由赋值运算符将一个变量和一个表达式连接起来的式子称为赋值表达式。一般形式:<变量><赋值运算符><表达式>例如,a=2是一个赋值表达式。对赋值表达式求解的过程是:将赋值运算符右侧的“表达式”的值赋给左侧的变量,而赋值表达式的值就是被赋值的变量的值。如a=2这个赋值表达式的值就是变量a的值2。2.4运算符与表达式2.4.6逗号运算符和逗号表达式逗号运算符为“,”。用逗号运算符把若干个表达式连接起来的式子称为逗号表达式,其一般形式为:表达式1,表达式2,...,表达式n例如:3+2,4+6x+3,y+z,s-1等都是在做逗号运算。(1)求解过程:从左到右的顺序逐个求解表达式1,表达式2,...,表达式n,最后一个表达式(表达式n)的值就是整个逗号表达式的值。例如,表达式3+2,4+6的值是10。(2)优先级:逗号运算符在所有运算符中的优先级别最低,且具有从左至右的结合性。案例2饮料交换问题【问题分析】小明和婷婷两人交换饮料,可用两变量值交换的数学模型描述:定义变量a,b表示两个杯子,杯中的饮料就是变量中存储的数值。不失一般性,不同的容器用不同的变量表示,容器中的不同物资代表不同数据。这涉及到C语言数据类型、变量的定义和引用。
案例2饮料交换问题【算法设计】把小明和婷婷的杯子分别有a和b表示,雪碧和可乐定义为变量a和b中存储的数值。借助于一个空杯子,用变量c表示,两杯饮料的交换算法如下:(1)将a杯中的雪碧倒入c杯子中;(2)将b杯中的可乐倒入a杯子中;(3)将c杯中的雪碧倒入b杯子中;参考代码如下:#include<stdio.h>voidmain(){ inta,b,c; a=1;/*小明杯中注入可乐*/ b=2; /*婷婷杯中注入雪碧*/ c=a;/
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 跨境电商社交媒体营销策略与转化率提升技巧
- 中考生物复习生物的多样性专项生物的分类单位题选汇编含答案
- 双减政策落实“双减”工作实施方案
- 白血病诱导缓解化疗方案选择
- 2026年农业保险ARC生物耦合风险评估方案
- 智能赋能建筑:2026智能开放式耳机施工安全新范式
- 婴童护肤重塑零售终端:从货架陈列到体验式服务的价值链重构
- 互联网产品经理思维训练
- 《春夏秋冬》:意境赏析与朗读指导
- 《明天要远足》:意境赏析与朗读指导
- 2026年中医药法普法竞赛试题及答案
- 2026重庆市城市建设发展有限公司招聘4人参考题库含答案详解【能力提升】
- 2026广西北海市不动产登记中心招聘临聘人员4人笔试参考题库及答案详解
- 2026-2030中国白酒行业市场发展分析及前景趋势与投资研究报告
- 外研版英语八年级下册Unit4语法之宾语从句(教案)
- 2026学年凉山彝族自治州盐源县四年级数学第二学期期末复习检测试题含答案
- 抗磷脂综合征诊疗专家共识(2026版)
- 2025年事业单位资产管理岗招聘笔试题目(附答案)
- 2026年确有专长考核模拟题库有答案详解
- 一例慢性肾衰竭血液透析患者的护理查房
- 2026年中国国新招聘笔试题库
评论
0/150
提交评论