C语言复习概念要点.ppt

上传人:za****8 文档编号:3447130 上传时间:2019-12-14 格式:PPT 页数:62 大小:621.50KB
返回 下载 相关 举报
C语言复习概念要点.ppt_第1页
第1页 / 共62页
C语言复习概念要点.ppt_第2页
第2页 / 共62页
C语言复习概念要点.ppt_第3页
第3页 / 共62页
点击查看更多>>
资源描述
,ANSIC一共只有37个关键字,C语言提供的数据结构是以数据类型的形式出现的,用指针、结构体还可构成链表、树、栈等复杂的数据结构,DataType,跟第四版书稍有不同,基本数据类型,intlong整数,在目前绝大多数机器上占4个字节。TC2中是2个字节float单精度浮点数,一般是4个字节长double(long)双精度浮点数,一般是8个字节长char字符,一般是1个字节长用来表示256个ASCII字符,或者0255的整数,字符常量,转义字符特殊的字符常量一些特殊字符(无法从键盘输入或者另有它用)用转义字符表示,charc1,c2;c1=a;可以c2=“a”;错误,合法的字符常量?,变量类型定义字节数范围整型inta,b;2-3276832767短整型shortx,y;2-3276832767无符号整型unsignedinta;2065535无符号短整型unsignedshortb;2065535长整型longl;4-21474836482147483647无符号长整型unsignedlongd;404294967295单精度实型floatf;43.4e-383.4e38(7位)双精度实型doubled;81.7e-3081.7e308(15位)长双精度实型longdoubleld;163.4e-49323.4e4932(19位)字符型charc1,c2;10255有符号字符型signedcharc3;1-128127,d以带符号十进制整数输出o以八进制无符号整数输出(无前导0)x以十六进制无符号整数输出(无前导0 x)u以十进制无符号整数输出c以字符形式输出单个字符s输出一个字符串f以小数形式输出浮点数(6位小数)e以标准指数形式输出(6位小数)g选用%f,%e中输出宽度较小的一种格式,printf格式字符,d以带符号十进制形式输入整型数据o以八进制无符号形式输入(无前导0)x以十六进制无符号形式输入(无前导0 x)c以字符形式输入单个字符s输入字符串,以非空字符开始,遇第一个空白字符结束f以小数形式输入浮点数e以标准指数形式输入,scanf格式字符,字符输入输出函数,字符输出函数-putchar(ch)输出一个字符ch字符输入函数-getchar()无参数函数值为从输入设备接收的字符,字符串输入输出函数,字符串输出函数-puts(str)输出一个字符串str数组或指针字符串输入函数-gets(str)输入一个字符串str数组或指针,字符输出函数-fputc(ch,fp)字符输入函数-fgetc(fp),字符串输出函数-fputs(str,fp)字符串输入函数-fgets(fp),C语言中的三大定律,表达式定律任何能产生数值结果的运算、操作都可以作为表达式并可以放到任何需要数值结果的地方,只要数值类型能够匹配常见的可以产生数值结果的运算和操作算术、逻辑、位运算等?:、a+=a;printf(“%d”,a);输出结果?,5.C语言规定以_字符作为字符串结束标志。6一个C语言程序是由若干个组成的,每个文件是由若干组成的。C语言可以包括多个函数,且程序总是从_开始执行。函数只能有一个。7.在C语言中,二维数组元素在内存中的存放顺序是_。8定义符号常量price为36的宏定义命令是。,9.字符串常量“abcd”在内存中的字节数是?。,1.已知:intb=2;,下列各表达式的值不为5的是?b2?5:1+b+2b%2+(b=5)b+=32sizeof运算符作用于一个表达式上,则是-。不可能求出该表达式的类型占内存的字节求出该表达式的值强制该表达式的类型,3.对于下面程序段,执行的结果是?。charstr=”btn0fun0”;printf(“%d”,strlen(c);15?7?4字符串中有非法字符,输出值不确定?,4.已知:intx=1,y=2;,下列表达式中哪些是合法?x=10.5%2;x+=y+2;(x+y);+(-x);5.判断字符串s1是否大于字符串s2,写出相应的函数及表达式,C语句概述,语句是算法实现的程序表示,是算法实现的最小单位。语句说明了一种行为,它是用计算语言编写的控制计算机完成确定操作的句子。,1)表达式语句4)复合语句2)函数调用语句5)空语句3)控制语句,构成程序的三种基本结构,顺序结构选择结构循环结构已经证明,任何程序均可只用这三种结构综合描述只用这三种结构编制的程序,叫结构化程序程序必须符合结构化规则,与基本控制结构相应的结构化的控制语句if-elseswitchforwhiledo-whilebreakcontinue常用算法,如累加、累乘、统计、递推、迭代、穷举等,选择、循环结构,求阶乘:数据类型的定义,float、long或double求累加和:long统计:统计正数、平均分以上、n个成绩中10090、8980、7970、6960、60的人数;输入字符串中字母d的个数设置一个计数变量k:初始化为1,每遇到一次将其加1:k+;,编程计算:1+2+3+100=?1!+2!+3!+100!=?1+1/2+1/3+1/100=?2+22+222+2222,分别用如下语句编程whiledo-whilefor,累加的项较复杂时,得专门求,例:前后项之间无关1m+3m+5m+7m+./4=1-1/3+1/5-1/7+.直到最后一项的绝对值小于10-6为止前后项之间有关1!+2!+.+n!x0+x1+x2+x3+.1+1+2+3+5+8+13+21+.2/1+3/2+5/3+8/5+13/8+21/13+.a+aa+aaa+aaaa+aaaaa+.a是一个数字,例a=2,2+22+222+2222+.,流程的转移控制,break语句continue语句goto语句return语句,有返回值的函数体内应加条_语句。break;输出函数调用语句:printf(”控制串”,参数表);return;contnuin;,数组(Array),inta10;定义一个有10个元素的数组,每个元素的类型均为int使用a0、a1、a2、a9这样的形式访问每个元素。它们与普通变量没有任何区别系统会在内存分配连续的10个int空间给此数组数组下标可以是整型表达式直接对a的访问,就是访问此数组的首地址,a,a9,a8,a7,a1,a0,数组是一组共用同一个名字、具有一定顺序关系和相同数据类型的变量的集合。其中,共用的名字称作?,集合中的变量称为?。,数组的定义与初始化,数组定义后的初值仍然是随机数,一般需要我们来初始化inta5=12,34,56,78,9;inta5=0;inta=11,22,33,44,55;数组大小最好用宏来定义,以适应未来可能的变化#defineSIZE10intaSIZE;数组大小定义好后,将永远不变,数组的使用,数组的下标都是从0开始对数组每个元素的使用与普通变量无异可以用任意表达式作为下标,动态决定访问哪个元素for(i=0;iSIZE;i+)ai=2*i;下标越界是大忌!使用大于最大下标的下标,将访问数组以外的空间。那里的数据是未知的,可能带来严重后果sizeof可以用来获得数组大小,只能逐个对数组元素进行操作(字符数组例外),输入方法:,inta10,i;,输入第i个数组元素:,scanf(%d,输入整个数组元素:,for(i=0;i0)/*正确*/,字符串不能直接整体复制!也不能用关系运算符比较大小,注:str,str1,str2是字符数组名或字符型指针变量名,字符串处理函数:头文件是,1.数组元素在内存中是怎样?按顺序存放的。2.变量名为函数参数与数组名作函数参数有何不同?3.数组是一组共用同一个名字、具有一定顺序关系和相同数据类型的变量的集合。其中,共用的名字称作,集合中的变量称为。4.C语言的数组名是一个地址常量,不能对它进行加减和赋值运算;而指针是把另一个变量的作为其值的变量。,5要打印出以下的杨辉三角形(若打印出10行),要求:1正确的定义一个数组:11121给出虚线部分元素值的表达式1331,14641给出第i行第j列元素的表达式15101051,6.在下列对字符串的定义中,正确的有()?。charc7=student;charc=student;char*c=student;charc=s,t,u,d,e,n,t,0;,7.输出字符串“Iamastudent!”的语句有?#include”string.h”voidmain()chara=Iamastudent!;inti;,1)putchar(a);2)puts(a);3)for(i=0;ai!=0;i+)printf(%c,ai);4)printf(%s,a);,#include,voidmain(),ints;,floatn,t,pi;,t=1;pi=0;n=1.0;s=1;,while(fabs(t)=1E-6),pi=pi+t;,n=n+2;,s=-s;,t=s/n;,pi=pi*4;,printf(pi=%10.6fn,pi);,运行结果:pi=3.141397,#include,程序:,#includemath.h,Voidmain,(),intm,i,k;,scanf(%d,/*输入一个整数m*/,k=sqrt(m);,for(i=2;i=k+1)printf(%d是素数n,m);,elseprintf(%d不是素数n,m);,运行结果:1717isaprimenumber,数组这一章的应用,了解了在什么情况下使用数组这种数据类型向函数传递一维数组和二维数组的方法用数组名作为函数参数和用简单变量作为函数参数的不同之处程序设计常用算法:求最大值,排序,查找,统计,斐比数列的设计几种方法逆序存放数据回文问题,函数,C中库函数按功能分类:,在计算机高级语言中,引入函数(或子程序、过程),称为标准函数,在C中称库函数。,函数头文件输入、输出函数stdio.h数学函数math.h字符和字符串函数string.h动态分配函数malloc.h.,7.在C语言中,使用putchar库函数,需要用include命令将头文件_包含进来。8.何谓全局变量?在主函数内定义?局部变量?,局部变量,局部变量在语句块内定义的变量形参也是局部变量只能被定义它的函数内部所识别的变量称为_特点定义时不会自动初始化,除非程序员指定初值进入语句块时获得内存,仅能由语句块内语句访问,退出语句块时释放内存,不再有效并列语句块各自定义的同名变量互不干扰,全局变量,全局变量在所有函数之外定义的变量特点在程序中定义它的位置以后都有效在定义点之前或在其他文件中引用,应该进行如下声明:extern类型名变量名;从程序运行起即占据内存,程序运行过程中可随时访问,程序退出时释放内存使函数之间的数据交换更容易,也更高效但是并不推荐使用,尽量少用因为谁都可以改写全局变量,所以很难确定是谁改写了它,自动变量(auto),“自动”体现在进入语句块时自动申请内存,退出时自动释放内存标准定义格式auto类型名变量名;动态局部变量缺省的存储类型不初始化时,值是不确定的,静态变量(static),一般的内部变量在函数退出后失效,再次进入函数,变量值重新初始化静态变量在变量类型前面用static修饰staticinti;变量的值可以保存到下次进入函数,使函数具有记忆功能,寄存器变量(register),寄存器CPU的内部容量很有限、但速度极快的存储器使用频率比较高的变量声明为register,可以使程序更小、执行速度更快register类型名变量名;registerinti;现代编译器有能力自动把普通变量优化为寄存器变量,并且可以忽略用户的指定,所以一般无需特别声明变量为register,1.C语言中变量的存储类别有自动(auto)、静态(static)、寄存器(register)和外部(extern)四种类型,其中形参变量的默认类型是。2.只能被定义它的函数内部所识别的变量称为。,3.实参与其对应的形参的特征是?4.当变量名为函数参数,在函数调用时,形参是虚拟的,不占存储单元实参与其对应的形参共占同一个存储单元;只有当实参与其对应的形参同名时,才共占同一个存储单元;.,#includeintAverage(intx,inty);/*声明Average()函数*/main()inta=12;intb=24;intave;ave=Average(a,b);printf(Averageof%dand%dis%d.n,a,b,ave);/*函数功能:计算平均数函数入口参数:整型x,存储第一个运算数整型y,存储第二个运算数函数返回值:平均数*/intAverage(intx,inty)intresult;result=(x+y)/2;returnresult;,调用函数在前,定义函数在后,另:floataverage(floatarray10)int;floataver,sumarray0;for(i1;i10;i+);/*求总分之和*/aversum10;return(aver);,例如:#defineN5longfac(intn)longf=1;f=f*n;return(f);main()inti;for(i=1;i=N;i+)printf(“%d!=%ldn”,i,fac(i);,运行结果:1!=12!=23!=34!=45!=5,运行结果:1!=12!=23!=64!=245!=120,在语言中,允许用一个变量来存放指针,这种变量称为指针变量。因此,一个指针变量的值就是某个内存单元的地址或称为某内存单元的指针。,指针与指针变量指针:一个变量的地址指针变量:声明为指针类型的变量,专门存放变量地址的变量即专门存放地址数据的变量,指针(Pointer)的概念,指针也是一种数据类型,定义一个指针变量,对指针变量的定义包括三个内容:(1)指针类型说明,即定义变量为一个指针变量;(2)指针变量名;(3)变量值(指针)所指向的变量的数据类型。其一般形式为:类型说明符*变量名;int*p1*表示这是一个指针变量,变量名即为定义的指针变量名,类型说明符表示本指针变量所指向的变量的数据类型。,p1究竟指向哪一个整型变量,应由向p1赋予的地址来决定。,如何定义指针变量?,指针变量初始化p=*p就像普通的变量一样使用,其值是p指向的内存的内容(在上例和a等价,但寻址方式不同)p可以动态(任意)地指向不同内存,从而使*p代表不同的变量(指针变量的赋值只能赋予地址,决不能赋予任何其它数据(除0以外),否则将引起错误。在语言中,变量的地址是由编译系统分配的。)两个有关的运算符:字符指针指向字符类型的指针char*p;数组和指针虽不同,介可以等同看待,上面三者本质上是一回事,字符指针变量与字符数组的区别,定义方法不同charstr10;char*ptr;赋值方法不同charstr10;str=”china”;/*错误*/strcpy(str,”china”);/*正确*/字符指针是变量,而数组名是地址常量,char*ptr;ptr=”china”;,输入输出数组的全部元素,main()inta10;inti;for(i=0;i10;i+)scanf(%d,方法1:下标法,main()inta10;int*p,i;for(p=a;p(a+10);p+)scanf(%d,p);for(p=a;p(a+10);p+)printf(%d,*p);,方法2:指针法,问题:若没有第二个p=a,情况会怎么样?,例将字符串a复制到字符串b。见书(用指针处理或不用指针皆可),voidmain,(),chara=Iamaboy.,b20,*p1,*p2;,inti;,p1=a;p2=b;,for(;*p1!=0;p1+,p2+),*p2=*p1;,*p2=0;,printf(“stringais:%sn”,a);,printf(“stringbis:”);,for(i=0;bi!=0;i+),printf(%c,bi);,printf(n);,3、若定义intk=1,2,3,4,5,*pk=k;下列对数组元素的引用中错误的是?k3*(k+3)*(pk+3)+pk,1、设inta,*p;则语句p=的输出结果为?。无确定值a的地址512511,5、由指针和结构体构成的单向链表是一种重要的数据结构,它便于实现动态存储分配。(),4、设floata34=1,2,3,4,5,6,7,8,9,10,11,12;则*(a0+1),*(a1+2),*(*a+1)的值为_。,6.指针:是一种变量/指针的类型是它所指向的变量的类型/指针在内存中有一个单元空间/指针占内存空间的大小与它的类型有关吗?/指针运算实际是地址运算,指针加1就是实际的地址值加1吗?7.设structstudentintno;charname12;floatscore3;s1,*p=,9、在C程序中有如下语句:float*sum(intx,chary);它是()。对函数sum的定义。对函数sum的调用。对函数sum的原型说明。不合法的。,10若有Chartext=“ABCDEFG”,*p=text;,则表达式*(p+7)的值是【】。G0G不确定11设有以下一程序段:main()int*p,*pa,a=100;pa=执行上面的程序段后,上面的程序的输出结果是【】。100pa的地址a的地址运行错误,12若有以下定义和语句,则通过指针p对值为8的数组元素的引用的表达式是。inta10=1,2,3,4,5,6,7,8,9,*p;p=13C语言的数组名是一个地址常量,不能对它进行加减和赋值运算;而指针是把另一个变量的作为其值的变量。,有关指针的数据类型和指针运算的小结,一、有关指针的数据类型的小结,二、指针运算小结1、指针变量加/减运算p+、p-、p+i、p-i、p+=i、p-=i加1表示指向下一个数据。,2、指针变量赋值p=指针p2的值赋给指针p1,即p1、p2所指的数据相同,voidmain()charstr=”today”;char*q=str;for(;qstr+5;q+)printf(%cn,*q);?,voidmain()charstr=”today”;char*q=str;for(;qstr+5;q+)printf(%sn,q);,?,用户自定义的-数据类型,结构体:把关系紧密且逻辑相关的多种不同类型的变量组织到统一的名字之下,也称复合数据类型这种类型的变量占用相邻的一段内存单元共用体:把情形互斥但又逻辑相关的多种不同类型的变量组织在一起这种类型的变量占用同一段内存单元,因此每一时刻只有一个数据起作用,指针的概念指针是一种特殊的数据类型指针的使用原则永远要清楚每个指针指向了什么位置永远要清楚每个指针指向的位置中的内容是什么指针与数组之间的关系掌握二维数组在内存中的存放方式,是理解二维数组的行指针和列指针的关键指针的应用做函数参数,传地址调用动态分配内存,实现动态数组,对于动态分配的内存,不要忘记在不使用时释放,结构体(structure)与共用体(union)的内存占用情况,double占用内存字节数=8structstudent占用内存字节数=?是所有成员变量的内存总和吗?事实上,所有数据类型在内存中都是从偶数地址开始存放的,且结构所占的实际空间一般是按照机器字长对齐的不同的编译器、平台,对齐方式会有变化我们可以用sizeof来获得结构的大小,理论上是的!,填空题回文问题#include#includevoidmain()chars81,*p1,*p2;intn;pirntf(nInputastring:);gets(s);n=strlen(s);p1=s;p2=【s+n-1】;while(【p1p2】)if(*p1!=*p2)break;elsep1+;【p2-】;if(p1p2)printf(Non);elseprintf(Yesn);,不用指针用数组更容易做,编程序:画出流程图1.P1127题9题2.P131循环程序举例3.P140循环程序设计4.P144数组一章举例5.P168数组一章程序设计6.P函数调用7.P指针应用8.P结构体应用,
展开阅读全文
相关资源
相关搜索

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


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

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


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