版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PAGEPAGE4心之所向,所向披靡C语言总复习顺序结构程序设计1.单字符输入输出:getchar(字符变量);putchar(字符变量);2.字符串输入输出:gets(字符数组名),puts(字符数组名)。3.格式化输入输出:(1)格式化输入:scanf(“格式控制符”,地址列表);格式控制符:%[抑制符*][数据列宽度][长短类型]类型①格式%s输入字符串不包含空格,且对应地址表列是字符数组名。②默认分隔符:空格、回车、Tab键(也可按域宽截取)③格式控制符间不宜加其它字符,如加入其它字符,输入时应原样输入。如:scanf(“%d,%d”,&a,&b);输入数据时两数据间要有逗号;scanf(“%d%d”,&a,&b);%d间有两个空格,则输入数据时至少有两个空格。④输入数据时不能规定精度如scanf("%7.2f",&a);是不合法的。⑤%c格式输入单字符,空格字符和转义字符都作为有效字符接收。⑥%s格式输入字符串,当遇到‘/0’终止⑦%*2d表示跳过它对应的输入数据。⑧%u格式输入不被使用,对于unsigned型数据,以%d或%o或%x输入。(2)格式化输出:printf(“格式控制符”,输出列表);格式控制符:%[对齐标志][最小列宽度][.小数精度][长短类型]类型①%md使输出长度为m,如果数据长度小于m,则左补空格,如果大于m,则输出实际长度②%o以八进制形式输出整数;%x以十六进制形式输出整数;%u用来输出unsigned型数据,以十进制形式输出;%c用来输出一个字符选择结构程序设计算数运算符:+-*/%关系运算符:><>=<=!===/*前四种优先级高于后两种*/逻辑运算符:!&&||赋值运算符:=条件运算符:表达式1?表达式2:表达式3;逗号运算符:表达式1,表达式2;逻辑表达式的优化运算:①逗号表达式求解:先求解表达式1,再求解表达式2,整个表达式的值是表达式2的值。②条件?a:b条件为真,表达式取值a,否则取值b③&&运算:只要算出第一个表达式为0,第二个表达式不再运算。④||运算:只要算出第一个表达式为1,第二个表达式不再运算。如:inti=0,j=0,a=6;if((++i>0)||(++j>0))a++;printf(%d%d%d”,i,j,a);结果i为1,j为0,a为7。5if语句的三种形式:(1)if(条件表达式){语句1;语句2;……}(2)if(条件表达式){语句1;语句2;……}else{语句1;语句2;……}(3)if(条件表达式)if(条件表达式){语句1;语句2;……}else{语句1;语句2;……}elseif(条件表达式){语句1;语句2;……}else{语句1;语句2;……}Ifelse的配对关系:从最内层开始,else总是与它上面最近未配对的if配对。6.switch语句结构switch(表达式){case常量表达式1:语句1;break;case常量表达式2:语句2;break;……case常量表达式n:语句n;break;default:语句n+1;break;}(1)case后面有多条语句时不用{}括起来;不同case可以共用同一条语句}如定义时没指明函数类型,如:fun(inta);默认是int型,返回值不确定。(2)声明格式:intfun(inta,inty);函数定义在前,使用在后,可省略函数声明,反之需要在使用前声明。函数声明后加分号,而函数定义后没有分号。(3)函数调用格式:函数名(实参表);①形参与实参占据不同的存储单元;形参只在函数调用时才为其分配存储单元,函数调用结束后释放。②实参与形参之间是传值调用,单向传递关系,形参值改变,不会影响实参值。如果想通过形参的改变而改变实参,使用地址传递(传递数组的名字、变量的地址、指针变量等)。(4)返回语句格式:return(表达式);或return表达式;或return;①不要求带回函数值的函数一般加“void”。②函数中可有多个return语句,但是只能有一个被执行。只能返回一个表达式的值。③若函数类型与return语句中表达式值的类型不一致,按前者为准,自动转换。2函数的重要调用方法(1)函数嵌套:在函数调用时,允许在函数中调用另一个已声明的函数。这种在函数中调用另一个函数的用法称为函数的嵌套。C语言中允许函数进行嵌套调用,但不允许函数的嵌套定义。intx();intx();inty();main(){……m=x();……}intx(){……k=y();……return…}inty(){…………return…}图8.1函数嵌套调用的执行过程可以看出,每一层函数的调用均只对调用它的函数是可见的,在函数返回时,将回到调用它的语句,然后再执行调用语句后面的其他语句。(2)函数的递归调用:调用自身的情况称为递归调用。确切地说:函数的递归调用就是指一个函数直接或间接调用自身。前者称为直接递归,后者称为间接递归。如图8.2所示。fun()fun()函数调用fun函数fun1()函数调用fun2函数fun2()函数调用fun1函数(a)直接递归调用(b)间接递归调用图8.2函数递归调用一般可以用if语句来控制,只有在某一条件成立时才继续执行递归调用,否则就不再继续。3内部变量和外部变量(1)局部变量:在函数内部定义的变量称为局部变量,又称内部变量。函数内部定义的变量作用域从定义位置开始,到本函数结束为止。因此,不同函数中的局部变量可以重名,互相独立,函数中的形参也是局部变量。局部变量的存储类别:auto、static、register。(2)全局变量:在函数之外定义的变量则称为全局变量,又称外部变量。全局变量的作用域从定义变量的位置开始到本源程序文件结束。但如果在全局变量的作用域内,有与其同名的局部变量,则在该局部变量的作用域内,全局变量不起作用(即变量屏蔽).全局变量的存储类别:static、extern。有如下程序:复合语句中定义的变量x复合语句中定义的变量x的作用域形参变量x的作用域全局变量x的作用域main(){inty;intf(int);/*声明函数f()*/y=f(3);printf(“%d\n%d”,x,y);}intf(intx){if(x==3){intx=2;returnx;}elsereturnx;}该程序运行后,输出x的值是____1_____,y的值是____2_____。4内部函数和外部函数(1)内部函数:只能被本文件中其他函数调用的函数称为内部函数,内部函数又称为静态函数。内部函数定义的形式为:static类型标识符函数名(形参表)就是将函数func()定义成一个内部函数,它只能被与它同在一个文件中的其他函数调用,而其他文件中的函数不能调用它。(2)外部函数:能被其他文件中函数调用的函数称为外部函数。外部函数定义的形式为:extern类型标识符函数名(形参表)extern说明符可以省略掉,因此,如果省略extern说明符,则默认为函数是外部函数,本节之前我们所定义的函数都是外部函数。5变量的存储类型变量的存储类型分为静态存储和动态存储两大类。对变量的存储类型说明有以下四种:自动变量(auto)、寄存器变量(register)、外部变量(extern)和静态变量(static)。自动变量和寄存器变量属于动态存储方式,外部变量和静态变量属于静态存储方式。(1)静态变量是在变量定义时,就分配存储单元,该存储单元一直保持不变,直到整个程序结束才释放存储单元。但其作用域只是在定义静态变量的函数内。静态变量定义格式为:static数据类型变量名表列;①如果静态变量定义时没有赋初值,int型变量默认初值为0,float型变量默认初值为0.0,char型变量默认初值为’\0’,等等。②形参不能定义成静态变量,静态局部变量经常使用,但建议尽可能少用,因为它们占用的存储空间直到程序结束才释放.(2)自动变量就是动态变量,在程序执行过程中,需要使用时才分配存储单元,使用完立即释放空间。例如函数的形参,在函数定义时并不给形参分配存储空间,只是在函数被调用时为其分配存储空间,当函数调用结束后,自动释放存储空间。动态变量定义格式为:auto数据类型变量名表列;说明:①在定义时,关键字auto可省略,也本节以前所定义的局部变量都省略了auto,则说明他们都是自动变量。②自动变量的作用域和生存期是一致的,都局限于定义它的函数或复合语句内,因此在不同的函数或复合语句内就可以使用同名的自动变量。③如果只定义动态变量而不赋初值,则其初值是不确定的(即是一个随机值)。如果在定义时就赋初值,则赋初值操作是在调用时进行的,且每次调用都要重新赋一次初值。这一点与静态变量有很大区别。(3)寄存器变量:有些变量由于要大量重复使用(如for循环中的循环记数变量),为了提高执行效率,将这样的变量存放在CPU的寄存器中,这种变量就称为寄存器变量。寄存器变量定义格式为:register数据类型变量名表列;①只有局部变量才能定义成寄存器变量。②如果系统不支持寄存器变量,或者CPU中的寄存器不够时,实际上是将寄存器变量当作自动变量处理。④由于寄存器变量不在内存中,因此不能进行地址运算。例如:registerintk;scanf(“%d”,&k);/*这种方式使用就不对*/(4)外部变量是在函数外部定义的变量,也就是全局变量。外部变量说明格式为:extern数据类型变量名表列;①如果在全局变量的作用域外还要使用全局变量,则应事先用extern加在说明。②由此可以看出,使用extern说明可以扩展全局变量的作用域。根据扩展全局变量作用域的方式可以分成两种:一是在同一文件内扩展全局变量作用域;二是将一个文件中的全局变量作用域扩展到另一个文件。6自动变量、静态变量和寄存器变量比较表8.1自动变量、静态变量和寄存器变量比较比较项目auto变量static变量register变量适用条件需要使用时定义函数调用结束后,仍希望其值继续保留时局部变量需要频繁使用时存储位置内存中的动态存储区内存中的静态存储区CPU中的寄存器声明方法auto数据类型变量表列;如:autointI,j;static数据类型变量表列;如:staticintm,n;register数据类型变量表列;如:registerinti,j;说明(1)可以省略关键字auto(2)作用域与生存期相同(1)尽管static变量在函数调用结束后仍然存在,但其他函数不能使用(2)作用域与生存期不同(1)只有局部变量和形参可以定义成register(2)尽量少用(3)不能进行地址运算指针1定义指针变量的一般形式为:基类型*指针变量名1,*指针变量名2,……;(1)定义时“*”表示该变量的类型为指针型变量。(2)在定义指针变量时必须指定基类型。只有对应类型的变量的地址才能放到指向类型变量的指针变量中。2对“&”和“*”运算符说明:(1)“&”是单目运算符表示返回其运算量的内存地址。(2)定义时“*”表示该变量的类型为指针型变量。(3)除定义时以后对指针“*”运算表示指针所指变量的值。(4)“*”和“&”是互为逆运算。3指针的加减运算规则:(1)指针P+2指的是P中地址加上其后2个元素所占存储单元的地址位移量,指针型后移动2个位置。因此定义指针时必须指明其类型。(2)执行p++,++p后指针拨动一个位置,比较常用。(3)*p++和*(p++)都是先取p所指变量的值,然后指针下移一个位置。(4)*++p和*(++p)都是先指针下移一个位置,然后取p新指变量的值。(5)*p+1指先取p所指变量的值,然后值加1。(6)指针在使用前一点要使其有所指向,否则就错!4指针与数组、字符串指针与数组(1)定义指针变量:int*p,a[10];p=&a[0];或p=a;/*数组元素代表数组首地址*/或int*p=&a[0];或int*p=a;①维数组元素的引用:四种方法a[i]Ûp[i]Û*(p+i)Û*(a+i)②数组地址的使用方法:&a[0]ÛpÛa&a[i]Ûp+iÛa+i(2)引用一个数组元素,可以用:(1)下标法,如a[i]形式;(2)指针法,如*(a+i)或*(p+i)。指针与字符串(1)字符数组由若干个元素组成,每个元素中放一个字符,而字符指针变量中存放的是字符串第1个字符的地址,决不是将字符串放到字符指针变量中。(2)赋值方式:对字符数组只能对各个元素赋值,不能用以下办法对字符数组赋值。charstr[14];str=″IloveChina!″;而对字符指针变量,可以采用下面方法赋值:char*a;a=″IloveChina!″;但注意赋给a的不是字符,而是字符串第一个元素的地址。(3)对字符指针变量赋初值:char*a=″IloveChina!″;等价于char*a;a=″IloveChina!″;而对数组的初始化:charstr[14]={″IloveChina!″};不能等价于charstr[14];str[]=″IloveChina!″;5指针变量赋值小结将一个变量地址赋给一个指针变量。如:p=&a;(将变量a的地址赋给p)p=array;(将数组array首元素地址赋给p)p=&array[i];(将数组array第i个元素的地址赋给p)p=max;(max为已定义的函数,将max的入口地址赋给p)p1=p2;(p1和p2都是指针变量,将p2的值赋给p1)6两个指针变量可以相减如果两个指针变量都指向同一个数组中的元素,则两个指针变量值之差是两个指针之间的元素个数7两个指针变量比较若两个指针指向同一个数组的元素,则可以进行比较。指向前面的元素的指针变量“小于”指向后面元素的指针变量。结构体1声明一个结构体类型的一般形式为:struct结构体名{成员列表;……};/*必须有“;”*/……struct结构体名列表;2变量的定义在声明类型的同时定义变量这种形式的定义的一般形式为:struct结构体名{成员表列;}变量名表列;直接定义结构体类型变量即不出现结构体名,其一般形式为:struct{成员表列;}变量名表列;(1)其中变量名列表位置可以是一般变量(point,stud等)、数组变量(数组名[数组长度])、指针变量(*指针变量名)(2)结构体数组的初始化即先声明结构体类型,然后定义数组为该结构体类型,在定义数组时初始化。(3)指向结构体类型数据的指针以下3种形式等价:①变量名.成员名/*变量名可以是结构型变量、数组变量*/②(*p).成员名③p->成员名请分析以下几种运算:p->n得到p指向的结构体变量中的成员n的值。p->n++得到p指向的结构体变量中的成员n的值,用完该值后使它加1。++p->n得到p指向的结构体变量中的成员n的值加1,然后再使用它。(++p)->num先使p自加1,然后得到它指向的元素中的num成员值。(p++)->num先得到p->num的值,然后使p自加1,指向元素中的num成员值。3结构体变量的引用引用结构体变量中成员的方式为结构体变量名.成员名/*.运算符用于获取成员变量*/(1)不能将一个结构体变量作为一个整体进行输入和输出。(2)如果成员本身又属一个结构体类型,则要用若干个成员运算符,一级一级地找到最低的一级的成员。只能对最低级的成员进行赋值或存取以及运算。文件1文件标识组成盘符:路径\文件主名.扩展名文件存储方式:ASCII文件(文本文件):每一个字节放一个ASCII代码二进制文件:把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放.2文件型FILE类型的数组:FILEf[5];/*定义了一个结构体数组f,它有5个元素,可以存放5个文件的信息*/文件型指针变量:FILE*fp;/*fp是一个指向FILE类型结构体的指针变量*/3文件的操作(1)文件的打开:FILE*fp;/*fp为文件型指针变量*/fp=fopen(“文件名”,“操作方式”);/*操作方式一般是“读r”或是“写w”等*/(2)文件的关闭:fclose(文件指针);/*关闭成功返回值为0;否则返回非0,EOF(-1)*/(3)文件字符读写函数:intfgetc(文件指针);函数功能:从指定文件取得一个字符,同时指针指向下个字符返回值:该函数无出错返回值。intfputc(字符数据,文件指针);函数功能:把字符输出到指定文件返回值:若输出成功,则输出字符数据。否则,返回一个符号常量EOF(-1)。从一个文本文件顺序读入字符并在屏幕上显示出来:ch=fgetc(fp);while(ch!=EOF){putchar(ch);ch=fgetc(fp);}从一个二进制文件顺序读入字符:while(!feof(fp)){ch=fgetc(fp);}(4)字符串读/写函数char*fgets(字符数组/指针,字符串长度+1,文件指针);函数功能:向指定的文件读入一个字符,该文件必须是以读或读写方式打开的。返回值:读取成功一个字符,则自动加结束符结束,同时读写位置指针移动相应字节。如果遇到EOF或者换行符,读入结束,返回一个文件结束标志EOF。intfputs(字符串常量/字符数组名/字符指针变量,文件指针);函数功能:将字符(字符串常量/字符数组名/字符指针变量的值)输出到文件指针所指向的文件中去。返回值:如果输出成功,则返回值为0;如果输出失败,则返回一个EOF.(5)数据块读/写函数intfread(char*buffer,unsignedsize,unsignedcount,FILE*fp);intfwrite(char*buffer,unsignedsize,unsignedcount,FILE*fp);参数说明:buffer:是一个字符型指针。/*对fread来说,它是读入数据的存放地址。*//*对fwrite来说,是要输出数据的地址(均指起始地址)。*/size:要读写的字节数。count:要进行读写多少个size字节的数据项。fp:文件型指针。功能:从buffer读/写数据存放在指定区域。返回值:成功,返回count的值;否则,返回NULL(其值为0)。(6)格式化读写函数fscanf(文件指针,“格式控制符”,输入表列);函数功能:从磁盘文件中按指定格式读入字符。返回值:成功,返回读取数据数目;否则,返回EOF。fprintf(文件指针,“格式控制符”,输出表列);函数功能:从磁盘文件中按指定格式读入或输出字符。返回值:返回写入文件的表达式数目;否则,返回EOF。(7)文件读写原则读/写一个字符(或字节)数据选用fgetc()和fputc()。读/写一个字符串数据时选用fgets()和fputs()。读/写一个或多个不含格式的数据选用fread()和fwrite()。读/写一个或多个含格式的数据选用fscanf()和fprintf()。C语言中的关键字autobreakcase char const continuedefault do doubleelseenumexternfloatforgotoifintlongregisterreturnswitchtypedefunionunsignedstructvolatilewhilesizeofstaticvoidASCⅡ码表序号字符序号字符序号字符序号字符0nul32sp64@96`1soh33!65A97a2stx34"66B98b3etx35#67C99c4eot3
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护理护理实践中的患者安全措施
- 江西省九江市六校2025-2026学年高一下学期4月第一次段考化学试卷(含答案)
- 护理学术交流与分享
- 矿井通风工安全培训强化考核试卷含答案
- 兽药检验员岗前基础晋升考核试卷含答案
- 维纶热处理操作工班组安全强化考核试卷含答案
- 家具设计师岗前实操能力考核试卷含答案
- 螺旋分选工岗前技术落地考核试卷含答案
- 有色金属熔池熔炼炉工岗前变革管理考核试卷含答案
- 速录师安全生产规范竞赛考核试卷含答案
- 保险投诉处理实务培训
- 2025年航天知识竞赛题库及答案
- 人教版2025年八年级数学下册章节重点梳理 第19章 一次函数(4个知识点+14类题型突破)
- 2024年上海市中考满分作文《我也是个取水人》19
- T-BCNJX 2416-2024 贡菜病虫害绿色防控技术规范
- 2025年五类人员考试题及答案
- 风电工程总承包EPC项目实施方案
- 电气实习报告范文
- 成品油罐车安全管理制度(3篇)
- PDS-7000系统用户手册(V300-最终版)
- 2023年上海高中学业水平合格性考试历史试卷真题(含答案详解)
评论
0/150
提交评论