实验10 数组指针综合练习

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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个函数完成,数组的地址通过指针传递给子函数,用主程序依次调之。

相关文档
最新文档