




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C语言基本语法基本语法介绍预艇命令把小写字母转换成大写字母chara,b;a-x*;b=y;a=a-32;b=b-32;prmtf(H%c%cn%d?%dnn5a,bab);复合赋值语句有利于编译处理,能提高编译效率并产生质量较高的目标代码C语言中的空语句:while(getchar!=血);这里包含了空循环体scanf与printf:scanf输入数据可以指定数据字段的宽度,但不能规定数据的精度,而pnntf则可以printf(“3,2f;a);这里的3滦示按实数形式输出,输出宽度为3,如果输出的数不足3,位,则按实际宽度输出,四舍五入保留两位小数预处理命令宏定义(1)不带参数的宏定义#de
2、finePI3.1415926不用加分号(2)带参数的宏定义#defineMAN(a,b)(a)(b)?(a):(b)文fra含命令#iiichide或#includefilename.h”表示在存放C库函数头文件所在目录中去查找,而不再源文件目录去查找“”表示首先在当前的原文家目录中查找,若未找到才到存放C库函数头文件所在目录中去找。在实际编程中,有些公用的符号常量单独组成一个文件,在其他文件的开头用包含命令包含该文件即可使用。条件运算符(1)三个表达式的类型可不同,条件表达式值取较高的类型(2)条件运算符的结合方向是从右至左(3)条件运算符可嵌套自定义函数的相关知识变量的存储趣自定义函数:
3、函数分为声明部分和执行部分函数的声明与定义:函数的声明在程序的数据声明部分(文件包含命令和mam函数之间),函数的定义的位置可以在调用它的函数(一般在main函数之外)之前也可以在调用它的函数之后,也可以位于其他的源程序模块中。使用函数的优点:(1)使用函数可以控制任务的规模(2)使用函数可以控制变量的作用范围(3)使用函数可以可以由多人协作完成程序的开发(4)使用函数可以重新利用已有的、调试好的、成熟的程序模块(函数)局部变量和全局变量在语句块内定义的变量称之为局部变量,又称为内部变量,仅在定义它的语句块内有效,并且拥有自己独立的存储空间。在函数之外定义的变量成为全局变量。如果在同一个源文件
4、中,全局变量和局部变量同名,则在局部变量的作用范鬧内,全局变量不起作用,即被屏蔽”。说明&(1)一个函数中既可以使用本函数的局部变量,又可以使用有效的全局变量。(2)利用全局变量可以增加函数联系的渠道,从而得到一个以上的返回值(3)全局变量一般第一个字母用大写表示(4)建议在一般情况下不要使用全局变量,因为全局变量一直占用存储空间,降低lie函数的通用性和程序的清晰性,容易出错。变量的存储类型:(1)自动型变量automtt=l;auto关键字只能用于定义局部变量,为默认的类型(2)寄存器型变量register(3)静态型变量static该变量只有在所在的函数内有效,退出该函数时该变量的值仍然
5、保留,下次进入后仍然可以使用。退出程序时值才消失。(4)外部型变量externC程序在编译时当遇到extern,先在本文件中找外部变量的定义,如果找到,就在本文件中扩展作用域,如果找不到就在连接时从其他的文件中找到外部变量的定义如果找到,就将作用域扩展到本文件,否则按出错处理。在高级语言的学习中一方面应数量掌握该语言的语法,因为它是算法实现的基础,另一方面必须认识到算法的重要性,加强思维训练,以便写出高质量的程序。getchaiOgetchOgetche()函数和putchaiOputchO函数putchaic)putch(c)把单个字符c输出到标准设备上getcharOgetche()get
6、chO函数用于从终端输入数据getcharO按enter键之后才接受数据,只接收第一个数据getchO和getche()在输入一个字符后立刻被函数接受,不用按entei*键。getch0不回显输入的数据getche()显示输入的数据指针与数组一维数组二维数组字欄组二维字符串指针与F数组一维数组:不允许对数组的长度进行动态定义数组必须先定义后使用数组的定义:inti10mtb=1,2,3,0,0,0等价于intb6=1,2,3字符数组:字符数组是由若干个有效字符构成且以字符(T作为结束标志的一个字符序列。的定义:chara10;对字符数的各个元素分别进行初始化chaia3=a,b;严余下的自动补
7、0;这时字符数组就变成了字符串*/用字符串常量来给字符数组进行初始化chara13=lielloworld!1字符数组的输入输出:charc6用格式符“c”逐个输入输出字符:scanf(H%cH5&cl);printf(H%cH,cl);用格式符“s”整个输入输出字符串:scaiif(H%sH,c);piintf(“s復c);字符数俎与字符串的区别:字符数组用来存放和处理字符数组且不加结束标识符就化0”时,则在程序中只能逐个引用字符数组中的各个字符,而不能一次引用整个字符数组。而字符串则可以对其引用整个数组,其操作的方式一个是数组元素,一个是数组名输入字符串函数chai-*gets(char*
8、str);/stdio.h在使用gets。输入字符串时,可以包括空格在内的字符,在回车时,自动骄傲字符串结束标志0,赋予字符数组的最后一个元素。输出字符串函数mtputs(char*str);/stdio.h在使用puts。输出字符串时,将字符串结束标志9转换成S输出。字符串复制函数chai-*strcpy(chai-*stii,chai*str2);/stimg.h不能使用J赋值语句对字符数组整体赋值,只能使用strcpyO处理。字符串比较函数intstrcmp(chai*strl,char*str2);/stiing.h字符串比较不能使用if(strl=str2)的形式,只能使用strcm
9、pO;字符串长度测量函数unsignedintstiien(chai-*str);不包括字符串结束字符(F找字符或字符串位置函数查找字符的位置:char*strclii-(chai*str,charch);查找字符串的位置:char*strstr(char*stil,charstr2);指针可以简单的认为“指针”就是地址,地址就是指针。一个变量的地址只能使用&符号获得。在c语言中指针被用来标识号内存单元的地址,如呆把这个地址用一个变量来保存,则这中噢噢那个变量就成为指指针变量。如指针变量pi只想变量1,那么pi就表示变量1的地址,*pi就表示变量1的值,pi=&io尸3与*pi=3等价指针变量
10、的使用:先定义,后使用。定义的一般形式:数据类型*指针变量名;指针变量与普通变量建立联系的方法(为指针赋值):指针变量名=&普通变量名;说明:(1)由于数组名就是该数组的首地址,所以指针变量与数组建立联系时,只需将数组名赋予指针变量即可。(2)当指针变量没有赋值时,可以赋空指针NULL或0,不能间接引用没有初始化或值为NULL的指针。(3)&取地址运算符,*取只想的值的运算符。指针变量的引用方式:(1)*指针变量名:表示所指变量的值。(2)指针变量名:表示所指变量的地址使用指针作为函数的参数:#iiichidevoidswap(mt*x,mt*y);voidmam()mta=3,b=4;pri
11、ntfCainl:a=%d?b=%dnn,a,b);swap(&a&b);printf(,mam2:a=%d?b=%dnn,a,b);voidswap(mt*x,mt*y)mta;printf(Hswapl:a=%d,b=%dnn,*x,*y);a=*x;*x=*y;*y=a;printf(Hswap2:a=%d,b=%dnn,*x,*y);指针的运算通常只限于:+,+,-指针变量加减一个整数的算术运算:表示通过加减运算获取新的内存空间的地址:P1,P+C*1(C表示指针变量所指向的数据类型所占用的字节数)两个指针变量之间的算术运算:只有减法运算,不能进行加法运算,表示两个指针变量之间的变量个
12、数。两个指针变量之间的比较:=,!=,=结果为真(1)或假(0)指针变量可以指向一个空值有效数据的指针补指向0单元,对NULL指针不能使用间接引用。空指针与未对指针变量p赋值是两个不同的概念:空指针指向0单元,而未对指针赋值表示该指针可能指向一个未知的值。指向一维数组的指针变量:指向一维数组的指针成为数组指针。赋值:p=&a0或者p=a获取数组元素ai的值:*(a+i)指针表示法比下标表示法快的原因:在C编译时,数组元素ai被解释成*(a+i),即按照数组的首地址加上指针相对位移量得到要找的元素的地址,然后找出该单元的内容。指向一维数组元素的指针变量:*p=&a6;表示p是指针变量,将a6的地
13、址赋予p。指向字符串的指针变量:字符串是特殊的一维数组,不过,指向字符串的指针变量的使用方法与指向一般数组的指针变量有所不同。字符指针:chai-*sp=Helloworld!”;指向字符数组的字符指针:charstr=nHelloworld!n,sp=str;二维数组:定义:数据类型数组名行数常量表达式列数常量表达式;赋值运算:a2l=3;取地址预算:&a23;算术运算:al0=a00+l;其他运算:aij0;砒化*(1)按行初始化mta=12,3,4,5,6,;(2)按顺序初始化mta23=1,2,3,4,5,6;(3)使用关键字static赋值当定义静态存储数组时,如呆没有赋初值,则系统
14、自动将全部元素赋予0值或值。(4)对部分元素赋初值数组在对部分元素赋初值时,如呆后面的数组元素不赋初值,系统会对未赋值的所有数组元素自动赋予o值或r(r值。(5)全部赋值时数组第一维长度可以省略mta3=1,2,3,4,5,6缺省数组第一维长度的部分赋值应使用分行赋值方式明确指定行数mta2=1,1,2,2通过键盘输入通过赋值语句逐个元素赋初值二作函数的嫌二维数组作为函数的参数时,时地址传递方式,在被调函数中对数组元素的改变,会影响到主调函数,对二维数组而言,在主调函数和被调函数中使用数组的方法都一样。在定义被调函数时,二维数组的形参的第一维人小可有可无,有第一维大小时,可以可以时任意人小;而
15、第二维的大小必须有,并且和主调函数中相应的二维数组的第二维的人小一致。二aw軌求四个字符串中最小字符串的问题:#inchidevoidminstring(chai-s20,uitn,charvoidmam()mtchara420,min20;for(i=0;14;i+)gets(ai);mmstring(a,4,min);prmtf(ccminstiuigis:nini);voidminstring(chai-s20,mtn,charniui)chari;strcpy(mm,s0);for(i=0;10)strcpy(mm,si);辆体妞与共用体说明,(1)在声明结构体时,系统不给该结构体分配
16、内存空间,仅是定义了一种特定的数据构造类型,它制定了这种结构体使用内存的模式。(2)结构体可以在函数内部定义,也可以在函数外部定义,其作用域是不同的。如在函数内声明,则可见性仅限于该函数。定体妞,(1)先声明结构体类型,在定义结构体变量。stiuct结构体名成员列表;;stiuct结构体名结构体变量列表;(2)在声明结构体类型的同时定义结构体变量。stiuct结构体名成员列表;变量列表;(3)直接定义结构体变量。stiuct成员列表;变量列表;结构体变量的引用8(1)使用原点运算符访问结构体变量中的成员结构体变量名.成员名(2)指向运算符:-说明:(1)不能将一个结构体变量作为一个整体进行输入
17、和输出。(2)结构体变量的程序可以进行其类型允许的各种运算。(3)可以应用结构体变量成员的地址,也可以引用结构体变量的地址。stmct结构体名成员列表;结构体变量=初始化数据列表轴体好作(1)系统采用数据复制的方式,系统开销人,一般才哟偶那个结构体指针作为函数的参数,而不用结构体变量作函数参数。(2)用结构体变量的成员作参数。采用的是值传递方式。(3)函数的返回值为结构体类型,一个函数可以带回一个函数值,这个函数值可以是整型、实型、字符型、指针型等,也可以是一个结构体变量或结构体指针。使用typedef定义数据类型的别名typedefintINTEGER;#defineSCOREstnicts
18、core等价于typedefstmctscoreSCOREtypedefstmctdatemtmonth;mtday;mtyear;DATE;说明:(1)常把typedef声明的类型别名用人写字母表示,以便与系统提供的标准类型标识符相区别(2)不能用typedef来定义变量(3)typedef只是对已经存在的类型声明一个类型别名,没有增加新的数据类型(4)typedef前者是由编译器编译时处理的,后者是由编译预处理在编译预处理时处理的。而且只能进行简单的字符串替换。(5)当不同源文件中用到同一类型数据时,常用typedef声明一些数据类型,把他们单独放在一个文件中,然后在需要用到的地方用#mc
19、hide命令把他们包含进来。(6)使用typedef有利于程序的通用与移植。结构体数组的定义:structstudentstu3O/student为声明好的结构体结构体数组的引用:结构体数组名下标成员名相同数据类型的结构体变量可以相互赋值:stii2=stiil结构体数组的初始化:stmctstudentstu3=共用体:共用体又称联合体,是将不同的数据类型组合在一起,共同占用同一段内存的用户构造数据类型。共用体的声明union共用体名成员列表;;说明:共用体所占内存大小以及成员中占据内存空间最多的成员为准,可以使用sizeof运算符获得共用体的内存空间大小。共用体述的引用:(1)共用体变量名
20、.成员名(2)共用体指针变量名-成员名(3)(*共用体指针变量名).成员名共用体的特点,(1)同一个内存段可以用来存放不同的数据类型的成员,但在每一时刻只能存在其中的一种,而不是同时存放几种数据类型的成员。(2)共用体不能初始化,只能逐个元素赋值(3)共用体变量中存放和起作用的时最后一次存入的成员值,即共同体中的所有成员不是同时存在和起作用的。(4)共用体变量与其各个成员的地址相同。(5)不能把共用体变量作为函数参数,但可以使用指向共用体变量的指针来实现函数之间的参数传递。(6)共用体类型可以出现在结构体类型声明中,也可以定义共用体数组;结构体也可以出现在共用体声明中,数组也可以作为共用体的成
21、员。使用同f结构体输出学生和教师的信息:可以使用共用体嵌套到结构体中实现存储不同的数据类型:#inchidestnictSTDATAchainame10;intage;charjob;unionmtclass;chartitle10;kind;voidmam()stnictSTDATAps4:mtnsfor(i=0;15&psi.age,&psi.job);if(psi.job=cs5)scanfC%d,&psi.kind.class);elseif(psi.job=十)scanfC%s:&psi.kmd.title);elseprmtfClnputError!”);prmtf
22、(ccnNaineAgeJobClass/TitleW);for(i=0;i4;i卄)if(psi.job=*)printf(%10s%-6d%-3c%-1Od-rfpsfinamepsi.age?psi.job,psi.kind,class);elseprintf(%10s%-6d%-3c%-1Od-rfpsfinamepsi.age?psi.job,psi.kind,class);文件的处理文件处理:所谓打开文件,实际上是建立文件的各种有关信息,并使文件指针指向该文件,以便进行其他各种操作:关闭文件则是断开指针与文件之间的联系,也就是禁止再对该文件进行操作。文件mr开:FILE*fopen
23、(char*filenaine,char*type);说明:正常情况下,fopen函数返回指向文件流的指针。若发生错误,则返回值为空指针NULL,无论采用什么方式打开文件,当文件被正确打开时,文件指针总是指向文件字节流的开始出。文件的关闭:intfclose(FILE*stream);说明:尽管程序执行结束时也会自动关闭所有打开的文件,但应该养成主动关闭文件的习惯。出错检査*岀错报告函数voidenor(chaierrorstring);文件结束检测错误函数mtfeof(FILE水stream);文件出错检测函数mtfenoitFILE*stream);清除文件出错标志函数voidcleaie
24、rr(FILE*strcam);文件的砒如字符读写函数fgetc和fputc字符读函数:mtfgetc(FILE*stream);字符写函数:mtfjputc(chai*ch,FILE*stream);字符串读写函数fgets和fputs字符串读函数:char*fgets(char*stnng,mtn,FILE*fp);读ml个字符字符串写函数:intfputs(char*stnng,FILE*fp);格式化读写函数fscaiif和fpnntffscanf函数:intfscaiif(FILE*fp,char*fonnat,&argl,.,&argn)fprmtf函数:mtfpiintf(FIL
25、E*fp,charaigl,.argil);文件定位,(1)rewind函数:voidrewind(FILE*fp);(2)fseek函数mtseek(FILE*fjp,longoffcet,mtbase);fteU函数longftell(FILE*fp);BWIX件的如由于一般是读写一个数据块,因此,常用数据块读写函数fread和hrite&ead函数mtfi*ead(void*buf,intsize,mtcoiuit,FILEfXvrite函数mtfiTite(void*buf,intsize,nitcount,FILE高级用法指针数组指针的指针二维数组指针结构体指针链表指针数组:在一个数
26、组中,如呆它的元素全部都是指针类型的数据,那么这个数组称为指针数组。定义:类型名*数组名数组长度:char*suit3=“firsf,second”,third”;指向指针的指针:如果一个变量存放的又是另一个指针变量的地址,则称这个指针变量为指向指针数据的指针变量,又称多级指针,简称为指向指针的指针。定义:类型标识符*指针变量名;利用指针变量访问另一个变量就是“间接访问”,在一个指针变量中存放一个目标变量的地址,就是“单级间址”。对于数组suit,由于数组名本身就表示地址,所以可以直接创建二级指针:chai-*p;p=suit;#iiichidevoidmam()inta5=13,5,7,9;
27、mt*num习上mt*p;for(i=0;i5;i+)numi=&ai;p=num;for(i=0;i*p);P+;printf(uiiH);指向二维数组的指针:a=a00=a0a+l=ala0+l=a0la是行指针,*a是列指针,*a表示a00的值,*a表示a0的地址。al+2等价于*(a+l)+2在行指针前面加上一个*就转换为了列指针,若a和a+1是行指针,则*a和*(a+l)是列指针。指向数组元嶽的指针变量#inchidevoidmam()mta34=1,2,3,4,5,6,7,8,9,10,11,12mt*p;for(p=a0;pname;指针的方法指向结构体数组的指针指向结构体数组的
28、指针实际上与前面定义的指向二维数组的指针类似,可以理解为二位地址数组的行指针。动态内存分配:void*malloc(unsignedintsize);newptr=malloc(sizeof(steuctnode);voidfree(void*p)链表结构:#iiichide#defineNULL0#defineLENsizeof(sti*uctstudent)/*定义节点的长度*/#defineNODEstrnctstudentstiuctstudentcharno5;floatscore;strnctstudent*next;stiuctstudent*create(void);voidprintlist(stiuctstudent*head);NODE*msert(NODE*head?NODE*new,mti);NODE*dellist(NODE*head,charno);voidmam()strnctstudent*a;strnctstudenttestl=nabc1.0,NULL;strnctstudent*test2;a
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 出租机械合同范本
- 医疗设备简易合同范本
- 2025年河南省安全员B证考试题库及答案
- 借用公司资质合同范本
- 劳务外包公司合同范本
- 南市区家电运输合同范本
- 公司棉花订购合同范本
- 劳务外包协议合同范本
- 勤工俭学合同范本
- 医院采购设备合同范例
- 【重庆长安汽车公司绩效管理现状、问题及优化对策(7600字论文)】
- 家乡-延安课件
- 孔轴的极限偏差表
- 热轧钢板和钢带尺寸允许偏差
- 无人机导航与通信技术PPT完整全套教学课件
- BBC-商务英语会话
- 中等职业学校毕业生就业推荐表
- 钢结构设计原理全套PPT完整教学课件
- 2023年浙江首考读后续写真题讲评课件 高三英语二轮复习写作专项+
- 各期前列腺癌治疗的指南推荐
- 《植物学教学资料》第2章细胞与组织2马炜梁版
评论
0/150
提交评论