《计算机二级C语言(重要知识点).ppt》由会员分享,可在线阅读,更多相关《计算机二级C语言(重要知识点).ppt(152页珍藏版)》请在三一办公上搜索。
1、授课教师:闵 芳,联系方式:,办公室:A3-303,周三(9月9号)上课调整到周五(9月11),1.C语言的基本概念,(1)源程序的格式,风格和结构,main函数及其他函数的基本概念。,任何C的源程序执行时,都是从主函数(main)开始执行的,其他的函数最终必将被这个主函数所调用。,C语言除了主函数规定必须取名为main外,其他的函数名可以任取,但是要符合C标识符取名规则。,在main函数体内部和外部均允许出现的实体是预处理命令,1.C语言的基本概念,(1)源程序的格式,风格和结构,main函数及其他函数的基本概念。,C程序书写格式自由,一个语句可以占多行,一行也可有多个语句。,C语言的基本组
2、成单位是函数。,在C语言中,关键字都是小写的。,各个函数在程序中所处的位置并不是固定的,但要求一个函数是完整的,独立的,不允许出现在一个函数内部又去定义另一个函数,或是函数格式不齐全的现象。,C语言用/*/作注释,注释的添加形式比较自由,允许在任何插入空格符的位置插入注释,但C语言的注释不能进行嵌套。例题:江2006年春选择题21下列各选项都是在C语言程序段中增加的注释,其中注释方法错误的是_A.void main(/*int argc,char*argv*/)B.void main()pri/*remark*/ntf(“name”);C.void main()int x/*=10*/;pri
3、ntf(“%d”,x);D.void main()int x=10;/*printf(“%d”,x)*/;,各个函数在程序中所处的位置并不是固定的,但要求一个函数是完整的,独立的,不允许出现在一个函数内部又去定义另一个函数,或是函数格式不齐全的现象。,函数类型 函数名(函数参数类型 函数参数名1,函数参数类型 函数参数名2,.)函数体,例题:2008年春季选择题21下列叙述正确的是_A.main函数必须出现在其他函数之前B.main函数中至少必须有一条语句C.C程序总是从main函数的第一条语句开始执行D.C程序总是在执行完main函数的最后一条语句后结束 2008年秋季选择题21,C程序是先
4、由源程序(*.C)经编译生成目标文件(*.obj,是二进制文件),然后经过链接生成可执行文件(*.exe,是二进制文件),例题:下列叙述正确的是_A.C程序中的注释只能出现在程序的开始位置和语句的后面B.C程序书写格式严格,要求一行内只能写一个语句C.C程序书写格式自由,一个语句可以写在多行上D.用C语言编写的程序只能放在一个程序文件中,例题:下列叙述正确的是_A.一个C语言程序只能实现一种算法B.C程序可以由多个程序文件组成C.C程序可以由一个或多个函数组成D.一个C函数可以单独作为一个C程序文件存在,1.C语言的基本概念,(2)基本算术类型数据的表示及使用。,类型标识符(int,float
5、,double,char)的意义及使用;类型修饰符(long,short,signed,unsigned)的意义及使用;,类型标识符:在编译的时候,为变量分配相应的存储空间;规定了变量的取值范围;规定了变量可以进行的运算;,1.C语言的基本概念,(2)基本算术类型数据的表示及使用。,例题:2006年秋填空题3,2007年秋选择题24,整数数值是以补码表示的;正数的补码和原码相同;负数的补码是将该数的绝对值的二进制形式按位取反再加1,左面的第一位表示符号。,1.C语言的基本概念,(2)基本算术类型数据的表示及使用。,基本类型常量的表示及使用:int型常量的十进制,八进制,十六进制形式;,以数字0
6、开头的数字序列,一律作为八进制数处理,基本数字范围07;,以0 x开头后面跟若干位数字的,一律作为十六进制数处理,基本数字范围09,从10-15写为A-F或a-f;,1.C语言的基本概念,(2)基本算术类型数据的表示及使用。,其他数字作为十进制数处理,基本数字范围是0-9。,例题:int a=0144;int b=0 x64;int c=100;,类型说明符 数的范围 分配字节数int-3276832767 short int-3276832767 signed int-3276832767 unsigned int 065535 long int-21474836482147483647 u
7、nsigned long 04294967295,整型数据的分类:,整型数据分为基本类型,短整型,长整型和无符号整型。,整型数据的分类:,整型数据分为基本类型,短整型,长整型和无符号整型。,长整型,在整数的末尾加上后缀字母”l”或”L”。例如:9L,012L,0 x32L,无符号整型在整数的末尾加上后缀字母”u”或”U”。若是长整型无符号整数,则应加后缀”lu”或”LU”,2008年秋选择题23,1.C语言的基本概念,(2)基本算术类型数据的表示及使用。,基本类型常量的表示及使用:float型常量、double型常量的十进制小数形式,十进制指数形式;,日常的表示法 C语言中的表示形式 3.14
8、15106 3.1415e6 2.56*10-7 2.56e-7,1.C语言的基本概念,(2)基本算术类型数据的表示及使用。,类型说明符float表示单精度型,在Turbo C中单精度型占4个字节内存空间,只能提供七位有效数字。,类型说明符double表示双精度型,在Turbo C中双精度型占8个字节内存空间,只能提供十六位有效数字。,Turbo C规定小数后最后保留六位,其余部分四舍五入。,2008年春选择题22,1.C语言的基本概念,(2)基本算术类型数据的表示及使用。,基本类型常量的表示及使用:char型常量形式,常用转义字符;字符串常量形式;符号常量的命名、定义与使用;,char型常量
9、形式:字符常量是用一对单撇号括起来的一个字符,如:A,2,*,常用转义字符:(1)用反斜杠开头后面跟一个字母代表一个控制字符;(2)用代表字符反斜杠,用 代表撇号字符;(3)用后跟1到3个八进制数代表ASCII码为该八进制数的字符;用x后跟1到2个十六进制数代表ASCII码为该十六进制数的字符,例题:语句printf(abdwhiyboun)是_。A.abdwhiybou B.abdwhiybou C.dwhiyou D.abdwhiybou,转义字符及其作用 P48,例题:下列不正确的转义字符是_。A.065 B.C.D.0,符号常量:宏名,#define 宏名 宏体 或#define 宏名
10、,注意:1.宏定义是用宏名来表示一个字符串,在宏展开时又以该字符串代替宏名,这只是一种简单的替换,字符串中可以含任何字符,可以是常数,也可以是表达式,预处理程序对它不作任何检查。,2.宏定义不是说明或语句,在行末不必加分号,如加上分号则连分号也一起置换。,符号常量:宏名,#define 宏名 宏体 或#define 宏名,3.宏名在源程序中若用引号括起来,则预处理不对其作宏代换。,4.宏定义用宏名代替一个字符串,也就是简单的置换,不作正确性检查。,5.在定义预处理命令时,一行只能有一条预处理命令。,例题:以下说法不正确的是_A.在C语言程序中凡是以#号开头的语句都是预处理命令行;B.C程序在执
11、行过程中对预处理命令进行处理C.以下是正确的宏定义#define IBM_PC,例题:以下有关宏替换的叙述不正确的是_A.宏替换不占用运行时间;B.宏名无类型;C.宏替换只是字符替换;D.宏名必须有大写字母表示,带参数的宏命令,C语言允许宏带有参数。在宏定义中的参数称为形式参数,在宏调用中的参数称为实际参数。对带参数的宏,在调用中,不仅要宏展开,而且要用实参代替形参。,带参宏定义的一般形式为:#define 宏名(形参表)字符串,带参宏调用的一般形式:宏名(实参表);,带参数的宏命令,带参的宏定义的几点说明:,1.带参宏定义中,宏名和形参表之间不能有空格出现;,2.带参宏定义中,形参不分配存储
12、单元,因此不必作类型定义;,3.在宏定义中的形参是标识符,而宏调用中的实参可以是表达式;,例题:2007年秋填空题5,1.C语言的基本概念,(2)基本算术类型数据的表示及使用。,基本类型变量的命名,声明,初始化及使用;,基本类型变量的命名:在C语言中,标识符必须以字符或下划线开头的由字母,数字和下划线组成的序列;,基本类型变量的声明:数据类型 变量名;,C语言对变量的要求:“先定义,后使用”,变量说明必须放在变量使用之前,一般放在函数体的开头部分。,例题:2007年秋选择题22,1.C语言的基本概念,(2)基本算术类型数据的表示及使用。,使用函数返回值作为操作数。,例如:以下程序的输出结果_。
13、int fun(int a,int b)return(a+b);main()int x=2,y=5,z=8,r;printf(%dn,fun(fun(x,y),z);,1.C语言的基本概念,(3)运算符和表达式的表示及使用。,表达式的一般组成;,运算符功能、表达式的组成及表达式的值:赋值运算符与赋值表达式、赋值运算符的左值要求;,赋值运算符:=,注意:在赋值运算符的左侧只能出现变量,赋值运算符具有强制类型转换作用,例题:若变量均已正确定义并赋值,下列合法的C语言赋值语句是_A.x=y=5 B.x=n%2.5 C.x+n=i D.x=5=4+1,1.C语言的基本概念,(3)运算符和表达式的表示及
14、使用。,例题:2005年秋选择题22,例题:若x为int型变量,则执行以下语句后,x的值为_。x=5;xx-=x*x;,复合赋值运算*=,+=,-=.,1.C语言的基本概念,(3)运算符和表达式的表示及使用。,运算符功能、表达式的组成及表达式的值:算术运算符与算术表达式,+,-运算符的左值要求;,算术运算符有:+,-,*,/,%,这些运算符需要两个运算对象,称双目运算符.除取余(%)运算外,这些运算符的运算对象可以是整型,也可以是实型。,取余运算的运算对象只能是整型.取余运算的结果是两数相除之后所得的余数。,例题:2006年春选择题26,1.C语言的基本概念,(3)运算符和表达式的表示及使用。
15、,运算符功能、表达式的组成及表达式的值:算术运算符与算术表达式,+,-运算符的左值要求;,不同类型数据间的转换与运算,doublefloat long unsigned intchar,short,例题:2006年秋填空题2,1.C语言的基本概念,(3)运算符和表达式的表示及使用。,运算符功能、表达式的组成及表达式的值:算术运算符与算术表达式,+,-运算符的左值要求;,注意:强制类型转换的用法(类型名)变量,例如:(int)x+y 等价于(int)x)+y;,例题:若有声明”int a=5,b=2;”,则表达式”b+=(float)(a+b)/2”运算后b的值为_(江2007秋填空1),1.C
16、语言的基本概念,(3)运算符和表达式的表示及使用。,运算符功能、表达式的组成及表达式的值:算术运算符与算术表达式,+,-运算符的左值要求;,自增,自减运算符即+,-(运算符是右结合性,运算级别是2),注意:a+与+a 的区别,先取值后+,先+后取值,1.C语言的基本概念,(3)运算符和表达式的表示及使用。,运算符功能、表达式的组成及表达式的值:算术运算符与算术表达式,+,-运算符的左值要求;,例题:有下列程序:#includemain()int x=1,y=2,z=3;if(xy)if(yz)printf(“%d”,+z);else printf(“%d”,+y);printf(“%dn”,x
17、+);程序运行之后的结果是_,1.C语言的基本概念,(3)运算符和表达式的表示及使用。,运算符功能、表达式的组成及表达式的值:关系运算符与关系表达式;,关系运算符:,=(运算级别是6),!=(运算级别是7),注意:等于零和不等于零的表示方法 a,!a,a a!=0,!a a=0,两个实数判断相等和判断不相等的方法(在多分支if语句中的作用),例题:若有表达式(w)?(-x):(+y),则其中与w等价的表达式是_A.w=1 B.w=0 C.w!=1 D.w!=0,例题:江2007年春选择题24以下表示数学式”a=b)&!(b=c)D.!(a=b|b=c),1.C语言的基本概念,(3)运算符和表达
18、式的表示及使用。,运算符功能、表达式的组成及表达式的值:逻辑运算符与逻辑表达式,含有&、|运算符的表达式的操作数求值顺序与优化处理理;,逻辑运算符:!(运算级别是2),&,|(运算优先级是11,12),注意:a&b&c 和 a|b|c,1.C语言的基本概念,(3)运算符和表达式的表示及使用。,在一个&表达式中,若&的一端为0,则不必再计算另一端,该表达式的值肯定为0。,在一|表达式中,若|的一端为1,则不必再计算另一端,该表达式的值肯定为1。,例题:执行下列程序段后,w的值为()int w=A,x=14,y=15;w=(x|y)A.-1 B.NULL C.1 D.0,例题:有以下程序main(
19、)int i=1,j=2,k=3;if(i+=1 运行之后的结果是_。,例题:设x,y,z和t均为int型变量,执行以下语句后,t的值为_。x=y=z=0;t=+x|y+,例题:下列只有当整数x为偶数,才是逻辑“真”的表达式_A.x%2!=0 B.!(x%2=0)C.(x-x/2*2)=0 D.if(x%2),1.C语言的基本概念,(3)运算符和表达式的表示及使用。,运算符功能、表达式的组成及表达式的值:逗号运算符与逗号表达式,逗号表达式的操作数求值顺序;,逗号表达式一般形式为:表达式1,表达式2,表达式3,.,表达式n,整个逗号表达式的值是表达式n的值。,1.C语言的基本概念,(3)运算符和
20、表达式的表示及使用。,在所有运算中,逗号表达式的优先级最低:,逗号表达式一般形式中的表达式1和表达式2也可以是另一逗号表达式,并不是在所有出现逗号的地方都组成逗号表达式,如在变量说明中,函数参数表中逗号只是用作各变量之间的间隔符。,例题:有如下程序:#include main()int a=5,b=-3,c=4;printf(%d%dn,(a+,+b),c-2);运行该程序的输出结果是_。,例题:已知字符A的ASCII码值为65,以下程序结果为_:#include main()int b=20;char a=A;printf(%d,%on,(a=a+1,a+b,b),a+a-A,b);,1.C
21、语言的基本概念,(3)运算符和表达式的表示及使用。,运算符功能、表达式的组成及表达式的值:条件运算符与条件表达式;,条件运算(右结合性)e1?e2:e3,若e1为真(非0),则此条件表达式的值为e2的值;若e1为假(0),则表达式取e3的值。,条件运算(右结合性),例题:ab?x:y?m:n,例题:江2006年秋选择题22若已有声明”int x=4,y=3;”,则表达式“xy?x+:y+”的值是_A.2 B.3 C.4 D.5,1.C语言的基本概念,(3)运算符和表达式的表示及使用。,运算符功能、表达式的组成及表达式的值:位运算符与位运算表达式;,位运算符:(按位取反)&(按位与)(按位异或)
22、|(按位或)(右移,将一个数的二进制全部右移若干位),1.C语言的基本概念,(3)运算符和表达式的表示及使用。,例题:下列程序的输出结果是_main()char a=3,b=6,c=ab2;printf(n%d,c);,2.基本语句,(1)实现顺序结构的语句:表达式语句(包括函数调用语句)、空语句、复合语句;标准设备输入输出函数:printf()、scanf()、getchar()、putchar()、gets()、puts()。,注意:,(a)getchar()是无参函数,从输入设备读取一个字符,包括不可显示字符。,(b)gets()和puts()函数只有一个参数,且为字符串的首地址。,(c
23、)printf()函数中的实参的求值顺序从右向左。,在格式控制串中,格式说明与输出项从左到右在类型上必须一一对应匹配;,在格式控制串中,格式说明与输出项个数相同。如果格式说明的个数少于输出项的个数,多余的项将不予输出。反之,多余的格式将输出不定值(或0值);,如果想输出百分号“”,则在格式控制串中用两个连续的百分号”%”来表示;,printf函数的返回值为本次调用输出字符的个数。,(d)scanf()函数的格式控制符中的普通字符照原样输入。,2006年秋选择题23、28,2007年春填空题4,在scanf()中非格式字符是作为输入数据时的间隔,输入时必须原样地输入。而格式字符对应的数据,输入时
24、必须按照规定的格式输入;,在所有数据输入后,可用一个回车符结束输入;,用%c作为输入字符是仅接受单个字符。从键盘输入单个字符后应该跟回车键作为输入数据的结束,此时回车作为一个字符存放在缓冲区中,如再有%c作为输入字符时,将不再从键盘读入数据,而是从缓冲区读入还未读完的数据。,例题:2006年秋选择题2323.若有声明”int i;float x;char a50;”,为使i得到值为1,x得到值为3.1416,a得到值yz,当执行语句“scanf(“%3d%f%2s”,&i,&x,a)”时,正确的输入形式是_.A.1,3.1416,yz B.13.1416yzC.001 3.1416 yz D.
25、i=001,x=3.1416,a=yz,例题:若在定义语句:int a,b,c,*p=,例题:2006年秋选择题2828.设有变量声明”char c;”,执行for(;c=(getchar()!=n);)printf(“%c”,c)”时,从键盘输入”ABCDEFG”之后,输出的结果是_。A.ABCDEFG B.AABBCCDDEEFFGGC.非字母数字字符 D.语句不能执行,例题:若要求从键盘读入含有空格字符的字符串,应使用函数_(0604国)A.getc()B.gets()C.getchar()D.scanf(),例题:2007年春填空题44.已知程序中有声明”int a;long b;”,
26、若需要接受从键盘输入的电话号码字符串(其中010是区号,64782656是电话号码),并将其中的区号,电话号码分别存放到变量a,b中,则实现该功能的输入语句应为“scanf(“_”,&a,&b)”,2.基本语句,(2)实现选择结构的语句:ifelse语句、switch语句和break语句。,if语句一般格式,if(表达式)语句,或 if(表达式)语句1 else 语句2,注意:,(b)“语句”如果是复合语句应有括号,(a)“表达式”应有括号且为各类型的表达式,2005年秋选择题2626.下列程序段中,能将变量x,y中值较大的数保存到变量a,值较小的数保存在变量b的程序段是_。A.if(xy)a
27、=x;b=y;else a=y;b=x;B.if(xy)a=x;b=y;else a=y;b=x;C.if(xy)a=x;b=y;else a=y;b=x;D.if(xy)a=x;b=y;else(xy)a=y;b=x;,例题:设变量x和y均已正确定义并赋值,下列if语句中,在编译时将产生错误信息的是_A.if(x+);B.if(xy,题型:,(a)数学分段函数的求值问题,(b)繁琐的二维数组求值填空问题(结合循环语句,必考),例题:2007年秋填空题88.以下程序运行时输出结果是_#include void f(long x)if(x 100)printf(“%d”,x/10);else f
28、(x/100);printf(“%d”,x%100/10);main()f(123456);,2.基本语句,(2)实现选择结构的语句:ifelse语句、switch语句和break语句。,switch(表达式)case 常量表达式1:语句1;break;case 常量表达式2:语句2;break;case 常量表达式n:语句n;break;default:语句n+1;,注意:,(a)在case后的各常量表达式的值不能相同,否则会出现错误,(b)各case和default子句的先后顺序可以变动,而不会影响程序执行结果。,2.基本语句,(2)实现选择结构的语句:ifelse语句、switch语句和
29、break语句。,注意:,例题:2007年春填空题9,(c)多个case可以共用一组执行语句,(d)“语句”为多条时,可以不必加大括号,(f)default语句可缺省,例题:2007年春填空题99.以下程序运行后输出结果的第一行为_,第二行为_#include void main()int i=5;do switch(i%2)case 0:i-;break;case 1:i-;continue;i;printf(“%dn”,i);while(i0);,例题:main()int a=2,b=7,c=5;switch(a)case 1:switch(b0)case 1:printf(“”);bre
30、ak;case 2:printf(“!”);break;case 0:switch(c=5)case 0:printf(“*”);break;case 1:printf(“#”);break;case 2:printf(“$”);break;default:printf(“运行结果是_,2.基本语句,(3)实现循环结构的语句:while语句、dowhile语句、for语句等。,当型循环语句一般格式:while(表达式)语句,注意:,(a)表达式应有(),(b)“语句”为复合语句时应加大括号,(c)“语句”中含有break,continue语句时的情况,break:终止本层循环;在多层循环中,一
31、个break语句只向外跳一层,即中止一层循环,continue:终止本次循环的执行,进入下一次循环。,例题:设x和y均为int型变量则执行下面的循环后,y的值为_。y=1,x=1;while(y=10)break;if(x%2=1)x+=3;continue;x+=2;y+;A.3 B.4 C.5 D.6,例题:下列叙述中正确的是_A.break语句只能用于swith语句体中B.continue语句的作用是使程序的执行流程跳出包含它的所有循环C.break语句只能用于循环体内和swith语句体内D.在循环内使用break语句和continue语句的作用相同,2.基本语句,(3)实现循环结构的语
32、句:while语句、dowhile语句、for语句。,直到型循环语句一般格式:do 语句 while(表达式);,注意:,(a)无论表达式是否成立,循环体至少执行一次;,(b)格式中表达式有(),且后面的”;”不能丢;,(c)在语句中应有使”表达式”趋于不成立的语句存在;,例题:2007年秋填空题6,例题:2007年秋填空题66.以下程序运行的结果是_.#include main()int s=1,n=235;do s*=n%10;n/=10;while(n);printf(“%dn”,s);,for循环结构的执行过程如下:,1.求解表达式1;,for型循环语句一般格式:for(表达式1;表达
33、式2;表达式3)语句;,2.求解表达式2,若其值为“真”,则执行for语句中的循环体,然后执行下面的执行第(3)步。若为假(值为0)则结束循环转到第(5)步;,3.求解表达式3;,4.转回上面第(2)步继续执行;,5.执行for语句下面的一个语句;,2.基本语句,(3)实现循环结构的语句:while语句、dowhile语句、for语句。,注意:,(a)繁琐的二维数组填值问题,(b)三种循环语句可以互相嵌套,例题:2007年秋选择题25,25.若在一个C语言源程序中”e1”和”e3”是表达式,“s;”是语句,则下列选项中与语句”for(e1;e3)s;”功能等同的语句是:_A.e1;while(
34、10)s;e3;B.e1;while(10)s;e3;C.e1;while(10)e3;s;D.while(10)e1;s;e3;,例题:2007年春选择题26,26.下列关于循环语句for,while,do_while的叙述中正确的是_A.三种循环语句的循环体都必须放入一对花括号中B.三种循环语句中都可以缺省循环中止条件表达式C.三种循环语句的循环都至少被无条件地执行一次D.三种循环语句都可能出现无穷循环,例题:2006年秋选择题2424.程序段”int x=3;do printf(“%d”,x-);while(!x);”执行结果是_.A.3 2 1 B.2 C.3 D.死循环,2.基本语句
35、,(4)其他语句:break、continue、return。,break语句,用于循环,switch语句;,continue语句,用于循环语句;,return语句,用于函数返回值;,例题:下列叙述中错误的是_A.用户定义的函数中可以没有return语句B.用户定义的函数可以有多个return语句,以便可以调用一次返回多个函数值C.用户定义的函数中若没有return语句,则应当定义函数为voidD.函数的return语句中可以没有表达式,3.构造类型数据,(1)基本类型数组(一维、二维)。,一维数组,定义:,定义并初始化:,类型名 数组名常量表达式,类型名 数组名常量表达式表达式列表;,或 类
36、型名 数组名 表达式列表;,引用:,只能引用下标变量,注意:,(a)不能定义动态数组。,如:int n;int an;,错误,(b)只能在定义数组时初始化,以后不可以对数组整体赋值(除字符数组外)。,(1)基本类型数组(一维、二维)。,一维数组,注意:,(c)除了字符数组外,不可整体引用数组;,(d)一维数组一般用一层循环扫描所有数组元素,(e)一维数组在内存中存储是连续的,例题:2007年秋填空题2,2007年秋填空题9,2006年秋选择题24,int a5=1,2,3,4,5;,正确,int a5;a5=1,2,3,4,5;,错误,例题:2007年秋填空题22.如有声明”char s10=
37、“remind”;”,执行“puts(s+2);”后的输出结果是_;,例题:2006年秋选择题2525.若有字符数组A和B的声明”static char A=“ABCDEF”,B=A,B,C,D,E,F;”,则数组A和数组B的长度分别是_A.7,6 B.6,7 C.3 D.死循环,例题:2007年秋填空题9,9.以下程序运行时输出结果的第一行是_;第二行是_。#include int fun(int*x,int n)int i,j;for(i=j=0;in;i+)if(*(x+i)%2)*(x+j+)=*(x+i);return j;main()int a10=1,5,2,3,8,3,9,7,
38、4,10,n,i;n=fun(a,10);for(i=0;i n;i+)printf(“%5d”,ai);if(i+1)%3=0)printf(“n”);,例题:当运行下列程序时,输入abcd,程序的输出结果是_(0604国填9)insert(char str)int i;i=strlen(str);while(i0)str 2*i=stri;str2*i-1=*;i-;printf(“%sn”,str);main()char str40;scanf(“%sn”,str);insert(str);,3.构造类型数据,(1)基本类型数组(一维、二维)。,二维数组,定义:,定义并初始化:,类型名
39、数组名常量表达式1常量表达式2,类型名 数组名常量表达式1常量表达式2表达式列表;,引用:,只能引用下标变量,注意:,不能定义动态数组。,如:int m,n;int amn;,错误,3.构造类型数据,(1)基本类型数组(一维、二维)。,二维数组,注意:,(b).不可整体引用数组;,(c).二维数组一般用双层循环扫描所有数组元素,以及其他运算。,(a).只能在定义数组时初始化,以后不可以对数组整体赋值。,int a23=1,2,3,4,5,6;,正确,int a23;a23=1,2,3,4,5,6;,错误,(d).二维数组在内存中连续存储,数组名是0行0列数组元素的地址,ai是第i行第0列元素的
40、地址。,3.构造类型数据,(1)基本类型数组(一维、二维)。,例题:下列数组定义中错误的是_(0604国)A.int x3=0;B.int x23=1,2,3,4,5,6;C.int x3=1,2,3,4,5,6;D.int x23=1,2,3,4,5,6;,例题:若有声明”int a34,*p=a0,(*q)4=a;”,则下列叙述中错误的是_(07秋江选26)A.a23与q23等价 B.a23与p23等价C.a23与*(p+11)等价 D.a23与p=p+11,*p等价,例如:有下列程序(0809国选35)#include#define N 4void fun(int aN,int b)in
41、t i;for(i=0;iN;i+)bi=aii;main()int xN=1,2,3,4,5,6,7,8,9,10,yN,i;fun(x,y);for(i=0;iN;i+)printf(“%d”,yi);printf(“n”);程序运行的结果是_,例题:2007年春填空题11以下程序运行后输出结果第一行_,第二行_,第三行_#include stdio.h#define N 3main()int aNN,bN*N=1,1,i,j;for(i=2;iN*N;i+)bi=bi-1+b i-2;for(i=0;iN;i+)for(j=0;jN;j+)aji=bi*N+j;for(i=0;iN;i+
42、)for(j=0;jN;j+)printf(5d,aij);printf(n);,二维数组:,(e).二维数组的第一维方括号的常量表达式可以省略,此时第一维大小按以下规则决定:,当初值的个数能被二维的常量表达式的值除尽时,所得商数就是第一维的大小;,当初值的个数不能被第二维的常量表达式的值除尽时,则:,第一维的大小 初值个数/第二维常量表达式值 1,例如:int c3=1,2,3,4,5;则数组c的第一维大小是多少?,3.构造类型数据,(1)基本类型数组(一维、二维)。,字符数组(一维,二维):,有普通一维,二维数组的性质,特点:,(a)可以初始化,也可以使用strcpy()赋值,char s
43、tr10=a,b,c;,char str10=abc;,char str10;strcpy(str,abc),(b)可以引用下标变量,也可以整体引用(一维数组),(c)一般用于存储字符串。,(d)字符串的基本概念:串结束符,内存单元地址,字符串,通常用一个字符数组来存放一个字符串,字符串总是以0存入数组。用字符串方式赋值比用字符逐个赋值也要多占一个字节,存放结束符。,3.构造类型数据,(1)基本类型数组(一维、二维)。,字符数组(一维,二维):,有普通一维,二维数组的性质,特点:,(e).字符串函数的使用,字符串长度(strlen(),字符串赋值(strcpy(),字符串连接(strcat()
44、,字符串比较(strcmp(),函数的参数是地址,使用#include,例题:#includemain()char st20=hello0abct;printf(%d,%d,strlen(st),sizeof(st);,例题:2007年秋填空题11#include#include void fun(char str20,int n)int i,j,k;char s20;for(i=0;in-1;i+)k=i;for(j=i+1;jn;j+)if(strcmp(strj,strk)0)k=j;strcpy(s,stri);strcpy(stri,strk);strcpy(strk,s)以上程序运
45、行时第一行是_,第二行是_.,main()char str20=PASCAL,BASIC,FORTRAN,C,COBOL,Smalltalk;int i;fun(str,6);for(i=0;i6;i+)printf(%sn,stri);,(f).字符串的输入输出函数(gets,scanf 和 puts,printf),如:char c10;,gets(c)-遇回车符中止;,scanf(“s“,c)-遇空格中止,例题:#include main()char str13;scanf(“%s”,str);printf(%s,str);,例题:#include main()char str13;ge
46、ts(str);puts(str);,对于下列两段程序如输入数据为:abcd1234 efgh则输出结果分别为_。,例题:2006年春选择题2727.设有如下程序#include main()char s128=0,*p=s;while(strcmp(s,END)gets(s);while(*p)putchar(*p+);A.所有输入的字符串都能被完整的输出B.所有输入的字符串都不能被完整输出C.只能完整输出第一个字符串D.只能完整输出最后一个字符串,例题:有下列程序(0804国选35)#include void fun(char*a,char*b)while(*a=a)a+;while(*b
47、=*a)b+;a+;main()char*s=“*a*b*”,t80;fun(s,t);puts(t);程序运行结果是_A.*a*b B.a*b C.a*b*D.ab,例题:以下程序运行时输出结果是_(08秋江填9题)#include#includevoid sf(char*s1,char*s2)if(*s1=*s2)sf(s1+1,s2+1);void main()char a20=“ABC”,b20=“xyz”;sf(a+strlen(a),b);puts(a);,3.构造类型数据,(1)基本类型数组(一维、二维)。,字符数组(一维,二维):,有普通一维,二维数组的性质,特点:,(g).二
48、维数组的引用:下标引用法和数组名加第一维下标,例题:下列程序按下面指定的数据给x数组的下三角置数,并按如 下形式输出,请填空。(0809国)4 3 7 2 6 9 1 5 8 10#include main()int x44,n=0,i,j;for(j=0;j=j;_(1)_)n+;xij=_(2)_;for(i=0;i4;i+)for(j=0;j=i;j+)printf(“%3d”,xij);printf(“n”);,3.构造类型数据,(2)结构体变量和数组。,结构体数据类型的定义;,struct data char ch;int x;float y;,结构体变量的定义;,1.struct
49、data char ch;int x;float y;x1,x2;,2.struct data char ch;int x;float y;struct data x1,x2;,3.struct char ch;int x;float y;x1,x2;,注意:第三种方式的变量定义只能在结构体定义之后出现一次。,例题:08年春选择题30 30.以下结构体变量stu1的声明形式中,错误的是_A.typedef struct stuchar name10;float score;STU;STU stu1;B.#define STU struct stu STUchar name10;float sc
50、ore;stu1;C.struct stuchar name10;float score;stu1;D.struct stuchar name10;float score;STU;STU stu1;,struct data x;,struct data,数据类型,x,struct data型变量,struct data x=a,23,3.789;,struct data b=a,23,3.789,d,11,4.31;,sizeof()运算符测试某一种类型数据所占存储空间长度,例如:sizeof(struct data),sizeof(x),sizeof(b),结构体变量、结构体数组的声明及初始