编程语言语法规范共19页.docx
- 文档编号:28188916
- 上传时间:2023-07-09
- 格式:DOCX
- 页数:14
- 大小:25.62KB
编程语言语法规范共19页.docx
《编程语言语法规范共19页.docx》由会员分享,可在线阅读,更多相关《编程语言语法规范共19页.docx(14页珍藏版)》请在冰豆网上搜索。
编程语言语法规范共19页
Java
基本(jīběn)语法:
1)大小写敏感(mǐngǎn):
Java是大小写敏感(mǐngǎn)的,这就意味着标识符Hello与hello是不同(bùtónɡ)的。
2)类名:
对于所有的类来说,类名的首字母应该大写。
如果类名由若干单词组成,那么每个单词的首字母应该大写,例如 MyFirstJavaClass。
3)方法名:
所有的方法名都应该以小写字母开头。
如果方法名含有若干单词,则后面的每个单词首字母大写。
4)源文件名:
源文件名必须和类名相同。
当保存文件的时候,你应该使用类名作为文件名保存(切记Java是大小写敏感的),文件名的后缀为.java。
(如果文件名和类名不相同则会导致编译错误)。
5)主方法入口:
所有的Java程序由publicstaticvoidmain(String[]args)方法开始执行。
Java标识符:
1)所有的标识符都应该以字母(A-Z或者a-z),美元符($)、或者下划线(_)开始
2)首字符之后可以是任何字符的组合
3)关键字不能用作标识符
4)标识符是大小写敏感(mǐngǎn)的
5)合法(héfǎ)标识符举例:
age、$salary、_value、__1_value
6)非法(fēifǎ)标识符举例:
123abc、-salary
Java修饰符:
1)可访问(fǎngwèn)修饰符:
default(switch语句中的默认分支),
public,
protected(表示字段只能通过类或者其子类访问
或者在同一个包内的其他类),
private(表示私有字段,或者方法等,只能从类内部访问)
2)不可访问修饰符:
final(表示一个值在初始化之后就不能再改变了
表示方法不能被重写,或者一个类不能有子类),
abstract(抽象方法,抽象类的修饰符),
strictfp(浮点数比较使用严格的规则)
Java变量:
1)局部变量
2)类变量(静态变量)
3)成员变量(非静态变量)
C++
C++简介(jiǎnjiè):
1)C++是一种(yīzhǒnɡ)静态类型的、编译(biānyì)式的、通用的、大小写敏感的、不规则的编程语言,支持(zhīchí)过程化编程、面向对象编程和泛型编程。
2)C++被认为是一种中级语言,它综合了高级语言和低级语言的特点。
注意:
使用静态类型的编程语言是在编译时执行类型检查,而不是在运行时执行类型检查。
C++变量在定义时分配内存,而不是在初始化时。
局部变量存储在栈中;全局变量和static变量存储在全局/静态存储区;new和malloc创建堆内存。
如int*p=newint[10];newint[10]在执行时申请分配堆内存,但指针p存放在栈中,存放的值为堆内存的首地址。
C++中局部变量在定义时,系统不会对其初始化;但全局变量,系统会对其默认初始化。
C++标识符:
1)C++标识符是用来标识变量、函数、类、模块,或任何其他用户自定义项目(xiàngmù)的名称。
一个标识符以字母A-Z或a-z或下划线_开始(kāishǐ),后跟零个或多个字母、下划线和数字(0-9)。
2)C++标识符内不允许出现标点(biāodiǎn)字符,比如@、$和%。
C++是区分(qūfēn)大小写的编程语言。
typedef声明:
作用:
为一个已有的类型取一个新的名字。
语法:
typedeftypenewName;
C++常量:
字面值、#define,const。
C++存储类修饰符:
1)auto是所有局部变量默认的存储类,auto只能用在函数内部,即auto只能修饰局部变量;
2)register用于定义存储在寄存器中的局部变量,不能对其取址(&),因为它没有内存地址;
3)static指示编译器在程序的生命周期内保持局部变量的存在,而不需要在每次它进入和离开作用域时进行创建和销毁。
static修饰局部变量可以在函数调用之间保持局部变量的值;static修饰全局变量时,会使变量的作用域限制在声明它的文件内;
4)extern提供了一个(yīɡè)全局变量或全局函数的引用,通过extern声明(shēngmíng),可以访问其它文件中定义的全局变量,要求这些文件必须在同一工程(gōngchéng)目录下,否则只能用#include导入;
5)mutable 修饰符仅适用(shìyòng)于类的对象。
在C++中,mutable是为了突破const的限制而设置的。
被mutable修饰的变量(mutable只能用于修饰类的非静态数据成员),将永远处于可变的状态,即使在一个const函数中。
const的用法:
1)const修饰普通变量和指针:
i.const修饰变量:
consttypevalue或者typeconstvalue
ii.const修饰指针:
a)指针本身是常量不可变:
type*constpointer;
b)指针所指向的内容是常量不可变:
consttype*pointer或者typeconst*pointer;
c)两者都不可变:
consttype*constpointer;
注意:
识别const到底是修饰指针还是指针所指的对象,还有一个较为简便的方法,也就是沿着*号划一条线:
如果(rúguǒ)const位于(wèiyú)*的左侧(zuǒcè),则const就是用来修饰(xiūshì)指针所指向的变量,即指针指向为常量;
如果const位于*的右侧,const就是修饰指针本身,即指针本身是常量。
2)const修饰函数参数:
它表示在函数体中不能修改参数的值
i.voidfunction(constintVar); //传递过来的参数在函数内不可以改变(无意义,该函数以传值的方式调用)
ii.voidfunction(constchar*Var); //参数指针所指内容为常量不可变
iii.voidfunction(char*constVar); //参数指针本身为常量不可变(无意义,var本身代表地址也是通过传值的形式赋值的)
iv.voidfunction(constClass&Var);//引用参数在函数内不可以改变
注意:
参数const通常用于参数为指针或引用的情况,若输入参数采用“值传递”方式,由于函数将自动产生临时变量用于复制该参数,该参数本就不需要保护,所以不用const修饰。
3)const修饰类对象/对象指针/对象引用:
表示该对象为常量对象,其中的任何成员都不能被修改。
同时,该对象的任何非const成员函数都不能被调用,因为任何非const成员函数都会有修改成员变量的企图。
4)const修饰(xiūshì)成员变量(biànliàng):
表示(biǎoshì)该数据(shùjù)成员只在某个对象的生存期内是常量,而对于整个类而言是可变的。
因为类可以创建多个对象,不同的对象其const数据成员的值可以不同,所以不能在类定义中初始化const数据成员(类对象未被创建时,编译器不知道const数据成员的值),而只能在类的构造函数的初始化列表中初始化。
5)const修饰成员函数:
表示const修饰的成员函数不能改变类的成员变量,也就不能调用非const成员函数。
一般把const写在成员函数的最后,如voidfunction()const。
6)const常量与define宏定义的区别:
i.编译器的处理方式不同:
define宏是在预处理阶段展开;
const常量是在编译运行阶段使用。
ii.类型和安全检查不同:
define宏没有类型,不做任何类型检查,仅仅是展开;
const常量有具体类型,在编译阶段会执行类型检查。
iii.存储方式不同:
define宏仅仅是展开,在什么地方使用,就在什么地方展开,不分配内存;
const常量会在内存中分配(可以是堆也可以是栈)。
volatile关键字:
volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如操作系统、硬件或者其它线程等。
遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址(dìzhǐ)的稳定访问。
精确地说就是,优化器在用到这个变量时必须每次都从内存(nèicún)中读取这个变量的值,而不是(bùshi)使用保存在寄存器里的备份。
运算符:
1.~:
表示(biǎoshì)补码运算符,用于各位取反,但没有~=赋值运算符;
2.^:
表示异或运算符;
3.条件运算符:
var=(var1比较运算符var2)?
var3:
var4;
4.逗号运算符:
var=(表达式1,表达式2,…)整个逗号表达式的值是以逗号分隔的列表中的最后一个表达式的值;
5.点(.)运算符:
点运算符应用于实际的对象;
箭头(->)运算符:
箭头运算符与一个指向对象的指针一起使用;
点运算符和箭头运算符用于访问引用类、结构和共用体的成员。
Switch语句(yǔjù):
1.语法(yǔfǎ):
switch(expression){
caseconstant-expression:
statement(s);
break;
caseconstant-expression:
statement(s);
break;
default:
statement(s);
}
2.规则(guīzé):
i.switch 语句(yǔjù)中的 expression 必须是一个int、char或enum。
ii.在一个switch中可以有任意数量的case语句。
每个case后跟一个要比较的值和一个冒号。
iii.case的 constant-expression 必须与switch中的变量具有相同的数据类型,且必须是一个常量或字面量。
iv.当被测试(cèshì)的变量等于case中的常量(chángliàng)时,case后跟的语句(yǔjù)将被执行,直到遇到 break 语句(yǔjù)为止。
v.当遇到 break 语句时,switch终止,控制流将跳转到switch语句后的下一行。
vi.不是每一个case都需要包含 break。
如果case语句不包含 break,控制流将会 继续 后续的case,直到遇到break为止。
vii.一个 switch 语句可以有一个可选的 default case,出现在switch的结尾。
defaultcase可用于在上面所有case都不为真时执行一个任务。
defaultcase中的 break 语句不是必需的。
Printf和Scanf函数的用法:
1.Printf函数:
i.原型:
printf("格式化字符串",<变量列表>);
ii.格式化字符串:
格式化字符串包括两部分内容:
一部分是正常字符,这些字符将按原样输出;另一部分是格式化规定字符,以"%"开始,后跟一个或几个规定字符,用来确定输出内容格式。
iii.格式化字符串格式:
%[标志][输出最小宽度][.精度][长度]格式化字符串类型。
1.标志(biāozhì):
+表示(biǎoshì)输出(shūchū)符号(fúhào)(正号或负号);-表示结果左对齐,右边填空格;空格表示输出为正时冠以空格,输出为负时冠以负号;#对c,d,s,u类无影响,对o类输出时加前缀o,对x类输出时加前缀Ox。
2.输出最小宽度:
用十进制整数来表示输出的最少位数。
a)若实际位数多于定义的宽度:
则按实际位数输出。
b)若实际位数少于定义的宽度:
则右对齐,左边留空。
c)表示宽度的数字以负号开始,左对齐,右边留空。
d)表示宽度的数字以0开始,则右对齐,左边补0。
e)表示宽度的数字既有负号又有0,左对齐,右边留空。
3.精度:
精度格式符以“.”开头,后跟十进制整数(针对浮点数和字符串)。
意义是:
a)如果输出数字,则表示小数的位数;若实际位数大于所定义的精度数,则四舍五入。
若不足则补0;
b)如果输出的是字符,则表示输出字符的个数;若实际位数大于所定义的精度数,则截去超过的部分。
不足按实际字符个数输出。
4.长度:
长度格式符为h、l两种,h表示按短整型量输出,l表示按长整型量输出。
5.格式化字符串类型(lèixíng):
格式(géshi)字符意义(yìyì)
d以十进制形式(xíngshì)输出带符号整数(正数不输出符号)
o以八进制形式输出无符号整数(不输出前缀0)
x,X以十六进制形式输出无符号整数(不输出前缀Ox)
u以十进制形式输出无符号整数
f以小数形式输出单、双精度实数
e,E以指数形式输出单、双精度实数
g,G以%f或%e中较短的输出宽度输出单、双精度实数
c输出单个字符
s输出字符串(char数组类型,因为c语言没有String类型)
2.Scanf函数:
i.原型:
scanf("格式化字符串",<地址表>)
ii.格式化字符串:
a)格式化说明符:
与printf()函数(hánshù)中的格式化字符串类型(lèixíng)基本相同。
b)空白符:
空白(kòngbái)字符(zìfú)会是scanf()函数在读操作时略去输入的一个或多个空白字符
c)非空白符:
一个非空白字符会使scanf()函数在读操作时剔除掉与这个非空白字符相同的字符。
iii.地址表:
需要读入的所有变量的地址,而不是变量名。
各地址之间用逗号隔开。
a)如果是一般的变量,通常要在变量名前加上"&";但输出时是用变量名。
b)如果是数组,用数组名就代表了该数组的首地址;输出时也是用数组名(一般用于char型数组,即字符串)。
c)如果是指针,直接用指针名本身,不要加上“*”;输出时要加“*”,但是字符串不需要加。
iv.格式化字符串的格式:
%[输入数据的宽度][长度]类型。
1.宽度:
用十进制整数指定输入的宽度(即字符数)。
2.长度:
长度格式符为h和l,l表示长整型数据(%ld)和双精度浮点型数据(%lf)。
h表示短整型数据。
3.“*”符:
用以表示该输入项,读入后不赋予相应的变量,即跳过该输入值。
4.长度长度格式符为l和h,l表示输入长整型数据(如%ld)和双精度浮点数(如%lf)。
h表示输入短整型数据。
5.类型(lèixíng):
表示输入数据(shùjù)的类型。
格式(géshi)字符(zìfú)意义
d输入十进制整数
o输入八进制整数
x输入十六进制整数
u输入无符号十进制整数
f或e输入实型数(用小数形式或指数形式)
c输入单个字符
s输入字符串
v.注意:
1.Scanf()函数中没有精度控制,如scanf(“%5.2f”,&a);是非法的。
2.在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔则可用空格,TAB或回车作间隔。
C编译在碰到空格,TAB,回车或非法数据(如对“%d”输入“12A”时,A即为非法数据)时即认为该数据结束。
随机函数:
i.Rand()函数:
a)功能:
随机数发生器
b)用法(yònɡfǎ):
intrand();
c)头文件:
stdlib.h
说明(shuōmíng):
用户(yònghù)未设定随机数种子时,系统默认的随机数种子为1。
rand()产生的是伪随机(suíjī)数字,每次执行时是相同的;若要不同,用函数srand()初始化它。
ii.Srand()函数:
a)功能:
初始化随机数发生器,即设置随机数种子
b)用法:
voidsrand(unsignedintseed);
c)头文件:
stdlib.h
说明:
如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。
iii.产生变化随机数的方法:
在开始产生随机数前,调用一次srand(time(NULL))(注意:
srand()一定要放在循环外面或者是循环调用的外面,否则的话得到的是相同的随机数)
注意:
time(0||NULL)的头文件是time.h
C++数组
所有的数组都是由连续的内存位置组成。
最低的地址对应第一个元素,最高地址对应最后一个元素。
a)声明数组:
必须指定元素类型和元素数量。
TypearrayName[arraySize];
b)初始化数组:
可以逐个(zhúgè)初始化数组,也可以使用一个初始化语句。
初始化语句(yǔjù)使用{},而大括号{}之间的值的数目不能大于我们(wǒmen)在数组声明时在方括号[]中指定的元素(yuánsù)数目。
如果您省略掉了数组的大小,数组的大小则为初始化语句中元素的个数
注意:
C、C++中没有提供直接获取数组大小的函数,只提供了strlen函数用于获取存放字符串的字符数组的长度。
c)二维数组:
本质是一个一维数组列表。
i.初始化:
通过在括号内为每行指定值来进行初始化。
如:
inta[3][4]={{0,1,2,3},{4,5,6,7},{8,9,10,11}};
d)指向数组的指针:
指向数组的指针变量可以自增,但数组名作为常量指针不能自增。
但当数组作为形参时(可以不指定数组大小),数组名表示的是指针变量可以自增运算。
注意:
数组名可以作为常量指针。
即可以使用*(ArrayName+i)访问第i个元素。
e)数组形参:
C++不允许向函数传递一个完整的数组作为实参,但可以通过指定不带索引的数组名来传递一个指向数组的指针。
形参可以是完整的数组。
i.形参函数定义:
1.方式一:
typefunction(type*param);
2.方式二:
typefunction(typearrayname[arraysize]);
3.方式(fāngshì)三:
typefunction(typearrayname[]);
f)数组型返回类型(lèixíng):
C++不允许(yǔnxǔ)返回一个完整(wánzhěng)的数组作为函数的返回值以及返回类型,但可以通过指定不带索引的数组名来返回一个指向数组的变量指针。
i.返回数组的函数定义:
type*function();
注意:
C++不支持在函数外返回局部变量的地址,除非定义局部变量为static变量。
而且也不支持函数的嵌套定义。
C++字符串:
a)c风格字符串:
字符串实际上是使用null字符‘\0’终止的一维字符数组。
b)声明和初始化:
charstr[size]={初始化列表}(size大小是实际字符串长度+1,初始化列表的结尾是‘\0’);charstr[]=“字符串”(不需要末尾添加’\0’);char*str=“字符串”。
但Strlen(str)得到的长度是实际字符串的长度,即不包含’\0’.
注意:
cout输出char的数组名和指针名时调用了系统函数处理,输出的是字符串不是地址。
其他类型的是地址。
c)字符串操作函数:
i.strcpy(s1,s2):
复制(fùzhì)字符串s2到s1。
ii.strcat(s1,s2):
连接(liánjiē)字符串s2到s1的末尾(mòwěi)。
iii.strlen(s1):
返回(fǎnhuí)字符串s1的长度,不包含’\0’的长度。
iv.strcmp(s1,s2):
如果s1和s2是相同的,则返回0;如果s1
自左向右逐个字符相比(按ASCII值大小相比较)。
v.strchr(s1,ch):
返回一个指针,指向字符串s1中第一次出现字符ch的位置。
若没有则返回null。
vi.strstr(s1,s2):
返回一个指针,指向字符串s1中第一次出现s2的位置。
若没有则返回null。
d)C++string类:
C++标准库提供了string类类型,支持上述所有的操作,另外还增加了其他更多的功能。
C++指针:
指针是一个变量,其值为另一个变量的地址,即内存位置的直接地址。
指针变量的声明:
type*varName;
注意:
所有指针的值的实际数据类型,不管是整型、浮点型、字符型,还是其他的数据类型,都是一样的,都是一个代表内存地址的长度为32位的十六进制数。
不同数据类型的指针之间唯一的不同是,指针所指向的变量或常量的数据类型不同。
C++NULL指针(zhǐzhēn):
在变量声明的时候,如果没有确切的地址可以赋值,为指针(zhǐzhēn)变量赋一个NULL值是一个良好(liánghǎo)的编程习惯。
赋为NULL值的指针(zhǐzhēn)被称为空指针。
NULL指针是一个定义在标准库中的值为零的常量。
在大多数的操作系统上,程序不允许访问地址为0的内存,因为该内存是操作系统保留的。
然而,内存地址0有特别重要的意义,它表明该指针不指向一个可访问的内存位置。
但按照惯例,如果指针包含空值(零值),则假定它不指向任何东西。
C++指针的运算:
指针是一个用数值表示的地址。
因此,您可以对指针执行算术运算。
可以对指针进行四种算术运算:
++、--、+、-。
指针可以用关系运算符进行比较,如==、<和>。
C++指针数组:
声明:
type*pointerArray[arraysize];
内容摘要
(1)Java
基本语法:
大小写敏感:
Java是大小写敏感的,这就意味着标识符Hello与hello是不同的
(2)Java
基本语法:
大小写敏感:
Java是大小写敏感的,这就意味着标识符Hello与hello是不同的
(3)类名:
对于所有的类来说,类名的首字母应该大写
(4))整个逗号表达式的值是以逗号分隔的列表中的最后一个表达式的值
(5)数组形参:
C++不允许向函数传递一个完整的数组作为实参,但可以通过指定不带索引的数组名来传递一个指向数组的指针
(6)数组型返回类型:
C++不允许返回一个完整的数组作为函数的返回值以及返回类型,但可以通过指定不带索引的数组名来返回一个指向数组的变量指针
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编程 语言 语法 规范 19