C2B2B程序设计(part1).ppt

上传人:za****8 文档编号:13189221 上传时间:2020-06-06 格式:PPT 页数:91 大小:776.01KB
返回 下载 相关 举报
C2B2B程序设计(part1).ppt_第1页
第1页 / 共91页
C2B2B程序设计(part1).ppt_第2页
第2页 / 共91页
C2B2B程序设计(part1).ppt_第3页
第3页 / 共91页
点击查看更多>>
资源描述
C+程序设计(part1),南京大学软件学院郑滔ztTel:506Room:623,Ole-JohanDahlKristenNygaard,NorwegiancomputerscientistTuringAwardin2001http:/heim.ifi.uio.no/olejohan/http:/heim.ifi.uio.no/kristen/,FatherofSimula67FatherofOOprogramming,E.W.DijkstraNiklausWirth,SwisscomputerscientistTuringAwardin1994http:/www.inf.ethz.ch/personal/wirth/,DesignPASCAL、Modula2、Oberon,NetherlandcomputerscientistChairofComputerSciencesattheUniversityofTexasatAustinfrom1984until2000.TuringAwardin1972http:/www.cs.utexas.edu/users/EWD/,“ACaseagainsttheGOTOStatement”Algol68,DennisRitchieKenThompson,AmericancomputerscientistTuringAwardin1983(工程师获奖)http:/cm.bell-,FatherofCCo-inventingUnix,BjarneStroustrup,Ph.D,UniversityofAarhus,DenmarkCollegeofEngineeringChairinComputerScienceProfessoratTexasAtypedefintINT;C+是强类型语言要求程序设计者在使用之前对数据的类型进行声明,表达式,操作数、操作符和标点符号组成的序列,表示一个计算过程优先级a+b*c结合性a+b-c求值次序(a+b)*(a-b)与编译系统有关类型转换约定intx=10;floaty=2.0;x*y表达式种类算术表达式关系和逻辑表达式赋值表达式逗号表达式字位运算符表达式操作符可重载,表达式,计算与类型相同类型的两个操作数运算后,其结果仍然为该类型的值类型对计算的限制类型具有取值范围,超出取值范围的值没有意义混合类型计算和类型转换转换总是朝表达能力更强的方向,并且转换总是逐个运算符进行自动转换(隐式类型转换coersion)显式转换(强制类型转换casting),表达式,赋值表达式左值右值表达式左值:可以出现在赋值表达式左部的表达式,具有存放数据的空间类型不同时,先计算右值表达式的值,再转换为左值类型,然后赋值算术表达式增量和减量操作符前增量(前减量)+a(-a)前增量的结果是左值后增量(后减量)a+(a-)提高编译结果的执行效率,表达式,条件运算符表达式?:唯一的三目运算符只计算一个运算分量如果和的值类型相同,且均为左值,则该条件运算符表达式为左值表达式可嵌套sign(x)x0?1:x=0?0:-1就近原则,表达式,逗号表达式,的值作为该逗号表达式的值inta,b,c;d=(a=1,b=a+2,c=b+3);cout为左值,则该逗号表达式为左值,表达式,字位运算符表达式对整型数二进制位(bit)的操作,将整型数看作二进制序列取反、与c=a*b+b;求值次序使交换率失去作用inta=3;c=a+*+a;副作用的危害破坏了可移植性降低了程序的可读性消除副作用,语句,表达式语句IO语句cin、coutiostream.h、0)floatx=0;/块级,多文件结构,HeaderFile声明的部分宏定义包含指令类型声明函数声明内联函数常量定义变量声明,编译预处理,包含#include“”宏定义define字符串字符串undef宏名字带参数的宏条件编译#if#else#elif#endif#ifdef#ifndef设定编译器状态#pragmawarning(disable:4101)once,数组,特征相同数据类型有序连续存储0n-1一维数组类型定义函数参数仅传递地址元素个数需通过参数显示给出,不能通过sizeof取得字符串,数组,多维数组定义TAc1c2存储组织参数传递只能缺省第一维降维处理,typedefTA1c2;A1Ac1;,数组,#includeintmaximum(intgrade,intnum)intmax=0;for(intk=0;kmax)max=gradek;returnmax;voidmain()intA24=68,69,70,71,85,86,87,89;cout“themaxgradeis”figk.line.x1figi.line.y1figk.line.x2figi.line.y2;break;caseRECTANGLE:caseCIRCLE:.,指针,处理地址信息、动态数据指针定义与基本操作指针与函数指针与数组指针与结构多级指针动态变量,指针定义与基本操作,定义格式*int*p;/p为一个指针变量语义指针变量的值是另外一个变量的内存地址。如:上述指针变量p的值为某一整型变量的内存地址。说明当在一个定义(或声明)中定义(或声明)多个指针变量时,每个指针变量前都要有*int*p,*q;/p和q均为指针变量int*p,q;/p为指针变量,q为整型变量,指针定义与基本操作,也可以先用typedef定义一个指针类型,然后再用该指针类型定义指针变量,如:typedefint*Pointer;Pointerp,q;/p和q均为指针变量取地址操作符(,9,x,0X5A12,p,0X7B77,0X5A12,1000,指针定义与基本操作,当一个指针变量的值为另一个变量的地址时,通常也说成:该指针指向另一个变量,如:指针变量p指向整型变量x,可用下面的图示法表示:Pointerliteral(0/NULL)不指向任何对象指针变量的初始化区别*的三种用途乘法运算符指针定义(或声明)符取指针所指向的值(间接访问),p,1000,x,指针定义与基本操作,指针的运算赋值对于一个指针变量,可以把一个同类型的指针值赋给它。intx;doubled;int*p,*q;p=,指针定义与基本操作,加上或减去一个整型值一个指针值可以与一个整型值进行加或减运算,结果为同类型的指针值。intx;int*p;p=p+1;p=/q的值加8(sizeof(double),指针定义与基本操作,同类型的指针值相减同类型的指针值可以相减,结果为整型值。int*p,*q;intoffset;offset=p-q;inta10;int*p,*q,offset;p=/结果值为3,指针定义与基本操作,两个同类型的指针值比较两个同类型的指针值可以进行等于(=)和不等于(!=)比较,一般不进行大于(,=)和小于(,=)比较。指针值的输出intx=1;int*p=/输出p指向的字符,即:Acoutname);,voidMySort(void*base,unsignednum,unsignedwidth,int(*compare)(constvoid*elem1,constvoid*elem2)char*A=(char*)base;char*tmp=(char*)malloc(width);for(unsignedi=1;i0)/AjAj+1)memcpy(tmp,A+j*width,width);/inttmp=Aj;memcpy(A+j*width,A+(j+1)*width,width);/Aj=Aj+1;memcpy(A+(j+1)*width,tmp,width);/Aj+1=tmp;free(tmp);,TStudentstudent=;intnum=sizeof(student)/sizeof(student0);intwidth=sizeof(student0);MySort(student,num,width,icompare);,指针与数组,数组元素操作下标表达式访问效率数组元素的指针表示法一维数组多维数组,intb2010;/typedefintA10;Ab20;int*q;q=bij*(*(b+i)+j)*(*(p+i)+j)pij,inta10;int*p;inti;p=/数组名表示其首元素的地址,是常量!(int*const)ai*(a+i)*(p+i)pichars28=“C+”,“PASCAL”,“FORTRAN”;,s1,C+0,PASCAL0,FORTRAN0,s2,指针数组,函数main的参数带参数和返回值的函数main的原型为intmain(intargc,char*argv,char*env)argc:参数个数argv:命令行参数env:环境参数。示例c:copyfile1file2操作系统将启动copy程序,调用其main函数,argc:3argv:copy、file1、file2env:,#include#include#includevoidMyFormat(char*lpszFormat,.)va_listmarker;va_start(marker,lpszFormat);for(inti=0;i4;i+)coutva_arg(marker,double)x结构作为函数参数大块数据传输const,多级指针,指针变量所指向的数据类型为指针类型int*pp;/pp为指针变量,指向另一个指针/变量(int*)intx=2,y=8;int*pp=指针变量必须初始化或赋值,否则将会导致运行时刻的严重错误,多级指针,编写一个函数,交换两个字符串voidswap(char*p1,char*p2)char*tmp=*p1;*p1=*p2;*p2=tmp;voidmain()charp18;strcpy(p2,abcd“);charp28;strcpy(p2,1234“);coutp1p2endl;swap(,动态变量,动态变量编译时刻无法确定在程序运行时刻,动态产生、消亡通过指向动态变量的指针变量来实现的分配在程序的堆区(heap)局部变量也是动态产生、消亡,但在程序运行前,编译程序已经知道它们的存在动态变量与C+中的静态(static)变量属于不同的范畴,动态变量是程序设计中的概念(与语言无关),static是C+语言中的概念。,动态变量,动态变量的产生newnew,int*p=newint10;int(*p2)5=(int(*)5)p;for(inti=0;i10;i+)pi=i+1;for(intj=0;j2;j+)for(intk=0;k5;k+)coutp2jk;coutendl;,typedefinti5Array5;voidmain()i5Array*p=newi5Array2;for(intj=0;jnext=NULL;如果链表为空head=p;插在表头p-next=head;head=p;,单链表,如果插在表尾NODE*q=head;while(q-next)q=q-next;q-next=p;插在链表中某一个结点(a)的后面NODE*q=head;while(q,单链表,如果插在链表中某一个结点(a)的前面,则:NODE*q1=NULL,*q2=head;while(q2,guardnode,单链表,结点的删除(假设要删除的结点的值为a)NODE*q1=NULL,*q2=head;while(q2,单向排序链,structNodevoidprint()intk;Node*p=first;Node*next;while(p)*first=NULL;coutknext;voidrelease()while(first)Node*p=first;voidmain()first=first-next;.cinm;deletep;insert(m);.;delNode(n);.print();release();,单向排序链,voidinsert(intk)Node*p=newNode;p-k=k;p-next=NULL;/创建新结点if(!first)first=p;/链表为空elseif(kk)p-next=first;first=p;/插入在头结点elseNode*p1=first,*p2=p1-next;while(p2/插在p1之后,p2之前,单向排序链,voiddelNode(intk)if(!first)return;Node*p1=first;if(k=first-k)first=first-next;deletep1;/删除头结点elseNode*p2=p1-next;while(p2/删除中间结点,insert(Node*first,intn);/?voidmain()Node*first=NULL;insert(first,n);/?,引用,定义C+提供了引用类型,通过引用类型可以定义一个变量,它与另一个变量占用相同的内存空间;或为一个变量取一个别名。intx;int/结果为:2,x,y,引用,引用变量和被引用变量应具有相同的类型引用变量定义中的m=x0;for(i=1;im)m=xi;returnm;,int*max2(intx,intnum)int*p,*q;p=x;q=x+1;while(num1)if(*q*p)p=q;q+;num-;returnp;,int,引用,如果函数返回值的类型是引用或指针类型,则函数不应该把局部量或局部量的地址作为返回值返回操作符重载+=等,引用,用const限定引用voidswap(constint,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!