南京大学金陵学院C语言程序设计考试复习精讲
C语言程序设计冲刺串讲

• • • • • • •
4.赋值语句 若错误行是赋值语句,则要看赋值是否正确, 然后看赋值运算符是否写正确。 5.定义语句 若错误行是定义语句,则要注意: 1)首先分析变量类型名是否写对; 2)然后分析给变量赋初值是否正确; 3)若以上均不是,则看是不是少定义了某个 变量或少了花括号;
• 6、表达式错误问题:
1.基础知识掌握不扎实,概念理解不准确
• 如: main( ) {int a=1,b=3,c=5; if (c=a+b) printf (“yes\n”); else printf(“no”); } 题目 问程序运行后的输出结果,答案应是yes。因 为“if (c=a+b) printf (”yes\n“);”中的条件 “c=a+b”是一个赋值语句,c的值为a+b=1+3=4, 所以条件为真。而容易把赋值语句“c=a+b”理 解为关系表达式“c==a+b”即5=1+3为逻辑假, 故答no。
–
– – –
1)首先看该行最后有没有分号,若有则删掉分号;若中间有分 号则要改为逗号; 2)形参和实参类型不一致问题
① 若实参是个地址或数组名或指针变量名,则对应的形参肯定 是指针或数组; ②若实参是二维数组名,则对应的形参应该是指针数组或是二 维数组; ③若后面用到某形参的时候有指针运算符,则该形参比为指针 类型; ④若形参是二维数组或指向M 个元素的指针变量,则该二维的 长度必须与main中对于数组的第二维的长度相同。
– 记住是分号(;),不是逗号(,)!
3. return语句
•
– – –
若错误行为return语句,则要注意以下几点:
1)首先看是不是正确书写return关键字; 2)然后看是不是缺少分号,若是则加上分号即可; 3)再者判断return后的变量或表达式是否正确;
《C语言程序设计》期中练习(1-6章)

一、选择题 1、执行”int k=11;k=1/3*k++;”后,k 的值是( ) A0 B3 C4 D 12 2、以下常量中正确的是( ) A ‘abc’ B ‘\x123’ C 3.14E-1.2 D “a” 3、以下所列语句中,合法的语句是( ) A a=1,b=2 B ++a; C a=a+1=3; D y=int(a) 4、以下不致造成死循环的语句是( ) A for(y=0,x=1; x>++y; x=i++) i=x; B for(; ; x+=i); C while(x=8) x--; D for(i=10,sum=0; sum<=i) sum=--i; 5、设有定义”float y=3.45678; int x; ” 则以下表达式能实现将 y 中的数值保留小数点后 2 位,第 3 位四舍五入的表达式是( ) A y=(y*100+0.5)/100.0 B x=y*100+0.5,y=x/100.0 C y=y*100+0.5/100.0 D y=(y/100+0.5)*100.0 6、以下程序的输出结果是( ) #define PI 3.14 #define F(y) ((y)*(y)) #define P(a) printf(“%d”,a); main() {int x=PI; P(F(1+2)*x); } A 10 B 25 C 15 D 27 7、当需要定义一个函数时,以下( )不能用作函数名。 A scanf B for C _sum D F2 8、以下对 break 语句使用的正确描述是( ) A 可以出现在程序中的任何位置 B 只能出现在循环结构或 switch 结构中 C 只能出现在 switch 结构中 D 只能出现在循环结构中 9、若有声明语句”int a[10],b[3][3];”,则对以下数组元素赋值的操作中,不会出现越界访问的是 ( ) A a[-1]=0 B a[10]=0 C b[3][0]=0 D b[0][3]=0 10、下列一维数组声明正确地是( ) A int a[ ]; B int n=10,a[n]; C int a[10+1]={1}; D int a[2]={1,2,3} 11、已知有预处理命令“#include <stdio.h>”和声明“char s[10]=”thank you”; int i;” ,要求输出 字符串“thank you” ,以下选项中不能达到该要求的语句是( ) A puts(s); B printf(“%s”,s[10]); C for(i=0; s[i]!=’\0’;i++) printf(“%c”,s[i]); D for(i=0; s[i]!=’\0’;i++) putchar(s[i]); 12、若有声明语句“char s1[10]={0},s2[10]=”books”;” ,则能将字符串“books”赋给数组 s1 保存 的表达式是( ) A s1=”books”; B strcpy(s2,s1); C s1=s2; D strcat(s1,s2); 二、填空题 第 页 总 页
sjk15

15.设有数组说明”int a[4][4];”,则不能等价表示数组元素a[3][3]的是______。
A.*(a[3]+3) B.*(*(a+3)+3) C.*&a[3][3] D.(*(*(a+3))+3)
16.下列表达式中,错误的是__________。
A.4.0%2.0 B.k+++j C.a+b>c+d?a:b D.x*=y+25
printf("%d %d\n",--a,++b);
}
A 10 10 B 12 12 C11 10 D11 13
10.以下程序输出结果是( ).
main ( )
{ int m=5;
if(m++>5) printf("%d\n",m);
else printf ("%d\n",m--);
}
A 7B 6C 5D 4
A.a= =0 B.a= =1 C.a!=1 D.a!=0
5.设x,y,z和k都是int型变量,则执行表达式:x=(y=4,z=16,k=32)后,x的值为( )。
A. 4 B. 16 C. 32 D . 52
6.设有如下的变量定义:
int i =8,k ,a,b ;
unsigned long w=5;
1.在Turbo C2.0系统中,若将实型常数1.5存储在内存中,它占用______个字节。
2.在C语言中,要求运算数必须是整型的运算符是______
3.变量的指针含意是指变量的_________
4.在C语言中,字符型数据在内存中以______码形式存放。
2022年金陵科技学院公共课《C语言》科目期末试卷B(有答案)

2022年金陵科技学院公共课《C语言》科目期末试卷B(有答案)一、填空题1、假设变量a、b和c均为整型,以下语句借助中间变量t把a、b和c中的值进行交换,即把b中的值给a,把c中的值给b,把a中的值给c。
例如:交换前,a=10、b=20、c=30;交换后,a=20、b=30、c=10。
请填空。
_______;a=b;b=c;_______;2、C语言的源程序必须通过【】和【】后,才能被计算机执行。
3、C语言源程序的基本单位是________4、C语言中的标识符可分为关键字、_______和_______3类。
5、若有定义语句:int m=5,y=2;则执行表达式y+=y-=m*=y后的y值是_______6、若x=0123,则表达式(5+(int)(x))&(~2)的值是_______。
7、鸡兔共有30只,脚共有90只,下面程序段是计算鸡兔各有多少只。
请填空。
for(x=0;x<=30;x++){y=30一x;if(_______)printf("%d,%d\n",x,y);}8、若有定义:doublex[3][5];,则x数组中行下标的下限为_______,列下标的上限为_______。
9、下面程序段的运行结果是_______。
int i=5;char c[6]="abcd";do{c[i]=c[i-1];}while(--i>0);puts(c);10、若有以下定义和语句:int*p[3],a[6],i;for(i=0;i<3;i++)p[i]=8&a[2*i];则*p[0]引用的是a数组元素_______,*(p[1]+1)引用的是a数组元素_______。
二、选择题11、以下正确的叙述是( )。
A.在C程序中,每行中只能写一条语句B.若a是实型变量,C程序中允许赋值a=10,因此实型变量中允许存放整型数C.在C程序中,无论是整数还是实数,都能被准确无误地表示D.在C程序中,%是只能用于整数运算的运算符12、C语言中的标识符只能由字母、数字和下划线3种字符组成,且第一个字符( )A.必须为字母B.必须为下划线C.必须为字母或下划线D.可以是字母、数字和下划线中任一种字符13、C语言规定:在一个源程序中,main函数的位置( )A.必须在最开始B.必须在系统调用的库函数的后面C.可以任意D.必须在最后14、以下叙述正确的是A.在C程序中,main函数必须位于程序的最前面B.C程序的每行中只能写一条语句C.C语言本身没有输入输出语句D.在对一个C程序进行编译的过程中,可以发现注释中的拼写错误15、有两个字符数组a、b,则以下正确的输人格式是()。
C语言程序设计(第四版)复习资料

C语言程序设计(第四版)复习资料C语言程序设计(第四版)复习资料C语言程序设计是计算机科学与技术专业中非常重要的一门课程,通过学习C语言,可以培养同学们良好的编程思维和解决问题的能力。
为了帮助同学们更好地复习和掌握C语言程序设计知识,提供一份详细的复习资料是非常有必要的。
本文将针对教材《C语言程序设计(第四版)》进行复习资料的整理,帮助同学们系统地复习重点知识点和考点。
一、概述C语言是一种通用的、面向过程的高级计算机编程语言,它具有语法简洁、功能强大、性能高效等特点。
本教材分为六个部分:基本类型和函数、选择结构、循环结构、数组与指针、字符串和结构、高级特性。
通过学习这些内容,同学们可以初步掌握C语言的基本知识和编程技巧。
二、基本类型和函数在C语言中,有一些基本类型和函数是我们必须要了解和掌握的。
首先,我们需要了解整型、浮点型、字符型等基本数据类型的特点和使用方法。
其次,掌握C语言常用的输入输出函数,如printf()和scanf()函数,这是进行数据输入和输出的基础。
此外,还需要理解C语言中的运算符和表达式,并能正确地使用它们进行计算和逻辑运算。
三、选择结构选择结构是C语言中非常重要的一部分,通过选择结构可以实现根据不同条件执行不同的代码块。
在《C语言程序设计(第四版)》中,详细介绍了if语句、switch语句等选择结构的使用方法和注意事项。
在复习选择结构时,同学们需要理解条件表达式的含义和使用方法,并能灵活地运用选择结构解决实际问题。
四、循环结构循环结构是C语言中常用的一种结构,通过循环结构可以重复执行一段代码,直到满足退出条件为止。
在本教材中,详细介绍了while循环、do-while循环和for循环的使用方法和注意事项。
复习循环结构时,同学们需了解循环的基本原理,掌握循环控制变量的更新和循环体的编写技巧。
五、数组与指针数组和指针是C语言中非常重要的概念,同时也是较难理解和掌握的部分。
在《C语言程序设计(第四版)》中,详细介绍了数组的概念、数组的声明和使用方法,以及指针的概念、指针的声明和使用方法。
C语言阶段复习二

C语言阶段复习(二)复习提纲:第五讲选择结构程序设计第六讲循环结构程序设计分章复习:第五讲选择结构程序设计内容提要:1、关系运算符<,>,==,!=,>=,<=2、逻辑运算符&&,||,!3、条件运算符?:4、三种if结构1)简单if形式if (表达式)语句;2)、if-else形式if(表达式)语句1;else语句2;3)if-else-if形式if(表达式1) 语句1;else if (表达式2) 语句2;else if (表达式3) 语句3;……else if (表达式n) 语句n;else 语句n+1;使用if语句注意事项:•if语句自动结合后面的一条语句,如果需要执行多条语句,需要用{ }包括所有要执行的语句。
•if后面表达式的形式很灵活,可以是常量,变量,任意类型的表达式,可以是函数,指针等。
只要表达式非零时,值就为真,否则就是假。
•if与else的匹配关系遵循“就近一致原则”,每个else与离他最近的没有其他else配对的if配对。
5、switch语句switch ( 表达式){ case 常量c1: 语句组1; break;case 常量c2 : 语句组2; break;…….case 常量cn : 语句组n; break;[default: 语句组; break;]}swith语句使用提示:(1)、swith后面的表达式一般是整型,每个case后面的“常量表达式”的类型应该其一致。
(2)、每个case后面的常量表达式的值必须不一样,否则会出现错误。
(3)、每个case后面必须是“常量表达式”,不可以是变量(4)、break语句的使用(5)、switch语句可以嵌套第六讲循环结构程序设计内容提要:1、while语句一般形式:while (表达式)循环体语句;2、do-while语句一般形式:do循环体语句;while(表达式);while最后面的;不要省略如果do-while语句中的表达式值一开始就为假,循环体还是会被执行一次int a = 0, b = 0;dob++;while (a > 0) ;3、for语句一般形式for (表达式1;表达式2;表达式3)循环体语句;表达式1:赋值表达式,给循环变量赋初值表达式2:关系表达式,或者逻辑表达式,作为循环控制条件表达式3:赋值表达式,给循环变量增量或者减量练习题:一、选择题1. 若有程序段如下:a=b=c=0;x=35;if(!a)x--;else if(b);if(c)x=3;else x=4;执行后,变量x的值是(B )A.34 B.4 C.35 D.32. 下列if语句中,不正确的是(A )A.if (x<y)scanf (“%d”,&x) else scanf (“%d”, &y); B.if (x<y);C.if (x==y)x+=y;D.if (x<y){x++;y++;}3. 若有int x=3;,执行程序段:do{printf("%3d",x-=2);}while(!(--x));输出的结果是( C)A.1 3 B.1 -1 C.1 -2 D.1 -34. 有程序段:int a;for (scanf (“%d”,&a);!a;)printf (“continue”);则for语句中的!a等价于()。
计算机程序设计基础精讲多练CC第7章

引用可以作为函数的参数和返回值,使得函数可以直接访 问和修改调用者的数据,从而提高程序的效率和可读性。
指针与引用在函数中的应用
01
指针作为函数参数
将指针作为函数的参数,可以在函数内部修改指针所指向 的数据,从而实现数据的交换和修改。
02
引用作为函数参数
将引用作为函数的参数,可以使得函数直接访问和修改调 用者的数据,避免了数据的拷贝和返回值的麻烦。
03
指针与引用的比较
指针和引用都可以实现数据的间接访问和修改,但是它们 的使用方式和语法有所不同。指针更加灵活,但是使用不 当容易导致程序出错;而引用相对更加安全,但是使用范 围有限。在实际编程中,应根据具体情况选择合适的方式 。
06
文件操作
文件概述及分类
文件概述
文件是计算机中存储数据的一种方式,通常保存在磁盘或其他存储介质上。文 件可以是文本、图像、音频、视频等各种类型的数据。
函数调用等信息。
断点调试
在程序中设置断点,当程序执 行到断点时暂停执行,方便查
看程序状态。
日志输出
在程序中添加日志输出语句, 记录程序执行过程中的关键信
息,方便问题定位。
变量监视
通过调试器监视特定变量的值 ,观察变量在程序执行过程中
的变化情况。
THANKS
感谢观看
计算机程序设计基础 精讲多练cc第7章
目录
• 程序设计基本概念 • 数据类型与运算符 • 控制结构 • 函数与数组 • 指针与引用 • 文件操作 • 异常处理与程序调试
01
程序设计基本概念
程序与算法
程序
程序是一系列按照特定顺序组织 的计算机指令和数据,用于实现 特定的功能或解决特定的问题。
第5章 江苏省二级C语言等级考试算法考点精解(初稿)

第5章算法考点精解前面两章讨论了C语言的基本概念、基本语句、程序结构、各种数据类型、函数、指针、链表、文件等与语法相关的内容,本章主要针对江苏省二级C等级考试中经常出现的算法进行归纳总结,包括基本操作、非数值计算常用经典算法、数值计算常用经典算法、解决各类问题的一般算法。
算法是在有限步骤内求解某一问题所使用的一组定义明确的规则。
通俗点说,就是计算机解题的过程。
在这个过程中,无论是形成解题思路还是编写程序,都是在实施某种算法。
形成解题思路是推理实现的算法,编写程序是操作实现的算法。
在计算机的等级考试题目中,程序填空及上机编程题一般都与算法有关,所以要了解等级考试大纲中规定的算法并掌握常考算法。
5.1 基本操作一、知识点综述1.交换(*****)变量交换算法是一种很简单的算法,也是最为基础的一个算法,各种其他的算法往往都要运用到这一基本算法,如各种排序算法就会使用到交换变量的算法。
实现变量的值的交换最常用的方法是借助一个临时变量来实现将两个数的值进行交换。
下面的函数实现了两个数的交换。
void swap(int x, int y){ int temp;temp=x;x=y;y=temp;}因为函数参数的传递是值传递,是单向的,如果主函数调用了此函数,尽管形式参数x 和y的值交换了,而主函数中的实际参数是不会改变的。
要想实现地址传递,应该用指针实现。
void swap(int *x, int *y){ int temp;temp=*x;*x=*y;*y=temp;}函数调用时将实参的地址传递给指针x和y,例如:swap(&a, &b);实现x和y指向的地址单元的值的交换,即a和b的值的交换。
2.累加(*****)累加就是对若干个数求和,其最基本的思想就是“反复做加法”。
一般来说,计算机每次只处理两个数的相加运算,所以多个数相加必须通过多次的两两相加来实现,用循环就很容易实现数的累加。
使用循环时,要注意根据问题确定循环变量的初值、终值或结束条件,更要注意用来表示最后结果的初值。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/*结果为2*/ /*结果为8*/ /*结果为2*/ /*结果为8*/ /*结果为1*/ /*结果为4*/ /*结果为8*/ /*结果为1*/ /*结果为20*/ /*结果为4 */
十一、常用的数学计算的库函数
sqrt(x) 计算
x
pow(x , y) 计算xy exp(x) sin(x) cos(x) fabs(x) 计算ey 计算sin x 计算cos x 计算浮点数x的绝对值 注意:不能写成pow(e , x)
南京大学金陵学院
《C语言程序设计》
期末考试复习
一、关于C语言源程序的结构与组成
1、一个完整的C源程序可以由一个或若干 个源程序文件组成: file1 . c file2 . c file3 . c …… filen . c
2、一个C源程序文件由一个或若干个:
函数定义( 一个C源程序中至少有一个函数定义)
‘x’ 可作为整数参与数值运算;而“x” 不能 。 例如: char ch; ch= ‘x’ (正确) 而 ch= “x” (错误) 注意:char型变量并不是一定要存储字符型数据, 也可以存储整型数据,甚至可以存储浮点数。例如: ch=125 ; ch=85.9 ; (小数部分将自动舍去)
一对单引号中只能有一个字符,如 : ‘x’, 而像‘xxx’ 或‘abc’都是错误的。注意:转义字符‘\xab’并不 是四个字符,只表示十六进制数ab所代表的字符。 ‘x’ 的值是整型值; 而“x” 的值是地址(存储空 间的起始地址), 它是指针类型。
外部对象声明
外部对象引用性声明
预处理命令
二、关于变量的声明或定义
1、变量名的命名规则
字母、数字、下划线组成,首字符必须是字母 或下划线。
字母区分大小写。
Turbo C 允许32个字符
不能用C 定义的关键字
不要使用库函数名及预处理命令标识符
2、变量的初始化
对不同类型变量指定的初始化值,有不同的规 定和要求: static 型变量和外部变量的初始化值必须为常量 或常量表达式
{
case 'a': putchar(c+1);
case 'b': putchar(c+2);break;
case 'c': putchar(c+2); default: putchar(c+3); }
十二、关于递归函数的执行与阅读
int f(int n ,int x) { if(n==1) return x; else return f(n-1,x+2)+x; } 例如,当开始时调用:
while(i==e%f) 错写成: while(i=e%f)
for(i=0;i==e%f ;i++) 错写成: for(i=0;i=e%f ;i++)
九、关于|| 与 && 的优化运算处理
在计算 e1 && e2 时,若 e1 的值为假,则不必 再计算 e2 的值 ,因为不管 e2 是什么结果,整个 表达式的值都是 0 。 例如: int a=0 , b=5 , c ; c = a++>0 && b--<10 ;
sizeof 的运算功能是计算给出对象占用的存储 空间大小(以字节为单位)。 使用形式: sizeof (表达式) sizeof (类型关键字或类型名) sizeof 单一常量或单一变量名或单一数组名
注意: 若是数组名,结果是数组占用空间的总字节数
sizeof (1+2) sizeof 1.5 sizeof ‘A’ sizeof (1.5*3LU+sin(x)) sizeof (char) sizeof (float) sizeof “abcdefg” 若有char a=‘A’ ; 则sizeof a 若有 int b[10] ; 则sozeof b 若有 float f; 则sozeof f
声明。
例如若有函数定义:
void fun(int x, int *p, int a[ ]) { …… }
引用性声明:
void fun(int x, int *p, int a[ ]); void fun(int , int * , int [ ]) void fun(int x, int *p, int a[10]);
十六进制形式的转义字符:
‘\xhhh’
必须一对单引号中 必以\x(反斜杠加一个x开始) 其中的hhh只能是1~3位十六进制数字(可以是1位、 2位、最多3位,只其值不超过255 ) 例如: ‘\x2’ 表示编码值为2的字符 ‘\xab ’ 表示编码值为171的字符 ‘\x0D ’ 表示编码值为13的字符 而 ‘\0xab’ 是错误的,x的前面不能写0
x/100
若n是不确定的, 则需要按如下方法计算:
x/(int)pow(10,n-1)
当-32768<=x<=32767时
x/(long)pow(10,n-1) 当x< -32768且x>32767时
八、关于 = 与 = = 的区别
= 是赋值运算,第一操作数必须是左值对象,如 变量名、数组元素名等。
形式参数的“存储类型”仅能是auto和register。不能 是static与extern! 例如:
int fun ( register int x , int y)
int fun ( extern int x , int y)
(正确) (错误)
定义函数时不能给形式参数指定初始化值。例如: int fun ( int x=100 , int y=50) 每一个形式参数都必须单独声明。 int f ( int x , y ) int f ( int x , int y ) (语法错) (正确写法) (错误)
Z += ++x +(y/=10) ;
循环体中对循环控制变量的修改,将影响循 环执行的次数。
x 循环开始 第一轮循环 第二轮循环 0 ++x 1 x++ 2 ++x 3 x++ 4 y 100 y/=10 10 y-9 y/=10 y-0 -1 z 0 11 14
十二、关于switch语句的执行
case后的表达式必须是整型常量表达式 总是将switch后面括号中的“表达式”与case 后
在调用函数的实参必须与被调用函数的形参一一对 应(个数、顺序、类型)。注意:对于指针或数组形式
的形参,对应的实参必须是地址量(指针型量)
例如,若有函数定义:
void fun(int x , int *y , int *p) { *p= x>y ? x : y ; }
且若main函数中有声明:
int a=1, c[2]={0}; 错误调用 fun(int a, int &a, int c[2]) fun(a, *a, c[2]) fun(1 , 2) fun(a, a, c) a=fun(a, &a, c);
f(3 , 4)
五、关于函数定义
函数名是一种外部全局性对象, 所以不能与该 程序中的其他函数名及外部对象同名。但可以与 任何函数(包括该函数)中的局部变量同名,不 会产生冲突。 double samename; int samename ( int n ) int samename ( int n ) { { int samename = 2 ; int s = 2 ; return n%samename ; return n%s ; } } (错误) (正确)
X=0 X*x=0
(正确, 值为0) (错误)
= = 是关系比较运算,第一操作数不必须是左值对象 X==0 X*x==0
(都正确, 值为0或1)
程序要特别注意作为相等性(==)条件判断的 关系表达式常常错写成赋值表达式(=), 而的不到 预期的结果。 例如: if(i==e%f) 错写成: if(i=e%f)
abs(x)
计算 整数x的绝对值
十一、for语句的执行
计算e1
计算e2 e2非0?
真
for ( e1 ;e2 ;e3 ) 语句
表达式 e1仅执行一次 表达式e2用来控制循环继续与否
假
语句 计算e3 结束循环
e1
e2
e3
for ( x=0 , y=100 , z=0 ; x <= y ; x++ , y-- )
形式参数名不能与函数体开始部分的的变量明 同名。例如: int f ( int x ) { float x ; …… }
void型函数体中不能有带返回值的return语句。 例如: void f ( int x ) { …… return x+1; }
六、关于函数调用
在调用一个函数前必须对被调用函数进行引用性
float总是先转换成double,char总是先转换成int
总是把两个操作数转换成同类型后再计算,计算 的结果类型即为该类型。
例如: 10 + ‘b’ + 1.5f – 1e-8/10 该表达式结果类型为double类型。 例如: int a=0 , b=0 ; for ( a=1 ; a<100 ; a++ ) b = b+1/a ;
‘x’ 有对应的字符变量 ,例如:char ch= ‘x’; 而 “x” 没有对应的简单字符串变量,但可以赋给一 个 char*型的指针变量。例如: char *ch= “x” ;
前者用一个字节存储,后者要用两个字节存储。
八进制形式的转义字符:
‘\hhh’
必须一对单引号中 必须一个反斜杠\开始 其中的hhh只能是1~3位八进制数字(可以是1位、 2位、最多3位,只其值不超过255) 例如: ‘\2’ 表示编码值为2的字符 ‘\12’ 表示编码值为10的字符 ‘\123’ 表示编码值为83的字符 ‘\001’ 表示编码值为1的字符 而‘\ab’、‘\0ab’都是错误的,a、b非八进制数字