数据结构c语言复习-(修改于20060223-for04级地方生)_第1页
数据结构c语言复习-(修改于20060223-for04级地方生)_第2页
数据结构c语言复习-(修改于20060223-for04级地方生)_第3页
数据结构c语言复习-(修改于20060223-for04级地方生)_第4页
数据结构c语言复习-(修改于20060223-for04级地方生)_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

C语言计算机辅助教学MarketShareMarketShare1C语言的数据类型一、为什么要规定数据类型:

C语言规定,在程序中用到的每一个变量都要指定它们属于哪一种类型,这是因为:1.不同类型的数据在内存中占不同长度的存储区,而且数据在计算机内的表示形式也不同.例如:一般微机2bytes存放一个整型4bytes存放一个实型2.一种数据对应着一个值的范围int-32768∼32767float10-38∼1038之间例如:整型数据可以进行求余(5%2=1),而实数不能进行求余运算。数值型数据可以进行四则运算,而结构型数据就不能进行四则运算。※一个变量应有确定的类型,在一个程序中一个变量只能属于一个类型,不能先后被定义为二个或多个不同的类型。3.一种数据类型对应一组允许的操作二、C的数据类型:数据类型基本类型整型短整型(short)整型(int)长整型(long)实型(浮点型)单精度型(float)双精度型(double)数值类型字符类型(char)枚举类型(enum)构造类型(组合类型)数组类型结构体类型(struct)共同体类型(union)文件类型(file)指针类型空类型(void)不返回任何类型的数据在程序中,不同类型的数据既可以以常量形式出现,也可以以变量形式出现。所谓常量是指在程序执行期间其值是不能发生变化。变量则其值可以变化的。2常量与变量例如:1.2,3,‘a’都是常量,分别代表实型、整型和字符型常量。它们的特点是从字面上即可判断它们是某一类型的常量,所以又称为字面常量或直接常量。

符号常量:是在一个程序(或程序的一部分)中指定一符号或标识符代表一个常量。一、(直接)常量和符号常量:例:#definePRICE30main(){

intnum,total;num=10;total=num*PRICE;

printf(“total=%d”,total);}输出结果:total=300说明:(2)符号常量不同于变量,它的值在其作用域内不能改变,也不能再被赋值.(1)习惯上符号常量用大写,变量用小写以示区别PRICE=50╳注意:‘a’和“a”的区别:‘a’是单个字符常量,一个字符“a”是字符串常量,含有二个字符‘a’,‘\0’charc;c=‘a’;√c=“a”;×存储单元所存储的数据称为变量的值,这个存储空间的首地址就称为该变量的地址。

二、变量:变量是其值可以改变的量称为变量。每一个变量都有一个名字,称之为变量名,它代表了某个存储空间及其所存储的数据。※标识符是以字母或下划线开头,由字母、数字或下划线组成的字符序列

3C语言概述一、控制语句:完成一定的控制功能.

①if()~else~条件语句②for()~③while()~④do~while()⑤continue结束本次循环⑥break终止循环或switch⑦switch多路分支语句⑧goto

转移语句⑨return返回语句循环语句上面9种语句中的括号()表示其中是一个条件,~表示内嵌的语句.如:i++;a=3;i=i+1;都是赋值语句

二、表达式语句:表达式加分号构成表达式语句

典型的是:由赋值表达式构成赋值语句.1.i的初值为3

k=(i++)+(i++)+(i++)值为9(3+3+3),i的值为6

k=(++i)+(++i)+(++i)值为18(6+6+6),i的值为6逻辑运算符及优先级:&&(与)||(或)!(非)二元一元三、逻辑运算符:4一维数组一、一维数组的定义:定义方式:类型说明符数组名[常量表达式];例:inta[10];floatfa[100],fb[100];chars1[20],s2[40];1.常量表达式表示数组元素个数,下标变化范围0到N-1

2.C不允许动态数组常量表达式中只能有常量和符号常量,不能有变量。二、一维数组的引用:

数组必须先定义,后使用,而且只能逐个引用数组元素,而不能一次引用整个数组。数组的表示形式:

数组名[下标]下标可以是整型常量或整型表达式inta[N];下标变化范围0到N-1for(i=0;i<N;i++){scanf(“%d”,&a[i]);

printf(“%d”,a[i]);}5函数

一个较大的程序一般应分为若干个程序模块,每一个模块用来实现一个定的功能。所有的高级语言中都有子程序这个概念,用子程序来实现模块功能。在C语言中,子程序的作用是由函数来完成的。一个C程序可由一个主函数和若干个函数构成。由主函数调用其它函数,其它函数也可以互相调用。同一个函数可以被一个或多个函数调用任意多次。在程序设计中,常将一些常用的功能模块编写成函数,放在函数库中供公共选用。要善于用函数,以减少重复编写程序段的工作量。

C语言提倡把一个大问题划分成许多个小块,每一小块编制一个函数。这样C程序是由许多小函数而不是由少量大函数构成。这样作的好处:各部分充分独立,任务单一,便于书写和调试。有些小函数还可以作为构件,被别的程序利用。先看一个简单的例子例7.1main(){printstar();

/*调用prinstar函数*/

print_message();

/*调用print_message函数*/

printstar();

/*调用printstar函数*/}printstar()

/*printstar函数*/{

printf(“******************\n”);}print_message()

/*printmessage函数*/{

printf(“Howdoyoudo!\n”);}

运行情况如下:

******************Howdoyoudo!******************6指针指针类型是C语言中使用十分普遍的数据类型,它与一般的变量不同之处是它包含的不是数据的值,而是另一变量的地址。指针是C语言中的一个重要概念,也是一个比较难掌握的概念,正确而熟练地掌握了指针的概念和指针的使用,就能设计出复杂的数据结构和高效的程序,没有掌握指针就没有掌握C语言的精华。凡是程序中定义的变量,在编译时系统都给他们分配相应的存贮单元,一般微机C系统给整型分配2个字节,给实型分配4个字节,每个变量所占的存贮单元都有确定的地址,具体地址在编译时分配。348.6xy4.5例:inta=3,b=4;floatc=4.5,d=8.6;chare=‘x’,f=‘y’;101010121014a101810221023bcdef

要访问内存中的变量,在程序中是通过变量名来引用变量的值。但实际上,在编译时将每个变量名对应一个地址,在内存中不再出现变量名而只有地址。若程序中引用变量a,系统找到对应地址1010,然后从1010,1011两个字节中取出其中的值。直接访问:通过变量名或地址访问一个变量的方式为

“直接访问”。间接访问:把地址存放在一个变量中,然后通过先找出地址变量中的值(一个地址),再由此地址找到最终要访问的变量的方法称为“间接访问”。存放地址的变量是一种特殊的变量,它只能用来存放地址而不能用来存放其它类型的数据,需要专门加以定义。y101010121014a101810221023bcdef344.58.6x200220042006pa201010141016pbpcpdpepf10101012101410181022102320082012物理关系角度pa3apb4bpcpdpe4.5c8.5dxepfyf逻辑关系角度一、指针变量的定义在程序中对于存放地址的变量要专门定义。如:int*p;

定义了一个指针变量p,它指向一个整型变量在定义一个指针变量p以后,系统为这个指针变量分配了一个存储单元,用它来存放地址,但此时该指针变量并未指向一个确定的变量,因为该指针变量中未输入确定的地址,要使一个指针变量指向整型变量,必须将整型变量的地址赋给该指针变量。例:&k取变量k地址&c[2]取数组元素c[2]的地址&()取结构st变量name项的地址&233,&(i+233)int*p,i=3;p=&i;P3i&iP3i&:(取地址运算符)取当前变量的地址运算对象不能是常量表达式或寄存器变量指针变量定义的一般形式:[存储类型]类型标识符*标识符;注1.标识符前面的“*”标示该变量为指针变量。2.一个指针变量只能指向同一类型的变量。请区别:指针:就是地址变量的指针:就是变量的地址指针变量:存放地址的变量int*p,a;printf(“%o”,p);以八进制形式输出指针变量p的值(地址)p=&a;将整型变量a的地址赋给指针变量p,此时p指向a二、指针变量的引用在定义了指针变量之后,可以对指针变量进行各种操作。例如:给指针变量赋地址;输出指针变量的值;访问指针变量所指的变量等。scanf(“%d”,p);向p所指的整型变量输入一个整型值printf(“%d”,*p);将指针变量p所指向的变量的值输出*p=5;

将5赋给p所指的变量C语言中有关指针的运算符◆&运算符:取地址运算符◆*运算符:指针运算符或指明运算符,*p代表p所指变量注意:此处的*p与定义指针变量时用的*p的含义是不同的。定义int*p;中的*不是运算符,它只是表示其后的变量是一指针变量程序中的*p,其中的*是一个指针运算符,*p表示p指向的变量如:printf(“%d”,*p);

printf(“%d”,a);结果都为3P3i&iP3imain(){int*p1,*p2,i,j,k;i=3;j=5;p1=&i;p2=&j;k=*p1;*p1=*p2;*p2=k;

printf(“i=%d,j=%d\n”,i,j);}例:交换两指针变量所指向的值运行情况:i=5,j=3&i1P15i&i2P23j*p1*p2三、指针变量的运算当指针指向一个具有基本类型或组合类型中具有基本类型的成分分量时,则它可以象基本变量一样使用。inti,*pi;pi=&i;i=0;&iPi0i*pi=0;i+=1;*pii++;*pi+=1;(*pi)++;C语言的函数的参数传递是以“传值”方式进行变量参数的信息传递,被调函数不能直接改变主调函数中参数的值。当引入指针的概念后,我们可以在主调函数中将要改变内容的变量地址作为参数传递给被调函数,而被调函数执行时,就按这个地址去访问变量参数的值,相应的参数要被说明成指针类型。swap(int

x,inty){

intt;t=x;x=y;y=t;}main(){inta,b;a=3;b=5;swap(a,b);

printf(“%d,%d”,a,b);}swap(int*x,int*y){

intt;t=*x;*x=*y;*y=t;}main(){inta,b;a=3;b=5;swap(&a,&b);

printf(“%d,%d”,a,b);}

其中:a是数组名,它表示该数组的起始地址,是个常量。

a恒等于&a[0],&a[i]是a[i]元素的地址,即a+i==&a[i]

四、一维数组的指针表示法inta[10];/*a[0],a[1],a[2],a[3],a[4]...a[9]*/在编译系统计算实际地址时,a+i中的i要乘上数据元素所占的字节数,即:a+i×(一个元素所占字节数)例如:若整型数组a的起始地址为1010,则a+1的实际地址是1010+1×2=1012a数组a[0]a[1]a[2]

a[i]a[9]aa+1

a+ia+9◆指针与数组的一致性:

inta[10],*p;p=a;p=&a[0]p+1:指向a[1]p+i:指向第i个元素p-i:指向p前的第i个元素*p所以*(a+i)a[0]*(p+1)a[1]*(p+i)a[i]要引用一个数组元素,有两种不同的方法:(1)下标法a[i](2)地址法*(a+i)a[i]

&a[i]而且*(p+i)a+ip[i],a[i]a数组a[0]a[1]a[2]

a[i]a[9]p,ap+1,a+1

p+i,a+ip+9,a+9例:main(){inta[5]={1,3,5,7,9},i,*p;for(i=0;i<5;i++)

printf(“%d”,a[i]);printf(“\n”);for(i=0;i<5;i++)

printf(“%d”,*(a+i));printf(“\n”);for(p=a;p<a+5;p++)

printf(“%d”,*p);}注意:不能用以下方法输出a数组的5个元素,因为a是起始地址,是个常数。for(i=0;i<5;i++)

printf(“%d”,*a++);p=a;for(i=0;i<5;i++)

printf(“%d”,*p++);而应写成:a数组a[0]a[1]a[2]a[3]a[4]p,ap+1,a+1

p+4,a+47结构

“结构”数据类型,与组合数据类型数组一样,在结构类型的变量中,可以有若干个成分分量(成员、元素),并且这些成分分量的个数是确定的。但结构与数组不同点:(1)数组表示的是同一数据类型的集合(2)结构表示的是不同数据类型的集合(也可以相同)

结构的使用有利于复杂数据和相关联数据的组织和处理,同时也便于程序的编制和阅读。在数据处理领域,常常要求把一些属于不同类型的数据作为一个整体来处理。如一个学生的信息包括:一、结构体类型概述它们是同一个处理对象(学生的属性),但又不属于同一类型。如果用简单来分别代表各个属性,就难以反映出它们之间的内在联系,而且使程序冗长难读。用数组则无法容纳不同类型的元素。学号姓名性别年龄成绩地址C语言用结构体类型来描述一个学生的信息。

structstudent{intnum;charname[20];charsex;

intage;floatscore;charaddr[30];}stu1,stu2;关键字结构名结构成员表变量说明表二、结构体的定义及结构体变量的说明例:对一个学生的描述1.结构体定义的一般形式

struct

标识符{结构成员表};或struct{结构成员表};

structstudent{intnum;charname[20];charsex;

intage;floatscore;charaddr[30];};struct

{intnum;charname[20];charsex;

intage;floatscore;charaddr[30];};(1)先定义结构类型再定义变量名

struct

标识符{结构成员表};

struct

标识符(同上)结构变量标识符;例:structstudent{intnum;charname[20];charsex;

intage;floatscore;charaddr[30];};structstudentstudent1,student2;2.结构体变量的说明例:structstudent{intnum;charname[20];charsex;

intage;floatscore;charaddr[30];}student1,student2;(2)在定义结构类型的同时定义变量

struct

标识符{结构成员表}结构变量标识符;(3)直接定义结构类型变量(无名定义)

struct{结构成员表}结构变量标识符;例:

struct

{intnum;charname[20];charsex;

intage;floatscore;charaddr[30];}student1,student2;1.对结构可以取地址&结构名(取结构的地址)如:&student1&成员名(取结构成员的地址)如:&student1.num

其中:&为取地址运算符三、对结构体的操作3.访问结构的成员

a.“.”

方式:student1.numb.“->”方式:p=&student1(*p).age或p->age,二者等价2.可定义指向结构的指针

structstudent*p;structstudent{intnum;charname[20];charsex;

intage;floatscore;charaddr[30];}student1;4.对结构变量可以像普通变量一样进行各种运算(根据其类型决定可以进行的运算)如:student2.score=student1.score;sum=student1.score+student2.score;student1.age++;++student1.age;printf(“%d\n”,student1);scanf(“%d”,&student1);printf(“%d,%s,%c,%d,%f,%s”,student1);printf(“%d,%s\n”,student1.num,);scanf(“%d,%s\n”,&student1.num,);注意1.C不允许把一个结构体变量作为一个整体进行输入/输出操作╳√√╳╳2.如果成员本身又属于一个结构体类型,则要用若干个成员运算符,一级一级地找到最低的一级的成员。只能对最低级的成员进行赋值或存取以及运算。如:employ.birthday.daystructdate{intmonth;

intday;

intyear;};structperson{charname[20];

structdatebirthday;charsex;longnum;charnation;}employ;

温馨提示

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

评论

0/150

提交评论