【文档说明】第2章C语言的基本数据类型和变量的存储类课件.ppt,共(57)页,347.012 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-44638.html
以下为本文档部分文字说明:
第2章C语言的基本数据类型和变量的存储类C数据类型如下:3变量的概念变量是指在程序运行过程中可以发生改变的量变量的特征:(1)它有一个变量名,变量名的命名方式符合标识符的命名规则。(2)变量有类型之分。不同类型的变量占用的内存单元(字节)数不同,因此每个变量都有一个
确定的类型。(3)变量可以存放值。程序运行过程中用到的变量必须有确切的值,变量在使用前必须赋值,变量的值存储在内存中。在程序中通过变量名来引用变量的值。变量4变量名和变量值的区别:在程序运行过程中从变量x中取值,实际上是通过变量名x找到相应的内存地址,从其存储单元中取数据30。变量名
与变量值的区别变量的概念变量5§2.1整型数据2.1.1整型常量表示形式:计算机中用二进制形式存储数据;为便于表示和使用,整型常量还可以表示成十进制、八进制和十六进制6八进制与十六进制常数以数字“0”开始的整型常数是八进制数–022、-037–010和
10大小不一样–因为八进制并不常用,所以此种表示法比较少见以“0x”或者“0X”开始的整型常数是十六进制–A~F和a~f用来表示十进制的10~15–十六进制的形式比较常用–0x12、-0x1F,-0x1f7
符号数据类型类型标识符字节数取值范围带符号整型int4-2147483648~+2147483647短整型short(或shortint)2-32768~+32767长整型long(或longint)4-2147483648~+2147483647无符号无符号整型unsigned(或un
signedint)40~4294967295无符号短整型unsignedshort20~65535无符号长整型unsignedlong40~42949672952.1.2整型变量整型变量类型82.2.1字符(Character)常量字符常数的表示方法–
’a’,’A’,’5’,’%’,’$’……–单引号内只能有一个字符,除非用“\”开头就是一个普通整数,也可以参与各种数学运算–每个字符具有一个0~255之间的数值,可从ASCII表查出–注意:’6’和整数6的
区别–字符的数学运算在密码学内用得比较多用“\”开头的字符为转义字符–例如,’\n’,代表1个字符9转义字符及其含义字符形式含义ASCII代码\n换行,将当前位置移到下一行开头10\t水平位移,跳到下一个
tab位置9\b退格,将当前位置移到前一列8\r回车,将当前位置移到本行开头13\f换页,将当前位置移到下一页开头12\\反斜杠字符“\”92\'单引号字符“'”39\"双引号字符“"”34\0空字符0\dd
d1到3位八进制数所代表的ASCII码字符\xhh1到2位十六进制数所代表的ASCII码字符2.2.1字符(Character)常量10分析下面程序的运行结果。#include<stdio.h>/*程序需
要使用C语言提供的标准函数库*/voidmain()/*主函数*/{printf("China\n\101\t\\\n");/*调用库函数printf显示字符串*/}程序运行结果:ChinaA\2.2.1字符(Character)常量112.2.2字符型变量字符型变量用来存放字
符常量,注意只能存放一个字符。字符型变量的类型标识符为char、内存中所占空间字节数为1.例如:charc1,c2,c3,c4,c5;c1=’a’;正确c2=“a”;不正确c3=’abc’;不正确c4=’\10
7’;正确c5=’6’;正确122.2.3字符型数据的存储表示字符型数据在C语言中是和整型数据同等对待的。任何一个字符都相当于一个整型量,其值就是该字符的编码值。C语言中凡是整型量可以出现的地方,字符型量都可以出现。对于采用ASCII编码的系统,实际上,C语言在内部将每个字符型
量都看作字长为8的整型量。例如,x的十进制ASCII码是120,y的十进制ASCII码是121。对字符变量a、b赋予'x'和'y'值:a='x';b='y';实际上是在a、b所在的两个字节内分别存放整数120
和121:a:01111000b:0111100113char型与int型之间的关系注意:1、一个字符型变量占一个字节,只能存放一个字符,存放该字符的ASCII码值;2、由于字符型数据也是以整数形式进行存储,所以它可以以字符形式、整数形式输出;3、常用字符的ASCII码值:’’:
0x20(32)’0’:0x30(48)’A’:0x41(65)’a’:0x61(97)14小写字母转换为大写字母#include<stdio.h>main(){charch='b';printf("%c,%d\n",ch,
ch);ch='b'-32;printf("%c,%d\n",ch,ch);}#include<stdio.h>main(){charch='b';printf("%c,%d\n",ch,ch);ch='b'-('a'-'A');printf("%c,%d\
n",ch,ch);}b,98B,66b,98B,66152.2.4字符串(String)常量用双引号括住的由0个或多个字符组成的字符序列–"Iamastring"–""表示空字符串–转义字符也可以在字符串中使用–引号只作为字符串开始和结束的标
志–C语言内部用’\0’表示字符串的结束–除注释外,是惟一可以出现中文的地方"x"和’x’是不同的162.3.1浮点型常量(实型常量)实型常量的表示形式–十进制小数形式123.45、456.78–指数形式1e-2、4.5e3注意:–非指数形式由数字和小数点组成–123.、+12
3.、.123都是合法的非指数形式–指数形式–e或E之前必须有数字(可以是非指数型浮点常量,可以是整数),且e或E后必须为整数。–e4、12e2.5都是非法的指数形式17浮点型变量分为单精度型(float)、双精
度型(double)类型类型标识符所占字节有效数字数值范围单精度型float46~70以及1.2×10-38~3.4×1038双精度型double815~170以及2.3×10-308~1.7×10308浮点型变量类型浮点
型变量(实型变量)18误差、实型数据的有效数字位数例#include<stdio.h>main(){floata;doubleb;a=123456.789e4;b=123456.789e4;printf("%f\n%
f\n",a,b);}1234567936.0000001234567890.000000float型数据提供7位有效数字double型数据提供17位有效数字实型数据使用不当会导致舍入误差19求字节运
算符它是一个C语言的关键字,并不是函数,专门用于获取指定类型所占字节数可以用两种形式使用sizeof(表达式)–一般都使用:sizeof(变量名)sizeof(类型)值得注意的是,使用sizeof(表达式)时,
不对表达式运算,只判断表达式值的类型。20#include<stdio.h>main(){printf("DatatypeNumberofbytes\n");printf("---------------------------------\n");printf("char%d\n",siz
eof(char));printf("int%d\n",sizeof(int));printf("shortint%d\n",sizeof(short));printf("longint%d\n",sizeof(long));printf(
"float%d\n",sizeof(float));printf("double%d\n",sizeof(double));}21§2.5数据的输入与输出如何进行数据的输入输出?输入:从标准输入设备上输入数据到计算机内存输出:将计算机内存中的数据送到标
准输出设备C语言中输入输出操作通过调用标准库函数来实现222.5.1字符输入/输出函数字符输出函数putchar(ch)–表示输出一个字符,ch可以是一个字符变量或字符常量、整型变量、整型常量或转义字符。–如:putchar(ch);字符输入函数getchar()–表示从输入设备接收一个字符
,该函数无参数–函数值为从输入设备接收的字符–如:ch=getchar()23#include<stdio.h>main(){charch;printf("PressakeyandthenpressEnter:");ch=getchar();printf("Youpressed");
putchar(ch);putchar('\n');}运行程序PressakeyandthenpressEnter:311A↙YoupressedA例24①getchar()函数接收的字符可以赋给一个字符变量或整型变量,也可以不赋给任何变量,作为表达式的一部分。c=getch
ar();putchar(c);可以用下面一行语句代替:putchar(getchar());②getchar()函数只能接收一个字符,即使从键盘上输入多个字符,也只接收第一个字符。③从键盘上输入
的字符不能带单引号,输入以回车键(Enter键)结束。关于getchar()函数的说明和注意事项:25格式输出函数printf(“格式控制字符串”,输出项表列);–输出若干个任意类型的数据printf("a=%db=%f",a,b);函数名输出表列普通字符格式说明2.5.3格式输出
函数26printf函数常用的格式字符格式符功能d以带符号的十进制形式输出整数(正数不输出符号)o以八进制无符号形式输出整数(不输出前导符0)x、X以十六进制无符号形式输出整数(不输出前导符0x)x、X决定十六进制数的a~f以小写或大写形式输出u以无符号十进制形式输出整数c输
出单个字符s输出字符串f以小数形式输出单、双精度实数(隐含6位小数)e、E以指数形式输出单、双精度实数g、G选择f和e格式中输出宽度较小的格式输出,且不输出无意义的0%%输出百分号本身2.5.3格式输出函数27附加
格式说明符功能-数据左对齐输出,无-时默认右对齐输出m(m为正整数)数据输出宽度为m,如果数据宽度超过m,按实际输出.n(n为正整数)对实数,n是输出的小数位数,对字符串,n表示输出前n个字符lld输出long型数据,lf,le输出double型数据h用于格式符d
、o、u、x或X,表示对应的输出项是短整型0输出数值时指定左面不使用的空格位置自动填0printf函数常用的附加格式说明符2.5.3格式输出函数28%d、%md、%-md、%0md、%ld分析下面程
序的运行结果。#include<stdio.h>voidmain(){intx=123;printf("%d\n",x);printf("%6d\n",x);printf("%2d\n",x);printf("%-6d\n
",x);printf("%06d\n",x);}程序运行结果:123︼︼︼123123123︼︼︼000123d格式符29用来输出一个字符。有%c、%mc、%-mc等用法。字符数据的输出。#include<stdio.h>v
oidmain(){charc='a';printf("%d%5c\n",c,c);}程序运行结果:97︼︼︼︼ac格式符30用来输出一个字符串。有%s、%ms、%-ms、%m.ns、%-m.ns
等用法。程序运行结果:China,︼︼︼China,China︼︼︼︼︼Ch,Chin,Chi︼︼s格式符字符串的输出。#include<stdio.h>voidmain()/*主函数以不同形式输出字符串”China”*/{pr
intf("%s,%8s,%3s","China","China","China");printf("%7.2s,%.4s,%-5.3s\n","China","China","China");}31用来
输出实数(包括单精度、双精度),以小数形式输出。有%f、%m.nf、%-m.nf等用法:f格式符实数的输出。#include<stdio.h>voidmain(){doublef=123.456;printf("f=%f,f=%
10f,f=%10.2f,f=%.2f,f=%-10.2f\n",f,f,f,f,f);}程序运行结果:f=123.456000,f=123.456000,f=︼︼︼︼123.46,f=123.46,f=123.46︼︼︼︼32用来以指数形式输出一个实数。有%e、%m.ne
、%-m.ne等用法。请以指数形式输出一个实数。#include<stdio.h>voidmain(){floatf=123456.78;printf("%e,%8.3e,%6.0e,%.1e\n",f,f,f,f);}程序运行结果:1.234568e+
005,1.235e+005,1e+005,1.2e+005e或E格式符332.5.4格式输入函数格式输入函数scanf(“格式控制字符串”,输入项地址表列);scanf("%d,%f”,&a,&b);34在输入数据时,遇到以下情况认为此数据输入结束。①遇到空格、或者按回车键
、或者Tab键。②遇到指定的宽度结束。例如"%3d",只取3位。③遇到非法输入。例如:scanf("%3d%d%c%f",&x,&y,&s,&z);若输入:12345g678o.98↙输入数据
结束处理35①scanf函数不能显示提示字符串。因此,在编写程序时,往往先用printf()函数在屏幕上输出提示,告诉要输入的信息项。提示输入的信息项。#include<stdio.h>voidmain(){inta,b,c;printf("inputa,b,c:\n");sca
nf("%d,%d,%d",&a,&b,&c);printf("a=%d,b=%d,c=%d",a,b,c);}程序运行结果:inputa,b,c:35,45,55↙a=35,b=45,c=55使用scanf函数的注意事项:36②在用“%c”格式输入字符时,所有输入的字符(包括空
格字符和转义字符)都作为有效字符。③scanf函数的“格式控制”后面应当是变量地址,而不是变量名。④输入实数时不能规定精度。例如,scanf("%4.1f",&f);⑤如果格式控制中有非格式字符,则输
入时也要输入该非格式字符。使用scanf函数的注意事项:37d用来输入十进制整数O用来输入八进制整数x用来输入十六进制整数c用来输入单个字符s输入字符串,以非空白字符开始,遇第一个空白字符结束f用来输入实数,可以用小数形式或指数
形式输入e、E、g、G与f作用相同,e与f、g可以互相替换(大小写作用相同)scanf格式字符38l加在d、o、x、u前:输入长整型加在f、e前:输入双精度型h加在d、o、x前:输入短整型m表示数据占用的宽度*本输入项在读入后不赋给相应的变量scanf附加格式说明符39在定义
变量时就对其赋初值,称为变量的“初始化”。–不被初始化的变量,其值为随机数charch='a';intsum=0;longinti=1;floatx=1.0e-5;§2.7变量的初始化40变量的作用域变量的作用域指在源程序中定义变量的位置及其能
被读写访问的范围(定义变量的位置和变量起作用的范围)分为–局部变量(LocalVariable)–全局变量(GlobalVariable)41局部变量在函数内部定义的变量称为局部变量。函数内部定义的变量只在该函数范围内有效,不同函数中的局部变量可以
重名,互不混淆。42floatf1(inta){intb,c;….}Charf2(intx,inty){inti,j;……}main(){intm,n;……}a,b,c作用范围x,y,i,j作用范围m,n作用范围43例下面程序中包含有
复合语句,分析其运行结果。#include<stdio.h>voidmain(){inti=2,j=3,k;k=i+j;{intk=8;if(i==2){i=3;printf("k1=%d\n",k);}}printf("
i=%d\nk2=%d\n",i,k);}程序运行结果:k1=8i=3k2=544说明:1.每个变量仅在定义它的语句块(复合语句)内发挥作用(含下一级语句块);2.若不同语句块变量重名,两个变量互不相干。3.当发生复合语句嵌套时,若外层变量与内层变量重名,则局部优先45
全局变量在函数外定义的变量称为全局变量。作用范围:从定义变量位置开始到本源文件结束。46intp=1,q=5;floatf1(inta){intb,c;….}charc1,c2;charf2(intx,inty
){inti,j;……}main(){intm,n;……}c1,c2作用范围p,q作用范围47程序运行结果:n=5n=10例分析下面程序的运行结果#include<stdio.h>voidfun();intn=5;voidmain
(){intn=10;fun();printf("n=%d\n",n);}voidfun(){printf("n=%d\n",n);}48说明:同一源文件中,允许全局变量和局部变量同名。但在局部变量的作用域内,
全局变量被“屏蔽”不起作用.49动态存储方式与静态存储方式指数据在内存中存储的方式即编译器为变量分配内存的方式,它决定变量的生存期动态存储方式–在程序运行期间根据需要动态的分配存储空间的方式静态存储
方式–在程序运行期间由系统分配固定的存储空间的方式程序区静态存储区动态存储区形参、自动变量、函数调用的现场等全局变量、静态变量50从变量在内存中存在的时间(即生存期)角度来分,可以分为静态存储变量和动态存储变量。51§2.8变量的存储
类变量两个属性:数据类型、数据的存储类别。自动变量和寄存器变量属于动态存储方式,外部变量和静态变量属于静态存储方式。存储类别数据类型变量名1,…,变量名n;auto(自动的)register(寄存器的)static(静态的)extern(外部的
)52自动变量(auto变量)auto类型名变量名;说明:缺省auto,默认为自动变量★生存期:随着函数的调用而自动分配内存,调用结束时,自动释放内存。★自动变量的初值:定义变量时若没赋初值,变量的初值不确定53寄存器变量(regi
ster变量)寄存器–CPU的内部容量很有限、但速度极快的存储器使用频率比较高的变量声明为register,可以使程序更小、执行速度更快–register类型名变量名;–registerinti;现代编译器有能力自动把普通变量优化为寄存器变量,并且可以忽略用户的指定,所
以一般无需特别声明变量为register54静态(static)局部变量static类型名变量名;★生存期程序编译时分配存储单元,整个程序的执行期间都不释放内存。★静态变量的初值若未赋初值:默认初值为0;若赋了初值:仅在编译时赋初值一次,程序运行
后不再给变量赋初值。55注意:★静态局部变量在函数调用结束后其值不消失而保留原值,下次调用时的值为上次调用结束时的值。56例2.27#include<stdio.h>voidmain(){voidincrement();increment();increment();increment
();}voidincrement(){staticintx=0;x=x+1;printf("x=%d\n",x);}程序运行结果:x=1x=2x=357在一个文件内扩展外部变量的作用域用extern声明全局变量,以扩展其在源程序文件中的作用域。#inclu
de<stdio.h>intx=123;voidmain(){externinty;printf(“x=%d\ny=%d\n”,x,y);}inty=321;程序运行结果:x=123y=321