实验10 数组指针综合练习
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C程序设计实验10:数组指针综合练习
一、实验目的
1.熟悉一维数组元素指针的基本概念和使用方法;
2.熟悉指向二维数组元素指针的基本概念和使用方法;
3了解一维数组指针的基本概念和使用方法;
二、实验内容
1. 熟悉一维数组元素指针的基本概念和使用方法;
热身练习:设a为一维数组,内容为:1-9,有int *p=a; 写程序完成如下测试1
练习:对一列整数进行输入,输出和排序,分别用函数实现,在主程序中测试,Tips2:虽然功能和实验十一一样,但是,我们这次要用指针做为参数,来传递数组的地址了。
输入输出模块举例,首先写函数,数组和数组元素的个数作为形参,定义方法如下:void InputArray(int *pArray,//指向整型变量的指针,实参将一维数组首地址传递过来
int nArrayNum )//数组元素的具体个数
{
for(int i=0;i { scanf("%d",pArray);//逐个输入数组的每个元素 pArray++;//每次指针加1,指向下一个元素 } } void OutputArray(int *pArray,//指向整型变量的指针,实参将一维数组首地址传递过来 int nArrayNum )//数组元素的具体个数 { for(int i=0;i { printf("%d ", *pArray);//逐个输出数组元素,然后指针加1,指向下一个元素 pArray++; } printf("\n"); } 练习1:在主函数中,测试一下这两个函数。再根据例子,写出冒泡法排序的函数,用指针做参数。 Tips2 指针指向一维数组,作为函数的参数,是一般软件中非常常见的方法,要熟悉并掌握。 2.熟悉指向二维数组元素指针的基本概念和使用方法; 热身练习:设a为3*2的二维数组,内容为:1-6,有int *p=a; 写程序完成如下测试2 练习2,求二维数组中的最大数和最小数。 输入输出模块举例,首先写函数,数组和数组元素的个数作为形参,定义方法如下: void InputArray(int *pArray,//指向整型变量的指针,实参将二维数组首地址传递过来 int nArrayRow, int nArrayCol)//数组元素的行数和列数 { for(int i=0;i for(int j=0;j { scanf("%d",pArray);//逐个输入数组的每个元素 pArray++;//每次指针加1,指向下一个元素 } } void OutputArray(int *pArray,//指向整型变量的指针,实参将二维数组首地址传递过来 int nArrayRow, int nArrayCol)//数组元素的行数和列数 { for(int i=0;i for(int j=0;j { printf("%d ", *pArray);//逐个输出数组元素,然后指针加1,指向下一个元素 pArray++; } printf("\n"); } 作业:写出求二维数组最大及最小数的函数及主程序,完成程序的功能。 问题:为什么pArray这个指针,既可以用来指一维数组元素,也可以用在指二维数组元素?在两个程序中,pArray++的意思相同吗? Tips3 指针指向二维数组元素作为函数的参数,是一般软件中非常常见的方法,需要熟悉并掌握。 3.熟悉指针指向字符串的基本概念和使用方法。 参考如下实例,完成字符串的复制: #include “stdio.h” #include “string.h” main() { char *sz1=“I am a teacher.”; //sz 是常见的字符串变量开头 char *sz2=“You are a student.”;//字符串的指针,是字符变量的指针,存放字符串的首地址printf(“string_a=%s\n string_b=%s\n”,a,b);//输出可以使用%s完成 copy_string(sz1,sz2);//调用函数完成字符串的复制 puts(sz1);//输入输出也可以使用string.h 库里的字符串函数完成 puts(sz2); //自制的字符串复制函数 void copy_string(char *pFrom,*pTo) { while(*pFrom!=’\0’) { *pTo=*pFrom; pFrom++; pTo++; } *pTo=’\0’;//为什么要加这一句? } 作业:仿照例子,写出把字符串2追加粘贴到字符串1的函数及主程序,如果两个字符串相等,则不粘贴。例如:字符串1为stu,字符串2为dent,粘贴之后,字符串1变为:student。判断字符串相等,可以使用:strcmp函数。 4.了解一维数组指针的基本概念和使用方法; 参考如下实例片段,该程序可以实现什么功能?请将程序补全。 float average(float *p,int n); void search(float (*p)[N] ,int 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] ,int n) { int i; printf(“the score of no.%d are:”,n); for (i=0;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-1; for (;p<=p_end; p++) sum=sum+(*p); aver=sum/n; return aver; } 编写子函数,实现查找有一门以上课程不及格的学生,打印出他们的全部课程的成绩。课堂练习过的,忽略该题目。 5.编写程序 对于一个n*n矩阵A。矩阵A的鞍点是一个位置(i,j),在该位置上的元素是第i行上的最小数,第j列上的最大数。一个矩阵A也可能没有鞍点。你的任务是找出A的鞍点。要求将二维数组的输入、输出、求鞍点和鞍点打印,分别用4个函数完成,数组的地址通过指针传递给子函数,用主程序依次调之。