基本数据类型及运算课件_第1页
基本数据类型及运算课件_第2页
基本数据类型及运算课件_第3页
基本数据类型及运算课件_第4页
基本数据类型及运算课件_第5页
已阅读5页,还剩192页未读, 继续免费阅读

下载本文档

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

文档简介

2023/9/191

第二章基本数据类型及运算本章主要内容:

数据类型、常量、变量、基本运算、类型转换及运算的优先级与结合性等。2023/8/61

第二章基本数据2023/9/192数据类型、运算符和表达式的概念

数据类型:数据存在的组织和形式。程序中用到的所有数据都必须指定其数据类型。

运算符:一些具有事先规定的运算功能的特定的符号。这里的运算功能可以是算术运算(加减乘除)、逻辑运算(与或非)或比较运算(大于小于等于),等等。C语言共有34种运算符。

表达式:按照运算符的性质,用运算符把数据连接起来以

达到数据运算目的而构成的式子。写表达式的最终目的是要进行计算它求出它的值。求解表达式的过程是由计算机完成的,因此,要想得到正确的结果,就必须写出正确的表达式。而一个表达式中往往包含多个运算符,所以必须熟悉每一种运算符的性质(优先级别和结合性),才能写出有正确求解结果的表达式。2023/8/62数据类型、运算符和表达式的概念数据类型:2023/9/193

常量与变量整型、浮点型、字符型数据变量的初始化各类数值型数据间的混合运算算术运算符与算术表达式赋值运算符与赋值表达式逗号运算符与逗号表达式第二章数据类型、

运算符与表达式2023/8/63常量与变量第二章数据类型、

运算符2023/9/1942.1基本数据类型2023/8/642.1基本数据类型2023/9/195数据类型数据类型:数据存在的组织和形式。数据类型是数据的基本属性描述的是数据的存储格式和运算规则.不同数据类型的数据,在内存中所需的存储空间大小、存储格式均有所不同,能支持的运算以及相应的运算规则也会有所不同.2023/8/65数据类型数据类型:数据存在的组织和形式。2023/9/196C的数据类型C的数据类型基本类型构造类型整型单精度型双精度型数组类型结构体类型浮点型联合类型指针类型字符型枚举类型空类型2023/8/66C的数据类型C的数据类型基本类型构造类型整2023/9/197

2.1基本数据类型数据是程序处理的基本对象。根据数据的不同性质和用途可分为不同的数据类型。不同的数据类型具有不同的存储长度、取值范围、允许的操作。数据类型关键字长度位数范围字符型char18-128—127整型int432

-231—(231_1)浮点型float432

双精度型double864+(10—10)-308308+(10—10)-38382023/8/672.1基本数据类型数2023/9/198

类型修饰符:shortintlongintunsignedintunsignedchar输出浮点型数有效位为6

7位十进制数位输出双精度型数有效位为15

16位十进制数位数据分为常量和变量。2023/8/68类型修饰符:2023/9/1992.2常量与变量2023/8/692.2常量与变量2023/9/1910常量

符号常量:用一个标识符代表一个常量实现方式:使用#define

预处理命令宏定义

直接常量:1,2,3;0.1,10.0;‘a’,‘1’;“hello”

常变量:C++中,可以使用const

关键字定义常变量程序运行期间,值不能被改变的量称为常量使用符号常量的好处是:从标识符名可以清楚地看出该常量的含义,做到“见名知意”在需要修改常量的值时可以做到“一改全改”,容易调整整型常量浮点型常量字符型常量字符串常量2023/8/610常量符号常量:用一个标识符代表一个常量2023/9/1911变量

C允许把值存放在变量中,每个变量都由一个变量名来标识。程序运行期间,值可以被改变的量称为变量

每个变量都必须有一个变量类型。

每个变量根据它的类型不同,在内存中占据一定数目的字节单元,该变量的值就存放在这些内存单元中。123prod变量名

prod实际上是一个符号地址变量prod

所占据的内存单元123是变量

prod的变量值内存单元的地址内存单元的内容在对程序编译时由系统给每一个变量按其类型分配内存单元,同时,系统内部维护着变量名和它的内存单元地址的对应信息。变量就是命名的内存单元2023/8/611变量C允许把值存放在变量中,每个变量都2023/9/1912在程序中使用一个变量之前,先要对它进行定义:为每个变量取一个名称(变量名),同时还要规定它的数据类型,以便编译程序根据不同的数据类型分配内存空间。2023/8/612在程序中使用一个变量之前,先要对它进行定2023/9/1913变量的命名规定合法的C变量名:area,sum,answer,month,name,Name,Step1,step2,number_of_student,average_score,_class1C语言中,变量(标识符)的命名规定:

只能由大小写字母、下划线和数字组成;开头的第一个字符只能是大小写字母或下划线;大小写是敏感的;不能与C的关键字重复;名字在整个程序中必须是唯一的;名字的长度不能超过系统的规定。非法的C变量名:3rd_entry(数字开头)all$done (包含非法字符$)theend (包含空格)

int (系统关键字)标识符是用来为变量、符号常量、函数、数组、类型、文件取名字的有效字符序列即用户为程序中各种对象取的名字。2023/8/613变量的命名规定合法的C变量名:C语言中,2023/9/1914

.关键字预先定义的具有特定含义的标识符。也称为保留字,不能另作他用。如:intcharfloatdoubleunsignedstructifdowhileswitchreturngotodefineincludeundefsizeof2023/8/614.关键字2023/9/1915

避免使用无意义的名字,应尽量做到“见名知意”;尽量使用代表变量实际含义的英文单词或缩写作标识符名;当名字包含多个单词时,通常使每个单词的首字母大写;以下划线开头的名字通常是系统内部保留的标识符名;在整个程序中保持统一的命名方式。变量的命名习惯C语言中,变量(标识符)的命名习惯:好的C变量名:CircleArea,TotalScore,UserSelection,choice,StudentNumber,AverageScore,SampleFrequency不是很好的C变量名:a,aa (不知何意)

numberofstudent

(全部小写难以辨认)

total

totals(名字太相似)2023/8/615避免使用无意义的名字,应尽量做到“见名2023/9/1916变量的定义和使用变量定义具有三个目的:⑴定义变量名;⑵定义变量类型;⑶向程序员描述该变量。C语言中,变量必须“先定义,后使用”intradius;/*theradiusofcircle*/关键字int

告诉编译系统我要定义一个整型变量,用它来保存一个整型的数值。这是变量的名字。以后的程序中就用这个名字来访问这个变量。注释用来解释这个变量,它是给程序员的信息。对程序主要的变量作注释是很好的习惯。2023/8/616变量的定义和使用变量定义具有三个目的:C2023/9/1917#include<stdio.h>intmain(){inta,b,sum;a=123;b=456;sum=a+b;printf(“sum=%d\n”,sim);return(0);}变量的定义和使用变量“先定义,后使用”的好处是:

C只允许使用定义过的变量。凡是未被事先定义的符号,不作为变量名。这样可以检查出程序中错误使用的变量名。此处定义的变量名是sum

。此处由于输入错误或其它原因,出现了名字为sim

的符号。由于该符号在这之前从未定义过,所以在编译时,便会出现错误信息。Error:Undefinedsymbol'sim'2023/8/617#include<stdio.h>变量2023/9/1918#include<stdio.h>intmain(){inta,remainder;floatc;a=23;c=2.5;remainder=a%c;printf(“余数=%d\n”,remainder);return(0);}变量的定义和使用变量“先定义,后使用”的好处是:

定义变量时指明了变量的类型,这样在对源程序进行编译时,可以就此类型检查该变量所参与的运算是否合法。变量a是整型的这个表达式中的符号%是“求余”运算符,它要求参与运算的数据必须是整型的。此处变量a是整型,而变量c却是浮点型的,所以编译时就会出现错误信息。Error:Illegaluseoffloatingpoint变量c是浮点型的2023/8/618#include<stdio.h>变量2023/9/1919变量的定义和使用intage;/*theageofstudent*/floatscore;/*thescoreofstudent*/floataverage;/*theaverageofscore*/longnumber;/*thenumberofstudent*/doubledistance;/*betweenearth&moon*/charUserSelection;/*keyuserhit*/变量定义的一般格式是:typename;/*comment*/

类型名字;

/*注释*/系统将根据变量的定义为其分配相应大小的内存单元。2023/8/619变量的定义和使用int2023/9/19204.以下不能定义为用户标识符的是

。A)scanfB)VoidC)_3comD)int课堂练习答案:D5.以下可作为C语言用户定义标识符的是()组标识符。A.voiddefineWORDB.a3_b3_123IFC.For-abcCaseD.2aDosizeof答案:B注意:这些系统库函数名并非C语言的关键字。2023/8/6204.以下不能定义为用户标识符的是2023/9/19212.2.1整型数据

整型常量整型变量整型数据在内存中的存储方式2023/8/6212.2.1整型数据整型常量2023/9/1922整型常量十进制整型常量:如123,-456,0

八进制整型常量:以数字“0”开头的整型常量如0123,即(0123)8

,等于(83)10

-011,即(-011)8

,等于(-9)10八进制整型常量中不应出现“7”以上的数码。如0128,0209都是非法的八进制整型常量。整型常量即整常数。C中有下面三种形式的整型常量:

十六进制整型常量:以“0x”开头的整型常量如0xFF,即(0xFF)16

,等于(255)10

-0x11,即(-0x11)16

,等于(-17)10

十六进制整型常量中不应出现“F”以上的数码。C语言中没有二进制整型常量,用十六进制整型常量表示二进制整数2023/8/622整型常量十进制整型常量:如123,-2023/9/1923补充:各种计数制间的转换二进制十进制方法:找出二进制数各数码位的“权”,并按“权”相加(1010.11)2=1×23+0×22+1×21+0×20+1×2-1+1×2-2

=8+0+2+0+0.5+0.25=(10.75)10八进制十进制(7103)8=7×83+1×82+0×81+3×80

=(3651)10十六进制十进制(FF)16=15×161+15×160=(255)102023/8/623补充:各种计数制间的转换二进制十进制方法2023/9/19242562282142723210各种计数制间的转换十进制二进制方法:整数采用“除2取余法”

小数采用“乘2取整法”“除2取余法”的法则是:将被转换的十进制整数连续用2去除,求得余数(1或0)分别为k0、k1、k2、…,直到商为0为止,则所有余数的排列kn-1kn-2…k1k0即为所转换的二进制整数。……余数0=k0……余数0=k1……余数0=k2……余数1=k3……余数1=k4……余数1=k5(56)10=(111000)2

2023/8/6242562282142722023/9/1925各种计数制间的转换十进制二进制方法:整数采用“除2取余法”

小数采用“乘2取整法”“乘2取整法”的法则是:对被转换的十进制小数连续用2去乘,依次求得各整数位(1或0)分别为k-1、k-2、…、k-m

,直到乘积的小数部分为0为止,则所有整数为的排列k-1k-2…k-m即为所转换的二进制小数。×20.625……整数部分为1=k-1(0.625)10=(0.101)2

1.250×2……整数部分为0=k-20.500×2……整数部分为1=k-31.000实际上,最后的余数不一定为0,只要符合精度要求,取够位数即可。2023/8/625各种计数制间的转换十进制二进制方法:整数2023/9/1926各种计数制间的转换二进制八进制方法:把二进制数从低位开始每3位数码编为一组,把每一组转换为对应的八进制数码(∵8=23

)21111000101011010

结果是:(1111000101011010)2=(170532)8

35071八进制二进制方法:把八进制数从低位开始每1位数码转换为3位的二进制数码(∵8=23

)010170532

结果是:(170532)8=

(1111000101011010)20111010001110012023/8/626各种计数制间的转换二进制八进制方法:把二2023/9/1927各种计数制间的转换二进制十六

进制方法:把二进制数从低位开始每4位数码编为一组,把每一组转换为对应的十六进制数码(∵16=24

)2101011110000100101010010

结果是:(101011110000100101010010)2=(AF0952)16

590FA十六

进制二进制方法:把十六进制数从低位开始每1位数码转换为4位的二进制数码。(∵16=24

)0010AF0952

结果是:(AF0952)16=

(101011110000100101010010)2010110010000111110102023/8/627各种计数制间的转换二进制十六

进制方法:2023/9/1928长整型:-56l;3567L;04L无符号整型:586u;077765U;0xfffdU无符号长整型:0375ul;0x45feUL整型常量的类型2023/8/628长整型:-56l;3567L;04L整型2023/9/1929课堂练习◆下面四个选项中,均是不合法的整型常量的选项是

(A)–0f1-0xffff0011

(B)–0Xcdf01712,456

(C)–0189995e2答案:(D)答案:(A)

(D)–0x48eg-06803f◆下面四个选项中,均是合法的整型常量的选项是

(A)160-0xffff011

(B)–0Xcdf01a0xe

(C)–01986,0120668

(D)–0x48a2e50x2023/8/629课堂练习◆下面四个选项中,均是不合法的2023/9/1930整型变量的分类注:有符号整型变量中,关键字signed可以省略。(有符号与无符号不同的取值范围详见教材P23页)类型关键字占字节数目

(VisualC++)有符号signed基本整型signedint4字节短整型signedshortint

(signedshort)2字节长整型signedlongint

(signedlong)4字节无符号unsigned基本整型unsignedint4字节短整型unsignedshortint

(unsignedshort)2字节长整型unsignedlongint

(unsignedlong)4字节2023/8/630整型变量的分类注:有符号整型变量中,关键2023/9/1931整型数据在内存中的存储方式数据在内存中是以“二进制数”的形式存放的。数据在内存中是以“二进制数的补码”形式存放的。例如:inta=10;

那么内存中实际存放的是10的补码a100000000000001010如果是:inta=-10;

那么内存中实际存放的是-10的补码-10的原码是:最高位不动,其余各位取反:a-101111111111110110100000000000101011111111111101011111111111110110整个数加上1:求-10补码的方法:2023/8/631整型数据在内存中的存储方式数据在内存中是2023/9/1932计算机中数的表示

一个数据总要占据一定数目的字节单元(整数个、有限个)不同类型的数据占据不同数目的字节单元(比如,PC机DOS环境下一个整数占2个字节,一个实数占4个字节)所有数据都是以二进制数的形式表示的数据有正有负。计算机中表示一个数据时,总是用它所占字节单元的所有位中最高位表示数的符号:0表示正,1表示负。Ns1010101符号位最高位:第7位最低位:第0位1个字节符号位最高位:第15位最低位:第0位2个字节Ns1010101010101012023/8/632计算机中数的表示一个数据总要占据一定2023/9/1933

对于有符号变量:把最高位作为符号位保存数据的符号(0为正,1为负),其余位保存具体数值,因此可以用于正确保存限值范围内的正数或负数。有符号和无符号的区别◆

有符号和无符号的区别是什么?关键在于“最高位”的性质。如果有:inta;

那么a的有效数值范围为-32768~32767有符号整型变量a=32767:0111111111111111如果有:unsignedintb;

那么b的有效数值范围为0~65535最高位代表符号

对于无符号变量:最高位不作为符号位,全部的位都用来保存数据的数值,因此可以用于正确保存限值范围内的正数。无符号整型变量b=65535:1111111111111111最高位代表数值2023/8/633对于有符号变量:把最高位作为符号位保2023/9/1934整型数据的表示范围

由于每一种整型数据占有的字节单元数目都是有限的,所以每一种整型数据可表示的数的范围也是有限的。

由于不同类型的整型数据占有的字节单元数目是不同的,所以不同类型的整型数据可表示的数的范围也是不同的。ANSIC标准定义的整型类型类型Bit数有效表示范围[signed]int16-32768~+32767unsignedint160~+65535[signed]short[int]16-32768~+32767unsignedshort[int]160~+65535[signed]long[int]32-2147483648

~+2147483647unsignedlong[int]320~+42949672952023/8/634整型数据的表示范围由于每一种整型数据占2023/9/1935整型变量的定义变量的定义一般放在函数体的开头部分。定义方法:类型符变量名列表;(用逗号分隔)如:intnum;unsignedintage,score;longdistant,SampleTimes;2023/8/635整型变量的定义变量的定义一般放在函数体的2023/9/1936#include<stdio.h>intmain(){intmax,over;max=32767;over=max+1;printf(“max=%d,over=%d”,max,over);return(0);}整型变量的溢出◆由于每一种整型数据可表示的数的范围都是有限的,所以在使用整型变量时要特别注意“数据溢出”的问题。◆int型的有效表示范围是-32768~+32767

。max是:0111111111111111max+1→over是:100000000000000032767-32768数据溢出了!将变量over定义成long型就能得到正确的结果。2023/8/636#include<stdio.h>整型2023/9/1937作业1:将下列各数用八进制和十六进制表示:(1)—617(2)—111(3)—28654(4)210032023/8/637作业1:将下列各数用八进制和十六进制表示2023/9/19382.2.2浮点型数据

浮点型常量浮点型变量浮点型数据在内存中的存储方式2023/8/6382.2.2浮点型数据浮点型常量2023/9/1939浮点型常量

十进制小数形式:由数字和小数点组成。(小数点必须有,且小数点的前面或后面必须有数字)如10.23,-0.456,78.0,0.0,89.

指数形式:±sE±n

或±se±n

形式。注意:E或e前面必须有数字,后面的指数必须为整数。如218.3=218.3E0=2183E-1=0.02183E+4浮点数又叫“实数”。浮点数常量有两种表示形式:指数形式的浮点型常量,有“规范化指数形式”,即在字母E或e之前的小数部分中,小数点左边必须有且只有一位非零的数字。如218.3=2.183E+2;

0.002183=2.183E-3程序以指数形式输出实数,就是以“规范化指数形式”输出2023/8/639浮点型常量十进制小数形式:由数字和小数2023/9/1940课堂练习◆下面四个选项中,均是不合法的浮点数的选项是

(A)160.0.12e3

(B)1232e4.2.e5

©-.18123e40.0答案:B)答案:(B)

(D)–e3.2341e3◆下面四个选项中,均是合法的浮点数的选项是

(A)+1e+15e-9.403e2

(B)–.6012e-4-8e5

(C)123e1.2e-.4+2e-1

(D)–e3.8e-45.e-02023/8/640课堂练习◆下面四个选项中,均是不合法的2023/9/1941浮点数在计算机中,既有整数部分又有小数部分的数称为浮点数P=±S×2±N可见,浮点数表示中的各部分又都是定点数。在一个浮点数所占字节单元中,一部分位用来保存阶码,一部分位用来保存尾数。P的尾数

(定点小数)P的阶码

(定点整数)尾数符号阶码符号例如:浮点数N=210×0.0101在计算机中表示为(假设占2字节)0001000101000000阶码符号阶码数值尾数符号尾数数值阶码部分:占5位尾数部分:占11位2023/8/641浮点数在计算机中,既有整数部分又有小数部2023/9/1942浮点型数据在内存中的存储方式浮点型数据在内存中是以“尾数”和“阶码”的形式存放的。在一个浮点型数据(浮点数)所占字节单元中,一部分位用来保存阶码,一部分位用来保存尾数。±尾数部分±阶码部分不同的编译系统位数分配不同。总之,尾数部分位数越多,可以表示的数的有效数字位数就越多,精度就越高;阶码部分位数越多,可以表示的数的范围就越大。+.745623+1例:float7.456230.745623×1012023/8/642浮点型数据在内存中的存储方式浮点型数据在2023/9/1943浮点型变量的分类类型单精度双精度长双精度关键字floatdoublelongdouble字节数

VisualC4字节8字节16字节有效数字位数6~7位15~16位18~19位数值范围10-37~103810-307~1030810-4931~104932

由于不同的浮点型数据是用不同数目的有限字节单元保存的,所以它们能表示的数值范围是不同的,能保留的有效数字位数也是不同而且是有限的。2023/8/643浮点型变量的分类类型单精度双精度长双精度2023/9/1944浮点型变量的定义变量的定义一般放在函数体的开头部分。定义方法:类型符变量名列表;(用逗号分隔)如:floatSinValue,CosValue;doublearea,result;注:C语言中的所有关键字都是小写的。2023/8/644浮点型变量的定义变量的定义一般放在函数体2023/9/19452.2.3字符型数据

字符常量字符变量字符型数据在内存中的存储方式2023/8/6452.2.3字符型数据字符常量2023/9/1946字符型常量比如:‘a’,‘A’,‘d’,‘D’,‘?’,‘%’,‘$’,‘2’,‘4’注意:‘a’和‘A’,‘d’和‘D’都是不同的字符常量。

C的字符常量是用单引号(‘)括起来的一个字符。另外:C语言还存在另一种形式的特殊的字符常量。它是用单引号括起来的以一个“\”字符开头的规定的字符序列。“\”字符叫反斜杠字符。这种特殊的字符常量称为“转义字符”。2023/8/646字符型常量比如:‘a’,‘A’,2023/9/1947转义字符常量及其含义转义字符含义ASCII

代码控制字符\n回车换行(光标移到下一行第一列)10\t水平制表(光标移到下一个Tab位置)9\b退格(光标移回到同一行前一列)8\r回车(光标移到同一行第一列)13\f换页(光标移到下一页开头)12特殊标点符号\\反斜杠字符“\”92\‘单引号(撇号)字符‘39\“双引号字符“34所有字符\ddd1到3位8进制数所代表的字符\xhh1到2位16进制数所代表的字符

注意:表示字符的转义16进制数与十六进制整型常量写法不同\x0x2023/8/647转义字符常量及其含义转义字符含义ASCI2023/9/1948课堂练习◆下面四个选项中,均是合法的转义字符的选项是

(A)’\’’‘\\’‘\n’

(B)’\’‘\017’‘\’’’

©‘\018’‘\f’‘xab’答案:A)答案:(B)

(D)’\\0’‘\101’‘\xlf’◆下面四个选项中,均是不合法的字符选项是

(A)’\’’’‘\\’‘\xf’

(B)’\1011’‘\’‘\m’

©’\011’‘\f’‘\}’

(D)’\abc’‘\101’‘xlf’2023/8/648课堂练习◆下面四个选项中,均是合法的转2023/9/1949字符型变量字符型变量用来存储字符型常量。一个字符变量只能保存一个字符。如charInputKey,UserSelection;

unsigned

charlines,grade;定义方法:类型符变量名列表;(用逗号分隔)类型关键字占字节数目有符号[signed]char1字节无符号unsignedchar1字节2023/8/649字符型变量字符型变量用来存储字符型常量。2023/9/1950字符型数据在内存中的存储方式每个字符型数据在内存中只占一个字节,该字节中实际保存的是该字符的ASCII代码。ASCII

(美国信息交换标准代码)

AmericanStandardCodeforInformationInterchangeASCII

代码实际上是一个0~255之间的整数。每一个整数对应着一个不同的字符,即每一个字符都有一个不同的整数代码。对字符型数据来讲,它的那一个字节中保存的就是这个整数。2023/8/650字符型数据在内存中的存储方式每个字符型数2023/9/1951常用字符及对应ASCII码常用字符及对应ASCII码ASCII值字符ASCII值字符ASCII值字符ASCII值字符0NUL48065A97a10LF

换行49166B98b13CR

回车………………32空格57990Z122z2023/8/651常用字符及对应ASCII码常用字符及对应2023/9/1952可见,字符型数据存储对应的ASCII

码,而ASCII

码是一个整数,按整型数据的存储方式存储,因此在C语言中两者的存储方式是类似的,从而在一定范围内可以通用,即两种类型的数据可以相互赋值,相互输出,也可以在一起进行运算。字符型数据在内存中的存储方式A“一定范围内”指的是“一个字节”所能保存的整数范围内。有符号型整数:-127~128无符号型整数:0~255→0100000165这个字节存储的内容是01000001。

如果它是一个整型数据,那就是整数65;

如果它是一个字符型数据,那就是字符‘A’。ASCII值=652023/8/652可见,字符型数据存储对应的ASCII2023/9/1953#include<stdio.h>intmain(){charc1,c2;intn1,n2;c1=‘b’;c2=97;n1=98;n2=‘a’;printf(“c1=%c,c2=%c\n”,c1,c2);printf(“n1=%d,n2=%d\n”,n1,n2);printf(“c1=%d,c2=%d\n”,c1,c2);printf(“n1=%c,n2=%c\n”,n1,n2);return(0);}整型数据和字符型数据通用:例1既可以把整型数据赋值给字符型变量。也可以把字符型数据赋值给整型变量。既可以把字符型数据按整数形式输出。(%d

整型格式符)也可以把整型数据按字符形式输出。(%c字符型格式符)2023/8/653#include<stdio.h>整2023/9/1954#include<stdio.h>intmain(){charc1,c2,c3;c1=‘A’;c2=‘b’;c3=‘’;c1=c1+32;c2=c2–c3;printf(“c1=%c,c1=%d\n”,c1,c1);printf(“c2=%c,c2=%d\n”,c2,c2);return(0);}整型数据和字符型数据通用:例2字符数据可以和整型数据一起进行算术运算。字符型数据之间也可以进行算术运算。既可以把字符型数据按字符形式%c输出,也可以把字符型数据按整数形式%d输出。实际上都是整数之间的算术运算。

运行结果:c1=a,c1=97

c2=B,c2=66空格的ASCII码=322023/8/654#include<stdio.h>整2023/9/19552.2.4字符串常量

字符串常量字符串结束标志字符字符型数据在内存中的存储方式2023/8/6552.2.4字符串常量字符串常量2023/9/1956字符串常量比如:“a”,“”,“Hello,world”,“9811113”,“LCS”?

C的字符串常量是用双引号(“)括起来的若干个字符。◆字符串常量在内存中占用连续的字节单元,每个字符按顺序占一个字节。C语言规定:自动在每一个字符串常量的结尾加一个“字符串结束标志字符”,以便系统据此判断字符串是否结束。一个字符串常量中包含的字符个数是不确定的。那么,系统在处理字符串常量时如何知道何处结束呢?2023/8/656字符串常量比如:“a”,“”,2023/9/1957字符串结束标志字符◆‘\0’是ASCII码为0的字符,即位于字符表中的第一个NUL字符。它是一个“空操作字符”,就是说,它既不引起任何控制动作,也不产生任何显示。C的字符串结束标志字符是

‘\0’

。◆因此,C的字符串常量在内存中占用的字节数等于可见字符数加上1,即结束标志字符占用的一个字节。“HELLO”HELLO\0字符串结束标志字符也是一个字符,也要占用一个字节。总共占用6个字节5个可见字符2023/8/657字符串结束标志字符◆‘\0’是ASC2023/9/1958‘A’和“A”的区别◆由于C语言对每一个字符串常量均在其末尾自动添加一个字符串结束标志字符‘\0’,因此:

‘A’

占一个字节单元

“A”

占两个字节单元,包括‘A’和‘\0’两个字符◆不能把一个字符串常量赋值给一个字符变量。如charc1=“A”;是错误的。?为什么是错误的。原因1:“A”

占两个字节单元,而字符变量c1只有一个字节,所以无法赋值;原因2:真正的原因。C语言实际上把字符串处理成字符指针,把一个指针赋值给一个字符变量当然是错误的。2023/8/658‘A’和“A”的区别◆由于C语言对每一2023/9/1959课堂练习◆问题1:字符串“”占几个字节单元?

(A)0个

(B)1个

(C)2个◆问题2:这样的赋值charc1=“”;是否正确?

(A)正确

(B)不正确◆问题3:1和‘1’是否相同?为什么?◆问题4:1+‘0’和‘1’是否相同?为什么?答案:(c)答案:(B)答案:不相同。因为前者是整数1,它的值是1,而后者是字符‘1’,它的值是49(ASCII码)。答案:相同。因为字符‘0’的值是48,加1等于49,正好是字符‘1’的值。2023/8/659课堂练习◆问题1:字符串“”占几2023/9/1960课堂练习◆下面四个选项中,均是正确的八进制数或十六进制数的选项是

(A)-100X8f-011

(B)0abc-017oxc

©0010-ox11Oxf2答案:c)答案:(D)

(D)0a12-0x123-0xa◆下面四个选项中,均是正确的数值常量或字符常量的选项是

(A)0.00f8.9e‘&’

(B)”a”3.9E-2.51e1‘\”’

©‘5’0110xff000a

(D)+0010xabcd2e250.2023/8/660课堂练习◆下面四个选项中,均是正确的八2023/9/19612.2.5符号常量

预处理符号变量的实现使用符号常量的注意事项2023/8/6612.2.5符号常量预处理2023/9/1962预处理编译预处理:是指在对源程序进行正式编译之前所作的一些处理。这些处理是由预处理命令指定的。源程序经过预处理后,再由编译程序进行正式的编译。#define预处理命令宏定义的用法:#define标识符字符串它的作用是用指定的标识符去代表一个字符串。在预处理时,源程序中所有在该#define命令后出现的该标识符全部用指定的字符串代替。预处理命令是由ANSIC规定的,但它不是C语言本身的组成部分,不能直接对它进行编译。预处理命令都是以符号“#”开头的。2023/8/662预处理编译预处理:是指在对源程序进行正式2023/9/1963#include“stdio.h”#definePI3.14159intmain(){floatr,c,s,v;r=20;c=2*PI*r;printf(“周长=%f”,c);s=PI*r*r;printf(“面积=%f”,s);v=4*PI*r*r*r/3;printf(“体积=%f”,v);return(0);}符号常量的实现这个字符串将要在预处理时去替换符号PI标识符名:PI

编译预处理时,这一行以后的源程序中出现的PI都会被指定的字符串代替。预处理后进行正式编译,替换进去的3.14159就会被理解为是一个实数。2023/8/663#include“stdio.h”符号2023/9/1964#include“stdio.h”#definePI3.14159intmain(){floatr,c,s,v;r=20;c=2*PI*r;……

PI=100;

……return(0);}使用符号常量的注意事项错误注意1:符号常量不是变量,不能被赋值。2023/8/664#include“stdio.h”使用2023/9/1965#include“stdio.h”#definePI3.14159intmain(){floatr,c,s,v;r=20;c=2*PI*r;……printf(“PI=%f\n”,PI);……return(0);}使用符号常量的注意事项不替换注意2:如果指定的符号出现在双引号中,则不被替换。要替换2023/8/665#include“stdio.h”使用2023/9/1966#include“stdio.h”constPI=3.14159;intmain(){floatr,c,s,v;r=20;c=2*PI*r;printf(“周长=%f”,c);s=PI*r*r;printf(“面积=%f”,s);v=4*PI*r*r*r/3;printf(“体积=%f”,v);return(0);}常变量const关键字的用法:const标识符=常量值常变量名:PI常变量必须初始化,在定义的同时给以值同样要注意的是:

虽然PI是变量,但是它是用const关键字定义的常变量,所以也不能被赋值。PI=100;2023/8/666#include“stdio.h”常变2023/9/1967小结①习惯上,符号常量用大写字母表示;②定义符号常量时,不能以“;”结束;③一个#define占一行,且要从第一列开始书写;④一个源程序文件中可含有若干个define命令,不同的define命令中指定的“标识符”不能相同;2023/8/667小结①习惯上,符号常量用大2023/9/19682.3.2变量赋初值2023/8/6682.3.2变量赋初值2023/9/1969◆当一次定义多个变量时,不能用连续=号的方式对多个变量进行初始化变量赋初值一个变量在定义之后,第一次赋值之前,它的值是不确定的。

在赋初值前,不能让其参与运算,否则会得到不可预知的结果。

对变量进行定义的同时给变量赋初值,称为初始化,

◆在定义变量的同时进行初始化除static,extern变量外,初始化与定义,赋值等价◆当一次定义多个变量时,可以对其全部或部分进行初始化如:intTotalStudent=40;等价于:intTotalStudent;TotalStudent=40;如:intTotalStudent=40,TotalScore=0,average;如:intTotalScore=AverScore=0;是错误的。正确的应该是:intTotalScore=0,AverScore=0;2023/8/669◆当一次定义多个变量时,不能用连续=号2023/9/1970下列变量定义中合法的是A)short_a=1-.1e1;B)doubleb=1+5e2.5;C)longdo=0xfdaL;D)float2_and=1-e-3;-2023/8/670下列变量定义中合法的是A)short_a2023/9/1971一、已定义ch为字符型变量,在下列赋值语句中错误的是:A)ch=‘\’;B)ch=62+3;C)ch=NULL;D)ch=‘\xaa’;二在以下选项中可做为C语言合法整数的是:A)10110BB)0386c)0XffaD)x2a2三、在以下选项中可做为C语言合法常量的是:A)-80B)-080C)-8e1.0D)-80.0e2023/8/671一、已定义ch为字符型变量,在下列赋值语2023/9/1972

字符输出函数putchar

字符输入函数getchar

格式输出函数printf

格式输入函数scanf

各种格式控制字符的含义和用法简单的程序设计2.7数据的输入输出2023/8/672字符输出函数putchar2.7数据2023/9/1973输入输出的概念及在C语言中的实现2023/8/673输入输出的概念及在C语言中的实现2023/9/1974输入输出的概念及在C语言中的实现

输入是指从外部设备(如键盘,扫描仪,文件等)向计算机主机送入数据;输出是从计算机主机向外部设备(如显示器,打印机,文件等)送出数据。

C语言本身没有输入输出语句。要实现这些操作,必须调用相应的系统库函数。比如printf函数用于输出,scanf函数用于输入,等等。

不同版本的C语言(C编译器)均带有不同数量不同用途的系统库函数,以.obj文件或.lib文件的形式提供,供用户与自己的.obj文件链接以形成.exe的可执行文件。注意:这些系统库函数名并非C语言的关键字。2023/8/674输入输出的概念及在C语言中的实现输入2023/9/1975C语言中的头文件

要想正确成功的调用C系统库函数,就必须在源程序文件开头用预编译命令“#include”将有关的“头文件”包括进来。如:要想调用系统输出库函数printf,在源程序文件开头必须有如下预编译命令#include<stdio.h>C语言中的头文件(headerfile)是指后缀名习惯为“.h”的一些文本文件。在头文件中,包含有关系统库函数的原型、有关系统全局变量的声明、有关系统符号常量的宏定义、有关数据类型的定义等等信息。其中,系统库函数的原型就告诉编译系统该函数的名称、返回值类型、形参数量及类型等信息,这样编译系统才能正确编译,否则会给出出错信息。2023/8/675C语言中的头文件要想正确成功的调用C2023/9/1976C语言中的头文件stdio.h头文件中包含了与标准I/O操作有关的系统库函数的声明,所以调用如printf、scanf等标准输入输出函数时,必须在源程序文件中包含该头文件。否则,编译时会给出错误信息如下:Function‘printf’shouldhaveaprototype

函数‘printf’应该有一个原型提示:要想知道某个版本的C语言提供哪些系统库函数以及各种库函数所对应的头文件的名称,必须参考该版本C语言的系统库函数手册或联机帮助。库函数类别头文件名库函数类别头文件名标准输入输出stdio.h字符串处理string.h数学math.h图形处理graphics.h字符处理ctype.h2023/8/676C语言中的头文件stdio.h头文件中2023/9/19772.7.1字符数据的输入输出

字符输出函数putchar

字符输入函数getchar2023/8/6772.7.1字符数据的输入输出字符输2023/9/1978字符输出函数putchar原型:intputchar(intch);参数:一个字符型或整型的数据功能:在默认的输出设备(显示器)上输出一个字符用法:putchar(字符型或整型数据);返回值:所输出的字符。绝大多数情况下不使用该返回值。2023/8/678字符输出函数putchar原型:int2023/9/1979#include<stdio.h>intmain(){chara,b;intc,d;a='B';b='O';c=65;d=66;putchar(a);putchar(b);putchar('Y');putchar(‘\n’);putchar(c);putchar(d+32);return(0);}字符输出函数putchar:例参数可以是int

或char型变量运行结果: BOY

Ab参数可以是int

或char型常量参数也可以是int或char型表达式2023/8/679#include<stdio.h>字2023/9/1980字符输入函数getchar原型:intgetchar(void);参数:无功能:从默认的输入设备(键盘)上接收用户键入的一个字符,并把该字符作为函数值返回用法:ch=getchar();返回值:用户从键盘键入的字符。绝大多数情况该字符都会被赋值给某个字符型或整型的变量,或者作为表达式的一部分参与其它的运算。

注意:getchar函数只能接收并返回一个字符。执行过程:当程序运行到包含有getchar函数调用的语句时,会暂时停下来,此时屏幕上有一个闪烁的光标,等待用户从键盘上的输入。用户必须键入有关信息并按Enter键后程序才能继续向下执行。2023/8/680字符输入函数getchar原型:int2023/9/1981#include<stdio.h>intmain(){charch;ch=getchar();putchar(ch);return(0);}字符输入函数getchar:例由于getchar函数要接收用户从键盘输入的字符,所以程序执行流程到这儿会暂时停下来等待用户的输入。B↙(用户键入字符B后,在打“回车”键)B(putchar函数再在屏幕上输出一个字符B)运行结果:当用户键入一个字符并按下Enter键后,该字符被getchar函数接收并作为函数值返回。此处,将这个返回值同时赋值给一个字符型的变量ch,保存起来以作后用。见习题P141页712023/8/681#include<stdio.h>字2023/9/1982字符输入函数getchar进一步说明键盘输入有1k以上的缓存空间,一次键盘输入是以键入enter为结束。getchar等待键盘缓存空间中出现enter,当其出现enter,getchar从键盘缓存空间中取一个字符返回。如果键盘缓存空间还有字符,下一个getchar就不再等待,立刻从键盘缓存空间中取一个字符返回。

#include"stdio.h"voidmain(){charc;inti=0;while(1){c=getchar();putchar(c);i++;if(i>1000)break;}}2023/8/682字符输入函数getchar进一步说明2023/9/19832.7.2格式输入输出函数

格式输出函数printf

格式输入函数scanf2023/8/6832.7.2格式输入输出函数格式输出2023/9/1984格式输出函数printf

原型:

intprintf(constchar*format[,argument,...]);

参数:两部分第一部分:为字符型常指针,大多数情况下都是字符串常量第二部分:若干个待输出的数据的列表功能:一次函数调用可以在默认的输出设备上(显示器)输出经格式化后的若干个不同类型的数据。用法:printf(格式控制字符串,输出数据列表);

返回值:输出的所有数据的字节数。绝大多数情况下不使用该返回值。2023/8/684格式输出函数printf原型:

int2023/9/1985格式输出函数printf的参数printf(格式控制字符串,输出数据列表);⒈格式控制字符串:常字符指针,既可以是字符串常量,也可以是字符数组或字符指针。

格式控制字符:由%和规定的格式字符组成,一个格式控制字符串中可以有一个或多个格式控制字符。其作用是把后面的输出项目列表中对应位置上的数据格式化成该格式字符所规定的数据类型。

普通字符:除格式字符以外的所有其它字符。它们不起任何格式作用,只简单被printf函数原样输出到显示器上。通常用于说明输出数据或给用户有关的提示说明信息。⒉输出数据列表:将要输出的数据,用逗号分隔。可以是常量,变量、函数调用或任何合法的C表达式。2023/8/685格式输出函数printf的参数print2023/9/1986intnum=15;printf(“Twice%dis%d.\n”,num,2*num);格式输出函数printf的执行过程Twice普通字符格式字符普通字符格式字符普通字符15is30._待输出的数据2023/8/686intnum=15;printf2023/9/1987printf函数中的格式字符格式字符格式作用整型d,i格式化为有符号的十进制整数u格式化为无符号的十进制整数o格式化为无符号的八进制整数x,X格式化为无符号的十六进制整数字符型c格式化为一个字符s格式化为一个字符串实型f格式化为小数形式的实数,隐含输出6位小数e,E格式化为指数形式的实数,数字部分有6位小数g,G选用%f或%e格式中输出宽度较短的一种格式,不输出无意义的02023/8/687printf函数中的格式字符格式字符格式2023/9/1988printf函数中的附加格式字符附加格式字符格式作用l用于格式化长整型数据,可加在格式符d、o、x、u的前面m用于确定数据输出时所占最小宽度,即列数.n对实型数,表示输出n位小数;对字符串,表示截取的字符个数-输出的数字或字符在输出域内向左对齐(默认是右对齐的)

在格式说明时,还可以在%和上述格式字符之间插入以下几种附加的格式字符(又叫修饰符)。%[附加格式字符]格式字符%[-][m][.n][l]格式字符2023/8/688printf函数中的附加格式字符附加格式2023/9/1989printf函数使用中的注意事项一定要分清哪些是格式字符,哪些是普通字符;同时也要注意区分普通字符中转义字符常量。

%d%D%cf如果作为第一部分参数的字符串中,全部是普通字符,则具有输出字符串的效果,这通常用于在程序运行时给使用者有关提示信息,或对输出信息作有关的注释和说明。

printf(“Welcometousethisprogram.\n”);printf(“ProgramAuthor:LiChangsong”);待输出数据的个数不能少于格式说明字符的个数;如果多于格式说明字符的个数,则多出的数据不被输出。

printf(“%d,%d,%c\n”,a,b,ch,d,e);用%%输出一个%printf(“percent=%d%%\n”,percent);习题见P137页31、42、58、2023/8/689printf函数使用中的注意事项一定要分2023/9/1990printf函数的使用:例#include<stdio.h>voidmain(){unsignedshortinta=65535;shortintb=-2;printf("a=%d,%o,%x,%u\n",a,a,a,a);printf("b=%d,%o,%x,%u\n",b,b,b,b);}运行结果:a=-1,177777,ffff,65535b=-2,177776,fffe,655342023/8/690printf函数的使用:例#includ2023/9/1991printf函数的使用:例#include<stdio.h>voidmain(){longc=4000000;floatf1=12345.67;printf("c=%ld\n",c);printf("f1=%f,%e\n",f1,f1);}运行结果:c=4000000f1=12345.669922,1.234567e+042023/8/691printf函数的使用:例#includ2023/9/1992printf函数的使用:例#include<stdio.h>voidmain(){printf("%c%c%c",'B','O','Y');printf("%c",'\n');printf("%s","China");printf("%s","\n");printf("Pleaseinputthreedata:");}运行结果: BOY China Pleaseinputthreedata:2023/8/692printf函数的使用:例#includ2023/9/1993格式输入函数scanf

原型:

intscanf(constchar*format[,address,...]);

参数:两部分第一部分:为字符型常指针,大多数情况下都是字符串常量第二部分:若干个内

温馨提示

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

最新文档

评论

0/150

提交评论