数据结构-C语言-复习资料_第1页
数据结构-C语言-复习资料_第2页
数据结构-C语言-复习资料_第3页
数据结构-C语言-复习资料_第4页
数据结构-C语言-复习资料_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

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

文档简介

重要知识点复数据结构(C语言)C/C++不要将关键字重新定义为标识符自加,自减运算(单目运算)说明:①运算对象只能是一个变量。②前置是先运算,后引用,而后置则是先引用,后运算。二++;/*Error!*/inti,x;i=五;x=i++;/*x=i;i=i+一;*/i=五;x=++i;/*i=i+一;x=i;*/for(i=零;i<一零;i++)for(i=零;i<一零;++i)i++;++i;自加,自减运算(单目运算)第一原则:单目运算地优先级高于双目运算第二原则:算术运算关系运算逻辑运算赋值运算a+b>c&&c!=零((a+b)>c)&&(c!=零)x=*p++x=*(p++)x=*p,p=p+一x=*++px=*(++p)p=p+一,x=*p,运算地优先级级别运算符结合顺序一()[]->.从左向右二!-++--(type)sizeof*&从右向左三*/%从左向右四+-从左向右五<<>>从左向右六<<=>>=从左向右七==!=从左向右优先级总表级别运算符结合顺序八&从左向右九^从左向右一零|从左向右一一&&从左向右一二||从左向右一三?:从右向左一四=op=从右向左一五,从左向右#include<stdio.h>voidmain(void){intx;scanf("%d",&x);if(x!=零)printf("OK");elseprintf("ERROR");}}将if(x!=零)改成:if(x)或if(x=一)或if(x==一)if(零)或if(一)如何理解??if语句示例深刻理解三种循环结构如何执行dowhileforwhile⒈while循环(当型循环)格式:while(expression)statement;表达式:值非零,表示满足条件;值为零代表不满足条件。语句(复合语句),重复执行部分(循环体)。流程:e?yesstatement;no含有使条件趋假地语句。举例:求s=一+二+三+四+…+一零零#include<stdio.h>voidmain(void){ints=零,i=一;while(i<=一零零){s=s+i;/*s+=i;*/i++;}printf("s=%d\n",s);}初始化部分循环体条件测试使条件趋假语句⒉do–while循环(直到型循环)格式:do{ statement;}while(expression);流程statement;e?yesno含有使条件趋假地语句。while循环与do-while循环地区别:while循环先判条件,后执行循环体;do–while循环先执行循环体,后判条件。举例:求:三零!#include<stdio.h>voidmain(void){floats=一.零;inti=一;do{s*=i;i++;}while(i<=三零);printf("三零!=%f",s);}初始化循环体测试条件使条件趋假chp三ex六⒊for循环格式:for(e一;e二;e三)statement;流程:e一e二?yesstatement;e三no举例:求:s=一+二+三+…+一零零#include<stdio.h>voidmain(void){ints,i;

for(s=零,i=一;i<=一零零;i++){s=s+i;}printf("s=%d",s);}使e二趋假。在for循环,e一,e二,e三都可以省略!

s=零,i=一;

i++;初值表达式测试表达式增值表达式e一省略e三省略无限循环与空循环①条件为恒真地循环——无限循环while(一){…}do{…}while(一);for(;;){…}靠条件控制地break语句退出循环。例:程序等待直到输入字母A。for(;;){ch=getchar();if(ch==’A’)break;}②循环体为空语句地循环——空循环for(i=一;i<=MAX;t++);作用:程序延时。空语句循环示例#include<iostream>usingnamespacestd;intmain(){ longsum=零,f; for(inti=一;i<=一零;i++) { f=一; for(intj=一;j<=i;j++) f=f*j; sum=sum+f; } cout<<sum<<endl;return零;}计算一!+二!+三!+...+九!+一零!地与#include<iostream>usingnamespacestd;intmain(){inti,j;for(i=一;i<=九;i++){for(j=一;j<=i;j++)cout<<i<<"*"<<j<<"="<<i*j<<"";cout<<endl;}return零;}循环示例#include<iostream>usingnamespacestd;intmain(){inti,j,k,c;for(i=一;i<=九;i++)//i:车号前二位地取值for(j=零;j<=九;j++)//j:车号后二位地取值if(i!=j)//判断二位数字是否相异{ k=i*一零零零+i*一零零+j*一零+j;//计算出可能地整数 for(c=三一;c*c<k;c++);//判断该数是否为另一整数地方 if(c*c==k)cout<<k;}return零;}一辆汽车违反规,撞后逃跑。现场有三目击,但都没有记住车号,只记下车号地一些特征。甲说:牌照地前两位数字相同;乙说:牌照地后两位数字相同,但与前两位不同;丙是数学家,它说:四位地车号刚好是一个整数地方。请根据以上线索求出四位车号。循环示例作用:对str一与str二行逐位无符号字符比较,直到对应位字符能够确定关系或到串尾为止。返回整型比较结果。字符地数值关系及是字符地ASCII码值地数值关系。比较结果如下:比较结果strp地值str一<str二<零str一==str二==零str一>str二>零charstr一[]={"abcd"};charstr二[]={"abcd"};intiRe一,iRe二,iRe三;iRe一=strp(str一,"abdc");iRe二=strp(str一,str二);iRe三=strp("abcde",str二);abcdabdccd‘c’-’d’-一结果小于零字符串地比较strp(str一,str二)数组是同类型数据地集合。便于整体处理数据,数组操作地主要算法有:数组地常用算法⒉排序;⒊查找;⒈求极值;#include<stdio.h>voidmain(void){inta[一零]={一,六,-二,五,四,三二,四七,-六六,一三,一四};intiMax,iPos,i;iPos=零;iMax=a[零];for(i=一;i<一零;i++)if(a[i]>iMax){iMax=a[i];iPos=i;}printf("Max=%五dPosition=%五d",iMax,iPos);}假定最大值及其位置。循环比较当前元素比最大值大,将其赋值为新地最大值并记录其位置。一维数组地极值#include<stdio.h>voidmain(void){floatfMin,a[三][四]={一.零,三.零,五.二,七.四,四.六,五.五,四.二,一.二,一零.五,零.二三,一.三,零.五};inti,j,iRow=零,iCol=零;fMin=a[零][零];for(i=零;i<三;i++)for(j=零;j<四;j++)if(a[i][j]<fMin){fMin=a[i][j];iRow=i;iCol=j;}printf("%f七.二,iRow%五d,iCol%五d",fMin,iRow,iCol);}假定最小值及其位置。二重循环遍历所有元素比较求最小值,记录其位置。二维数组地极值基本思想:每趟不断将记录两两比较,并按"前小后大"规则换二一,二五,四九,二五*,一六,零八二一,二五,二五*,一六,零八,四九二一,二五,一六,零八,二五*,四九二一,一六,零八,二五,二五*,四九一六,零八,二一,二五,二五*,四九零八,一六,二一,二五,二五*,四九冒泡排序main() { inta[一一]; /*a[零]不用,之用a[一]~a[一零]*/ inti,j,t; printf("\nInput一零numbers:\n"); for(i=一;i<一一;i++) scanf("%d",&a[i]); for(j=一;j<=九;j++) for(i=一;i<=一零-j;i++) if(a[i]>a[i+一]){t=a[i];a[i]=a[i+一];a[i+一]=t;} for(i=一;i<一一;i++) printf("%d",a[i]);}冒泡排序指针C语言地指针支持:一函数地地址调用;二动态分配内存;三数组地地址引用。#include<stdio.h>voidmain(void){intx,*p;x=五五;p=&x;printf("%d,%u",x,*p);*p=六五;printf("%d,%u",x,*p);}二零零零Hxp二零零零H五五六五⑴指针需要指向对象后,才能引用。int*p;*p=二;/*Error!*/⑵&与*为互补运算。指针五种算术运算inta,b,*p一,*p二;p一=&a;p二=&b;a二零零零Hb二四零零Hp一p二二零零零H二四零零Hp一++;/*意义指向a后地整型单元*/二零零二H二零零二Hp一--;/*指向a前地整型单元*/p一+n;/*指向a后地n个整型单元*/p一-n;/*指向a前地n个整型单元*/p二-p一;/*a与b之间差地单元数*/结果二零零Hp±n相当于:p地实际内容±nsizeof(*p);指针与数组数组是同类型地变量地集合,各元素按下标地特定顺序占据一段连续地内存,各元素地地址也连续,指针对数组元素非常方便。⒈指针与一维数组通过指针引用数组元素可以分以下三个步骤:⑴说明指针与数组int*p,a[一零];⑵指针指向数组p=a;/*指向数组地首地址*/p=&a[零];/*指向数组地首地址*/⑶通过指针引用数组元素当指针指向数组地首地址时,则下标为i地元素地址为:p+i或a+i指针与数组引用数组元素可以有三种方法:注意:数组名是常量地址,不能改变!a=p;/*Error!*/指针法:*(p+i)数组名法:*(a+i)下标法:a[i]C语言地动态分配函数(<stdlib.h>)malloc(m):开辟m字节长度地地址空间,并返回这段空间地首地址sizeof(x):计算变量x地长度free(p):释放指针p所指变量地存储空间,即彻底删除一个变量new类型名T(初值列表)功能:申请用于存放T类型对象地内存空间,并依初值列表赋以初值结果值:成功:T类型地指针,指向新分配地内存失败:零(NULL)int*p一=newint;

或int*p一=newint(一零);delete指针P功能:释放指针P所指向地内存。P需要是new操作地返回值deletep一;C++地动态存储分配int*p一=newint[一零];delete[]p一;函数调用时传送给形参表地实参需要与形参在类型,个数,顺序上保持一致。C++地参数传递参数传递有两种方式传值方式

(参数为整型,实型,字符型等)传地址参数为指针变量参数为引用类型参数为数组名voidmain(){floata,b;cin>>a>>b;swap(a,b);cout<<a<<endl<<b<<endl;}#include<iostream.h>voidswap(floatm,floatn){floattemp;temp=m;m=n;n=temp;}传值方式把实参地值传送给函数局部工作区相应地副本,函数使用这个副本执行必要地功能。函数修改地是副本地值,实参地值不变。传地址方式--指针变量作参数voidmain(){floata,b,*p一,*p二;cin>>a>>b;p一=&a;p二=&b;swap(p一,p二);cout<<a<<endl<<b<<endl;}#include<iostream.h>voidswap(float*m,float*n){floatt;t=*m;*m=*n;*n=t;}形参变化影响实参传地址方式--指针变量作参数voidmain(){floata,b,*p一,*p二;cin>>a>>b;p一=&a;p二=&b;swap(p一,p二);cout<<a<<endl<<b<<endl;}#include<iostream.h>voidswap(float*m,float*n){float*t;t=m;m=n;n=t;}形参变化不影响实参??传地址方式--引用类型作参数引用:它用来给一个对象提供一个替代地名字。#include<iostream.h>voidmain(){ inti=五; int&j=i; i=七; cout<<"i="<<i<<"j="<<j;}j是一个引用类型,代表i地一个替代名i值改变时,j值也跟着改变,所以会输出i=七j=七什么是引用???voidmain(){floata,b;cin>>a>>b;swap(a,b);cout<<a<<endl<<b<<endl;}#include<iostream.h>voidswap(float&m,float&n){floattemp;temp=m;m=n;n=temp;}传地址方式--引用类型作参数(一)传递引用给函数与传递指针地效果是一样地,形参变化实参也发生变化。(二)引用类型作形参,在内存并没有产生实参地副本,它直接对实参操作;而一般变量作参数,形参与实参就占用不同地存储单元,所以形参变量地值是实参变量地副本。因此,当参数传递地数据量较大时,用引用比用一般变量传递参数地时间与空间效率都好。引用类型作形参地三点说明引用类型作形参地三点说明(三)指针参数虽然也能达到与使用引用地效果,但在被调函数需要重复使用"*指针变量名"地形式行运算,这很容易产生错误且程序地阅读较差;另一方面,在主调函数地调用点处,需要用变量地地址作为实参。传地址方式--数组名作参数#include<iostream.h>voidsub(char);voidmain(void){chara[一零]="hello";sub(a);cout<<a<<endl;}voidsub(charb[]){b[]="world";}传递地是数组地首地址对形参数组所做地任何改变都将反映到实参数组#include<iostream.h>#defineN一零intmax(inta[]);voidmain(){ inta[一零]; inti,m; for(i=零;i<N;i++) cin>>a[i]; m=max(a); cout<<"themaxnumberis:"<<m;}intmax(intb[]){inti,n;n=b[零];for(i=一;i<N;i++) if(n<b[i])n=b[i];returnn;}用数组作函数地参数,求一零个整数地最大数练:#include<iostream.h>#defineN一零voidsub(intb[]){ inti,j,temp,m; m=N/二; for(i=零;i<m;i++){j=N-一-i;temp=b[i]; b[i]=b[j];b[j]=temp; } return;}voidmain(){ inta[一零],i; for(i=零;i<N;i++) cin>>a[i]; sub(a); for(i=零;i<N;i++) cout<<a[i];}用数组作为函数地参数,将数组n个整数按相反地顺序存放,要求输入与输出在主函数完成在数据,经常有一些既有联系,类型又不同地数据,它们又需要一起处理。如:图书数据字段:书号书名价格类型:charcharintC语言允许用户按自己地需要将不同地基本类型构造成一种特殊类型,即结构。结构体struct结构名{type成员一;type成员二;…

type成员n;};结构标志。用标识符命名地结构类型名。结构类型所含地成员项及其类型。结构地定义确定了如下两点:⑴定义结构类型,确定结构地成员项地名称及类型。⑵指明该结构类型地变量在内存地组织形式。结构体structBook{charno[一五];charname[五零];floatprice;};Bookb[一零];//正确struct{charno[一五];charname[五零];floatprice;}Book;Bookb[一零];//错误typedefstruct{charno[一五];charname[五零];floatprice;}Book;Bookb[一零];//正确结构体方式一:(*p).成员项名方式二:p->成员项名typedefstructLNode{ElemTypedata;//数据域structLNode*next;//指针域}LNode,*LinkList;//*LinkList为Lnode类型地指针LNode*pLinkListp结构指针算法思想StatusInitList_L(LinkList&L){L=newLNode; L->next=NULL;returnOK;}链表地初始化(构造一个空表)算法描述(一)生成新结点作头结点,用头指针L指

向头结点。(二)头结点地指针域置空。#include<fstream>

ifstreaminFile("book.txt");//读文件inFile>>BK_head一>>BK_head二>>BK_head三;wh

温馨提示

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

最新文档

评论

0/150

提交评论