当前位置:
文档之家› 实验10数组指针综合练习.doc
实验10数组指针综合练习.doc
{
for(int i=O;i<nArrayNum;i++)
{
scanf("%d",pArray);//逐个输入数组的每个元素
pArray++;//每次指针加1,指向下一个元素
void OutputArray(int *pArray、//指向整型变ii的指针,史参将一维数组首地址传递过来int nArrayNum)//数组元素的具体个数
{
int i;
printf("the score of no.%d are:",n); for (i=O;i<N;i++)
printf("%5.2f\n",*(*(p+n)+i»;
}
float average(float *p,int n)
{
float *p_end; float sum=0,aver; p_end=p+n-l; for (;p<=p_end; p++)
2.
热身练习:设a为3*2的二维数组,内容为:1-6,有int *p=a;写程序完成如下测试2
测试内容
测试值
描述
a
a+l
a[l]
&a[l]
a[l】+l
&a[l]+l
*(a+l)
*(a+l)+l
(a+l)+l
&a[l][l]
a[l][l]
a[2]-a[l]
P
p+1
Hale Waihona Puke *P*p+l练习2,求二维数组中的最大数和最小数。
}
作业:仿照例子,写出把字符串2追加粘贴到字符串1的函数及主程序,如果两个字符串相 等,则不粘贴。例如:字符串1为stu,字符申2为dent,粘贴之后,字符中1变为:student。判断字符串相等,可以使用:strcmp函数。
4.
参考如下实例片段,该程序可以实现什么功能?请将程序补全。float average(float *pjnt n); void search(float (*p)[N] ,int n);
{
scanf("%d",pArray);//逐个输入数组的每个元素pArray++;//每次指针加1,指向下一个元素
}
}
void OutputArrayfint *pArray,//指向整型变量的指针,实参将二维数组首地址传递过来int nArrayRow, int nArrayCol)//数组元素的行数和列数
C
•、实验目的
1.
2.
3
二、实验内容
1.
热身练习:设a为一维数组,内容为:1-9,有int*p=a;写程序完成如下测试1
Tipsl用°/以可以输出十六进制的地址值,%o可以输出八进制地址值,测试值输出什么进制, 看你个人喜好啦!
测试内容
测试值
描述
a
a[l]
&a[l]
a+1
p+1
(*P)++
*p++
++(*p)
{
for(int i=O;i<nArrayNum;i++)
{
printf("%dn,*PArray);//逐个输出数组元素,然后指针加1,指向下一个元素pArray++;
}
printf("\n"h
练习1:在主函数中,测试一下这两个函数。再根据例子,写出冒泡法排序的函数,用指针 做参数。
Tips2指针指向一维数组,作为函数的参数,是一般软件中非常常见的方法,要熟悉并掌握。
{
for(int i=0;i<nArrayRow;i++) for(int j=0;j<nArrayCol,j++)
{
printffMdVpArray);//逐个输出数组元素,然后指针加1,指向下一个元素pArray++;
}
printf("\n"};
}
作业:写出求二维数组最大及最小数的函数及主程序,完成程序的功能。
#define M 3
#define N 4 main()
{
static float score[M][N]....//这里添加一个读入学生成绩的函数printf("average=%5.2f\n", average(score,M*N));
search(score,2);
}
void search(float (*p)[N] Jnt n)
++*p
练习:对一列整数进行输入,输出和排序,分别用函数实现,在主程序中测试,Tips2:虽然功 能和实验十一一样,但是,我们这次要用指针做为参数,来传递数组的地址了。
输入输出模块举例,首先写函数,数组和数组元素的个数作为形参,定义方法如下:
void lnputArray(int *pArray,//指向整型变量的指针,实参将一维数组首地址传递过来int nArrayNum>//数组元素的具体个数
{
char *szl="l am a teacher."; //sz是常见的字符串变ii开头
char *sz2="You are a student.〃;//字符串的指针,是字符变量的指针,存放字符串的首地址printf("string_a=%s\n string_b=%s\n〃,a,b};//输山可以使用%s完成copy_string(szl,sz2);//调用函数完成字符串的复制
sum=sum+(*p); aver=sum/n; return aver;
}
pUts(SZl);//输入输出也可以使用string.h库里的字符串函数完成puts(sz2);
//自制的字符串复制函数
void copy_string(char *pFrom,*pTo)
{一
while(*pFrom!=,\0,)
*pTo=*pFrom;
pFrom++;
pTo++;
}
*pTo='\0';//为什么要加这一句?
输入输出模块举例,首先写函数,数组和数组元素的个数作为形参,定义方法如下:
void lnputArray(int *pArray,//指向整型变量的指针,实参将二维数组首地址传递过来int nArrayRow, int nArrayCol)//数组元素的行数和列数
{
for(int i=0;i<nArrayRow;i++) for(int j=0;j<nArrayCol,j++)
问题:为什么pArny这个指针,既可以用来指一维数组元素,也可以用在指二维数组元素? 在两个程序中,pArray++的意思相同吗?
Tips3指针指向二维数组元素作为函数的参数,是一般软件中非常常见的方法,需要熟悉并
掌握。
3.
参考如下实例,完成字符串的复制:
#include "stdio.h" include "string.h" main()