c语言概要(1).doc_第1页
c语言概要(1).doc_第2页
c语言概要(1).doc_第3页
c语言概要(1).doc_第4页
c语言概要(1).doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

C语言概要一函数一个C语言程序由一个主函数和若干个函数构成。main函数是系统定义的。C程序的执行从main函数开始。(1)一个源程序文件有一个或多个函数组成。一个源程序文件是一个编译单位。并不是以函数为单位进行编译。(2)一个C程序分别放在若干个源文件中。(3)从用户使用角度看,函数分两类:标准函数与用户自定义函数。(4)形参的传统声明方式与现代方式不同在调用函数时,主调函数和被调用函数之间有数据传递关系。1.函数参数与函数的值在函数调用时,形参才被分配内存单元,在调用结束后,形参所占的内存单元也被释放。实参变量对形参变量的数据传递是“值传递”,即单向传递,只由实参传给形参,而不能由形参传回来给实参,这是与FORTRAN不同的。实参可以是常量,变量或表达式。调用结束后,实参单元仍保留并维持原值。因此,在执行一个被调用函数时,形参的值如果发生变化,并不会改变主调函数的实参的值。 主函数定义的变量,也只是在主函数中有效,而不是因为在主函数中定义而在整个文件或程序中有效,这和pascal不同。在划分模块时,要求模块的内聚性强,与其他模块的耦合性强。如果在同一个源文件中,外部变量与局部变量同名,则在局部变量的作用范围内,外部变量被“屏蔽”,即它不起作用。 int a=3,b=5; max(int a,int b)int c; c=ab?a:b; return(c); /形式参数a的作用范围。main()int a=8; /a是局部变量,a的作用范围在主函数。外部变量a在主函数中没有 作用范围。printf(“%d”,max(a,b);2.函数声明,函数原型函数原型function prototype函数类型 函数名(参数类型1,参数类型2,)编译系统不检查参数名。以前的C语言版本的函数声明方式不是采用函数原型,而只声明函数名和函数类型,新版本兼容这个方法,但不提倡使用,因为它未进行全面的检查。(1)main函数的位置在add函数前,而在进行编译时,从上到下逐行进行的,没有对函数的声明,编译系统不知道add(c=add(a,b))是函数名,也没法判断实参(a和b)的类型和个数是否正确,无法进行正确性检查。 在调用函数前,对函数原型做函数声明,编译系统记下了所需的函数的有关信息,在对c=add(a,b)进行编译时就有章可循了。(2)被调用函数定义出现在主函数前,可不必加以声明。因为编译系统已经先知道了已定义的函数类型,会根据函数首部提供的信息对函数的调用做正确性价差。(3)已再所有函数定义之前,在函数的外部已做了函数声明,则在各个主调函数中不必对所调用的函数再做声明。二记录声明一个记录类型的一般形式:Stuct 结构体名成员表列;成员类型名 成员名1.定义结构体类型变量Struct student student1,student2;2.直接定义结构类型变量 Stuct成员表列变量名表列3.定义结构体数组与指针 #define FORMAT “%dn%sn%fn%fn%fn” Struct student int num;char name20;float score3;stu=a2345,”li li”,67,5,89,78,6;main()void print(sudent *);print(&stu);void print(struct student *p)printf(FORMAT,p-num,p-name,p-score0,p-score1,p-score2);Printf(“n”);struct student stu-1;struct student *p;p=&stu-1;三指针与数组1.指向指针的指针eg:char *p;*p=*(*p);*p是指针变量的定义形式。char *p;定义了一个指向字符数据的指针变量。*(*p)表示指针变量p指向一个字符指针变量.*p=qchar *(*p)=*q。*p=q,p的内容是一个指针q, *p表示p是一个指针变量;char *q, q指向的内容是一个字符,q是一个指针变量;char *(*p),表示p指向的内容更是一个字符指针变量。利用指针变量访问另一个“变量”就是“间接访问”。如果在一个指针变量中存放一个目标变量的地址,就是单级间址。指向指针的指针用的是“二级间址”。在程序中很少有超过二级间址的。地址值指针变量变量 (1)一级间址 (1)char *p;指针变量2指针变量1值地址2地址1(2)char *p;2.指针数组: 一个数组,其元素均为指针类型数组,称为指针数组,指针数组中的每一个元素都相当于一个指针变量。一维指针数组的定义形式为 类型名 *数组名数组长度eg. int *p4 比*优先级高,因此p先于4结合,形成p4形式,显然是一个数组,有4个元素;然后再与p前面的“*”结合,表示此数组是指针类型的(数组的元素是指针),每个数组元素都可指向一个整型变量。Int (*p)4; /指向一维数组的指针指针数组适合用来指向若干个不等长字符串,使字符串处理更加灵活方便。字符串本身是一个字符数组。用二维数组指定列数。或用一维数组,用辅助存储数组。用一个比较方便的方法,分别定义一些字符串,然后用指针数组(指针用在操作,并不用来存储。只能做遍历指针,工作指针。)中的元素分别指向各字符串。如果想对字符串排序,不必改动字符串的位置,只需改动指针数组中各元素的指向(即改变各元素的值,这些值是各字符串的首地址),可改变指向,不用搬动位置,这是指针与数组的不同。移动指针变量的地址比移动字符所花时间少得多。指针数组是索引方式。nameFollow me BASICGreat WallFORTRANComputer design指针数组 字符串name0name1name2name3name4说明:指针数组中的元素(指针单元),存放字符串首地址(指针变量的值)。因此指针与指向的单元不是一个类型。例如:指向记录的指针与记录不是一个类型,它们的字节数不同。排序结果:name0name1name2name3name4Follow me BASICGreat WallFORTRANComputer design例题:将若干字符串按字母顺序(由小到大)输出main()void sort(char *name,int n); /函数原型void print(char *name,int n); /函数声明char *name=“Follow me”,”BASIC”,”Great Wall”,”RORTRAN”,”computer design”;int n=5;sort(name,n);print(name,n);void sort(char *name,int n)char *temp; int i,j,k; for(i=0;in-1;i+) k=i; /k是工作游标,指针数组的指针;只用来存储。 for(j=i+1;j0) k=j; /在i,n(i的映射范围)中选择最大的字符串namek; if(k!=i)temp=namei;namei=namek;namek=temp; void print(char *name,int n)int i; for(i=0;in;i

温馨提示

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

评论

0/150

提交评论