C语言基本语法.pdf

上传人:wj 文档编号:3437275 上传时间:2023-05-05 格式:PDF 页数:27 大小:179.57KB
下载 相关 举报
C语言基本语法.pdf_第1页
第1页 / 共27页
C语言基本语法.pdf_第2页
第2页 / 共27页
C语言基本语法.pdf_第3页
第3页 / 共27页
C语言基本语法.pdf_第4页
第4页 / 共27页
C语言基本语法.pdf_第5页
第5页 / 共27页
C语言基本语法.pdf_第6页
第6页 / 共27页
C语言基本语法.pdf_第7页
第7页 / 共27页
C语言基本语法.pdf_第8页
第8页 / 共27页
C语言基本语法.pdf_第9页
第9页 / 共27页
C语言基本语法.pdf_第10页
第10页 / 共27页
C语言基本语法.pdf_第11页
第11页 / 共27页
C语言基本语法.pdf_第12页
第12页 / 共27页
C语言基本语法.pdf_第13页
第13页 / 共27页
C语言基本语法.pdf_第14页
第14页 / 共27页
C语言基本语法.pdf_第15页
第15页 / 共27页
C语言基本语法.pdf_第16页
第16页 / 共27页
C语言基本语法.pdf_第17页
第17页 / 共27页
C语言基本语法.pdf_第18页
第18页 / 共27页
C语言基本语法.pdf_第19页
第19页 / 共27页
C语言基本语法.pdf_第20页
第20页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C语言基本语法.pdf

《C语言基本语法.pdf》由会员分享,可在线阅读,更多相关《C语言基本语法.pdf(27页珍藏版)》请在冰点文库上搜索。

C语言基本语法.pdf

CCCC语言基本语法语言基本语法基本语法介绍基本语法介绍预处理命令预处理命令把小写字母转换成大写字母chara,b;a=x;b=y;a=a-32;b=b-32;printf(%c,%cn%d,%dn,a,b,a,b);复合赋值语句有利于编译处理,能提高编译效率并产生质量较高的目标代码C语言中的空语句:

while(getchar!

=n);/这里包含了空循环体scanf与printf:

scanf输入数据可以指定数据字段的宽度,但不能规定数据的精度,而printf则可以printf(“%3,2f”,a);/这里的3.2表示按实数形式输出,输出宽度为3,如果输出的数不足3,位,则按实际宽度输出,四舍五入保留两位小数预处理命令宏定义宏定义

(1)不带参数的宏定义#definePI3.1415926/不用加分号

(2)带参数的宏定义#defineMAN(a,b)(a)(b)?

(a):

(b)文件包含命令文件包含命令#include或#include“filename.h”表示在存放C库函数头文件所在目录中去查找,而不再源文件目录去查找“”表示首先在当前的原文家目录中查找,若未找到才到存放C库函数头文件所在目录中去找。

在实际编程中,有些公用的符号常量单独组成一个文件,在其他文件的开头用包含命令包含该文件即可使用。

条件运算符

(1)三个表达式的类型可不同,条件表达式值取较高的类型

(2)条件运算符的结合方向是从右至左(3)条件运算符可嵌套自定义函数的相关知识自定义函数的相关知识变量的存储类型变量的存储类型自定义函数:

函数分为声明部分和执行部分函数的声明与定义:

函数的声明在程序的数据声明部分(文件包含命令和main函数之间),函数的定义的位置可以在调用它的函数(一般在main函数之外)之前也可以在调用它的函数之后,也可以位于其他的源程序模块中。

使用函数的优点:

(1)使用函数可以控制任务的规模

(2)使用函数可以控制变量的作用范围(3)使用函数可以可以由多人协作完成程序的开发(4)使用函数可以重新利用已有的、调试好的、成熟的程序模块(函数)局部变量和全局变量局部变量:

局部变量:

在语句块内定义的变量称之为局部变量,又称为内部变量,仅在定义它的语句块内有效,并且拥有自己独立的存储空间。

全局变量:

全局变量:

在函数之外定义的变量成为全局变量。

如果在同一个源文件中,全局变量和局部变量同名,则在局部变量的作用范围内,全局变量不起作用,即被“屏蔽”。

说明:

说明:

(1)一个函数中既可以使用本函数的局部变量,又可以使用有效的全局变量。

(2)利用全局变量可以增加函数联系的渠道,从而得到一个以上的返回值(3)全局变量一般第一个字母用大写表示(4)建议在一般情况下不要使用全局变量,因为全局变量一直占用存储空间,降低ile函数的通用性和程序的清晰性,容易出错。

变量的存储类型:

(1)自动型变量autointi=1;auto关键字只能用于定义局部变量,为默认的类型

(2)寄存器型变量register(3)静态型变量static该变量只有在所在的函数内有效,退出该函数时该变量的值仍然保留,下次进入后仍然可以使用。

退出程序时值才消失。

(4)外部型变量externC程序在编译时当遇到extern,先在本文件中找外部变量的定义,如果找到,就在本文件中扩展作用域,如果找不到就在连接时从其他的文件中找到外部变量的定义如果找到,就将作用域扩展到本文件,否则按出错处理。

在高级语言的学习中一方面应数量掌握该语言的语法,因为它是算法实现的基础,另一方面必须认识到算法的重要性,加强思维训练,以便写出高质量的程序。

getchar()getch()getche()函数和putchar()putch()函数putchar(c)putch(c)把单个字符c输出到标准设备上getchar()getche()getch()函数用于从终端输入数据getchar()按enter键之后才接受数据,只接收第一个数据getch()和getche()在输入一个字符后立刻被函数接受,不用按enter键。

getch()不回显输入的数据getche()显示输入的数据指针与数组指针与数组一维数组一维数组二维数组二维数组字符数组字符数组二维字符串二维字符串指针指针与一维数组与一维数组一维数组:

不允许对数组的长度进行动态定义数组必须先定义后使用数组的定义:

inti10intb=1,2,3,0,0,0等价于intb6=1,2,3字符数组:

字符数组是由若干个有效字符构成且以字符0作为结束标志的一个字符序列。

字符数组的定义:

字符数组的定义:

chara10;字符数组的初始化:

字符数组的初始化:

对字符数的各个元素分别进行初始化chara3=a,b;/*余下的自动补0,这时字符数组就变成了字符串*/用字符串常量来给字符数组进行初始化chara13=helloworld!

字符数组的输入输出字符数组的输入输出:

charc6

(1)用格式符“%c”逐个输入输出字符:

scanf(%c,&c1);printf(%c,c1);

(2)用格式符“%s”整个输入输出字符串:

scanf(%s,c);printf(%s,c);字符数组与字符串的区别:

字符数组与字符串的区别:

字符数组用来存放和处理字符数组且不加结束标识符就“0”时,则在程序中只能逐个引用字符数组中的各个字符,而不能一次引用整个字符数组。

而字符串则可以对其引用整个数组。

其操作的方式一个是数组元素,一个是数组名字符串处理函数:

字符串处理函数:

(1)输入字符串函数char*gets(char*str);/stdio.h在使用gets()输入字符串时,可以包括空格在内的字符,在回车时,自动骄傲字符串结束标志0赋予字符数组的最后一个元素。

(2)输出字符串函数intputs(char*str);/stdio.h在使用puts()输出字符串时,将字符串结束标志0转换成n输出。

(3)字符串复制函数char*strcpy(char*strl,char*str2);/string.h不能使用=赋值语句对字符数组整体赋值,只能使用strcpy()处理。

(4)字符串比较函数intstrcmp(char*str1,char*str2);/string.h字符串比较不能使用if(str1=str2)的形式,只能使用strcmp();(5)字符串长度测量函数unsignedintstrlen(char*str);不包括字符串结束字符0(6)找字符或字符串位置函数查找字符的位置:

char*strchr(char*str,charch);查找字符串的位置:

char*strstr(char*str1,charstr2);指针可以简单的认为“指针”就是地址,地址就是指针。

一个变量的地址只能使用&符号获得。

指针变量:

指针变量:

在C语言中指针被用来标识号内存单元的地址,如果把这个地址用一个变量来保存,则这中噢噢那个变量就成为指指针变量。

如指针变量pi只想变量i,那么pi就表示变量i的地址,*pi就表示变量i的值,pi=&i。

i=3与*pi=3等价指针变量的使用:

先定义,后使用。

定义的一般形式:

数据类型*指针变量名;指针变量与普通变量建立联系的方法(为指针赋值):

指针变量名=&普通变量名;说明:

(1)由于数组名就是该数组的首地址,所以指针变量与数组建立联系时,只需将数组名赋予指针变量即可。

(2)当指针变量没有赋值时,可以赋空指针NULL或0,不能间接引用没有初始化或值为NULL的指针。

(3)&取地址运算符,*取只想的值的运算符。

指针变量的引用方式:

(1)*指针变量名:

表示所指变量的值。

(2)指针变量名:

表示所指变量的地址使用指针作为函数的参数:

#includevoidswap(int*x,int*y);voidmain()inta=3,b=4;printf(main1:

a=%d,b=%dn,a,b);swap(&a,&b);printf(main2:

a=%d,b=%dn,a,b);voidswap(int*x,int*y)inta;printf(swap1:

a=%d,b=%dn,*x,*y);a=*x;*x=*y;*y=a;printf(swap2:

a=%d,b=%dn,*x,*y);指针的运算:

指针的运算:

指针的运算通常只限于:

+,-,+,

(1)指针变量加减一个整数的算术运算:

表示通过加减运算获取新的内存空间的地址:

p+1,p+c*i(c表示指针变量所指向的数据类型所占用的字节数)

(2)两个指针变量之间的算术运算:

只有减法运算,不能进行加法运算,表示两个指针变量之间的变量个数。

(3)两个指针变量之间的比较:

=,!

=,=,结果为真

(1)或假(0)(4)指针变量可以指向一个空值有效数据的指针补指向0单元,对NULL指针不能使用间接引用。

空指针与未对指针变量p赋值是两个不同的概念:

空指针指向0单元,而未对指针赋值表示该指针可能指向一个未知的值。

指针与一维数组:

指针与一维数组:

指向一维数组的指针变量:

指向一维数组的指针成为数组指针。

赋值:

p=&a0或者p=a获取数组元素ai的值:

*(a+i)指针表示法比下标表示法快的原因:

在C编译时,数组元素ai被解释成*(a+i),即按照数组的首地址加上指针相对位移量得到要找的元素的地址,然后找出该单元的内容。

指向一维数组元素的指针变量:

*p=&a6;表示p是指针变量,将a6的地址赋予p。

指向字符串的指针变量:

字符串是特殊的一维数组,不过,指向字符串的指针变量的使用方法与指向一般数组的指针变量有所不同。

字符指针:

char*sp=Helloworld!

;指向字符数组的字符指针:

charstr=Helloworld!

sp=str;二维数组:

定义:

定义:

数据类型数组名行数常量表达式列数常量表达式;运算:

运算:

赋值运算:

a21=3;取地址预算:

&a23;算术运算:

a10=a00+1;其他运算:

aij0;初始化:

初始化:

(1)按行初始化inta23=1,2,3,4,5,6,;

(2)按顺序初始化inta23=1,2,3,4,5,6;(3)使用关键字static赋值当定义静态存储数组时,如果没有赋初值,则系统自动将全部元素赋予0值或0值。

(4)对部分元素赋初值数组在对部分元素赋初值时,如果后面的数组元素不赋初值,系统会对未赋值的所有数组元素自动赋予0值或0值。

(5)全部赋值时数组第一维长度可以省略inta3=1,2,3,4,5,6(6)缺省数组第一维长度的部分赋值应使用分行赋值方式明确指定行数inta2=1,1,2,2(7)通过键盘输入(8)通过赋值语句逐个元素赋初值二维数组作函数的参数:

二维数组作函数的参数:

二维数组作为函数的参数时,时地址传递方式,在被调函数中对数组元素的改变,会影响到主调函数,对二维数组而言,在主调函数和被调函数中使用数组的方法都一样。

在定义被调函数时,二维数组的形参的第一维大小可有可无,有第一维大小时,可以可以时任意大小;而第二维的大小必须有,并且和主调函数中相应的二维数组的第二维的大小一致。

二维字符串:

二维字符串:

求四个字符串中最小字符串的问题:

#includevoidminstring(chars20,intn,charmin);voidmain()inti,j;chara420,min20;for(i=0;i4;i+)gets(ai);minstring(a,4,min);printf(“minstringis:

%sn”,min);voidminstring(chars20,intn,charmin)chari;strcpy(min,s0);for(i=0;i0)strcpy(min,si);结构体变量与共用体结构体变量与共用体说明:

说明:

(1)在声明结构体时,系统不给该结构体分配内存空间,仅是定义了一种特定的数据构造类型,它制定了这种结构体使用内存的模式。

(2)结构体可以在函数内部定义,也可以在函数外部定义,其作用域是不同的。

如在函数内声明,则可见性仅限于该函数。

定义结构体变量:

定义结构体变量:

(1)先声明结构体类型,在定义结构体变量。

struct结构体名成员列表;struct结构体名结构体变量列表;

(2)在声明结构体类型的同时定义结构体变量。

struct结构体名成员列表;变量列表;(3)直接定义结构体变量。

struct成员列表;变量列表;结构体变量的引用:

结构体变量的引用:

(1)使用原点运算符访问结构体变量中的成员结构体变量名.成员名

(2)指向运算符:

-说明:

(1)不能将一个结构体变量作为一个整体进行输入和输出。

(2)结构体变量的程序可以进行其类型允许的各种运算。

(3)可以应用结构体变量成员的地址,也可以引用结构体变量的地址。

结构体变量的初始化:

结构体变量的初始化:

struct结构体名成员列表;结构体变量=初始化数据列表结构体变量作函数参数:

结构体变量作函数参数:

(1)系统采用数据复制的方式,系统开销大,一般才哟偶那个结构体指针作为函数的参数,而不用结构体变量作函数参数。

(2)用结构体变量的成员作参数。

采用的是值传递方式。

(3)函数的返回值为结构体类型,一个函数可以带回一个函数值,这个函数值可以是整型、实型、字符型、指针型等,也可以是一个结构体变量或结构体指针。

使用typedef定义数据类型的别名typedefintINTEGER;#defineSCOREstructscore等价于typedefstructscoreSCOREtypedefstructdateintmonth;intday;intyear;DATE;说明:

说明:

(1)常把typedef声明的类型别名用大写字母表示,以便与系统提供的标准类型标识符相区别

(2)不能用typedef来定义变量(3)typedef只是对已经存在的类型声明一个类型别名,没有增加新的数据类型(4)typedef与#define,前者是由编译器编译时处理的,后者是由编译预处理在编译预处理时处理的。

而且只能进行简单的字符串替换。

(5)当不同源文件中用到同一类型数据时,常用typedef声明一些数据类型,把他们单独放在一个文件中,然后在需要用到的地方用#include命令把他们包含进来。

(6)使用typedef有利于程序的通用与移植。

结构体数组:

结构体数组:

结构体数组的定义:

structstudentstu30/student为声明好的结构体结构体数组的引用:

结构体数组名下标.成员名相同数据类型的结构体变量可以相互赋值:

stu2=stu1结构体数组的初始化:

structstudentstu3=.,.,.;共用体:

共用体又称联合体,是将不同的数据类型组合在一起,共同占用同一段内存的用户构造数据类型。

共用体的声明:

共用体的声明:

union共用体名成员列表;说明:

共用体所占内存大小以及成员中占据内存空间最多的成员为准,可以使用sizeof运算符获得共用体的内存空间大小。

共用体变量的引用:

共用体变量的引用:

(1)共用体变量名.成员名

(2)共用体指针变量名-成员名(3)(*共用体指针变量名).成员名共用体的特点:

共用体的特点:

(1)同一个内存段可以用来存放不同的数据类型的成员,但在每一时刻只能存在其中的一种,而不是同时存放几种数据类型的成员。

(2)共用体不能初始化,只能逐个元素赋值(3)共用体变量中存放和起作用的时最后一次存入的成员值,即共同体中的所有成员不是同时存在和起作用的。

(4)共用体变量与其各个成员的地址相同。

(5)不能把共用体变量作为函数参数,但可以使用指向共用体变量的指针来实现函数之间的参数传递。

(6)共用体类型可以出现在结构体类型声明中,也可以定义共用体数组;结构体也可以出现在共用体声明中,数组也可以作为共用体的成员。

使用同一个结构体输出学生和教师的信息:

使用同一个结构体输出学生和教师的信息:

可以使用共用体嵌套到结构体中实现存储不同的数据类型:

#includestructSTDATAcharname10;intage;charjob;unionintclass;chartitle10;kind;voidmain()structSTDATAps4;intn,i;for(i=0;i4;i+)scanf(”%s%d%c”,psi.name,&psi.age,&psi.job);if(psi.job=s)scanf(”%d”,&psi.kind.class);elseif(psi.job=t)scanf(”%s”,&psi.kind.title);elseprintf(“InputError!

”);printf(“nNameAgeJobClass/Titlen”);for(i=0;i4;i+)if(psi.job=s)printf(“%-10s%-6d%-3c%-10dn”,psi.name,psi.age,psi.job,psi.kind.class);elseprintf(“%-10s%-6d%-3c%-10dn”,psi.name,psi.age,psi.job,psi.kind.class);文件的处理文件处理:

所谓打开文件,实际上是建立文件的各种有关信息,并使文件指针指向该文件,以便进行其他各种操作;关闭文件则是断开指针与文件之间的联系,也就是禁止再对该文件进行操作。

文件的打开:

文件的打开:

FILE*fopen(char*filename,char*type);说明:

(1)正常情况下,fopen函数返回指向文件流的指针。

若发生错误,则返回值为空指针NULL。

(2)无论采用什么方式打开文件,当文件被正确打开时,文件指针总是指向文件字节流的开始出。

文件的关闭:

文件的关闭:

intfclose(FILE*stream);说明:

尽管程序执行结束时也会自动关闭所有打开的文件,但应该养成主动关闭文件的习惯。

出错检查:

出错检查:

(1)出错报告函数voiderror(charerrorstring);

(2)文件结束检测错误函数intfeof(FILE*stream);(3)文件出错检测函数intferror(FILE*stream);(4)清除文件出错标志函数voidclearerr(FILE*stream);文件的顺序读写:

文件的顺序读写:

(1)字符读写函数fgetc和fputc字符读函数:

intfgetc(FILE*stream);字符写函数:

intfputc(charch,FILE*stream);

(2)字符串读写函数fgets和fputs字符串读函数:

char*fgets(char*string,intn,FILE*fp);读n-1个字符字符串写函数:

intfputs(char*string,FILE*fp);(3)格式化读写函数fscanf和fprintffscanf函数:

intfscanf(FILE*fp,char*format,&arg1,&argn)fprintf函数:

intfprintf(FILE*fp,char*format,arg1,argn);文件定位:

文件定位:

(1)rewind函数:

voidrewind(FILE*fp);

(2)fseek函数intseek(FILE*fp,longoffset,intbase);(3)ftell函数longftell(FILE*fp);随机文件的读写:

随机文件的读写:

由于一般是读写一个数据块,因此,常用数据块读写函数fread和fwrite

(1)fread函数intfread(void*buf,intsize,intcount,FILE*fp);

(2)fwrite函数intfwrite(void*buf,intsize,intcount,FILE*fp);高级用法高级用法指针数组指针数组指针的指针指针的指针二维数组指针二维数组指针结构体指针结构体指针链表链表指针数组:

在一个数组中,如果它的元素全部都是指针类型的数据,那么这个数组称为指针数组。

定义:

类型名*数组名数组长度;char*suit3=“first”,”second”,”third”;指向指针的指针:

如果一个变量存放的又是另一个指针变量的地址,则称这个指针变量为指向指针数据的指针变量,又称多级指针,简称为指向指针的指针。

定义:

类型标识符*指针变量名;利用指针变量访问另一个变量就是“间接访问”,在一个指针变量中存放一个目标变量的地址,就是“单级间址”。

对于数组suit,由于数组名本身就表示地址,所以可以直接创建二级指针:

char*p;p=suit;#includevoidmain()inta5=1,3,5,7,9;int*num5,i;int*p;for(i=0;i5;i+)numi=&ai;p=num;for(i=0;i5;i+)printf(%d,*p);p+;printf(n);指向二维数组的指针:

二维数组的地址:

二维数组的地址:

a=a00=a0a+1=a1a0+1=a01a是行指针,*a是列指针,*a表示a00的值,*a表示a0的地址。

a1+2等价于*(a+1)+2在行指针前面加上一个*就转换为了列指针,若a和a+1是行指针,则*a和*(a+1)是列指针。

指向数组元素的指针变量指向数组元素的指针变量#includevoidmain()inta34=1,2,3,4,5,6,7,8,9,10,11,12int*p;for(p=a0;pname;/指针的方法指向结构体数组的指针指向结构体数组的指针实际上与前面定义的指向二维数组的指针类似,可以理解为二位地址数组的行指针。

动态内存分配:

void*malloc(unsignedintsize);newptr=malloc(sizeof(structnode);voidfree(void*p)链表结构:

#include#defineNULL0#defineLENsizeof(structstudent)/*定义节点的长度*/#defineNODEstructstudentstructstudentcharno5;floatscore;structstudent*next;structstudent*create(void);voidprintlist(structstudent*head);NODE*insert(NODE*head,NODE*new,inti);NODE*dellist(NODE*head,charno);voidmain()structstudent*a;structstudenttest1=abc,1.0,NULL;structstudent*test2;a=create();printf(insertnewnoden);test2=&test1;a=insert(a,test2,2);printlist(a);printf(deletenoden);a=dellist(a,2);printlist(a);getch();/*创建一个具有头结点的单链表,返回单链表的头指针*/structstudent*create(void)structstudent*head=NULL,*new1,*tail;intcount=0;for(;)new1=(structstudent*)malloc(LEN);/*申请一个新结点的空间*/printf(InputthenumberofstudentNo.%d(5bytes):

count+1);scanf(%5s,new1-no);if(strcmp(new1-no,*)=0)/*这里不用加取址符号,因为no就表示数组的首地址*/free(new1);/*释放最后申请的结点空间*/break;/*结束for语句*/printf(InputthescoreofthestudentN

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2