计算机二级c语言数组ppt,计算机二级C语言考试C语言学习第5讲.ppt

这篇博客深入讲解了C语言中的数组,包括一维数组和二维数组的定义、初始化、引用以及运算。强调了数组名表示内存首地址且不能越界访问。此外,还介绍了指针的概念,包括指针变量的定义、初始化和使用,以及指针在函数中的应用,如地址传递和返回指针值的函数。博客通过实例解析了指针如何与数组交互,以及如何利用指针交换数组元素。

《计算机二级C语言考试C语言学习第5讲.ppt》由会员分享,可在线阅读,更多相关《计算机二级C语言考试C语言学习第5讲.ppt(38页珍藏版)》请在装配图网上搜索。

1、C语言程序设计,第五讲,第八章 数 组,构造数据类型之一 数组:有序数据的集合,用数组名标识 元素:属同一数据类型,用数组名和下标确定 8.1 一维数组 一维数组的定义 定义方式: 数据类型 数组名常量表达式;,合法标识符,表示元素个数 下标从0开始, :数组运算符 单目运算符 优先级(1) 左结合 不能用( ),例 int a6;,编译时分配连续内存 内存字节数=数组维数* sizeof(元素数据类型),数组名表示内存首地址, 是地址常量,一维数组的引用 数组必须先定义,后使用 只能逐个引用数组元素,不能一次引用整个数组 数组元素表示形式: 数组名下标 其中:下标可以是常量或整型表达式,例 。

2、int i=15; int datai; (不能用变量定义数组维数),例 int a10; printf(“%d”,a); () 必须 for(j=0;j10;j+) printf(“%dt”,aj); (),例 int data5; data5=10; /C语言对数组不作越界检查,使用时要 注意,一维数组的初始化 初始化方式,在定义数组时,为数组元素赋初值 (在编译阶段使之得到初值),int a5=1,2,3,4,5; 等价于:a0=1; a1=2; a2=3; a3=4; a4=5;,说明: 数组不初始化,其元素值为随机数 对static数组元素不赋初值,系统会自动赋以0值,当全部数组元素。

3、赋初值时,可不指定数组长度,如 int a5=6,2,3; 等价于: a0=6; a1=2;a2=3; a3=0; a4=0; 如 int a3=6,2,3,5,1; (),static int a5; 等价于:a0=0; a1=0; a2=0; a3=0; a4=0;,只给部分数组元素赋初值,int a=1,2,3,4,5,6; 编译系统根据初值个数确定数组维数,程序举例,例1若要求定义具有10个int 型的元素一维数组a, 则以下定义错误的是: A) #define N 10 int aN; B) #define n 5 int a2*n; C) int a5+5 ; D) int n=1。

4、0,an; 例2(08/9 21)若有定义语句:int m =5,4,3,2,1,i=4; 则下面对m数组元素的引用中错误的是( ) A)m-i B)m2*2 C) mm0 D)mmi 例3(08/9 ) 32)有如下程序: #include void fun(int a,int b) int t; t=a;a=b;b=t; main() int c10=1,2,3,4,5,6,7,8,9,0,i; for(i=0;k10;i+=2) fun(ci,ci+1);for(i=0;k10;i+) printf(%d,ci);printf(n); 程序的运行结果是 A)1,2,3,4,5,6,7,8。

5、,9,0, B)2,1,4,3,6,5,8,7,0,9, C)0,9,8,7,6,5,4,3,2,1, D)0,1,2,3,4,5,6,7,8,9,例4 08/4(31)有以下程序 #include main() int s12=1,2,3,4,4,3,2,1,1,1,2,3,c5=0,i; for(i=0;i12;i+) csi+; for(i=1;i5;i+) printf(%d,ci); printf(n); 程序的运行结果是( )。 A)1 2 3 4 B)2 3 4 4 C)4 3 3 2 D)1 1 2 3,8.2 二维数组及多维数组 二维数组的定义 定义方式: 数据类型数组名常量。

6、表达式常量表达式;,数组元素的存放顺序 原因:内存是一维的 二维数组:按行序优先,例 int a34; float b25; int c234; int a3,4; (),行数,列数,元素个数=行数*列数,二维数组理解,每个元素ai由包含4个元素 的一维数组组成,二维数组a是由3个元素组成,二维数组元素的引用 形式: 数组名下标下标 二维数组元素的初始化 分行初始化:,按元素排列顺序初始化,例1则以下数组定义错误的是:_____ 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;。

7、,例2以下程序: main() int i,t3=9,8,7,6,5,4,3,2,1; for (i=0;i3;i+) printf(“%d”,t2-ii; 程序执行后的输出结果是:_____ A) 7 5 3 B)3 5 7 C)3 6 9 D)7 5 1,例3 08/4(26)若有定义:int a23;, 以下选项中对a 数组元素正确引用的是( )。 A)a2!1 B)a23 C)a 03 D)a12!1 例4 08/9 12以下程序按下面指定的数据给x数组的下三角置数,并按如下形式输出,请填空。 4 3 7 2 6 9 1 5 8 10 #include main() int x44,n。

8、=0,i,j; for(j=0;j=j; 【12】) n+;xij= 【13】; for(i=0;i4;i+) for(j=0;j=i;j+) printf(%3d,xij); printf(n); ,(29)有以下程序 #include main() int a5=1,2,3,4,5, b5=0,2,1,3,0,i, s=0 for(i=0;i main() int b3 3=0,1,2,0,1,2,0,1,2,i,j,t=1; for(i=0; i3; i+) for(j=i;j=i;j+) t+=bibji; Printf(%dn,t); 程序运行后的输出结果是 A)1 B)3 C)4 。

9、D)9,2010年3月试题,第七章 指 针,C程序设计中使用指针可以:(了解) 使程序简洁、紧凑、高效 有效地表示复杂的数据结构 动态分配内存 得到多于一个的函数返回值,7.1 指针类型和指针变量,程序中: int i; float k;,内存中每个字节有一个编号-地址,i,k,编译或函数调用时为其分配内存单元,变量是对程序中数据 存储空间的抽象,7.1.1 地址和指针的概念,1、地址的概念,2、3、指针类型与指针变量 指针类型:地址也是数,这类数据就是 指针变量:专门存放地址的变量叫,2000,指针,指针变量,变量的内容,变量的地址, -直接访问,3,例 *i_pointer=20; -间接。

10、访问,20,例 k=i; -直接访问 k=*i_pointer; -间接访问,例 k=i; k=*i_pointer;,7.2 指针变量的定义 一般形式: 存储类型 数据类型 *指针名;,合法标识符,指针变量本身的存储类型,指针的目标变量的数据类型,表示定义指针变量 不是*运算符,例 int *p1,*p2; float *q ; static char *name;,注意: 1、int *p1, *p2; 与 int *p1, p2; 2、指针变量名是p1,p2 ,不是*p1,*p2 3、指针变量只能指向定义时所规定类型的变量 4、指针变量定义后,变量值不确定,应用前必须先赋值,指针变量的初。

11、始化和指针所指的变量 一般形式:存储类型 数据类型 *指针名=初始地址值;,赋给指针变量, 不是赋给目标变量,例 int i; int *p=,变量必须已说明过 类型应一致,例 int i; int *p=,用已初始化指针变量作初值,例 main( ) int i; static int *p= . (),不能用auto变量的地址 去初始化static型指针,7.3 指针变量的使用,例 main( ) int i=10; int *p; *p=i; printf(“%d”,*p); ,危险!,注意: 1、指针变量必须先赋值,再使用(没赋初值时为随机地址) 2、不允许将地址赋给一般变量,也不许将。

12、数值赋给指针变量; 3、级别相同才可相互赋值。,零指针与空类型指针 零指针:(空指针) 定义:指针变量值为零 表示: int * p=0;,p指向地址为0的单元, 系统保证该单元不作它用 表示指针变量值没有意义,#define NULL 0 int *p=NULL:,p=NULL与未对p赋值不同 用途: 避免指针变量的非法引用 在程序中常作为状态比较,例 int *p; . while(p!=NULL) . ,void *类型指针 表示: void *p; 使用时要进行强制类型转换,例 char *p1; void *p2; p1=(char *)p2; p2=(void *)p1;,表示不指。

13、定p是指向哪一种 类型数据的指针变量,main() int a=7,b=8,*p,*q,*r; p= ,例1、以下程序的运行结果是:____,考学结合例题:,2、设已有定义:float x;则以下对指针变量p进行定义且赋初值的语句中正确的是( )A)float *p=1024; B)int *p=(float x);C)float p=,4、(05/9 28)设有定义:int n1=0,n2,*p=的输出结果是()。 A)随机值 B)0 C)x的地址 D)p的地址,7.4 指针和函数 7.4.1 指针变量作函数参数 7.4.2 返回指针值的函数 7.4.3 指向函数的指针变量,swap(int。

14、 *p1, int *p2) int p; p=*p1; *p1=*p2; *p2=p; main() int a,b; int *pointer_1,*pointer_2; scanf(%d,%d, ,5,9,2000,2002,5,9,COPY,5,例 将数从大到小输出,7.4.1 指针变量作为函数参数,swap(int *p1, int *p2) int p; p=*p1; *p1=*p2; *p2=p; main() int a,b; int *pointer_1,*pointer_2; scanf(%d,%d, ,5,9,2000,2002,5,9,例 将数从大到小输出,运行结果:9。

15、,5,地址传递,swap(int *p1, int *p2) int *p; *p=*p1; *p1=*p2; *p2=*p; main() int a,b; int *pointer_1,*pointer_2; scanf(%d,%d, ,运行结果:9,9,编译警告! 结果不对!,int x; int *p=,5,9,2000,2002,9,9,COPY,假设2000,例 将数从大到小输出,swap(int x,int y) int t; t=x; x=y; y=t; main() int a,b; int *pointer_1,*pointer_2; scanf(%d,%d, ,运行结果:。

16、5,9,值传递,5,9,2000,2002,COPY,5,5,9,例 将数从大到小输出,运行结果:5,9,swap(int *p1, int *p2) int *p; p=p1; p1=p2; p2=p; main() int a,b; int *pointer_1,*pointer_2; scanf(%d,%d, ,5,9,2000,2002,COPY,2000,地址传递,2000,2002,例 将数从大到小输出,Void f(int y,int *x) y=y+*x; *x=*x+y; main() int x=2,y=4; f(y, ),例:以下程序的运行结果是:____,考学结合例题:。

17、,7.4.2 返回指针的函数 (返回值为某指针类型的函数) 函数定义形式: 类型标识符 *函数名(参数表); 例 int *f(int x, int y) ,例 写一个函数,求两个int型变量中居于较大值的变量的地址,2,3,2002,2000,*,例 写一个函数,求两个int型变量中居于较大值的变量的地址,2,3,3,2,*,例 写一个函数,求两个int型变量中居于较大值的变量的地址,不能返回形参或局部变量 的地址,思考为什么?,200A,7.4.3 指向函数的指针 函数在编译时被分配的入口地址(程序段的存储地址) 称为函数指针, 用函数名表示。我们将这一地址存到一个指针变量里去,这个变量就。

18、是指向函数的指针变量。,函数指针变量赋值:如p=max;,函数返回值的数据类型,专门存放函数入口地址 可指向返回值类型相同的不同函数,指向函数的指针变量 定义形式: 数据类型 (*指针变量名)(); 如 int (*p)();,函数指针变量指向的函数必须有函数说明,函数调用形式: c=max(a,b); c=(*p)(a,b); c=p (a,b); 对函数指针变量pn, p+, p-无意义,( )不能省 int (*p)() 与 int *p()不同,用函数指针变量作函数参数,例:用函数指针变量作参数,求最大值、最小值和两数之和,08/4(40)设有定义语句int (*f)(int);,则以下叙述正确的是( )。 A)f 是基类型为int 的指针变量 B)f 是指向函数的指针变量,该函数具有一个int 类型的形态 C)f 是指向int 类型一维数组的指针变量 D)f 是函数名,该函数的返回值是其类型为int 类型的地址 09/9(33)设有以下函数: void fun(int n,char *s) 则下面对函数指针的定义和赋值均正确的是 A)void (*pf)( );pf=fun; B)void *pf();pf=fun; C)void *pf();*pf=fun; D)void (*pf)(int,char);pf= int *p1=,考学结合例题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值