C语言程序设计第2章基本数据类型课件_第1页
C语言程序设计第2章基本数据类型课件_第2页
C语言程序设计第2章基本数据类型课件_第3页
C语言程序设计第2章基本数据类型课件_第4页
C语言程序设计第2章基本数据类型课件_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

高级语言程序设计

2023/7/241概况1

您的内容打在这里,或者通过复制您的文本后。概况2

您的内容打在这里,或者通过复制您的文本后。概况3

您的内容打在这里,或者通过复制您的文本后。+++整体概况第二章基本数据类型主讲:计算机学院朱立华内容提要C语言的数据类型——存储与处理的整体体现常量与变量的概念、区别基本类型之整型、字符型、实型:常量在源程序中的表示形式及取值范围常量在内存中的存储格式变量的定义及值的获取对该类型提供的基本操作C源程序的基本结构及程序中的6种基本符号输入/输出控制2023/7/244C语言的数据类型

计算机处理存储的数据,存储是为了处理,处理依赖于存储数据存储两要素:存储空间的大小,数据的存储格式数据的处理主要是指对数据可以实施的最基本操作C语言通过数据类型体现存储与处理的统一因此,C语言的每一种数据类型,掌握以下几方面:该类型数据占多少字节

该类型数据在内存中的存储格式对该类型的数据提供哪些基本操作该类型数据的取值范围2023/7/245C语言的数据类型

基本整型(int)长类型(long)数据类型基本类型短类型(short)无符号整型(unsigned)整型实型(浮点型)单精度实型(float)双精度实型(double)字符型(char)枚举型共同体类型数组类型结构体类型构造类型指针类型空类型(void)2023/7/246常量与变量无论何种类型的数据,在程序运行过程中,其存储空间中的内容有两种状态:可以变化和不可以变化,对应于变量与常量。

变量:存储空间中的数据可以被修改,这个空间就称为变量空间,简称变量。常量:存储空间中的数据不能被修改,这个空间就称为常量空间,简称常量(有字面常量和符号常量两种)

无论是变量还是常量,都需要一个名称,在程序中代表相应的存储空间中的内容。变量名需要定义,而字面常量名无需定义,直接用字面常量值(有时后面再加特定后缀)表示。

2023/7/247常量与变量变量名的定义:数据类型名 变量名1[,变量名2,变量名3,…,变量名n];例1:inta;例2:intx,y,z;在变量名定义之后,系统根据其类型为变量分配了一定大小的内存空间,该内存空间中是随机数,要使变量有确切值,可以通过下列3种方式之一:赋值:先定义变量,再用赋值号“=”进行赋值初始化:在定义变量的同时指定初值读入:先定义变量,再从键盘或文件提供数据必须以分号结束[]中的内容为可选项,可能没有同一类型定义多个变量时,变量间以逗号隔开变量名必须是用户自定义标识符定义一个整型变量,变量名为a定义3个整型变量,彼此逗号隔开2023/7/2483.1416F52388L常量与变量intm;m=345;longn=52388L;

doublex=3.1416;floaty=3.1416F;charch='A';?m345345345定义变量赋值初始化n5238852388x3.14163.14163.14163.1416y3.1416初始化初始化3.1416初始化‘A’chAA总结:以上例子中,白字代表变量名,黄字代表常量名,绿框代表变量空间,红框代表常量空间在程序中变量以变量名的形式出现,代表的是变量空间中的内容,变量名需要定义;字面常量以(字面)常量名的形式出现,代表的是字面常量空间中的内容,字面常量名无需定义,其真正代表的常量是不带后缀等标识的。2023/7/249常量与变量程序2.1 常量空间与变量空间操作示例#include<stdio.h> intmain(){

intm,n; n=125; m=n;printf("Theresultis:\n");printf("%d,%d,%d\n",n,m,125); printf("%d,%d,%d\n",sizeof(n),sizeof(m),sizeof(125)); printf("%x,%x\n",&n,&m);

return0;}

通过本程序,介绍下面3方面知识:(1)C语言源程序的结构(2)C语言源程序中的6种符号(3)输出函数printf的使用<运行结果>Theresultis:125,125,1254,4,412ff78,12ff7

动态演示过程2023/7/2410C语言源程序的结构C语言的源程序可以由一个或多个文件组成每个文件可由一个或多个函数组成,函数是组成C程序的基本单位

程序必须有且只有一个main函数,是系统调用应用程序的起点函数由函数头和函数体两部分组成函数头3要素:返回类型函数名(形参表)函数体:由一对大括号括起,内含0或多条语句语句必须由分号结束源程序中可以有注释(不参加编译):/*…*/或//…2023/7/2411#include<stdio.h> intmain(){//以左大括号表示主函数体开始

intm,n; n=125; m=n;printf("Theresultis:\n");printf("%d,%d,%d\n",n,m,125); printf("%d,%d,%d\n",sizeof(n),sizeof(m),sizeof(125));printf("%x,%x\n",&n,&m);

return0;}

//以左大括号表示主函数体开始

函数头函数体函数返回类型函数名形参表,此时无形参定义两个整型变量赋值,将常量赋给变量赋值,用有确定值的变量赋给另一个变量输出提示信息输出变量和常量的值输出变量和常量所占字节大小C语言中的一个运算符,计算数据所占字节大小的,参数可以是常量、变量、表达式、类型名以十六进制形式输出变量在内存中的起始地址返回调用点,结束程序文件包含,此文件中有printf函数的原型/*程序2.1常量空间与变量空间操作示例,这是一个单文件的程序,文件名:li2_1.c*/多行注释形式单行注释形式单行注释形式2023/7/2412C语言源程序中的6种符号(1)关键字(Keyword):C语言中预先规定的具有固定功能和意义的单词或单词的缩写,32个都有特定意义,用法固定(2)标识符(identifier):以字母或下划线开头,后面跟字母、数字、下划线的任意序列。标识符又分为系统预定义标识符和用户自定义标识符两种。(标识符中的大小写字母有区别)(3)运算符(operator):C语言提供了34个运算符,分为15个不同的优先级,完成不同的运算功能(4)分隔符(separator):相邻的关键字、标识符之间必须使用分隔符,不同场合选用:空格、回车/换行、逗号、分号

(5)其它符号:有一些有特定含义的其它符号:{}、//、/**/(6)数据(data):各种类型的字面值常量

不可以用关键字,最好也不用系统预定义标识符2023/7/2413#include<stdio.h> intmain(){//以左大括号表示主函数体开始

intm,n; n=125; m=n;printf("Theresultis:\n");printf("%d,%d,%d\n",n,m,125); printf("%d,%d,%d\n",sizeof(n),sizeof(m),sizeof(125));printf("%x,%x\n",&n,&m);

return0;}

//以左大括号表示主函数体开始

/*程序2.1常量空间与变量空间操作示例,这是一个单文件的程序,文件名:li2_1.c*/系统预定义标识符用户自定义标识符关键字逗号,分隔一条语句中的并列成分分号,用于语句结束后,分隔相邻语句空格,用于相邻关键字、标识符之间,不可用其他分隔符时其他符号常量运算符2023/7/2414C程序通过格式输出函数printf输出任何类型的数据printf函数的调用形式:printf(格式控制字符串

[,输出参数1,输出参数2,……,输出参数n]);printf("Theresultis:\n");

printf("%d,%d,%d\n",n,m,125);

printf("%d,%d,%d\n",sizeof(n),sizeof(m),sizeof(125));printf("%x,%x\n",&n,&m);printf(“%x,%x,%x\n”,&n,&m,&125);X小结:每一种类型的数据都有特定的格式转换说明符控制其输出格式,具体请参考附录I,在以后的使用中逐步熟悉输出函数printf的使用该函数原型在stdio.h头文件中,因此要用#include<stdio.h>文件包含命令用双引号括起来的字符串

,其中的普通字符原样输出,格式转换说明符以%开头后跟一个字母,控制不同类型数据特定的输出格式输出参数可以是常量、变量、表达式,个数取决于格式控制串中格式转换说明符的个数,按从左到右的顺序一一对应格式没有格式转换说明符,原样输出所有字符输出结果:Theresultis:有3个格式转换说明符依次控制后面的3个参数,按十进制整数格式输出,3个普通字符原样输出输出结果:125,125,125输出结果:4,4,4有两个格式转换说明符依次控制后面的2个参数,按十六进制整数格式输出,两个普通字符原样输出获取变量的起始地址值输出结果:12ff78,12ff7c对常量不能取地址2023/7/2415整型的种类数据类型名称类型全称

类型简称占字节数

取值范围有符号基本整型signedintint2或4?取决于编译器有符号短整型signedshortintshort2-216-1~216-1-1有符号长整型signedlongintlong4-232-1~232-1-1无符号基本整型unsignedintunsigned2或4?取决于编译器无符号短整型unsignedshortintunsignedshort20~216-1无符号长整型unsignedlongintunsignedlong40~232-1整型:C语言中最常用最基本的类型。根据整型数据所占内存空间大小分为:short、int、long根据二进制数最高位的意义分为:signed、unsigned综合考虑两方面因素,共有6种整型,如下表所示:2字节2或4字节4字节最高位0表示正数,1表示负数最高位0或1表示数值本身,不表示正负号2023/7/2416在C语言源程序中,可以用十进制、八进制、十六进制这三种制式的数来表示各种类型的整型字面值常量形式:例:十进制整数:12、-91、-12L、93U、123Lu、902LU八进制整数:012、-071、-016L、072U、016LU、072lu、十六进制整数:0XA2、-0X9C3、-0X16L、0x1AU、0X2fLuN进制数转为十进制数的方法:每一位的位值乘以位权再求和十进制数转为N进制数的方法:除以N取余,本次商作为下一次被除数,再除以N取余,直到被除数为0,所求余数按相反顺序输出例:072=7*8+2=58

7整型字面值常量的表示

正号+可以缺省,负号-必须要有符号位制式前缀该进制数字(字母)序列后缀十进制数无前缀八进制数有前缀0十六进制数有前缀0x(0X)十进制数字:0~9八进制数字:0~7十六进制数字加字母:0~9、A~F(或a~f)长整型后缀L(或l)无符号数后缀U(或u)所以:58=07258870282023/7/2417刚才讲到的三种进制表示整型值是在C源程序中的,无论何种制式经编译后都以二进制数的形式存在于内存中整数的二进制数有3种编码方式:原码、反码、补码,为了将减法统一到加法运算中,一般用补码形式。正数:原码、反码、补码形式统一,最高位为0表示是正数,余下的二进制码是其等效二进制表示例:short型常量97转换为二进制数为:1100001,则其原码、反码、补码为:负数的原码:最高位为1,其余位与其相反数相同

负数的反码:最高位为1,其余位是其原码各位取反负数的补码:最高位为1,其余位是其反码最低位加1整型数据在内存中的存储格式-97的原码1000000001100001-97的反码1111111110011110-97的补码100000000011000010的原码有两种形式:000000000000000010000000000000000的反码有两种形式:000000000000000011111111111111110的补码只有一种形式:00000000000000002023/7/2418同一个二进制序列,当表示的整数是有符号数时,最高位代表正负性质,而不作为值计算;当表示的整数是无符号数时,最高位就是数值本身,这时没有负数。例:1000000000000000不同整数类型的数据范围由数据所占的字节数以及是否为有符号数来决定。例:short的范围:-215~215-1,1000000000000000~0111111111111111unsignedshort的范围:0~216-1,0000000000000000~1111111111111111整型数据在内存中的存储格式当表示无符号数时,此位代表数值本身,即215=32768当表示有符号数时,此位代表负数。其绝对值为后面各位取反再加1,得到:1000000000000000,即215=32768,因此该数的值为:-327682023/7/2419整型变量的定义及值的获取变量定义实质上是为数据创建变量空间,需要指明类型和空间的名称即变量名。C语言通过定义语句来完成这项工作。例:inta,b;shortc;unsignedlongx,y;变量值的获取仍是通过三种方式之一:初始化、赋值、读入。前两种已介绍过,读入方式可以使变量在运行时根据用户的需要获得相应的值,比较灵活。scanf的调用:scanf(格式控制字符串,地址1[,地址2,…]);例:scanf(“%d%d”,&a,&b);scanf("%2d%3d%4d",&a,&b,&c);

scanf("%d,%d,%d",&a,&b,&c);

需熟悉的格式转换说明符:%d(%i)、%c、%f(%e)、%lf、%s该函数原型定义在头文件stdio.h中,因此要作文件包含:#include<stdio.h>究竟有几个地址取决于格式控制串中有几个格式转换说明符,依从左到右顺序一一对应控制格式控制字符串包含格式转换说明符和输入分隔符,格式转换说明符的意思和用法与printf函数中基本一致,输入分隔符需要原样输入,建议用默认的空白符来分隔,减少差错使用空白符(空格、Tab、回车分隔数据,输入:1234<回车>,则a和b的值分别为12和34,建议使用这种形式输入按指定宽度输入数据,输入:123456789<回车>,则a、b、c的值分别为12、345、6789按指定分隔符输入数据,输入:12,3456,78<回车>,则a、b、c的值分别为12、3456、782023/7/2420对整型数据的基本操作对整型数据,C语言提供了多种运算:算术运算、关系运算、逻辑运算、位运算等,下一章详细介绍算术运算中:%---取余,只能是两个整数运算,结果为整数/---除法,如果两个整数相除,得到整数商,正负号同被除数程序2.2

分别求出一个3位整数的各个数位上的值,然后按逆序输出。分析:利用整数的取余运算和除法运算,求得3位数n的每1位上的数字,先求个位,再求十位,最后求百位。如果每求得一个数字就输出1个,则只要用同一个变量存当前位数字就可以了求百位:n/100求十位:n%100/10或n/10%10求个位:n%102023/7/2421对整型数据的基本操作#include<stdio.h>intmain(){ inti,n;//定义两个整型变量i,n,变量先定义后使用n=578;//通过赋值语句使n获得一个3位整数值

i=n%10; //对10取余求得个位数

printf("%d",i);//输出个位数

i=n/10%10; //先整除10再对10取余求得十位数

printf("%d",i);//输出十位数

i=n/100; //用整除100求得百位数

printf("%d\n",i);//输出百位数

return0;} <运行结果>875动态演示过程2023/7/2422★对整型的总结整型有6种具体的类型:int、short、long、unsignedint、unsignedshort、unsignedlong,明确其长短及是否有符号.整型字面值常量在C源程序中有十进制、八进制、十六进制表示在内存中,整数的二进制数以补码形式存储,注意最高位在表示无符号数和有符号数时的区别获取整型变量值通过初始化、赋值、读入3种方式之一读入调用scanf函数,注意格式转换字符的正确使用,必须对变量取地址,尽量不用或少用分隔字符对整型数提供多种基本运算,注意除和取余的用法2023/7/2423字符型字面值常量的表示C语言中采用ASCII字符集中的字符表示字符型字面值常量,每个字符对应一个唯一的整数编码,占1字节在C语言源程序中,字符字面值常量需要用一对单引号作为定界符将字符值括起,有两种表示方法:(1)用单引号括起的一个字符,例如:’A’、’9’、’%’。(2)用单引号括起的以反斜杠开头的转义字符,例如:’\n’、’\a’、’\t’、’\\’、’\’’、’\”’两种通用的转义字符表示:(1)’\ddd’:1到3位八进制数所代表的字符(2)’\xhh’:1到2位十六进制数所代表的字符例如字符A常量就有3种等效的表示:’A’、’\101’和’\x41’

例如换行符有3种等效的表示:’\n’、’\12’和’\xA’这种表示通常用于可见字符

这种表示通常用于控制字符。控制字符不可直接显示,而是起特定的控制作用

可以用来表示任何字符,实际上是用该字符ASCII码的八进制和十六进制数来表示

2023/7/2424字符型数据在内存中的存储格式128个标准字符和数值0~127一一对应,这种对应使字符型数据在内存中以1字节的整数二进制形式存储因此在C语言中,字符型数据可以当作整型数据使用,而0~127之间的整数也可以当作字符数据使用需要熟记的几个字符的ASCII码:‘A’----65,其他的大写字母字符依序增加,例:‘E’---69‘a’----97,其他的小写字母字符依序增加,例:‘f’---102‘0’----48,其他的数字字符依序增加,例:‘7’---55‘‘----32,空格字符的ASCII码为32熟练掌握以下两组转换关系:对应大小写字母字符的转换:小写字母-32=大写字母对应数字字符与整数数字的转换:数字字符-48=整数数字例:’B’+32=’b’’d’-32=’D’例:’8’-48=8或’8’-’0’=8;8+48=’8’或8+’0’=’8’2023/7/2425字符变量的定义及获得值字符类型的关键字为:char,定义字符变量的格式:char字符变量名1[

,字符变量名2,…];字符变量也用初始化、赋值、读入这3种方式获得值初始化:charc1=‘A’,c2=98;赋值:charc3;c3=‘N’;

读入:scanf(“%c”,&c3);//从键盘输入时不能输入定界符字符值的输出:用printf输出时,格式转换字符如果是%c,则输出字符形式,格式转换符如果是%d,则输出其对应的ASCII码(整数)专用于字符型数据输入输出的两个函数:输入单个字符:getchar();例:c3=getchar();getchar();输出单个字符值:putchar(字符值);例:putchar(65);putchar(‘D’);putchar(‘\n’);putchar(‘A’+35);必须用%c作为格式转换控制符必须对字符变量取地址调用形式1:字符变量=getchar();将键盘输入的一个字符存入变量中调用形式2:getchar();从键盘输入的一个字符不赋给任何变量可以用字符的ASCII码作为参数可以用普通字符作为参数可以用转义字符作为参数可以用字符表达式作为参数作为字面值常量的字符一定要用定界符,这是为了区别于标识符或整数。例如:’A’与A,’9’与92023/7/2426字符处理程序举例程序2.3:字符常量与字符变量的定义及赋值。#include<stdio.h>intmain(){ charch1,ch2,ch3,ch4,ch5,ch6; ch1='N'; //直接用字符常量赋值

ch2=78; //用字符N的十进制代码赋值

ch3=0x4e; //用字符N的十六进制代码赋值

ch4=0116; //用字符N的八进制代码赋值

ch5='\x4e'; //用十六进制整数代表的转义字符赋值

ch6='\116'; //用八进制整数代表的转义字符赋值

printf(“%c\t%c\t%c\t\n”,ch1,ch2,ch3);//按水平制表格式输出字符

printf("\a"); //转义字符\a代表一声铃响

printf(“%c\t%c\t%c\t\n”,ch4,ch5,ch6);//按平制表格式输出字符

printf("\a"); //转义字符\a代表一声铃响

return0;}<运行结果>NNNNNN动态演示过程2023/7/2427字符处理程序举例程序2.4:大小写字母的转换、字符的输入与输出示例

#include<stdio.h>intmain(){ charch1,ch2; scanf(“%c”,&ch1);//从键盘上输入一个大写字符

ch2=ch1+32;

//ch2的值为小写字符a

printf("%c,%c\n",ch1,ch2);//显示字符输出格式:%c按字符形式输出printf("%d,%d\n",ch1,ch2);//显示字符代码%d按十进制形式输出ch1=102; //ch1的值赋值为fch2=ch1-32; //ch2的值赋值为Fprintf("%c,%c\n",ch1,ch2);//显示字符 printf("%d,%d\n",ch1,ch2);//显示字符代码

return0;}如果从键盘输入:A则输出结果为:A,a65,97f,F102,70ch1=getchar();putchar(ch1);putchar(ch2);putchar(‘\n’);putchar(ch1);putchar(ch2);putchar(‘\n’);动态演示过程2023/7/2428实型的种类数据类型名称类型全称占字节有效数字绝对值范围单精度浮点型float47位3.4E-38~3.4E+38双精度浮点型double816位1.7E-308~1.7e+308长精度浮点型longdouble816位1.7E-308~1.7e+308实型:也称浮点型,是C语言中常用的基本类型。根据实型数据精度以及所占字节数的不同,划分为单精度浮点型、双精度浮点型和长精度浮点型。如下表所示:在不同的编译器中占用字节数不一定相同,不少于double类型是基本原则,在gcc中占12字节2023/7/2429在C语言源程序中,只能用十进制实数来表示实型字面值常量具体有两种形式:(1)小数形式的实数,形式:(2)指数形式的实数,形式:例:合法的实数:0.0、.25、6.、0.23、-23.41、314.159F-123e3、.123e6、123.e-3、3.14159E2L

非法的实数:1,23.4、-12、23.4D、E90、12E4.5、1E400

实型字面值常量的表示

正号+可以缺省,负号-必须要有符号位0~9数字序列小数点后缀十进制整数,可以缺省,但是小数点左右两边不能同时缺省float型后缀F(或f)Double型无后缀longdouble型后缀L(或l)0~9数字序列必须有,不可缺省十进制整数,可以缺省,但是小数点左右两边不能同时缺省十进制整数或小数形式的实数E(或e)十进制整数尾数部分,不可缺省必须有,不可缺省指数部分,不可缺省,注意范围,只能是整数,表示乘以10的多少次方后缀float型后缀F(或f)Double型无后缀longdouble型后缀L(或l)2023/7/2430刚才讲到的小数形式和指数形式表示实型值是在C源程序中的,无论何种形式经编译后都以二进制数的形式存在于内存中。此时的二进制序列必须包含有两个信息——实数的尾数、指数,也就是说,尾数和指数都需要占用一定的存储空间。不同的实型所占存储空间大小不同,分配给这两部分的比例也不一样,于是有了精度与范围上的差别。实型数在内存的存储格式示意(忽略每一部分具体二进制位数)例:-111.1101B

在内存中的存储形式,先转化成:-0.1111101B×211B(保证尾数的小数点后第一位非0)实型数据在内存中的存储格式阶符阶码的数值尾符尾数的数值阶码(指数)尾数01111111101阶码(指数)尾数2023/7/2431实型变量的定义及获得值实数类型的关键字为:float、double、longdouble,定义字符变量的格式:实数类型关键字

实型变量名1[

,字符变量名2,…];实型变量也用初始化、赋值、读入这3种方式获得值初始化:doubled1=23.3,d2=9.8E5;赋值:floatf;f=23.4F;

读入:scanf(“%f”,&f);//float型变量用格式控制字符f

scanf(“%lf”,&d1);//double型变量用格式控制字符lf读入时可以控制总宽度,但是不能控制精度实型值的输出:用printf输出时,无论何种实型均可以使用格式转换字符%f,即使是double型的值也不必使用%lf,与读入不同2023/7/2432对实型数据的基本操作对实型数据,C语言提供了多种运算:算术运算、关系运算、逻辑运算等,下一章详细介绍。算术运算中:%---取余,不能用于实型数求解/---除法,如果两个相除的数中有一个实型数,则得到实数商,正负号同被除数例:5/2=2、5.0/2.0=2.5、5.0/2=2.52023/7/2433基本类型数据的输入/输出示例

#include<stdio.h>intmain(void){ doubled; //定义一个double型的变量

floatf1=3.14F,f2;//初始化float型变量f1

intx;//定义一个int型的变量

charch;//定义一个char型的变量

f2=-90.5f;//用赋值的方法使变量f2

温馨提示

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

评论

0/150

提交评论