文档库 最新最全的文档下载
当前位置:文档库 › 一维数组与指针

一维数组与指针

一维数组与指针
一维数组与指针

一维数组与指针

1 关于数组元素地址的说明:

一维数组在内存储单元中是连续存放的。

数组名a代表数组的首地址即a[0]的地址,&a[0],是一个地址常量,是数组存储单元最开头第一个字节的地址。

既然是一个地址值就可以给指针变量

Int a[5],*pa=a; (数组名即数组首地址赋给指针变量,指针变量指向数组首个元素)

Int a[5],*pa=&a[0];(遇上面等价)。

Int a[5],*pa=&a[3];

2 数组元素的引用

(1)引用各个数组元素的地址值:

①通过使用数组名

定义一个数组a[5] 则a代表&a[0] a+1,a+2,a+3,a+4 依次代表&a[1],&a[2],&a[3],&a[4]。这里要注意,a的值为地址值,且a为一个地址常量,是一个常量,不能用来赋值,自加自减等。a+n的计算规则是地址值的计算规则,即当前地址值(可以用十进制表示)加上n乘以数组元素的数据类型所占的字节数,代表数组元素a[n]。

可以通过循环语句和scanf语句来将输入的数存放到一位数组中,即

Int a[5];

F0r(i=0;i<5;i++)

Scang(“%d”,a+i);

②通过指针

如int a[5],*pa=a; 等价于int a[5],*pa=&a[0];

Int a[5],*pa;

For(pa=a,i=0;i<5;i++)

Scanf(“%d”,pa++);

或者

For(pa=a,i=0;i<5;i++)

{Scanf(“%d”,pa);pa++;}

或者

For(pa=a;pa-a<5;pa++)

Scanf(“%d”,pa);

(2)引用各个数组元素所在的存储单元或存储单元里面的值

①通过对数组名取内容运算符*即*(a+i)。即a[0]可以用*(a+0)或者*a来引用,a[1]可以用*(a+1)来引用,一次类推。

可以逐个输出数组元素的值

For(i=0;i<4;i++)

Printf(“%d”,*(a+i);

②通过对指针变量取内容运算

*(p+i)

③通过数组名后面跟下标即a[i]

④通过指针变量后面跟下标pa[i],这里有个前提即pa使数组名a的地址及pa=a;

3 总结:

(1)引用数组元素的方式有:*(a+i) *(p+i) a[i] p[i](前提是p=a)

(2)引用数组各个元素地址的方式有:a+i ,p+i ,&a[i] , &p[i](前提是p=a)

(3)注意a与p的区别,a是不可变的,而p中的地址是可以改变的,所以a++,a+=3,a=p,p=&a,都是非法的。但对于p是合法的。

4 数组作为函数的参数

见下面的一张表:

实参形参

数组名数组名

指向数组的指针变量

指向数组的指针变量数组名

(即指针变量存放的地址为数组首地址)指向数组的指针变量

地址表达式数组名

指向数组的指针变量

说明:①数组名代表数组的首地址,将数组名作为实参传递给形参,形参数组依此为首地址,这样形参数组与实参数组就公用一段存储区,因此形参数组元素的变化必然引起实参数组元素的同时变化,并达到可以返回多个值的目的。当然如果用一个指针变量指向数组的首地址作为实参与上面是在含义上等价的。

②在函数体中,另作定义的数组只在调用函数时,系统为他开辟连续的内存单元,函数调用结束后,即可释放。所以不可以返回这个数组名。

③数组作为形参的北调函数的形式为int fun(int a[])

C语言数组编程题

实验4 数组 一.实验目的: 1.掌握一维数组的定义、赋值和输入输出的方法; 2.掌握字符数组定义、初始化、赋值的方法; 3.了解常见的字符串函数功能及其使用方法; 4.掌握二维数组的定义与引用。 二.实验内容: 1.编写程序,输入10个整数存入一维数组,统计输出其中的正数、负数和零的个数。 2.编写程序,输入10个整数存入一维数组,再按逆序重新存放后再输出。 3.编写程序,输入10个整数存入一维数组,对其进行升序排序后输出。 4.编写程序,求二维数组中元素的最大值和最小值。 5.编写程序,求一个4×4矩阵中所有元素之和。 6.编写程序:从键盘上输入一字符串,统计输出该字符串中的字母字符、数字字符、空格以及其他字符的个数。 7.编写程序:从键盘上输入一字符串,并判断是否形成回文(即正序和逆序一样,如“abcd dcba”)。 8. 产生一个由10个元素组成的一维数组并输出,数组元素由随机数(0-99)构成。 9. 产生一个由10个元素组成的一维数组,数组元素由随机数(0-99)构成。按照升序排列并输出。再输入一个数,按原来的规律将其插入并输出。 页脚内容1

10. 产生一个由10个元素组成的一维数组,数组元素由随机数(0-99)构成。按照升序排列并输出。再输入一个数,要求找出该数是数组中的第几个元素,如果不在数组中,则输出找不到。 11. 找出一个二维数组中的鞍点,即该位置上的元素在该行最大,在该列最小。可能没有鞍点。 12. 编程输出杨辉三角。(要求输出10行)(杨辉三角:每行端点与结尾的数为1.每个数等于它上方两数之和。每行数字左右对称,由1开始逐渐变大) 13. 输入一行字符,统计大写字母、小写字母、数字、空格以及其它字符个数。 14. 编写程序,将两个字符串连接起来,不用strcat。 15. 编写程序实现strcpy函数功能。 16. 编程实现strlen函数功能。 17. 编程求2-4+6-8…-100+102的值。 18. 假设某人有100,000现金。每经过一次路口需要进行一次交费。交费规则为当他现金大于50,000时每次需要交5%如果现金小于等于50,000时每次交5,000。请写一程序计算此人可以经过多少次这个路口。 19. 输入若干个正整数,以0结束,将其中大于平均值且个位为5的数排序后输出。(按由大到小的顺序排序) 20. 输入一个字符串,将其中ASCII码值为基数的字符排序后输出。(按由小到大的顺序) 21. 输入一个以回车结束的字符串(少于80个字符),滤去所有的非16进制字符后,组成一个新字符串(16进制形式),然后将其转换为10进制数后输出。 22. 读入一个正整数n(1<=n<=6),再读入n阶矩阵,计算该矩阵除副对角线、最后一行、最后一列 页脚内容2

指针数组及指向一维数组的指针讲解

一、指针数组及指向一维数组的指针(数组指针)讲解 1、数组指针(也称行指针) 定义 int (*p)[n]; ()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。 如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。 p=a; //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0] p++; //该语句执行过后,也就是p=p+1;p跨过行a[0][]指向了行a[1][] 所以数组指针也称指向一维数组的指针,亦称行指针。 2、指针数组 定义 int *p[n]; []优先级高,先与p结合成为一个数组,再由int *说明这是一个整型指针数组,它有n个指针类型的数组元素。这样赋值是错误的:p=a;只存在p[0]、p[1]、p[2]...p[n-1],而且它们分别是指针变量可以用来存放变量地址。但可以这样 *p=a; 这里*p表示指针数组第一个元素的值,a的首地址的值。 如要将二维数组赋给一指针数组: int *p[3]; int a[3][4]; for(i=0;i<3;i++) p[i]=a[i]; 这里int *p[3] 表示一个一维数组内存放着三个指针变量,分别是p[0]、p [1]、p[2]所以要分别赋值。 这样两者的区别就豁然开朗了,数组指针只是一个指针变量,似乎是C语言里专门用来指向二维数组的,它占有内存中一个指针的存储空间。指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间。 还需要说明的一点就是,同时用来指向二维数组时,其引用和用数组名引用都是一样的。 比如要表示数组中i行j列一个元素: *(p[i]+j)、*(*(p+i)+j)、(*(p+i))[j]、p[i][j] 优先级:()>[]>* 例1、下列给定程序中,函数fun()的功能是:从N个字符串中找出最长的那个串,并将其地址作为函数值返回。 #include #include #define N 4

指针习题

指针(C语言程序设计习题解答与上机指导) 1.以下说法正确的是() A.一个变量的地址称为该变量的指针 B.变量的地址和指向它的指针变量的地址是相同的 C.指针变量的指向一旦确定就不能改变 D.不能定义两个指针变量指向同一个变量 答案:A 2.执行下面程序的输出结果为() int m=1,j,+p=&m; for (j=0;j<3;j++) *p=*p+j; printf(“%d,%d”,m,*p); A. 1,4 B. 4,4 C.1,1 D.4,1 答案:B 3.若有“int a[6],*p;p=a;”,则不能正确对数组元素进行引用的是() A.a[0] B. *p C. *(p+2) D. p+2 答案:D 4.下列语句正确的是() A. char a[]=”dcba”; B. char a[10];a[]=”dcba”; C. char *p;*p=”dcba”; D. char a[10];a=”dcba”; 答案:A 5.若有“char *a[2]={“321”,“654”};”,以下说法正确的是() A.数组a为2*4的二维数组 B.可以用puts(*a[0]);输出“321” C.a[0]的值为“321”的首地址 D.定义错误 答案C 6.设有定义:float x,*p= &x;则下列表达式中错误的是() A.*&p B. *&x C. &*p D. &*x 答案:D 7.若定义short num[][3]={2,4,6,8,10,12};则num[1][1]的值是() A.8 B.4 C.2 D.10 答案:D 8.设有定义语句“float s[10],*p1=s,*p2=s+9;”,则下列表达式中,不能表示数组s的合法数组元素的是() A.*(p1--)B.*(++p1)C.*(--p2)D.*(++p2) 答案:D 9.设有:char s[3][8]={“1”,“21”,“321”},*p=s;则正确的语句是() A.printf(“%s”,*(p+1*8+0)) B.puts(*(*(p+1)+0)) C.scanf(“%s”,*(*(p+1)+0)) D.gets(&s[1][1]) 答案:D 10.执行下列程序段后,*(p+5)的值是()

数学模型习题解答解读

上机练习题一 班级: 姓名: 学号: 1.建立起始值=3,增量值=5.5,终止值=44的一维数组x 答案: x=(3:5.5:44) 2.写出计算 Sin(30o )的程序语句. 答案: sin(pi*30/180) 或 sin(pi/6) 3.矩阵??????????=187624323A ,矩阵???? ??????=333222111B ;分别求出B A ?及A 与B 中对应元素之间的乘积. 答案:A = [3,2,3; 4,2,6; 7,8,1] B = [1,1,1; 2,2,2; 3,3,3] A*B ;A.*B 4计算行列式的值1 876243 23=A 。答案:det(A) 5对矩阵 ???? ??????=187624323A 进行下述操作。 (1)求秩。答案:rank(A) (2)求转置。答案:A' (3) 对矩阵求逆,求伪逆。答案:inv(A) ,pinv(A) (4) 左右反转,上下反转。答案:fliplr(A),flipud(A) (5) 求矩阵的特征值. 答案:[u,v]=eig(A) (6) 取出上三角和下三角. 答案:triu(A) tril(A) (7)以A 为分块作一个3行2列的分块矩阵。答案:repmat(a) 6 计算矩阵??????????897473535与???? ??????638976242之和。 >> a=[5 3 5;3 7 4;7 9 8]; >> b=[2 4 2;6 7 9;8 3 6]; >> a+b 7 计算??????=572396a 与?? ????=864142b 的数组乘积。 >> a=[6 9 3;2 7 5]; >> b=[2 4 1;4 6 8];

C语言一维数组教案

学科:计算机科学与技术 课程:C语言程序设计 课题:一维数组 课时:2 教学目标:1、掌握一维数组的定义和引用 2、掌握一维数组的初始化方法 3、了解与一维数组有关的应用编程方法 教学重点:一维数组的定义和引用、初始化方法 教学难点:与一维数组有关的应用编程方法 教学方法:举例法,引导法 教学步骤:1、通过一个例子提出问题来引出本节课的知识点 2、讲授一维数组的定义和引用、初始化方法 3、示例训练 4、进行本节课的总结及作业布置 教具:黑板计算机投影仪 教学过程: 一、导入: 提问:保存一个班50位同学的一门功课的成绩,并且找出最高分和最低分,应如何实现? 解题思路:定义50个变量,从键盘中输入值,然后再相互比较。处理起来很复杂,是

否有更简便的方法?引出本节课的知识点-----数组。 二、讲授: 1、数组概述: ·数组:是数目固定,类型相同的若干个变量的有序集合,用数组名标识。 序:是数组元素之间的位置关系,不是元素值的大小顺序。 数组名:是用于区别其它数组及变量的。 ·数组元素:集合中的变量,属同一数据类型,用数组名和下标确定。 下标:是数组元素在数组中的位置。 ·数组的维数:数组名后所跟下标的个数。 2、一维数组的定义 一维数组是指由一个下标数组元素组成的数组。其定义形式为: 存储类型数据类型数组名[常量表达式] 例如:static int score[50]; 它表示定义了一个名为score的数组,该数组有50个元素,其存储类型为静态型,数据类型为整型。 说明: (1)存储类型为任选项,可以是auto、static、extern存储类型,但是没有register 型。 (2)数据类型是用来说明数组元素的类型:int , char , float。 (3)数组名的命名应遵守标识符的命名规则,但是不能与其他变量同名。

c数组指针题含答案

数组指针01:逆序输出 从键盘输入n个整数(n<100),存放在一个一维数组中,逆序输出能被3整除的元素,并逆序输出数组下标为3的倍数的元素。 输入格式:第一个整数为个数n,后续为n个整数 输出格式:第一行能被3整除的元素,第二行为下标为3的倍数的元素,各个数值之间用空格分隔。 输入:10 2 7 9 10 5 4 3 6 8 20 输出: 6 3 9 20 3 10 2 #include using namespace std; const int MAX=100; int main() { int a[MAX],n,i; cin>>n;

for(i=0;i>a[i]; for(i=n-1;i>=0;i--) if(a[i]%3==0) cout<=0;i--) if(i%3==0) cout<

输出格式:下标为3的倍数的元素,各个数值之间用空格分隔。输入:10 2 7 9 10 5 4 3 6 8 20 输出:20 3 10 2 #include using namespace std; const int MAX=100; int main() { int a[MAX],b[MAX],n,i; cin>>n; for(i=0;i>a[i]; b[n-1-i]=a[i]; } for(i=0;i

指向二维数组的指针

指向二维数组的指针 一. 二维数组元素的地址 为了说明问题, 我们定义以下二维数组: int a[3][4]={{0,1,2,3}, {4,5,6,7}, {8,9,10,11}}; a为二维数组名, 此数组有3行4列, 共12个元素。但也可这样来理解, 数组a由三个元素组成: a[0], a[1], a[2]。而它中每个元素又是一个一维数组, 且都含有4个元素(相当于4列), 例如, a[0]所代表的一维数组所包含的4 个元素为a[0][0], a[0][1], a[0][2], a[0][3]。如图5.所示: ┏━━━━┓┏━┳━┳━┳━┓ a─→┃a[0] ┃─→┃0 ┃1 ┃2 ┃3 ┃ ┣━━━━┫┣━╋━╋━╋━┫ ┃a[1] ┃─→┃4 ┃5 ┃6 ┃7 ┃ ┣━━━━┫┣━╋━╋━╋━┫ ┃a[2] ┃─→┃8 ┃9 ┃10┃11┃ ┗━━━━┛┗━┻━┻━┻━┛ 图5. 但从二维数组的角度来看, a代表二维数组的首地址, 当然也可看成是二维数组第0行的首地址。a+1就代表第1行的首地址, a+2就代表第2行的首地址。如果此二维数组的首地址为1000, 由于第0行有4个整型元素, 所以a+1为1008, a+2 也就为1016。如图6.所示 a[3][4] a ┏━┳━┳━┳━┓ (1000)─→┃0 ┃1 ┃2 ┃3 ┃ a+1 ┣━╋━╋━╋━┫ (1008)─→┃4 ┃5 ┃6 ┃7 ┃ a+2 ┣━╋━╋━╋━┫ (1016)─→┃8 ┃9 ┃10┃11┃ ┗━┻━┻━┻━┛ 图6. 既然我们把a[0], a[1], a[2]看成是一维数组名, 可以认为它们分别代表它们所对应的数组的首地址, 也就是讲, a[0]代表第0 行中第0 列元素的地址, 即&a[0][0], a[1]是第1行中第0列元素的地址, 即&a[1][0], 根据地址运算规则, a[0]+1即代表第0行第1列元素的地址, 即&a[0][1], 一般而言, a[i]+j即代表第i行第j列元素的地址, 即&a[i][j]。 另外, 在二维数组中, 我们还可用指针的形式来表示各元素的地址。如前所述, a[0]与*(a+0)等价, a[1]与*(a+1)等价, 因此a[i]+j就与*(a+i)+j等价, 它表示数组元素a[i][j]的地址。 因此, 二维数组元素a[i][j]可表示成*(a[i]+j)或*(*(a+i)+j), 它们都与a[i][j]等价, 或者还可写成(*(a+i))[j]。 另外, 要补充说明一下, 如果你编写一个程序输出打印a和*a, 你可发现它们的值是相同的, 这是为什么呢? 我们可这样来理解: 首先, 为了说明问题, 我们把二维数组人为地看成由三个数组元素a[0], a[1], a[2]组成, 将a[0], a[1], a[2]看成是数组名它们又分别是由4个元素组成的一维数组。因此, a表示数组第0行的地址, 而*a即为a[0], 它是数组名, 当然还是地址, 它就是数组第0 行第0 列元素的地址。

C语言一维数组的基本操作

一.插入:C语言数组怎么插入一个元素#include #include #define MAX 40 void insert(int*p,int n,int m) { int i,k; for(i=0;i=m) { k=i; break; } for(i=n-1;i>=k;i--) p[i+1]=p[i]; printf("%d\n",k); p[k]=m; } void sort(int*p,int n) { int i,j; for(i=1;ip[j+1]) { int t; t=p[j+1]; p[j+1]=p[j]; p[j]=t; } } void main() { int a[MAX]; int n,i,m,d; printf("输入数据个数(n<40):"); d=scanf("%d",&n); while(d!=1&&n>=40) { system("cls"); f flush(stdin); printf("请重新输入:"); scanf("%d",&n); } printf("请输入数组元素:");

for(i=0;i #define N 10 void main( ) { int a[N] , num ,i , *p , n=N; int j; /*输入N个数到数组a中;*/ for(i=0;i

数组及指针 知识点总结

第9章数组 第1课 知识点一 定义一维数组 格式: 类型名数组名[元素个数] 例1 定义一个包含4个整数的数组a int a[4]; 例2 定义一个包含3个双精度数的数组b double b[3]; 注意: C语言中数组的下界从0开始计数。 例如: a[4]的4个元素分别为a[0]、a[1]、a[2]、a[3] 知识点二 一维数组的初始化 用一对大括号将数组的初值括起来。 例1 int a[3]={1, 2, 3}; 此例中a[0]值为1、a[1]值为2、a[2]值为3

例2 int a[5]={0}; 此例中数组a的全部元素值均为0 例3 int a[3]={1, 2, 3, 4}; 此例中由于初值个数多于数组元素个数,所以非法。例4 int a[ ]={0, 0, 0, 0}; 此例中省略数组元素个数,初值为4个0 等价于int a[4]={0}; 注意: 数组名是一个常量值,不能对它赋值。 例如: int a[3]; a=5; 此语句非法,应改为a[0]=5; 知识点三 一维数组应用 例1 从键盘上输入10个整数,输出最大数和最小数。 #include main() { int a[10],i,max,min; printf("请输入10个整数:\n");

for(i=0;i<=9;i++) scanf("%d",&a[i]); max=a[0]; min=a[0]; for(i=1;i<=9;i++) { if(a[i]>max) max=a[i]; if(a[i]

关于二维数组和指向指针的指针

以前一直有种误解: 二维数组的是数组的数组,所以数组的首地址是指向第一个元素指针,而这个元素又是一个数组,所以把数组首地址理解为指向指针的指针。 如int a[3][2];,以前一直认为a是一个指向int指针的指针,即是一个int**。最近发现这是错的。 如果int **p=a; 编译就会报错。如果强制转换int **p=(int **)a,则使用p[i][j]访问数组元素时出错。 首先,因为a的定义为int a[3][2];则a的类型是int* [3][2]数组类型,或者int* [][2],即指向大小为2的数组的指针,类型与int **不同,所以int **p=a;出错。 其次,考虑p[i][j]访问a的数组元素时出错的问题。当我们使用指向二维数组的指针的下标运算来访问数组元素时,如a[i][j],它等同于*(a+i*2+j);即必须要知道第二维的大小才能访问。考虑我使用p[i][j]的后果:p是int**,所以p[i]为*(p+i),而这个结果被视作一个指针,在这里记做pp=*(p+i),所以p[i][j]等同于pp[j]。最终的结果为*(pp+j),并将这个结果解释为一个int值。 int a[3][2]; int val=0; for(int i=0;i<3;++i) { for(int j=0;j<2;++j) { a[i][j]=val++; } } /*使用a[i][j]的方式显然可以正常访问该二维数组*/ /*下面使用指针直接访问,当然是不是int**了……*/ int *p=&a[0][0];/*注意,此处使用int *p=a;或者int *p=a[0];是不对的,p的类型是int型指针,*a或者a[0]是int (*)[2]类型,编译会报错的,* *尽管&a[0][0]、a、a[0]的数值相同……*/ for(int i=0;i<6;++i) { p[i];/*这样可以遍历所有元素*/ }

程序设计基础(C)第七章数组习题

学号:姓名:成绩: 程序设计基础(C)第七章数组习题 一、选择题 1.下列叙述中错误的是()。 A)对于double 类型数组,不可以直接用数组名对数组进行整体输入或输出 B)数组名代表的是数组所占存储区的首地址,其值不可改变 C)在程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息D)可以通过赋初值的方式确定数组元素的个数 2.下列关于字符串的叙述中正确的是()。 A)C 语言中有字符串类型的常量和变量 B)两个字符串中的字符个数相同时才能进行字符串大小的比较 C)可以用关系运算符对字符串的大小进行比较 D)空串一定比空格打头的字符串小 3.当用户要求输入的字符串中含有空格时,应使用的输入函数是()。 A)scanf( ) B)getchar( ) C)gets( ) D)getc( ) 4.若有定义语句:int a[3][6];,按在内存中的存放顺序,a 数组的第10 个元素是()。 A)a[0][4] B)a[1][3] C)a[0][3] D)a[1][4] 5.已有定义:char a[ ]="xyz",b[ ]={'x', 'y', 'z'};,下列叙述中正确的是()。 A)数组a 和b 的长度相同 B)a 数组长度小于b 数组长度 C)a 数组长度大于b 数组长度 D)上述说法都不对 6.下列程序的输出结果是()。 main( ) { char a[7]="a0\0a0\ 0"; int i,j; i=sizeof(a); j=strlen(a); printf("%d %d\n",i,j); } A)2 2 B)7 6 C)7 2 D)6 2 7.下列能正确定义一维数组的选项是()。 A)int a[5]={0,1,2,3,4,5}; B)char a[ ]={0,1,2,3,4,5}; C)char a={'A', 'B', 'C'}; D)int a[5]="0123"; 8.有以下程序 #include main() { int a[]={2,3,5,4},i; for(i=0;i<4;i++) switch(i%2) { case 0:

C语言编程一维数组的使用

实验三一维数组的使用 【实验目的】 1掌握一维数组、二维数组的定义和初始化方法。 2熟悉使用字符数组处理字符串处理的方法。 【实验内容】 1.输入10个学生的成绩,求平均成绩,并将低于平均成绩的分数打印出来. 编写程序: #include void readdata (float score[10]) { int i; printf("依次输入10个学生的成绩:\n"); for(i=0;i<10;i++) scanf("%f",&score[i]); return; } float aver(float score[10]) { float sum; int i; for(sum=0,i=0;i<10;i++) sum=sum+score[i]; return(sum/10); } void printff(float score[10],float ave) { int i; printf("低于平均分的成绩为:\n"); for(i=0;i<10;i++) if(score[i]

ave=aver(score); printf("average=%6.2f\n",ave); printff(score,ave); } 2、将一个数组中的值按逆序重新存放。例如,原来顺序为8,6,5,4,1。要求改为1,4,5,6,8。 编写程序: #include int main() { int i,j,a[5]={8,6,5,4,1},b[5]; for(i=0,j=4;i<5,j>=0;i++,j--) b[j]=a[i]; for(i=0;i<5;i++) a[i]=b[i]; for(i=0;i<5;i++) cout< int main() { int a[10]; int i = 0,j=0; int max,temp; for(i=0;i<10;++i) { printf("Please input the %dth number:",i+1); scanf("%d",&a[i]); } printf("The arry has been input is:\n"); for(i=0;i<10;i++) { printf("%d,",a[i]); } printf("\n"); for(i=0;i<10;i++) { max=i;

C语言程序设计实验答案数组、指针与字符串

实验06 数组、指针与字符串(4学时) (第6章数组、指针与字符串) 一、实验目的 二、实验任务 6_1(习题6-25)编写并测试3×3矩阵转置函数,使用数组保存3×3矩阵。 6_2(习题6-26)使用动态内存分配生成动态数组来重新完成上题(n阶方阵),使用指针实现函数的功能。 6_3 编程实现两字符串的连接。要求使用字符数组保存字符串,不要使用系统函数。 6_4 使用string类声明字符串对象,重新实现上一小题。 6_5(习题6-27)声明一个Employee类。 其中包括姓名、街道地址、城市和邮编等属性,以及change_name()和display()等函数。display()显示姓名、街道地址、城市和邮编等属性,change_name()改变对象的姓名属性,实现并测试这个类。 6_6(习题6-27)声明包含5个元素的对象数组,每个元素都是Employee 类型的对象。 6_7 修改实验4中的people(人员)类。 具有的属性如下:姓名char name[11]、编号char number[7]、性别char sex[3]、生日birthday、身份证号char id[16]。其中“出生日期”声明为一个“日期”类内嵌子对象。 用成员函数实现对人员信息的录入和显示。 要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、聚集。 在测试程序中声明people类的对象数组,录入数据并显示。

三、实验步骤 1.(编程,习题6-25)编写矩阵转置函数,输入参数为3×3整型数组。 使用循环语句实现矩阵元素的行列对调,注意在循环语句中究竟需要对哪些元素进行操作,编写main()函数实现输入输出。程序名:lab6_1.cpp。 参考运行结果: ★程序及运行结果: //lab6_1.cpp #include using namespace std; void move(int matrix[][3]){ int temp; for(int i=0;i<3;i++) for(int j=0;j>mat[i][j]; } cout<<"\n输入的3×3矩阵为:"<

【精选资料】VB控件 数组 过程复习题 参考答案2

常用标准控件作业 一、选择题 1.下列关于属性设置的叙述错误的是_______B__。 A.一个控件具有什么属性是Visual Basic预先设计好的,用户不能改变它 B.一个控件具有什么属性值是Visual Basic预先设计好的,用户不能改变它 C.一个控件的属性既可以在属性窗口中设置,也可以用程序代码设置 D.一个控件的属性在属性窗口中设置后,还可以再利用程序代码为其设置新值 2.以下过程是标签Label1的___A______事件。 Prviate Sub Label1_Click( ) End Sub A.单击 B.双击 C.拖拽 D.移动 3.下列控件中可设置滚动条是____C_____。 A.检查框(复选框) B.框架 C.文本框 D.标签框 4.标签所显示的内容,由___C______属性值决定。 A. Text B. Name C. Caption D. Alignment 5.定时器的定时间隔单位是__C_______。 A. 秒 B. 微秒 C. 毫秒 D. 分 6.检查框(复选框)的控件名称为______B___。 A. OptionBotton B. CheckBox C. PictureBox D. Image 7.若要求向文本框输入密码时,只在文本框中显示&号,则应当在此文本框的属性窗口中设置______D___。 A. Text属性值为& B. Caption属性值为& C. PasswordChar属性值为空 D. PasswordChar属性值为& 8.若要设置定时器的定时间隔,可通过__A_______属性来设置。 A. Interval B. Value C. Enabled D. Text 9.若要设置定时器的定时间隔设为5秒,应将Interval属性值设为_D________。 A. 5 B. 50 C. 500 D. 5000 10.若要使不可见命令按钮显示出来,可通过设置_____A____属性的值为True来实现。 A.Visible B.Enabled C.Default D.Value 11.若要使定时器起作用,应将其__D_______属性设置值设为True。 A.Interval B.Value C.Text D.Enabled 12.若要使命令按钮失效,可设置_____B____属性为False来实现。 A.Value B.Enabled C.Visible D.Cancel 13.若要向列表框新增列表项,可使用_____D____方法来实现。 A.Add B.RemoveItem C.Clear D.AddItem 14.要获得垂直滚动条Vscrollbar控件所能表示的最大值,可通过调用该控件的_____B____属性来实现。 A.Value B.Max C.Min https://www.wendangku.net/doc/5312159462.html,rgeChange 15.要将命令按钮上的文字设置为“粗体”可通过设置__B_______属性值为True来实现。 A.FontItalic B.FontBold C.FontUnderline D.FontSize 16.要将命令按钮上的文字设置为“斜体”可通过设置____A_____属性值为True来实现。 A.FontItalic B.FontBold C.FontUnderline D.FontSize 17.要将命令按钮上的字体设为“隶书”,可设置______C___的属性为“隶书”。 A.FontBold B.BackItalic C.FontName D.FontSize 18.以下选项中,不属于单选按钮属性的是____D_____ A.Enabled B.Caption https://www.wendangku.net/doc/5312159462.html, D.Min 19.组合框的风格可通过____C_____属性来设置。 A.BackStyle B.BorderStyle C.Style D.Sorted 20.标签的边框由_____C____属性的设置来决定。 A.BackColor B.BackStyle C.BorderStyle D.AutoSize 21.单选按钮的控件名称为____D_____。 A.Botton B.CheckBox C.PictureBox D.OptionBotton 22.单选按钮的当前状态可通过___A______属性来访问。 A.Value B.Checked C.Selected D.Caption 23.当滚动条中的滑块位置变化时,将触发其___C______事件。 A.LostFocus B.SetFocus C.Change D.GetFocus 24.假定Picture1和Form1分别为图片框和窗体的名称,以下语句___A______可清除图片框中的文本信息。 A.Picture1.cls B.Picture1.clear C.Form1.cls D.Form1.clear 25.确定一个窗体或控件的大小的属性是_____B____。 A.Width或Height B.Width和Height C.Top或Left D.Top和Left

C语言一维数组的定义和引用

C语言一维数组的定义和引用 在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在C语言中,数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。本章介绍数值数组和字符数组,其余的在以后各章陆续介绍。 7.1一维数组的定义和引用 7.1.1一维数组的定义方式 在C语言中使用数组必须先进行定义。一维数组的定义方式为:类型说明符数组名[常量表达式]; 其中:类型说明符是任一种基本数据类型或构造数据类型。数组名是用户定义的数组标识符。方括号中的常量表达式表示数据元素的个数,也称为数组的长度。 例如: int a[10]; 说明整型数组a,有10个元素。 float b[10],c[20]; 说明实型数组b,有10个元素,实型数组c,有20个元素。 char ch[20]; 说明字符数组ch,有20个元素。 对于数组类型说明应注意以下几点: 数组的类型实际上是指数组元素的取值类型。对于同一个数组,其所有元素的数据类型都是相同的。 数组名的书写规则应符合标识符的书写规定。 数组名不能与其它变量名相同。 例如: main() { int a; float a[10]; …… } 是错误的。 方括号中常量表达式表示数组元素的个数,如a[5]表示数组a有5个元素。但是其下标从0开始计算。因此5个元素分别为a[0],a[1],a[2],a[3],a[4]。 不能在方括号中用变量来表示元素的个数,但是可以是符号常数或常量表达式。 例如: #define FD 5 main() { int a[3+2],b[7+FD];

练习6-指针与一维数组ans

练习6 指针与一维数组参考答案 一、目的 1、掌握指针变量的定义和引用方法; 2、掌握用指向一维数组的指针编写应用程序的一般方法。 二、实验 1.运行程序C6_1r.C(《指导》P38实验3.6-1(1)),验证结果。 运行结果:a=13,b=10 2.运行程序C6_2r.C(《指导》P38实验3.6-1(2)),验证结果。 运行结果:2,2,2 3.运行程序C6_3r.C(《指导》P38实验3.6-1(3)),验证结果。 运行结果:1 2 3 4 4.程序修改:C6_4m.C首先使指针pa指向变量a(初值为10),然后通过pa间接访问a的方法将a的值修改为20。程序在一对/**/之间有两个错误,请修改。 #include void main() {int a=10,*pa; /**/ pa=&a; /*将20赋给pa指向变量(即a)*/ *pa=20; /*将20赋给pa指向变量(即a)*/ /**/ printf("%d\n",a); } 5.运行程序C6_5m.C,输入两个整数,观察程序能否实现功能:使用指针将两个数按降序重新存放。如果不能实现,请修改程序实现上述要求。 #include void main( ) {int a,b,*p1=&a,*p2=&b,t; printf("input a and b:"); scanf("%d %d",&a,&b); if(a #include #define N 6 void main()

指针习题

指针习题 (1) 若有说明“int n=2,*p=&n,*q=p;”,则以下非法的赋值语句为。 A. p=q; B. *p=*q; C. n=*q; D. p=n; (2) 若程序已包含头文件stdio.h,以下选项中正确运用指针变量的程序段是。 A. int i=NULL; B. float *f=NULL; scanf("%d",i); *f=10.5; C. char t='m',*c=&t; D. long *L; *c=&t; L='\0'; (3) 设有定义“int A,*pA=&A;”,以下scanf语句中能正确为变量A读入数据的是。 A. scanf("%d",pA); B. scanf("%d",A); C. scanf("%d",&pA); D. scanf("%d",*pA); (4) 已有定义:int i,a[10],*p;,则合法的赋值语句。 A. p=100; B. p=a[5]; C. p=a[2]+2; D. p=a+2; (5) 有以下程序 main() { int x[8]={8,7,6,5,0,0},*s; s=x+3; printf("%d\n", s[2]); } 执行后输出的结果是。 A. 随机值 B. 0 C. 5 D. 6 (6) 有以下程序 main() { int a[3][2]={0},(*ptr)[2],i,j; for(i=0;i<2;i++) { ptr=a+i; scanf("%d",ptr); ptr++;} for(i=0;i<3;i++) { for(j=0;j<2;j++) printf("%2d", a[i][j]); printf("\n"); } } 若运行时输入:1 2 3<回车>,则输出结果是 D 。 A. 产生错误信息 B. 1 0 C. 1 2 D. 1 0 2 0 3 0 2 0 0 0 0 0 3 0 (7) 有以下程序 void sort(int a[],int n) { int i,j,t;

-+串数组树作业(参考答案)

第四-六章串、数组、树作业 一、判断正误:(每小题1分,共5分) 正确在()内打√,否则打× . 1.(√)子串是主串中任意个连续字符组成的序列. 2.(×)线性结构只能用顺序结构存放,非线性结构只能用链表存放. 3.(√)完全二叉树的某结点若无左孩子,则它必是叶结点. 4.(√)二叉树有五种基本形态. 5. (√)由树的中序表示和前序表示可以导出树的后序表示. 6. (√)将一棵树转换为二叉树表示后,该二叉树的根结点没有右子树. 7. (√)采用二叉树来表示树时,树的先根次序遍历结果与其对应的二叉树的前序遍历结果是一样的. 8. (×)在Huffman树中,权值较大的叶子结点离根较远. 9. (×)用一维数组存储二叉树时,是以先根遍历的次序存储结点. 二、填空题 1.已知二维数组A[0..10][0..20]采用行序为主方式存储,每个元素占2个存储单元, 并且A[0][0]的存储地址是1024, 则A[6][18]的地址是1312(1024+2*(6*21+18)) . 2. 深度为5的二叉树最多有_____31___个结点(根结点层数为1). 3.高度为h的完全二叉树最少有2h-1个结点. 4. 二叉树的先序遍历序列为:EFHIGJK,中序遍历序列为:HFIEJKG,则该二叉树根的右子树的根是:G . 5. N个结点的二叉树,采用二叉链表存放,空链域的个数为N+1 . 6. 填空完成下面中序遍历二叉树的非递归算法: void InOrder(BiTree root) { InitStack ( &S ); p = ____root_____ ; while ( _____p________ || ! IsEmpty(S)) { while (p!=NULL) { Push(&S, __p___ ) ; p = _____p->lchild_________ ; } if ( ____! IsEmpty(S)___________ ) { Pop(&S, __p_____ ) ; Visit ( p -> data ); p = ___p->rchild____________ ; } } } 三、选择题 1.表达式a*(b?c)+d的后缀表达式是( B). A)abcd*?+ B)abc?*d+ C)abc*?d+ D)+?*abcd 2.对于有N个结点高度为K的满二叉树(结点编号为1到N,根结点的层数为1),其第K 层上最后1个结点的编号为 ( D ). A)2K B)2K?1 C)B)2K?1?1 D)2K?1 3.将一棵有100个结点的完全二叉树从根这一层开始,每一层从左到右依次对结点 进行编号,根结点编号为1,则编号最大的非叶结点的编号为:( C ) . A)48 B)49 C)50 D)51 4.在下列存储形式中,哪一个不是树的存储形式?( D ) . A)双亲表示法 B)孩子链表表示法 C)孩子兄弟表示法 D)顺序存储表示法

相关文档