Pascal和c的区别

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Pascal和c语言的对比xxxxxxxxxxx摘要以我目前对c语言和pascal的掌握,很清楚自己并不能写出深刻的见解,但是,对基本的概念性的东西(也就是一些死记硬背的东西)还是应该总结一下的。本文通过pascal和C语言之间的对比,大致记录些自己的感受。关键词:c语言;pascal;对比;总结ThecomparisonbetweenpascalandcprogramxxxxxxxxxxxxxxxAbstract:ForwhatIhaveknownaboutcprogramandpascal,I’msureaboutthatIcan’tcomeupwithsomedeeplyunderstanding.But,it’snecessarytosummarizesomethingbasicandfundamental(thateveryonehastomemorize).Iwillwritedownmyfeelingswhenlearningthecprograminthisarticlethroughthecomparisonbetweenpascalandc.Keywords:cprogram;pascal;comparison;summary1关于一些基础知识1.1基本字符、保留字(关键字)、标识符pascal中基本字符:有86个A~Z(26),a~z(26),0~9(10),其他字符(24);保留字:有35个(不带forward);标识符:字母开头的字母和数字的组合;c中的基本字符:有96个A~Z(26),a~z(26),0~9(10),其他字符(34个);关键字:有32个,分四类,数据类型;控制语句;存储类型;其他(sizeof);标识符:以字母或下划线开头的字母、数字和和下划线的组合。*注释的写法:pascal:{-----}C:/*----*/或//----;*pascal中的标准标识符(标准常量3,标准类型5,标准文件2,标准函数17)包含在标识符中说明,c中除了标准类型放在关键字中的数据类型,其他的均分散在各个文件中。故保留字和关键字的范围有区别。*c是大小写敏感语言,pascal不是数据类型:的数据类型简单类型构造类型指针类型标准类型用户自定实型(real)整型(integer)布尔型(boolean)字符型(char)枚举子界数组集合记录文件pascal1.2语句1.21Pascal的语句C的数据类型基本类型构造类型指针类型空类型void整型(int)字符(char)实型单精度(float)双精度数组结构(struct)联合(共用体)(union)1.2.2c语句基本语句过程语句赋值语句转移语句空语句复合语句条件语句循环语句开域语句构造语句输入语句read[ln]输出语句write[ln]:=Gotolable(0~9999)BeginEndBeginBeginEndEnddIfthenelseCase(exp)ofFor..to(downto)..doWhile..doRepeat…until…With…doBeginend1.3结构程序设计1.3.1顺序结构pascal中一个程序分为程序首部和分程序,分程序包括标号说明,常量说明,类型说明,变量说明,过程与函数说明,语句部分,其中过程和函数说明部分又叫做子程序,跟主程序拥有相同的顺序结构。C中一个程序分为函数首部,函数体。函数体通常包含说明部分,语句部分。因为goto语句不需要提前定义标号,故c没有标号说明;c的常量定义为表达式语句表达式+;函数调用语句函数名(实参表)控制语句复合语句{{{}}}空语句;;条件判断if()..;elseswitch循环For();While();Do…while();const,跟pascal的一样;c用#typedef来自定义一个类型标识符,pascal用type;c定义变量的时候可以初始化(定义时即赋值),pascal不能;c没有过程,只有函数;c的函数体中的语句部分相当于pascal的语句部分,不过前者简单({}),后者复杂(begin……end)1.3.2选择结构各有两种选择结构,if语句两者大同小异,这里只说case和switch两者的主要区别在于1、case的分语句前的值(常数)可以有很多,而switch的分语句case后的标号只能有一个;2、case的表达式所有可能的值必须在值表中出现,且只执行一条语句;switch的每条语句后必须加break以跳出;3、switch多了一条default;1.3.3循环结构两者各有三种循环语句,执行语义也差不多,但c语言中的for语句可以很灵活的代替while语句,也就是说pascal的for的循环控制变量必须是有序类型,但C中的for没有循环控制变量的说法,而是像while一样用条件来控制循环的次数的。2函数(与过程)程序设计(属结构程序)首先说明的是c中没有过程的说法,而且c的函数加上“;”就可以称为过程,故将pascal中的函数和过程放到一起说。PascalC组成函数首部,分程序函数首部,函数体定义格式FUNCTION函数名(形参表):函数类型函数类型函数名(形参表)调用格式e=函数名(实参表)函数名(实参表)与主函数(调用函数)的联系1.变参;2.全局变量;3.局部变量的非局部应用;4,函数名1.参数只传值,不传地址,可用指针变量直接传地址;2.全局变量标识符的作用域此处两者的差别体现在变量的储存方式上,不细说关于参数C的参数可以是指针,而函数入口地址和数组名都可看做指针,故c中可以用函数名或说组名做参数其他pascal中的函数可以嵌套,c的所有函数都是平行的;两种语言调用定义在后边的函数时都需要在前边的程序前(或中)加上引用,pascal中用FORWARD;C中用extern两者都可用函数形成递归调用栈*Pascal中函数与过程的差别:函数必须有对函数名定义类型,且函数中必须有对函数名的赋值语句;过程可以通过参数返回很多数值,相当于集合了很多函数,也可以不返回任何值(没有给过程名定义类型,也不能对过程名赋值),相当于执行了一个动作。3数组类型(属数据类型)PascalC定义a:array[1..3,1..5]ofintegerinta[3][5],b[][5]形式一维a[1..5],a[-1..3]二维a[1..3,1..5]一维a[5]二维a[2][3]只能从a[0],a[0][0],a[0][0][0]..开始初始化不能能初始化时可以不说一维形式的个数,如a[]={1,2,3},a[][3]={{1,2,3},{1,2},{1,3}}*注意:初始化时只能给数组前边的元素赋值,不能隔着。未赋值的依据不同的编译器系统自动赋0(若该数组没有一个元素被初始化,则所有元素均取随机数)赋值方式(不含1、标准文件输入,需1、标准文件输入,需用循环单个读取字符串)用循环单个读取;2、其他同类型的数组赋值(必须写明一维形式的个数,不能定义inta[],然后再对a赋值);2、其他同类型的数组赋值3、赋初值数组的引用a[1],a[1,5]..数组名:a[2],a[1][2]..指针:p[1],*p,*(p+2)..字符串String直接定义用一维字符数组定义;用指针;两者效果一样,不同的是由于储存内容不同,程序运行指针的速度快其他1、数组分量=下表变量2、下表表达式!=下表变量3、数组分量不能用作循环控制变量1、数组名相当于指针,一个指针相当于一个一维数组。[]相当于移动指针且取值的操作,如int*p;则p[2]=*(p+2)因此在定义指针型数组的时候就可以这样char*p[3][2];相当于定义了chara[][3][2]的三维数组(p本身相当于一个一维数组).2、多维数组的每个维度的数组名均代表第一个元素的地址,即inta[6][7][8][9];a[0]=a[0][0]=a[0][0][0]=&a[0][0][0][0]1、多重循环2、Pascal的数组没有c的灵活,原因在于pascal中的数组名不能当做指针来处理4记录类型(结构体)(属数据类型)PascalC定义记录类型Exp=RECORD域标识符表:类型;域标识符表:类型;….;END;结构体struct结构体名{成员表列}变量名[初值]初始化不能能赋值方式单个赋值(可以用开域语句),可以赋初值,也可从初始化(要用{}将整体包含,将各个成员分开,分别赋值);标准文件读取(但必须单个来)用相同类型的其他变量赋值;给各个成员单个赋值或从标准文件读取用相同类型的其他变量赋值引用1、“.”号,单个引用记录成员2、开域语句1、“.”号,单个引用结构体成员2、使用指向该结构体的指针,以及“-”号与链表相关两者均可建立单向链表及双向链表其他记录变体CASE标志域:类型OF常量表:(域表);常量表:(域表);……END;输入记录变体内的数据时要根据标志域的值来确定应输入哪部分。*必须放在记录类型中多种类型公用一块物理内存,以储存只有一个项目的数据(非此即彼型)联合类型(共用体)union共用体类型名{成员表}变量名;*不能初始化*联合类型是独立于结构体的一种数据类型数组,记录(结构体),记录变体(联合类型)均属构造类型的数据,数组的各个元素类型必须相同,占用不同的内存记录(结构体)的各个元素类型不同,占用不同的内存记录变体(联合类型)的各个元素类型不同,占用相同的内存,某个时刻只能记录一个成员的信息5文件类型(属数据类型)PascalC定义类型文件FILEOF基类型文本文件TEXT通过文件指针来操作文件FILE*fp;基本操作Assign(sfile,”file”)连接Reset(sfile)指针置文件FILE*fp;fp=fopen(“sfile”,”打开方头,将eof初始化为0;Rewrite(sfile);新建或重写Read(sfile,x);读取文件中的数据Write(sfile,y);写入数据Close(sfile);关闭文件Eof(sfile)正文文件相关的:eoln(sfile);readln();writeln();式”),将文件指针指向某一文件fclose(“sfile”);关闭文件字符读写:ch=fgetc(fp);读入一个字符并存到ch中fgetc(fp);将文件内部指针往后移一个;fputc(“字符表达式”,fp);将单个字符输入文件字符串读写fgets(字符数组(名),n,fp);fputs(字符串,fp);数据块读写:fread();fwrite();格式化读写fscanf();fprintf();随机读写rewind();将文件内部指针置文件头fseek,指针定位其他二进制文件无行结构(流式文件)只受程序本身的控制,而不受物理符号(如回车符)的控制;文本文件有行结构可受物理符号的控制;6指针(属数据类型)pascalC定义变量:^类型类型*变量基本New(p)申请内存;P^引用指针所指向的内容Nil空指针malloc();申请内存;free();释放内存;*p引用指针所指向的内容NULL空指针其他Pascal的指针相当简单,可以看做这里的指针就是一个独立的数据类型,跟数组或整型是同一个水平的,但是c的指针则很灵活,在c中,数组名是指针,函数名是指针,故指针可以用来代替很多东西,而且由于指针的储存空间占用小,使程序的运行速度快指针和数组1、数组名是指针,是常量,单个指针可以看做是一维的数组,是变量;2、行指针指向一行,尽管意义上且实际上指向该行的首个元素的地址,但是当指针移动时,它是按行移的,多维数组依次类推3、二维的数组指针多用来记录多个字符串指针和函数1、函数名代表的是该函数的入口地址;因此用指针也可以引用函数;2、函数的参数可以是指针(用来传地址),函数的返回值也可以是指针;同理,数组也可作为函数的参数,但不能作为函数的返回值;3、指向函数的指针和函数的返回值是指针的表达形式不同:Char*max(int,char)函数的返回值是指针Ch

1 / 12
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功