文档库 最新最全的文档下载
当前位置:文档库 › 计算机二级C语言(重要知识点)

计算机二级C语言(重要知识点)

本文由jnwsren贡献

ppt文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。

授课教师:授课教师:闵芳联系方式:联系方式:153******** 办公室: A3-303 办公室: A3周三(周三(9月9号)上课调整到周五(9月11)上课调整到周五( 11)

1.C语言的基本概念 1.C语言的基本概念

(1)源程序的格式,风格和结构,main函数及其他函数的 (1)源程序的格式,风格和结构,main函数及其他函数的源程序的格式基本概念。基本概念。任何C的源程序执行时,都是从主函数(main)开始执任何C的源程序执行时,都是从主函数(main)开始执 (main) 行的,其他的函数最终必将被这个主函数所调用。行的,其他的函数最终必将被这个主函数所调用。 C语言除了主函数规定必须取名为main外,其他的函语言除了主函数规定必须取名为main外 main 数名可以任取,但是要符合C标识符取名规则。数名可以任取,但是要符合C标识符取名规则。

在main函数体内部和外部均允许出现的实体是预处理 main函数体内部和外部均允许出现的实体是预处理函数体内部和外部均允许出现的实体是命令

1.C语言的基本概念 1.C语言的基本概念

(1)源程序的格式,风格和结构,main函数及其他函数的 (1)源程序的格式,风格和结构,main函数及其他函数的源程序的格式基本概念。基本概念。 C程序书写格式自由,一个语句可以占多行,一行也程序书写格式自由,一个语句可以占多行,可有多个语句。可有多个语句。 C语言的基本组成单位是函数。语言的基本组成单位是函数。语言中,关键字都是小写的。在C语言中,关键字都是小写的。

作注释, C语言用/* */作注释,注释的添加形式比较自由,允语言用/* */作注释注释的添加形式比较自由,许在任何插入空格符的位置插入注释,许在任何插入空格符的位置插入注释,但C语言的注释不能进行嵌套。能进行嵌套。例题: 2006年春选择题年春选择题21 例题:江2006年春选择题21 下列各选项都是在C语言程序段中增加的注释,下列各选项都是在C语言程序段中增加的注释,其中注释方法错误的是方法错误的是 A.void main(/*int argc , char *argv[]*/){} ){pri/*remark*/ntf(“name name”);} B.void main( ){pri/*remark*/ntf( name );} printf(“%d %d” C.void main( ){int x/*=10*/; printf( %d ,x );} /*printf(“%d %d” D.void main( ){int x=10; /*printf( %d ,x )*/;} 各个函数在程序中所处的位置并不是固定的,各个函数在程序中所处的位置并不是固定的,但要求一个函数是完整的,独立的,一个函数是完整的,独立的,不允许出现在一个函数内部又去定义另一个函数,或是函数格式不齐全的现象。又去定义另一个函数,或是函数格式不齐全的现象。

各个函数在程序中所处的位置并不是固定的,各个函数在程序中所处的位置并不是固定的,但要求一个函数是完整的,独立的,一个函数是完整的,独立的,不允许出现在一个函数内部又去定义另一个函数,或是函数格式不齐全的现象。又去定义另一个函数,或是函数格式不齐全的现象。函数名( 函数参数名 1 ,函数参数函数类型函数名(函数参数类型函数参数名1 ,函数参数函数参数名2 类型函数参数名2 ,……) { 函数体 }

C程序是先由源程序(*.C)经编译生成目标文件(*.obj,程序是先由源程序(*.C)经编译生成目标文件(*.obj, (*.C)经编译生成目标文件(*.obj 是二进制文件) 然后经过链接生成可执行文件(*.exe (*.exe,是二进制文件),然后经过链接生成可执行文件(*.exe,是二进制文件) 是二进制文件) 例题:2008年春季选择题21 例题:2008年春季选择题21 年春季选择题下列叙述正确的是下列叙述正确的是 A.main函数必须出现在其他函数之前A.main函数必须出现在其他函数之前 B.main函数中至少必须有一条语句 B.main函数中至少必须有一条语句 C.C程序总是从main函数的第一条语句开始执行程序总是从main C.C

程序总是从main函数的第一条语句开始执行 D.C程序总是在执行完main函数的最后一条语句后结束程序总是在执行完main D.C程序总是在执行完main函数的最后一条语句后结束2008年秋季选择题21 2008年秋季选择题21 年秋季选择题

例题:下列叙述正确的是例题:下列叙述正确的是 A.C程序中的注释只能出现在程序的开始位置和语句的后 A.C程序中的注释只能出现在程序的开始位置和语句的后面 B.C程序书写格式严格程序书写格式严格, B.C程序书写格式严格,要求一行内只能写一个语句C.C程序书写格式自由,一个语句可以写在多行上 C.C程序书写格式自由,程序书写格式自由 D.用 D.用C语言编写的程序只能放在一个程序文件中例题:下列叙述正确的是例题:下列叙述正确的是 A.一个一个C A.一个C语言程序只能实现一种算法 B.C程序可以由多个程序文件组成 B.C程序可以由多个程序文件组成 C.C程序可以由一个或多个函数组成 C.C 程序可以由一个或多个函数组成 D.一个函数可以单独作为一个C 一个C D.一个C函数可以单独作为一个C程序文件存在

1.C语言的基本概念 1.C语言的基本概念

(2)基本算术类型数据的表示及使用。 (2)基本算术类型数据的表示及使用。基本算术类型数据的表示及使用 ,double,char)①类型标识符(int ,float ,double,char)的意义及类型标识符(使用;类型修饰符(long,short,signed,unsigned)使用;类型修饰符(long,short,signed,unsigned)的意义及使用;义及使用;类型标识符:在编译的时候,类型标识符:在编译的时候,为变量分配相应的存储空规定了变量的取值范围;规定了变量可以进行的运算;间;规定了变量的取值范围;规定了变量可以进行的运算;

1.C语言的基本概念 1.C语言的基本概念

(2)基本算术类型数据的表示及使用。 (2)基本算术类型数据的表示及使用。基本算术类型数据的表示及使用例题:2006年秋填空题年秋填空题3 2007年秋选择题年秋选择题24 例题:2006年秋填空题3,2007年秋选择题24

整数数值是以补码表示的;正数的补码和原码相同;整数数值是以补码表示的;正数的补码和原码相同;负数的补码是将该数的绝对值的二进制形式按位取反再加1 数的补码是将该数的绝对值的二进制形式按位取反再加1,左面的第一位表示符号。左面的第一位表示符号。

1.C语言的基本概念 1.C语言的基本概念

(2)基本算术类型数据的表示及使用。 (2)基本算术类型数据的表示及使用。基本算术类型数据的表示及使用②基本类型常量的表示及使用:int型常量的十进制,基本类型常量的表示及使用:int型常量的十进制,型常量的十进制八进制,十六进制形式;八进制,十六进制形式;以数字0开头的数字序列,一律作为八进制数处理,基以数字0开头的数字序列,一律作为八进制数处理,本数字范围0 本数字范围0-7; 0x开头后面跟若干位数字的开头后面跟若干位数字的,以0x开头后面跟若干位数字的,一律作为十六进制数处理,基本数字范围0 10-15写为写为A 处理,基本数字范围0-9,从10-15写为A-F或a-f;

1.C语言的基本概念 1.C语言的基本概念

(2)基本算术类型数据的表示及使用。 (2)基本算术类型数据的表示及使用。基本算术类型数据的表示及使用其他数字作为十进制数处理,基本数字范围是0 其他数字作为十进制数处理,基本数字范围是0-9。例题:例题:int a = 0144; int b = 0x64; int c = 100;

整型数据的分类:整型数据的分类:

整型数据分为基本类型,短整型,整型数据分为基本类型,短整型,长整型和无符号整型。

类型说明符 int short int signed int unsigned int long int unsigned long 数的范围-32768~32767 -32768~32767 -32768~32767 0~65535 -2147483648~2147483647

0~4294967295 分配字节数■■■■■■■■■■■■■■■■

整型数据的分类:整型数据的分类:整型数据分为基本类型,短整型,长整型和无符号整型。整型数据分为基本类型,短整型,长整型和无符号整型。长整型,在整数的末尾加上后缀字母”l”或”L”。长整型,整数的末尾加上后缀字母”或。的末尾加上后缀字母例如:9L,-012L,,-012L 例如:9L,-012L,0x32L 无符号整型在整数的末尾加上后缀字母”或无符号整型在整数的末尾加上后缀字母”u”或”U”。整数的末尾加上后缀字母。若是长整型无符号整数,则应加后缀”lu”或 LU”若是长整型无符号整数,则应加后缀”lu 或”LU

2008年秋选择题23 2008年秋选择题23 年秋选择题

1.C语言的基本概念 1.C语言的基本概念

(2)基本算术类型数据的表示及使用。 (2)基本算术类型数据的表示及使用。基本算术类型数据的表示及使用②基本类型常量的表示及使用:float型常量、double 基本类型常量的表示及使用:float型常量、型常量型常量的十进制小数形式,十进制指数形式;型常量的十进制小数形式,十进制指数形式;

日常的表示法 3.1415× 3.1415×106 2.56*10-7

C语言中的表示形式 3.1415e6 2.56e2.56e-7

1.C语言的基本概念 1.C语言的基本概念

(2)基本算术类型数据的表示及使用。 (2)基本算术类型数据的表示及使用。基本算术类型数据的表示及使用类型说明符float表示单精度型, C中单精度类型说明符float表示单精度型,在Turbo C中单精度 float表示单精度型型占4个字节内存空间,只能提供七位有效数字。型占4个字节内存空间,只能提供七位有效数字。类型说明符double表示双精度型, C中双精类型说明符double表示双精度型,在Turbo C中双精 double表示双精度型度型占8个字节内存空间,只能提供十六位有效数字。度型占8个字节内存空间,只能提供十六位有效数字。 C规定小数后最后保留六位,规定小数后最后保留六位 Turbo C 规定小数后最后保留六位,其余部分四舍五入。 2008年春选择题22 2008年春选择题22 年春选择题

1.C语言的基本概念 1.C语言的基本概念

(2)基本算术类型数据的表示及使用。 (2)基本算术类型数据的表示及使用。基本算术类型数据的表示及使用②基本类型常量的表示及使用:char型常量形式,常基本类型常量的表示及使用:char型常量形式,型常量形式用转义字符;字符串常量形式;符号常量的命名、用转义字符;字符串常量形式;符号常量的命名、定义与使用;与使用; char型常量形式: char型常量形式:字符常量是用一对单撇号括起来的一个型常量形式字符,字符,如:'A' , '2' , '*' 常用转义字符: 常用转义字符: (1)用反斜杠开头后面跟一个字母代表一个控制字符用反斜杠开头后面跟一个字母代表一个控制字符; (1)用反斜杠开头后面跟一个字母代表一个控制字符; (2)用代表字符反斜杠, 代表撇号字符; (2)用\\代表字符反斜杠,用\ '代表撇号字符; (3)用后跟1 个八进制数代表ASCII ASCII码为该八进制数的 (3)用\后跟1到3个八进制数代表ASCII码为该八进制数的字符; 后跟1 个十六进制数代表ASCII ASCII码为该十六字符;用\x后跟1到2个十六进制数代表ASCII码为该十六进制数的字符

例题:下列不正确的转义字符是。例题:下列不正确的转义字符是。 '\ '\ '\ A. '065' B. '\"' C. '\\' D. '\0' 例题:语句printf("a bdw\ hi y printf("a\ hi\ bou\n")是。例题:语句printf("a\bdw\‘hi\’y\\\bou\n")是。 a\bdw\'hi\'y\ A. a\bdw\'hi\'y\\\bou a\bdw\'hi\'y\ B. a\bdw\'hi\'y\bou C. dw'hi'you abdw'hi'y\ D. abdw'hi'y\bou 转义字符及其作用 P48

符号常量: 符号常量:宏名 #define 宏名宏体或 #define 宏名

注意:1.宏定义是用宏名来表示一个字符串宏定义是用宏名来表示一个字符串,注意:1.宏定义是用宏名来表示一个字符串,在宏展开时又以该字符串代替宏名,这只是一种简单的替换,时又以该字符串代替宏名,这只是一种简单的替换,字符串中可以含任何字符,可以是常数,也可以是表达式,符串中可以含任何字符,可以是常数,也可以是表达式,预处理程序对它不作任何检查。预处理程序对它不作任何检查。 2.宏定义不是说明或语句,在行末不必加分号, 2.宏定义不是说明或语句,在行末不必加分号,如加上宏定义不是说明或语句分号则连分号也一起置换。分号则连分号也一起置换。

符号常量: 符号常量:宏名 #define 宏名宏体或 #define 宏名

3.宏名在源程序中若用引号括起来, 3.宏名在源程序中若用引号括起来,则预处理不对其作宏宏名在源程序中若用引号括起来代换。代换。

4.宏定义用宏名代替一个字符串,也就是简单的置换, 4.宏定义用宏名代替一个字符串,也就是简单的置换,不宏定义用宏名代替一个字符串作正确性检查。作正确性检查。

5.在定义预处理命令时,一行只能有一条预处理命令。 5.在定义预处理命令时,一行只能有一条预处理命令。在定义预处理命令时

例题:以下说法不正确的是例题:以下说法不正确的是 A.在语言程序中凡是以# A.在C语言程序中凡是以#号开头的语句都是预处理命令行; B.C程序在执行过程中对预处理命令进行处理 .C程序在执行过程中对预处理命令进行处理 .C C.以下是正确的宏定义 C.以下是正确的宏定义 #define IBM_PC

例题:以下有关宏替换的叙述不正确的是例题:以下有关宏替换的叙述不正确的是 A.宏替换不占用运行时间宏替换不占用运行时间; A.宏替换不占用运行时间; B.宏名无类型宏名无类型; B.宏名无类型; C.宏替换只是字符替换宏替换只是字符替换; C.宏替换只是字符替换; D.宏名必须有大写字母表示 D.宏名必须有大写字母表示

带参数的宏命令 C语言允许宏带有参数。在宏定义中的参数称为形式参语言允许宏带有参数。在宏调用中的参数称为实际参数。对带参数的宏,数,在宏调用中的参数称为实际参数。对带参数的宏,在调用中,不仅要宏展开,而且要用实参代替形参。在调用中,不仅要宏展开,而且要用实参代替形参。带参宏定义的一般形式为:带参宏定义的一般形式为:宏名(形参表) #define 宏名(形参表) 字符串带参宏调用的一般形式:带参宏调用的一般形式:宏名(实参表) 宏名(实参表);

带参数的宏命令

带参的宏定义的几点说明:带参的宏定义的几点说明: 1.带参宏定义中,宏名和形参表之间不能有空格出现; 1.带参宏定义中,宏名和形参表之间不能有空格出现;带参宏定义中 2.带参宏定义中,形参不分配存储单元, 2.带参宏定义中,形参不分配存储单元,因此不必作类型带参宏定义中定义;定义; 3.在宏定义中的形参是标识符, 3.在宏定义中的形参是标识符,而宏调用中的实参可以在宏定义中的形参是标识符是表达式;是表达式;例题:2007年秋填空题年秋填空题5 例题:2007年秋填空题5

1.C语言的基本概念 1.C语言的基本概念

(2)基本算术类型数据的表示及使用。 (2)基本算术类型数据的表示及使用。基本算术类型数据的表示及使用③基本类型变量的命名,声明,初始化及使用;基本类型变量的命名,声明,初始化及使用;基本类型变量的命名:基本类型变量的命名:在C语言中,标识符必须以字符语言中,或下划线开头的由字母,数字和下划线组成的序列;或下划线开头的由字母,数字和下划线组成的序列;例题:2007年秋选择题年秋选择题22 例题:2007年秋选择题22 基本类型变量的声明:变量名;基本类型变量的声明:数据类型变量名;C语言对变量的要求:“先定义,后使用”,变量说明语言对变量的要求:先定义,后使用”

必须放在变量使用之前,一般放在函数体的开头部分。必须放在变量使用之前,一般放在函数体的开头部分。

1.C语言的基本概念 1.C语言的基本概念

(2)基本算术类型数据的表示及使用。 (2)基本算术类型数据的表示及使用。基本算术类型数据的表示及使用④使用函数返回值作为操作数。使用函数返回值作为操作数。例如:以下程序的输出结果。例如:以下程序的输出结果。 int fun( int a , int b ) { return( a + b ) ; } main( ) { int x = 2 , y = 5 , z = 8 , r; printf("%d\ printf("%d\n",fun(fun(x,y),z)); }

1.C语言的基本概念 1.C语言的基本概念

(3)运算符和表达式的表示及使用。 (3)运算符和表达式的表示及使用。运算符和表达式的表示及使用表达式的一般组成;①表达式的一般组成;②运算符功能、表达式的组成及表达式的值:赋值运算运算符功能、表达式的组成及表达式的值:符与赋值表达式、赋值运算符的左值要求;符与赋值表达式、赋值运算符的左值要求;赋值运算符: '=' 赋值运算符: 注意: 注意:在赋值运算符的左侧只能出现变量赋值运算符具有强制类型转换作用例题:若变量均已正确定义并赋值,下列合法的C 例题:若变量均已正确定义并赋值,下列合法的C语言赋值语句是值语句是 A.x=y==5 B.x=n%2.5 C. x+n=i D.x=5=4+1

1.C语言的基本概念 1.C语言的基本概念

(3)运算符和表达式的表示及使用。 (3)运算符和表达式的表示及使用。运算符和表达式的表示及使用复合赋值运算* 复合赋值运算*= , += , -=…. . 例题:2005年秋选择题年秋选择题22 例题:2005年秋选择题22

例题: int型变量则执行以下语句后,型变量,例题:若x为int型变量,则执行以下语句后,x的值为。。 x = 5; +=x x+=x-=x*x;

1.C语言的基本概念 1.C语言的基本概念

(3)运算符和表达式的表示及使用。 (3)运算符和表达式的表示及使用。运算符和表达式的表示及使用②运算符功能、表达式的组成及表达式的值:算术运算运算符功能、表达式的组成及表达式的值:符与算术表达式,++,--运算符的左值要求;符与算术表达式,++,--运算符的左值要求; --运算符的左值要求算术运算符有:+,算术运算符有:+,-,*,/,% :+, 这些运算符需要两个运算对象,称双目运算符. 这些运算符需要两个运算对象,称双目运算符.除取余 (%)运算外这些运算符的运算对象可以是整型, 运算外, (%)运算外,这些运算符的运算对象可以是整型,也可以是实型。实型。取余运算的运算对象只能是整型. 取余运算的运算对象只能是整型.取余运算的结果是两数相除之后所得的余数。数相除之后所得的余数。例题:2006年春选择题年春选择题26 例题:2006年春选择题26

1.C语言的基本概念 1.C语言的基本概念

(3)运算符和表达式的表示及使用。 (3)运算符和表达式的表示及使用。运算符和表达式的表示及使用②运算符功能、表达式的组成及表达式的值:算术运算运算符功能、表达式的组成及表达式的值:符与算术表达式,++,--运算符的左值要求;符与算术表达式,++,--运算符的左值要求; --运算符的左值要求不同类型数据间的转换与运算 double←float ↑long 例题:2006年秋填空题年秋填空题2 例题:2006年秋填空题2 ↑ unsigned ↑ int ←char,short

1.C语言的基本概念 1.C语言的基本概念

(3)运算符和表达式的表示及使用。 (3)运算符和表达式的表示及使用。运算符和表达式的表示及使用②运算符功能、表达式的组成及表达式的值:算术运算运算符功能、表达式的组成及表达式的值:符与算术表达式,++,--运算符的左值要求;符与算术表达式,++,--运算符的左值要求; --运算符的左值要求注意:强制类型转换的用法注意:类型名) (类

型名)变量例如: 例如: ( int ) x + y 等价于 ((int)x)+y; ((int)x)+y;

例题:若有声明” ;”, 例题:若有声明”int a = 5 , b = 2 ; ,则表达 b+=(float)(a+b)/2”运算后的值为运算后b ( 2007秋式”b+=(float)(a+b)/2 运算后b的值为(江2007秋填空1 填空1)

1.C语言的基本概念 1.C语言的基本概念

(3)运算符和表达式的表示及使用。 (3)运算符和表达式的表示及使用。运算符和表达式的表示及使用

②运算符功能、表达式的组成及表达式的值:算术运算符与算术运算符功能、表达式的组成及表达式的值:表达式,++,--运算符的左值要求; --运算符的左值要求表达式,++,--运算符的左值要求;自增,自减运算符即++,--(运算符是右结合性,运算级别是2) 自增,自减运算符即++,--(运算符是右结合性,运算级别是2) ++,-注意:注意:a++ 与 ++a 的区别

先取值后++ 先取值后++

先++后取值 ++后取值

1.C语言的基本概念 1.C语言的基本概念

(3)运算符和表达式的表示及使用。 (3)运算符和表达式的表示及使用。运算符和表达式的表示及使用

②运算符功能、表达式的组成及表达式的值:算术运算符与算术运算符功能、表达式的组成及表达式的值:表达式,++,--运算符的左值要求; --运算符的左值要求表达式,++,--运算符的左值要求;

例题:有下列程序:例题:有下列程序: #include main() { int x=1 , y=2 , z=3 ; if(x>y) printf(“%d %d”,++z); if(y

1.C语言的基本概念 1.C语言的基本概念

(3)运算符和表达式的表示及使用。 (3)运算符和表达式的表示及使用。运算符和表达式的表示及使用②运算符功能、表达式的组成及表达式的值:关系运算运算符功能、表达式的组成及表达式的值:符与关系表达式;符与关系表达式;关系运算符:关系运算符:< , <= , > ,>= (运算级别是6) (运算级别是6) 运算级别是==,!= (运算级别是运算级别是7) ==,!= (运算级别是7) 注意:注意:等于零和不等于零的表示方法

a a!=0 !a

a

a==0

,!a

两个实数判断相等和判断不相等的方法(在多分支if 两个实数判断相等和判断不相等的方法(在多分支if 语句中的作用)语句中的作用)

例题:若有表达式(w)?( --x ):(++y),则其中与w等价例题:若有表达式(w)?( --x ):(++y)则其中与w :(++y 的表达式是的表达式是 C.w!=1 A.w==1 B.w==0 D.w!=0 例题:2007年春选择题年春选择题24 例题:江2007年春选择题24 以下表示数学式”a=b)&&!(b>=c) D.!(a>=b||b>=c)

1.C语言的基本概念 1.C语言的基本概念

(3)运算符和表达式的表示及使用。 (3)运算符和表达式的表示及使用。运算符和表达式的表示及使用②运算符功能、表达式的组成及表达式的值:逻辑运算运算符功能、表达式的组成及表达式的值:符与逻辑表达式,含有&& ||运算符的表达式的操作数求 &&、符

与逻辑表达式,含有&&、||运算符的表达式的操作数求值顺序与优化处理理;值顺序与优化处理理;逻辑运算符:运算级别是2) &&,||( 2),逻辑运算符:!(运算级别是2),&&,||(运算优先级是 11,12) 11,12)注意:注意:a&&b&&c 和 a||b||c

1.C语言的基本概念 1.C语言的基本概念

(3)运算符和表达式的表示及使用。 (3)运算符和表达式的表示及使用。运算符和表达式的表示及使用在一个&&表达式中, &&的一端为 &&表达式中的一端为0 在一个&&表达式中,若&&的一端为0,则不必再计算另一端,该表达式的值肯定为0 一端,该表达式的值肯定为0。在一||表达式中, ||的一端为的一端为1 在一||表达式中,若||的一端为1,则不必再计算另一 ||表达式中该表达式的值肯定为1 端,该表达式的值肯定为1。

例题:执行下列程序段后,的值为( 例题:执行下列程序段后,w的值为( ) w=‘A int w= A’, x = 14,y=15; w=((x||y)&&(w<‘a )); w=((x||y)&&(w< a’)); A.A.-1 B.NULL C.1 D.0

例题:例题:有以下程序 main() { int i = 1 , j =2 , k = 3 ; if( i++ == 1 && ( ++j == 3)|| k++ == 3 ) printf(“%d %d %d\n“ , i , j , k); printf( % %d\ 运行之后的结果是。 }运行之后的结果是。

例题: x,y,z和均为int型变量,执行以下语句后, int型变量例题:设x,y,z和t 均为int型变量,执行以下语句后,t 的值为。的值为。 x=y=z=0; t=++x||y++&&++z;

例题:下列只有当整数x为偶数,才是逻辑“真”的表达例题:下列只有当整数x为偶数,才是逻辑“式 A.x%2!=0 B.!(x%2==0) C.(xC.(x-x/2*2)==0 D.if(x%2)

1.C语言的基本概念 1.C语言的基本概念

(3)运算符和表达式的表示及使用。 (3)运算符和表达式的表示及使用。运算符和表达式的表示及使用②运算符功能、表达式的组成及表达式的值:逗号运算运算符功能、表达式的组成及表达式的值:符与逗号表达式,逗号表达式的操作数求值顺序;符与逗号表达式,逗号表达式的操作数求值顺序;

逗号表达式一般形式为:逗号表达式一般形式为:表达式1 表达式2 表达式3 ……,表达式表达式n 表达式1,表达式2,表达式3,……,表达式n 整个逗号表达式的值是表达式的值。表达式n 整个逗号表达式的值是表达式n的值。

1.C语言的基本概念 1.C语言的基本概念

(3)运算符和表达式的表示及使用。 (3)运算符和表达式的表示及使用。运算符和表达式的表示及使用在所有运算中,逗号表达式的优先级最低:在所有运算中,逗号表达式的优先级最低:逗号表达式一般形式中的表达式1和表达式2 逗号表达式一般形式中的表达式1和表达式2也可以是另一逗号表达式

并不是在所有出现逗号的地方都组成逗号表达式,并不是在所有出现逗号的地方都组成逗号表达式,如在变量说明中,在变量说明中,函数参数表中逗号只是用作各变量之间的间隔符。的间隔符。

例题:有如下程序:例题:有如下程序: #include main() { int a = 5 , b = -3 , c =4 ; printf("%d%d\ printf("%d%d\n" , (a++ , ++b) , c -2 ); } 运行该程序的输出结果是。运行该程序的输出结果是。

例题:已知字符A ASCII码值为65,码值为65 例题:已知字符A的ASCII码值为65,以下程序结果为:: #include main() { int b = 20 ; char a = 'A'; printf("%d,%o\ 'a'printf("%d,%o\n",(a=a+1,a+b,b), a+ 'a'-'A',b ); }

1.C语言的基本概念 1.C语言的基本概念

(3)运算符和表达式的表示及使用。 (3)运算符和表达式的表示及使用。运算符和表达式的表示及使用②运算符功能、表达式的组成及表达式的值:条件运算运算符功能、表达

式的组成及表达式的值:符与条件表达式;符与条件表达式;条件运算(右结合性) 条件运算(右结合性) e1 ? e2 : e3

e2的值若e1为真(非0),则此条件表达式的值为e2的值;若e1 e1为真( 0),则此条件表达式的值为e2的值;为真为假(0),则表达式取e3的值。 (0),则表达式取e3的值为假(0),则表达式取e3的值。例题:例题:a>b ?x : y?m:n 条件运算(右结合性) 条件运算(右结合性)

例题: 2006年秋选择题年秋选择题22 例题:江2006年秋选择题22 若已有声明” ;”,若已有声明”int x = 4 , y = 3 ; ,则表达式 x

D.5

1.C语言的基本概念 1.C语言的基本概念

(3)运算符和表达式的表示及使用。 (3)运算符和表达式的表示及使用。运算符和表达式的表示及使用②运算符功能、表达式的组成及表达式的值:位运算符运算符功能、表达式的组成及表达式的值:与位运算表达式;与位运算表达式;位运算符: 按位取反) &(按位与)位运算符: ~(按位取反) &(按位与) ^ (按位异或) (按位异或) |(按位或) |(按位或)按位异或 <<(左移将一个数的二进制全部左移若干位) 左移, <<(左移,将一个数的二进制全部左移若干位) >>(右移将一个数的二进制全部右移若干位) 右移, >>(右移,将一个数的二进制全部右移若干位)

1.C语言的基本概念 1.C语言的基本概念

(3)运算符和表达式的表示及使用。 (3)运算符和表达式的表示及使用。运算符和表达式的表示及使用例题:下列程序的输出结果是例题:下列程序的输出结果是 main() { char

a = 3 ,

b = 6 ,

c = a^b<<2; printf("\ printf("\n%d" ,c); }

2.基本语句 2.基本语句

(1)实现顺序结构的语句:表达式语句( (1)实现顺序结构的语句:表达式语句(包括函数调用语实现顺序结构的语句空语句、复合语句;标准设备输入输出函数:句)、空语句、复合语句;标准设备输入输出函数: printf()、scanf()、getchar()、putchar()、gets()、printf()、scanf()、getchar()、putchar()、gets()、 puts()。 puts()。注意: 注意: getchar()是无参函数从输入设备读取一个字符,是无参函数,(a)getchar()是无参函数,从输入设备读取一个字符,包括不可显示字符。包括不可显示字符。 gets()和puts()函数只有一个参数函数只有一个参数,(b)gets()和puts()函数只有一个参数,且为字符串的首地址。首地址。

printf()函数中的实参的求值顺序从右向左。函数中的实参的求值顺序从右向左(c)printf()函数中的实参的求值顺序从右向左。在格式控制串中,在格式控制串中,格式说明与输出项从左到右在类型上必须一一对应匹配;上必须一一对应匹配;在格式控制串中,格式说明与输出项个数相同。在格式控制串中,格式说明与输出项个数相同。如果格式说明的个数少于输出项的个数,多余的项将不予输出。格式说明的个数少于输出项的个数,多余的项将不予输出。反之,多余的格式将输出不定值(反之,多余的格式将输出不定值(或0值);如果想输出百分号“如果想输出百分号“%”,则在格式控制串中用两个连续的百分号”%%”来表示来表示;连续的百分号”%% 来表示; printf函数的返回值为本次调用输出字符的个数。 printf函数的返回值为本次调用输出字符的个数。函数的返回值为本次调用输出字符的个数

scanf()函数的格式控制符中的普通字符照原样输(d) scanf()函数的格式控制符中的普通字符照原样输入。 scanf()中非格式字符是作为输入数据时的间隔中非格式字符是作为输入数据时的间隔,在scanf()中非格式字符是作为输入数据时的间隔,输入时必须原

样地输入。而格式字符对应的数据,输入时必须原样地输入。而格式字符对应的数据,输入时必须按照规定的格式输入;必须按照规定的格式输入;在所有数据输入后,可用一个回车符结束输入;在所有数据输入后,可用一个回车符结束输入; %c作为输入字符是仅接受单个字符作为输入字符是仅接受单个字符。用%c作为输入字符是仅接受单个字符。从键盘输入单个字符后应该跟回车键作为输入数据的结束,个字符后应该跟回车键作为输入数据的结束,此时回车作为一个字符存放在缓冲区中,如再有%c作为输入字符时, %c作为输入字符时为一个字符存放在缓冲区中,如再有%c作为输入字符时,将不再从键盘读入数据,将不再从键盘读入数据,而是从缓冲区读入还未读完的数据。 2006年秋选择题23、28,2007年春填空题年春填空题4 2006年秋选择题23、28,2007年春填空题4 年秋选择题23 例题: 2006年秋选择题年秋选择题23 例题: 2006年秋选择题23 23.若有声明若有声明” a[50];”,为使i 23.若有声明”int i ; float x ;char a[50]; ,为使i得到值为1,x得到值为3.1416 1,x得到值为3.1416,得到值yz, yz,当执行语句到值为1,x得到值为3.1416,a得到值yz,当执行语句 scanf(“%3d%f%2s %3d%f%2s” )”时“scanf( %3d%f%2s , &i, &x ,a ) 时,正确的输入形式是. 式是. A.1,3.1416,yz B.13.1416yz C.001 3.1416 yz D.i=001,x=3.1416,a=yz 例题:若在定义语句: c,*p=&c;之后之后,例题:若在定义语句:int a, b, c,*p=&c;之后,接着执行下列选项中的语句,则能正确执行的语句是. 行下列选项中的语句,则能正确执行的语句是. A.scanf(“%d %d”,a,b,c);

B.scanf(“%d%d%d %d%d%d”,a,b,c); A.scanf( %d ,a,b,c); B.scanf( %d%d%d ,a,b,c);

C.scanf(“%d %d”,p);

D.scanf(“%d %d”,&p); C.scanf( %d ,p); D.scanf( %d ,&p);

例题: 2006年秋选择题年秋选择题28 例题: 2006年秋选择题28 28.设有变量声明设有变量声明” c;”, 28.设有变量声明”char c; ,执行 for(;c=(getchar()!=‘\ );) printf(“%c ,c)”时 %c”,c) for(;c=(getchar()!= \n’);) printf( %c ,c) 时,从键盘输入”之后,盘输入”ABCDEFG ↙”之后,输出的结果是之后。。 A.ABCDEFG B.AABBCCDDEEFFGG C.非字母数字字符 D.语句不能执行 C.非字母数字字符 D.语句不能执行例题:若要求从键盘读入含有空格字符的字符串,例题:若要求从键盘读入含有空格字符的字符串,应使用函数(0604 (0604国函数(0604国) A.getc() B.gets() C.getchar() D.scanf()

例题:2007年春填空题年春填空题4 例题:2007年春填空题4 4.已知程序中有声明已知程序中有声明” ;”, 4.已知程序中有声明”int a ; long b ; ,若需要接受从键盘输入的电话号码字符串(010)64782656 其中010 (010)64782656( 010是从键盘输入的电话号码字符串(010)64782656(其中010是区号,64782656是电话号码),并将其中的区号是电话号码),并将其中的区号,区号,64782656是电话号码),并将其中的区号,电话号码分别存放到变量a,b a,b中码分别存放到变量a,b中,则实现该功能的输入语句应为scanf(“” &a,&b)”“scanf( , &a,&b)

2.基本语句 2.基本语句

(2)实现选择结构的语句:if else 语句、switch语 else…语句 (2)实现选择结构的语句:if…else 语句、switch语实现选择结构的语句句和break语句。 break语句句和break语句。 if语句一般格式 if语句一般格式 if(表达式) if(表达式)或注意:注意: (a)“表达式” (a) 表达式”应有括号且为各类型的表达式表达式 (b)“语句” (b) 语句”如果是复合语句应有括号语句 if(表达式) if(表达式)语句语句1 语句1 else 语句2 语句2

2005年秋选择题26 2005年秋选择题26 年秋选择题 26.下列程序段中能将变量x,y 中值较大的数保存到变量a, 下列程序段中, x,y中值较大的数保存到变量 26.下列程序段中,能将变量x,y中值较大的数保存到变量a, 值较小的数保存在变量b的程序段是。值

较小的数保存在变量b的程序段是。 A.if(x>y)a=x;b=y;else a=y;b=x;

B.if(x>y){ a=x ;b=y;}else a=y;b=x;

C.if(x>y){ a=x;b=y;}else{ a=y;b=x;}

D.if(x>y){ a=x;b=y;}else ( xy&&y!=0);

C.if(x>0)x-C.if(x>0)x-

D.if(y<0){;} else y++; else x++;

题型:题型: (a)数学分段函数的求值问题 (a)数学分段函数的求值问题 (b)繁琐的二维数组求值填空问题(结合循环语句,必考) (b)繁琐的二维数组求值填空问题(结合循环语句,必考) 繁琐的二维数组求值填空问题

例题:2007年秋填空题8 例题:2007年秋填空题8 年秋填空题 8.以下程序运行时输出结果是以下程序运行时输出结果是 8.以下程序运行时输出结果是 #include void f(long x ) { if( x <100 ) printf( “%d , x/10 ) ; %d” %d else { f(x/100); printf(“%d %d”printf( %d , x%100/10); } } main() { f(123456); }

2.基本语句 2.基本语句

(2)实现选择结构的语句:if else 语句、switch语 else…语句 (2)实现选择结构的语句:if…else 语句、switch语实现选择结构的语句句和break语句。 break语句句和break语句。

switch(表达式) switch(表达式) { 常量表达式1 case 常量表达式1:常量表达式2 case 常量表达式2:………常量表达式n case 常量表达式n: default: } 注意:注意:

语句1 语句1 ; break; 语句2 语句2 ; break; 语句n 语句n ; break; 语句n+1; 语句n+1;

(a)在case后的各常量表达式的值不能相同, (a)在case后的各常量表达式的值不能相同,否则会后的各常量表达式的值不能相同出现错误 (b)各case和default子句的先后顺序可以变动子句的先后顺序可以变动, (b)各case和default子句的先后顺序可以变动,而不会影响程序执行结果。不会影响程序执行结果。

2.基本语句 2.基本语句

(2)实现选择结构的语句:if else 语句、switch语 else…语句 (2)实现选择结构的语句:if…else 语句、switch语实现选择结构的语句句和break语句。 break语句句和break语句。

注意:注意: (c)多个case可以共用一组执行语句 (c)多个case可以共用一组执行语句多个case (d)“语句”为多条时,可以不必加大括号 (d) 语句”为多条时,语句(f)default语句可缺省 (f)default语句可缺省例题:2007年春填空题9 例题:2007年春填空题9 年春填空题

例题:2007年春填空题9 例题:2007年春填空题9 年春填空题 9.以下程序运行后输出结果的第一行为,第二行为以下程序运行后输出结果的第一行为,第二行为 9.以下程序运行后输出结果的第一行为,第二行为 #include void main() { int i = 5 ; do{ switch( i % 2 ) { :i; case 0 :i--; break; case 1:i--;continue; 1: --;continue; } ;printf(“%d i—;printf( %d\n”,i); ;printf( %d\ ,i); }while(i>0); }

例题:例题:main() { int a=2,b=7,c=5; switch(a>) { case 1:switch(b<0) printf(“@ );break; {case 1: printf( @”);break; printf(“! );break;} case 2: printf( !”);break;} case 0:switch(c==5) printf(“* );break; {case 0: printf( *”);break; printf(“# );break; case 1: printf( #”);break; printf(“$ );break;} case 2: printf( $”);break;} default:printf(“& ); default:printf( &”); } 运行结

果是 }运行结果是

2.基本语句 2.基本语句

(3)实现循环结构的语句:while语句、do while语句、 while语句 (3)实现循环结构的语句:while语句、do…while语句、实现循环结构的语句:while语句 for语句等语句等。for语句等。

当型循环语句一般格式:当型循环语句一般格式: while(表达式) while(表达式)表达式应有( 注意: (a)表达式应有注意: (a)表达式应有( ) 语句

(b)“语句”(b) 语句”为复合语句时应加大括号语句(c)“语句”中含有break,continue语句时的情况 (c) 语句”中含有break,continue语句时的情况语句break,continue break:终止本层循环;在多层循环中,一个break语句只向外跳一 break:终止本层循环;在多层循环中,一个break语句只向外跳一终止本层循环 break 层,即中止一层循环 continue:终止本次循环的执行,进入下一次循环。 continue:终止本次循环的执行,进入下一次循环。

例题:均为int型变量则执行下面的循环后, int型变量则执行下面的循环后例题:设x和y均为int型变量则执行下面的循环后,y的值。为。 y=1,x=1; while( y <= 10 ) { if( x >= 10 ) break; if( x %2 == 1 ) { x+= 3 ; continue ;} x+=2; y++ ; } A.3 B.4 C.5 D.6

例题:下列叙述中正确的是例题:下列叙述中正确的是 A.break语句只能用于swith 语句体中语句只能用于swith A.break语句只能用于swith语句体中 B.continue语句的作用是使程序的执行流程跳出包含它的 B.continue语句的作用是使程序的执行流程跳出包含它的所有循环 C.break语句只能用于循环体内和swith语句体内语句只能用于循环体内和swith C.break语句只能用于循环体内和swith语句体内 D.在循环内使用break语句和continue语句的作用相同在循环内使用break语句和continue D.在循环内使用break语句和continue语句的作用相同

2.基本语句 2.基本语句

(3)实现循环结构的语句:while语句、do while语句、 while语句 (3)实现循环结构的语句:while语句、do…while语句、实现循环结构的语句:while语句 for语句语句。 for 语句。

直到型循环语句一般格式:直到型循环语句一般格式: while(表达式) do 语句 while (表达式);注意:(a)无论表达式是否成立,循环体至少执行一次;注意:(a)无论表达式是否成立,循环体至少执行一次;无论表达式是否成立 (b)格式中表达式有( ),且后面的”不能丢不能丢; (b)格式中表达式有( ),且后面的”;”不能丢;格式中表达式有 (c)在语句中应有使”表达式”趋于不成立的语句存在; (c)在语句中应有使”表达式”趋于不成立的语句存在;在语句中应有使例题:2007年秋填空题6 例题:2007年秋填空题6 年秋填空题

例题:2007年秋填空题年秋填空题6 例题:2007年秋填空题6 6.以下程序运行的结果是以下程序运行的结果是. 6.以下程序运行的结果是. #include main( ) { int s = 1,n =235; do { s*=n%10; n/=10; }while(n); printf(“%d %d\ ,s); printf( %d\n”,s); } for型循环语句一般格式: for型循环语句一般格式:型循环语句一般格式表达式1 表达式2 表达式3) for( 表达式1;表达式2;表达式3) 语句;语句; for循环结构的执行过程如下: for循环结构的执行过程如下:循环结构的执行过程如下 1.求解表达式1; 1.求解表达式1 求解表达式 2.求解表达式2 若其值为“ 2.求解表达式2,若其值为“真”,则执行for语句中的循环体,然求解表达式则执行for语句中的循环体, for语句中的循环体后执行下面的执行第(3) (3)步若为假(值为0 则结束循环转到第(5) 后执行下面的

执行第(3)步。若为假(值为0)则结束循环转到第(5) 步; 3.求解表达式3 3.求解表达式3;求解表达式 4.转回上面第(2)步继续执行; 4.转回上面第(2)步继续执行;转回上面第(2)步继续执行 5.执行for语句下面的一个语句; 5.执行for语句下面的一个语句;执行for语句下面的一个语句

2.基本语句 2.基本语句

(3)实现循环结构的语句:while语句、do while语句、 while语句 (3)实现循环结构的语句:while语句、do…while语句、实现循环结构的语句:while语句 for语句语句。 for 语句。

注意: 注意: (a)繁琐的二维数组填值问题 (a)繁琐的二维数组填值问题 (b)三种循环语句可以互相嵌套 (b)三种循环语句可以互相嵌套

例题:2007年秋选择题25,年秋选择题25 例题:2007年秋选择题25, 25.若在一个语言源程序中”e1”和 e3”是表达式若在一个C 是表达式, 25.若在一个C语言源程序中”e1 和”e3 是表达式, s;”是语句则下列选项中与语句”是语句, )s;”“s; 是语句,则下列选项中与语句”for(e1;;e3 )s; 功能等同的语句是: 功能等同的语句是: A.e1;while(10)s;e3; B.e1;while(10){s;e3;} C.e1;while(10){e3;s;} D.while(10){e1;s;e3;} 例题:2007年春选择题26,年春选择题26 例题:2007年春选择题26, 26.下列关于循环语句for,while,do_while的叙述中正确下列关于循环语句for,while,do_while 26.下列关于循环语句for,while,do_while的叙述中正确的是的是 A.三种循环语句的循环体都必须放入一对花括号中 A.三种循环语句的循环体都必须放入一对花括号中 B.三种循环语句中都可以缺省循环中止条件表达式 B.三种循环语句中都可以缺省循环中止条件表达式 C.三种循环语句的循环都至少被无条件地执行一次 C.三种循环语句的循环都至少被无条件地执行一次 D.三种循环语句都可能出现无穷循环 D.三种循环语句都可能出现无穷循环

例题: 2006年秋选择题年秋选择题24 例题: 2006年秋选择题24 24.程序段程序段”printf(“%d %d” x-24.程序段”int x = 3 ;do { printf( %d , x-);}while(!x);”执行结果是执行结果是. );}while(!x); 执行结果是. D.死循环 A. 3 2 1 B.2 C.3 D.死循环 2.基本语句 2.基本语句

(4)其他语句:break、continue、return。 (4)其他语句:break、continue、return。其他语句:break

break语句,用于循环,switch语句; break语句,用于循环,switch语句;语句语句 continue语句,用于循环语句; continue语句,用于循环语句;语句 return语句,用于函数返回值; return语句,用于函数返回值;语句

例题:下列叙述中错误的是例题:下列叙述中错误的是 A.用户定义的函数中可以没有return语句用户定义的函数中可以没有return A.用户定义的函数中可以没有return语句B.用户定义的函数可以有多个return语句用户定义的函数可以有多个return语句, B.用户定义的函数可以有多个return语句,以便可以调用一次返回多个函数值 C.用户定义的函数中若没有return语句用户定义的函数中若没有return语句, C.用户定义的函数中若没有return语句,则应当定义函数为void D.函数的return语句中可以没有表达式函数的return D.函数的return语句中可以没有表达式

3.构造类型数据 3.构造类型数据

(1)基本类型数组(一维、二维) (1)基本类型数组(一维、二维)。基本类型数组

一维数组定义:定义:类型名数组名[常量表达式] 数组名[常量表达式] 数组名[常量表达式] 数组名[常量表达式]={表达式列表};表达式列表} 数组名[ ]=表达式列表} 数组名[ ]={表达式列表};

定义并初始化:类型名定义并初始化:或类型名

引用:引用:只能引用下标变量注意: 注意: (a)不能定义动态数组。 (a)不能定义动态数组。如:int n ; int a[n]; 错误不能定义动态数组 (b)只能在定义数组时初始化,(b)只能在定义数组时初始化,以后不可以对数组整体赋值只能在定义数组时初始化除字符数组外) (除字符数组外)。

(1)基本类型数组(一维、二维) (1)基本类型数组(一维、二维)。基本类型数组

一维数组 int a[5]={1,2,3,4,5}; int a[5]; 注意: 注意: (c)除了字符数组外,不可整体引用数组; (c)除了字符数组外,不可整体引用数组;除了字符数组外 (d)一维数组一般用一层循环扫描所有数组元素 (d)一维数组一般用一层循环扫描所有数组元素 (e)一维数组在内存中存储是连续的 (e)一维数组在内存中存储是连续的例题:2007年秋填空题2 例题:2007年秋填空题2,年秋填空题 2007年秋填空题年秋填空题9 2007年秋填空题9, 2006年秋选择题年秋选择题24 2006年秋选择题24 正确错误

a[5]={1,2,3,4,5};

例题:2007年秋填空题2 例题:2007年秋填空题2 年秋填空题 2.如有声明如有声明”remind”; , 2.如有声明”char s[10] = “remind ;”,执行 remind );“puts( s + 2 );”后的输出结果是 ; 例题:2006年秋选择题25 例题:2006年秋选择题25 年秋选择题 25.若有字符数组若有字符数组A 的声明” 25.若有字符数组A和B的声明”static char A[] ABCDEF”,B[]={‘A , B , C , D , E , F }; };”, = “ABCDEF ,B[]={ A’,’B’,’C’,’D’,’E’,’F’}; ,则数 ABCDEF 和数组B的长度分别是组A和数组B的长度分别是 A.7,6 B.6,7 C.3 D. 死循环

例题: 2007年秋填空题年秋填空题9 例题: 2007年秋填空题9, 9.以下程序运行时输出结果的第一行是;第二行是。以下程序运行时输出结果的第一行是;第二行是 9.以下程序运行时输出结果的第一行是;第二行是。 #include int fun( int *x , int n ){ int i , j ; for( i=j=0;i

例题:当运行下列程序时,输入abcd, abcd,程序的输出结果是例题:当运行下列程序时,输入abcd,程序的输出结果是 (0604国填国填9) (0604国填9) insert( char str[ ] ) { int i; i=strlen(str); while(i>0) str[i];str[2*i-1]=‘* ;i--;} ;i-{ str[ 2*i] = str[i];str[2*i-1]= *’;i--;} printf(“%s %s\ ,str); printf( %s\n”,str); } main() { char str[40]; scanf(“%s %s\ ,str); scanf( %s\n”,str); insert(str); }

3.构造类型数据 3.构造类型数据

(1)基本类型数组(一维、二维) (1)基本类型数组(一维、二维)。基本类型数组

二维数组定义:定义:类型名定义并初始化:定义并初始化:类型名数组名[常量表达式1][常量表达式2]=表达式列表} 数组名[常量表达式1][常量表达式2]={表达式列表}; 1][常量表达式2] 数组名[常量表达式1][常量表达式2] 数组名[常量表达式1][常量表达式2] 1][常量表达式

引用:引用:只能引用下标变量注意: 不能定义动态数组。注意: 不能定义动态数组。如:int m, n ; int a[m][n]; 错误

3.构造类型数据 3.构造类型数据

(1)基本类型数组(一维、二维) (1)基本类型数组(一维、二维)。基本类型数组

二维数组注意: (a).只能在定义数组时初始化以后不可以对数组整体赋值。只能在定义数组时初始化,注意: (a).只能在定义数组时初始化,以后不可以对数组整体赋值。 int

a[2][3]={1,2,3,4,5 , 6}; int a[2][3]; a[2][3]={1,2,3,4,5,6}; 正确错误

(b).不可整体引用数组; (b).不可整体引用数组;不可整体引用数组 (c).二维数组一般用双层循环扫描所有数组元素, (c).二维数组一般用双层循环扫描所有数组元素,以及其他二维数组一般用双层循环扫描所有数组元素运算。运算。 (d).二维数组在内存中连续存储,数组名是0 (d).二维数组在内存中连续存储,数组名是0行0列数组元素二维数组在内存中连续存储的地址,a[i]是第行第0列元素的地址。是第i 的地址,a[i]是第i 行第0列元素的地址。

3.构造类型数据 3.构造类型数据

(1)基本类型数组(一维、二维) (1)基本类型数组(一维、二维)。基本类型数组

例题:下列数组定义中错误的是(0604国例题:下列数组定义中错误的是(0604国) (0604 A.int x[][3]={0}; B.int x[2][3]={{1,2},{3,4},{5,6}}; C.int x[][3]={{1,2,3},{4,5,6}}; D.int x[2][3]={1,2,3,4,5,6}; 例题:若有声明”a[3][4],*p=a[0],(*q)[4]=a;”, 例题:若有声明”int a[3][4],*p=a[0],(*q)[4]=a; ,则下列叙述中错误的是(07秋江选26) (07秋江选中错误的是(07秋江选26) A.a[2][3]与q[2][3]等价 a[2][3]与p[2][3]等价 A.a[2][3]与q[2][3]等价 B. a[2][3]与p[2][3]等价C.a[2][3]与 p+11) D.a[2][3]与p=p+11,*p等价 C.a[2][3]与*(p+11)等价 D.a[2][3]与p=p+11,*p等价

例如:有下列程序(0809国选35) 例如:有下列程序(0809国选35) (0809国选 #include #define N 4 void fun( int a[][N], int b[]) { int i ; for(i=0;i

i;

例题:2007年春填空题11 例题:2007年春填空题11 年春填空题以下程序运行后输出结果第一行第二行,第三行, ,第三行以下程序运行后输出结果第一行,第二行,第三行#include "stdio.h" #define N 3 main() { int a[N][N],b[N*N]={1,1},i,j; b[iifor(i=2;i

二维数组: 二维数组:

(e).二维数组的第一维方括号的常量表达式可以省 (e).二维数组的第一维方括号的常量表达式可以省此时第一维大小按以下规则决定:略,此时第一维大小按以下规则决定:当初值的个数能被二维的常量表达式的值除尽时,当初值的个数能被二维的常量表达式的值除尽时,所得商数就是第一维的大小;得商数就是第一维的大小;当初值的个数不能被第二维的常量表达式的值除尽时,当初值的个数不能被第二维的常量表达式的值除尽时,则:初值个数/ 第一维的大小=初值个数/第二维常量表达式值+ 1 例如:例如: int c[][3]={ 1,2,3,4,5 }; 则数组c的第一维大小是多少?则数组c的第一维大小是多少?

3.构造类型数据 3.构造类型数据

(1)基本类型数组(一维、二维) (1)基本类型数组(一维、二维)。基本类型数组

字符数组(一维,二维) 有普通一维,字符数组(一维,二维):有普通一维,二维数组的性质特点: (a)可以初始化也可以使用strcpy( )赋值可以初始化,特点: (a)可以初始化,也可以使用strcpy( )赋值 {' char str[10] = {'a', 'b', 'c'}; {"abc" char str[10] = {"abc"}; str[10]; abc" char str[10];strcpy( str , "abc" ) (b)可以引用下标变量,也可以整体引用(一维数组) (b)可以引用下标变量,也可以整体引用(一维数组) 可以引用下

标变量 (c)一般用于存储字符串。 (c)一般用于存储字符串。一般用于存储字符串 (d)字符串的基本概念:内存单元地址, (d)字符串的基本概念:串结束符,内存单元地址,字符串字符串的基本概念通常用一个字符数组来存放一个字符串,字符串总是以‘存通常用一个字符数组来存放一个字符串,字符串总是以‘\0’存入数组。用字符串方式赋值比用字符逐个赋值也要多占一个字节,入数组。用字符串方式赋值比用字符逐个赋值也要多占一个字节,存放结束符。存放结束符。

3.构造类型数据 3.构造类型数据

(1)基本类型数组(一维、二维) (1)基本类型数组(一维、二维)。基本类型数组

字符数组(一维,二维) 有普通一维,字符数组(一维,二维):有普通一维,二维数组的性质特点: (e).字符串函数的使用特点: (e).字符串函数的使用函数的参数是地址,使用#include 函数的参数是地址,使用#include 地址字符串长度(strlen( …) ) 字符串长度(strlen( ) 字符串连接(strcat( 字符串连接(strcat(… ) ) (strcat( 字符串赋值(strcpy( …) ) 字符串赋值(strcpy( ) 字符串比较(strcmp( 字符串比较(strcmp(… ) ) (strcmp(

例题:例题:#include main( ) { char st[20]="hello\0abc\t\\"; st[20]="hello\0abc\ printf("%d, %d" , strlen(st),sizeof(st)); }

main( ) 例题:2007年秋填空题11 例题:2007年秋填空题11 年秋填空题 { #include char #include void fun( char str[][20],int n ) str[][20]={"PASCAL","BAS IC","FORTRAN","C","COBOL { ","Smalltalk"}; int i,j,k; int i; char s[20]; fun(str , 6); i=0;i

(f).字符串的输入输出函数( (f).字符串的输入输出函数( gets ,scanf 和 puts , printf) 字符串的输入输出函数如:char c[10]; gets(c)-遇回车符中止;scanf(“% ,c) ,c)gets(c)-遇回车符中止; scanf( %s“,c)-遇空格中止对于下列两段程序如输入数据为:对于下列两段程序如输入数据为:abcd1234 则输出结果分别为。则输出结果分别为。例题:例题: #include main( ) { char str[13]; scanf(“%s %s”,str); scanf( %s ,str); printf("%s",str); } efgh<回车> efgh<回车> 回车

例题:例题: #include main( ) { char str[13]; gets(str); puts(str); }

例题:2006年春选择题27 例题:2006年春选择题27 年春选择题 27.设有如下程序 27.设有如下程序#include main() { s[128]={'\ char s[128]={'\0'},*p = s ; while(strcmp(s,"END")) { gets(s); while(*p) putchar( *p++); } } A.所有输入的字符串都能被完整的输出 A.所有输入的字符串都能被完整的输出 B.所有输入的字符串都不能被完整输出 B.所有输入的字符串都不能被完整输出 C.只能完整输出第一个字符串 C.只能完整输出第一个字符串 D.只能完整输出最后一个字符串 D.只能完整输出最后一个字符串例题:有下列程序(0804国选35) 例题:有下列程序(0804国选35) (0804国选 #include void fun(char *a , char *b) { while(*a==‘a ) while(*a== a’) a++; while(*b=*a) {b++;a++;} } main() { *s=“*****a*b**** *****a*b****”,t[80]; char *s= *****a*b**** ,t[80]; fun( s , t ) ;puts(t); }程序运行结果是程序运行结果是A.*****a*b B.a*b C.a*b****

D.ab

例题:以下程序运行时输出结果是(08秋江填9 例题:以下程序运行时输出结果是(08秋江填9题) (08秋江填 #include #include void sf( char *s1,char *s2) { if( *s1 = *s2)

sf( s1 + 1 , s2 + 1 ); } void main() { ABC”, xyz” char a[20] = “ABC , b[20] = “xyz ; ABC xyz sf( a+strlen(a) , b ); puts(a); }

3.构造类型数据 3.构造类型数据

(1)基本类型数组(一维、二维) (1)基本类型数组(一维、二维)。基本类型数组

字符数组(一维,二维) 有普通一维,字符数组(一维,二维):有普通一维,二维数组的性质特点: 特点: (g).二维数组的引用: (g).二维数组的引用:下标引用法和数组名加第一维下标二维数组的引用

例题:下列程序按下面指定的数据给x数组的下三角置数,并按如例题:下列程序按下面指定的数据给x数组的下三角置数,下形式输出,请填空。(0809国下形式输出,请填空。(0809国) 4 3 7 2 6 9 1 5 8 10 #include main( ) { int x[4][4] , n=0,i,j; for(j=0;j<4;j++) for(i=3;i>=j;(1)) {n++;x[i][j]=(2);} for(i=0;i<4;i++) { for(j=0;j<=i;j++) printf(“%3d , x[i][j]); printf( %3d”%3d printf(“\ ); printf( \n”); } }

3.构造类型数据 3.构造类型数据

(2)结构体变量和数组。 (2)结构体变量和数组。结构体变量和数组

①结构体数据类型的定义;结构体数据类型的定义; struct data { char ch; int x; float y; };

②结构体变量的定义;结构体变量的定义; 1.struct data { char ch; int x; float y; }x1,x2; }x1,x2; 3.struct { char ch; int x; float y; }x1,x2; }x1,x2; 注意:第三种方式的变量定义只能在结构体定义之后出现一次。注意:第三种方式的变量定义只能在结构体定义之后出现一次。 2.struct data { char ch; int x; float y; }; struct data x1, x2;

例题: 08年春选择题年春选择题30 例题: 08年春选择题30 30.以下结构体变量stu1的声明形式中错误的是以下结构体变量stu1的声明形式中, 30.以下结构体变量stu1的声明形式中,错误的是 A.typedef struct stu{char name[10];float score;} STU;STU stu1;

B.#define STU struct stu STU{char name[10];float score ;}stu1;

C.struct stu{char name[10];float score;}stu1;

D.struct stu{char name[10];float score;}STU;STU stu1; struct data struct data x

x

; 数据类型 data型变量 struct data型变量

struct data { char ch; int x; float y; };

②结构体变量、结构体数组的声明及初始化;结构体变量、结构体数组的声明及初始化;struct data struct data ={' x ={'a' , 23 , 3.789} ; ;

b[]={{'a',23,3.789}, {'d',11,4.31}} b[]={{' {'

sizeof()运算符测试某一种类型数据所占存储空间长度 sizeof()运算符测试某一种类型数据所占存储空间长度()例如:例如:sizeof( struct data ) , sizeof(x) , sizeof( b )

3.构造类型数据 3.构造类型数据

(2)结构体变量和数组。 (2)结构体变量和数组。结构体变量和数组

③结构体变量中成员、结构体数组元素中成员的赋值和引用。结构体变量中成员、结构体数组元素中成员的赋值和引用。 struct data struct data ={' a ={'a' , 23 , 3.789} ; ; b[2]={{'a',23,3.789}, {'d',11,4.31}} {' b[2]={{'

例如:例如:a.ch , a.x , a.y; b[0].ch , b[1].x , b[0].y; 例如:例如:a.ch = 'c' , a.x = 3, a.y = 0.0; b[0].ch = ‘j' , b[1].x = 8 , b[0].y=9.0; j

例题:有下列程序:例题:有下列程序:#include main() { struct STU{char name[9];char sex;double score[2];}; a={“ZHA0 m ,85.5,90.0}, ZHA0”, struct STU a={ ZHA0 ,’m’,85.5,90.0}, b={“Qian f ,95.5,92.0}; Qian”, b={ Qian ,’f’,95.5,92.0};

b = a; printf(“%s,%c,%2.0f,%2.0f %s,%c,%2.0f,%2.0f\ ,https://www.wendangku.net/doc/a736558.html,,b.sex,b.score[0],b.sco printf( %s,%c,%2.0f,%2.0f\n”,https://www.wendangku.net/doc/a736558.html,,b.sex,b.score[0],b.sco re[1]);}程序运行结果是(0809国选程序运行结果是(0809国选37) re[1]);}程序运行结果是(0809国选37) 例题:2007年春选择题29 例题:2007年春选择题29 年春选择题 29.如有如下的类型定义和变量声明则在给出的选项中值不为7 如有如下的类型定义和变量声明, 29.如有如下的类型定义和变量声明,则在给出的选项中值不为7的表达式为. 表达式为. struct ss { int a ; struct ss *b ; }x[3]={ {5,&x[1]},{7,&x[2] ,{9,0}}, *ptr = &x[0];

A.ptr

B.(++ptr)D.x[0].bA.ptr->a B.(++ptr)->a

C.x[1].a

D.x[0].b->a

结构体数据成员的引用方式:结构体数据成员的引用方式:结构体变量. (1) 结构体变量.数据成员名指向结构体变量的指针变量(2) 指向结构体变量的指针变量->数据成员名数组元素. (3) 数组元素.数据成员名

3.构造类型数据 3.构造类型数据

(3)联合体变量和数组。 (3)联合体变量和数组。联合体变量和数组

①联合体数据类型的定义;联合体数据类型的定义; union data { char ch; int x ; float y; int a[5]; };

注意区分:注意区分:“联合体”:各成员占相同的地址,联合体”各成员占相同的地址,联合体所占内存长度等于最长的成员所占内存;所占内存长度等于最长的成员所占内存;“结构体”:各成员占不同的地址,结构体”各成员占不同的地址,结构体所占内存长度等于全部成员所占内存之和。

3.构造类型数据 3.构造类型数据

(3)联合体变量和数组。 (3)联合体变量和数组。联合体变量和数组

②联合体变量和数组的声明;联合体变量和数组的声明; union data { char ch; int x ; float y; int a[5]; }a,b[10]; union data { char ch; int x ; float y; int a[5]; }; union data union { char ch; int x ; float y; int a[5]; }a,b[10]; a , b[10];

联合体变量的定义形式也有三种,联合体变量的定义形式也有三种,与结构体变量定义类似

3.构造类型数据 3.构造类型数据

(3)联合体变量和数组。 (3)联合体变量和数组。联合体变量和数组

③联合体变量中成员、联合体数组元素中成员的赋值和引用。联合体变量中成员、联合体数组元素中成员的赋值和引用。联合体变量名. 联合体变量名.成员变量名 union data { char ch; int x ; float y; int a[5]; }; char n;union data a , b[10];

a.ch = ‘m’ ,b[0].x = 9;n = a.ch; m

4.函数 4.函数

(1)非递归函数的定义、声明、调用及执行过程。 (1)非递归函数的定义、声明、调用及执行过程。非递归函数的定义

①函数的定义(一般形式):函数的定义(一般形式) 函数名( 形参, 形参, .) 类型标识符函数名(类型标识符形参,类型标识符形参,….) { ……. . 函数体……. . } 说明:说明: (a).类型标识符表示函数返回值类型(return 返回值) (a).类型标识符表示函数返回值类型(return 返回值);类型标识符表示函数返回值类型 (b).函数名命名要符合标识符规则(b).函数名命名要符合标识符规则 (c).函数定义的头部结束处没有 (c).函数定义的头部结束处没有分号函数定义的头部结束处没有分号 (d).形参类型可以基本类型,数组,结构体

类型, (d).形参类型可以基本类型,数组,结构体类型,联合体类型形参类型可以基本类型

4.函数 4.函数

(1)非递归函数的定义、声明、调用及执行过程。 (1)非递归函数的定义、声明、调用及执行过程。非递归函数的定义

函数的声明(函数原型) 函数的声明(函数原型) 函数名( 形参, 形参, .) .);类型标识符函数名(类型标识符形参,类型标识符形参,….);函数的调用函数名(实参,实参,……); 函数名(实参,实参,)说明:说明: (a)形参变量只有在被调用时才分配内存单元,在调用结束时, (a)形参变量只有在被调用时才分配内存单元,在调用结束时,即形参变量只有在被调用时才分配内存单元刻释放所分配的内存单元;刻释放所分配的内存单元; (b)实参可以是常量,变量,表达式,函数等, (b)实参可以是常量,变量,表达式,函数等,无论实参是何种类型的量,在进行函数调用时,他们都必须具有确定的值,型的量,在进行函数调用时,他们都必须具有确定的值,以便把这些值传给形参;些值传给形参;

4.函数 4.函数

(1)非递归函数的定义、声明、调用及执行过程。 (1)非递归函数的定义、声明、调用及执行过程。非递归函数的定义

说明:说明: (c)括号中参数表列为形参,形参要一一说明类型; (c)括号中参数表列为形参,形参要一一说明类型;括号中参数表列为形参 (d)实参,形参在数量上,类型上,顺序上应严格一致, (d)实参,形参在数量上,类型上,顺序上应严格一致,否则会实参发生类型不匹配的错误;发生类型不匹配的错误; (e)实参,形参可以同名,但它们都是所处函数内部的局部变量; (e)实参,形参可以同名,但它们都是所处函数内部的局部变量;实参 (f)函数调用时,实参值传递给形参---单向; (f)函数调用时,实参值传递给形参---单向;函数调用时---单向

例题:2007年秋选择题28 例题:2007年秋选择题28 年秋选择题 28.若有声明若有声明"long 28.若有声明"long fun( int *x , int n , long *s );int a[4] ;",则以下函数调用形式中正确的是 = {1,2,3,4};long b ,c ;",则以下函数调用形式中正确的是 A.c = fun( a, 4, b ) ; B.c = fun( a[] , 4 , &b ); C.c=fun(a[4],4,b ); D.c=fun( a, 4 , &b ) ; 例题:若有以下函数首部(0609国选32) 例题:若有以下函数首部(0609国选32) (0609国选 int fun( double x[10],int *n) 则下列针对此函数的函数声明语句中正确的是则下列针对此函数的函数声明语句中正确的是 A.int fun( double x , int *n); B.int fun( double , int );

C.int fun(double *x , int n );

D.int fun(double * , int *);

4.函数 4.函数

(2)递归函数的定义、声明、调用及执行过程。 (2)递归函数的定义、声明、调用及执行过程。递归函数的定义

一个函数在它的函数体内调用它自身称为递归调用,一个函数在它的函数体内调用它自身称为递归调用,这种函数称为递归函数。为递归函数。例题:下列程序的输出结果是(0804国填13)例题:下列程序的输出结果是(0804国填13)国填13 #include void fun( int x ) { if( x/2>0 ) fun(x/2); printf(“%d %d”printf( %d , x ); } main() { fun(3);printf(“\ ); fun(3);printf( \n”); }

(3)函数调用时参数的传递。 (3)函数调用时参数的传递。函数调用时参数的传递①传数值:将常量或表达式的值传递给函数;将基本传数值:将常量或表达式的值传递给函数;类型变量的值传递给函数;将数值元素的值传递给函数;类型变量的值传递给函数;将数值元素的值传递给函数;将结构体变量中一个成员的值传递给函数;将结构体变量中一个成

员的值传递给函数;将结构体变量全部成员的值传递给函数;全部成员的值传递给函数;

②传地址值:将基本类型变量、结构体变量的地址值传传地址值:将基本类型变量、递给函数;将基本类型数组元素、递给函数;将基本类型数组元素、结构体类型数组元素的地址值传递给函数;地址值传递给函数;③函数调用时实际参数类型与形式参数类型的兼容。函数调用时实际参数类型与形式参数类型的兼容。上机的改错题)(上机的改错题)例题:2007年秋填空题7 例题:2007年秋填空题7 年秋填空题 #include int t ; int sub( int *s ) { *s += 1 ; t+=*s; return t; } main() { for( i=1 ; i<4;i++ ) printf(“%4d %4d” printf( %4d , sub( &i)); 程序运行的结果是 }程序运行的结果是

4.函数 4.函数

(4)函数返回值。 (4)函数返回值。函数返回值 (a)在被调用函数中用return (a)在被调用函数中用return , 从函数返回一个常量在被调用函数中用的值、一个表达式的值、一个基本类型变量的值、的值、一个表达式的值、一个基本类型变量的值、一个数组元素的值、结构体变量中一个成员的值;组元素的值、结构体变量中一个成员的值; (b)使用全局变量做函数返回值(全局变量对所有函数 (b)使用全局变量做函数返回值( 使用全局变量做函数返回值都有效) 都有效) (c)被调用的函数没有返回值, (c)被调用的函数没有返回值,将函数的返回值类型定被调用的函数没有返回值义为void 上机的改错题) void(义为void(上机的改错题) (d)在函数中允许有多个return语句在函数中允许有多个return 语句, (d)在函数中允许有多个return语句,但每次调用只能用一个return语句执行,因此只能返回一个函数值。用一个return语句执行,因此只能返回一个函数值。 return语句执行

4.函数 4.函数

(4)函数返回值。 (4)函数返回值。函数返回值

(d).函数的返回值类型由函数的定义类型确定。 (d).函数的返回值类型由函数的定义类型确定。函数的返回值类型由函数的定义类型确定 float fun(int x , int y ) { ….. .. return x ; } 注意:注意:函数值的类型和函数定义中函数的类型应保持一致。函数值的类型和函数定义中函数的类型应保持一致。如果两者不一致,则以函数类型为准,自动进行类型转换。一致,则以函数类型为准,自动进行类型转换。如函数值为整型,在函数定义时可以省去类型说明。如函数值为整型,在函数定义时可以省去类型说明。

函数的返回值是float 函数的返回值是float

(f).被调用函数返回后, (f).被调用函数返回后,在主调函数中继续执行调用函数语句被调用函数返回后的下一条语句。的下一条语句。函数调用的方式:函数调用的方式:函数表达式:函数表达式:如:z = max( x , y ) ; 函数语句:函数调用的一般形式加上分号即构成函数语句。函数语句:函数调用的一般形式加上分号即构成函数语句。例如:printf(" );scanf(" 例如:printf("hello!");scanf("%d",&a);函数实参:函数作为另一个函数调用的实际参数出现。函数实参:函数作为另一个函数调用的实际参数出现。这种情况是把函数的返回值作为实参进行传递,是把函数的返回值作为实参进行传递,因此要求函数必须有返回值 printf(" 的。 printf("%d",max(x , y ));

例题:(0704国选国选26) 例题:(0704国选26) 语言中,函数返回值的类型最终取决于在C语言中,函数返回值的类型最终取决于 A.函数定义时在函数首部所说明的函数类型A.函数定义时在函数首部所说明的函数类型 B.return 语句中表达式值的类型 C.调用函数时主调函数所传递的实参类型 C.调用函数时主调函数所传递的实参类型 D.函数定义时形参的类型 D.函数定义时形参的类型

4.函数 4.函数

(5)变量的作用域:全局变量。 (5)变量的作用域:全局变量。变量的作用域

说明:说明:

(a)在函数外部定义的变量称为全局变量, (a)在函数外部定义的变量称为全局变量,有效范围从定在函数外部定义的变量称为全局变量义变量的位置开始到本源文件结束;义变量的位置开始到本源文件结束; (b)如果同一个源文件中,全局变量与局部变量同名, (b)如果同一个源文件中,全局变量与局部变量同名,如果同一个源文件中则在局部变量的作用范围内,外部变量被“屏蔽”则在局部变量的作用范围内,外部变量被“屏蔽”;

4.函数 4.函数

(5)变量的作用域: (5)变量的作用域:局部变量与函数的形式参数变量的作变量的作用域用域。用域。

说明:说明:

(a)主函数定义的变量只能在主函数中使用, (a)主函数定义的变量只能在主函数中使用,不能在其主函数定义的变量只能在主函数中使用它函数中使用;它函数中使用; (b)形参属于被调用函数的局部变量,实参属于主调函 (b)形参属于被调用函数的局部变量,形参属于被调用函数的局部变量数的局部变量;数的局部变量; (c)允许在不同的函数中使用相同的变量名, (c)允许在不同的函数中使用相同的变量名,它们代表不同允许在不同的函数中使用相同的变量名的对象,分配不同的单元,互不干扰,也不发生混淆;的对象,分配不同的单元,互不干扰,也不发生混淆; (f)在复合语句中也可定义变量, (f)在复合语句中也可定义变量,其作用域只在复合语句中在复合语句中也可定义变量

4.函数 4.函数

(5)变量的作用域: (5)变量的作用域:局部变量与函数的形式参数变量的作变量的作用域用域。用域。

说明:说明:

(e)在全局变量的作用范围内如遇同名的宏定义则在宏定 (e)在全局变量的作用范围内如遇同名的宏定义则在宏定义后,同名的标识符应该用宏名置换。义后,同名的标识符应该用宏名置换。

int PI = 3.141592; #define PI 3.14 main( ) { float a = PI; }

4.函数 4.函数

(6)局部变量、函数形式参数变量的存储类型和生存期。 (6)局部变量、函数形式参数变量的存储类型和生存期。局部变量说明:说明:存储方法分两类:存储方法分两类:静态存储方式:指在程序运行期间分配固定的存储空间静态存储方式:的方式全局变量,static声明的局部变量全局变量,加static声明的局部变量动态存储方式:动态存储方式:在程序运行期间根据需要进行动态分配的函数形式参数,自动变量(未加static声明的局部变量) 函数形式参数,自动变量(未加static声明的局部变量), static声明的局部变量函数调用时现场保护和返回地址

4.函数 4.函数

存储类别说明关键字 (7)存储类别说明关键字:auto,static,register,extern。 (7)存储类别说明关键字:auto,static,register,extern。说明:说明:

auto:函数中的局部变量,如不专门说明static存储类别, auto:函数中的局部变量,如不专门说明static存储类别,函数中的局部变量 static存储类别都是动态分配存储空间的,数据存储在动态存储区。都是动态分配存储空间的,数据存储在动态存储区。 static:函数中的局部变量的在函数调用结束后不消失而 static:函数中的局部变量的在函数调用结束后不消失而函数中的局部变量保留原值,则定义该变量为”静态局部变量”,用static 保留原值,则定义该变量为”静态局部变量”进行说明

4.函数 4.函数

相关文档
相关文档 最新文档