C语言 实验4指针实验

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验4指针实验

一、实验目的(四号黑体)

(1)通过实验进一步掌握指针的概念,会定义和使用指针变量;

(2)能够正确使用数组的指针和指向数组的指针变量;

(3)能够正确使用字符串的指针和指向字符串的指针变量;

(4)能正确使用指向函数的指针变量。

二、实验原理(算法分析(包括流程图))

1、a是二维数组,p和形参 pointer是指向整型数据的指针变量,P指向数组0行0列元素

a[0][0]。在调用move函数时,将实参p的值&a[0][0]递给形参 pointer,在move函数

中将a[i][j]与a门的值互换。

由于a数组的大小是3×3,而数组元素是按行排列的,因此a[j在a数组中是第(3×i+j)

个元素,例如,a[2[1是数组中第(3×2+1)个元素,即第7个元素(序号从0算起)。a[i[j

的地址是( pointer+3*i+j),同理,a[j][i]的地址是( poInter+3*j+i)。将

*( pointer+3*i+j)和*( pointer+3*j+i)互换,就是将a[i][j]和[i][j]互换

算法如下:

2、当p1所指向的字符比p2大时,t为正数(即,p1所指向的字符的ASC II码,减去p2所指向的字符的ASC II码大于0),当p1所指向的字符比p小大时,为负数,当p1所指向的字符与p2一样大时,t=0;所以实现上诉命令的算法如下:

三、实验过程原始记录(数据、图表、计算等)

1、(1)

本题目要求编程实现矩阵的转置,并且在实现这一操作时只能使用指针,因此解决这一问题时,应注意下面几个问题:

数组名是一个指针变量,但该指针变量是一个常量;

int a[10] 中的a 的类型等同于 int *p 定义的指针变量p;

int a[10][5]中定的a的类型等同于 int (*p)[5];

(2)程序代码如下:

#include

int main()

{

void move(int * pointer);

int a[3][3], * p, i;

printf("输入矩阵:\n");

for (i = 0; i < 3; i++)

scanf_s("%d%d%d", &a[i][0], &a[i][1], &a[i][2]);

p = &a[0][0];

move(p);

printf("转置后:\n");

for (i = 0; i < 3; i++)

printf("%d %d %d\n", a[i][0], a[i][1], a[i][2]);

return 0;

}

void move(int * pointer)

{

int i, j, t;

for (i = 0; i < 3; i++)

for (j = i; j < 3; j++)

{

t = *(pointer + 3 * i + j);

*(pointer + 3 * i + j) = *(pointer + 3 * j + i);

*(pointer + 3 * j + i) = t;

}

}

2、

程序代码如下:

#include "stdio.h"

int main(int argc, char* argv[])

{

int strcmp(char* p1, char* p2);

char s[100], a[100];

printf_s("输入一串字符1: ");

gets_s(a);

printf_s("输入一串字符2: ");

gets_s(s);

printf("%d\n", strcmp(a, s)); return 0; }

int strcmp(char* p1, char* p2)

{

int t;

t = *p1 - *p2;

for (;t == 0 && p1!="0"&&*p2!='0';) {

p1++;

p2++;

t = *p1 - *p2;

}

return t;

}

四、实验结果及分析

1、输入矩阵

结果如下:

2、(1))输入第一个字符串比第二个小

结果如下:

分析:a 的ASCII代码是97,c的是99,所以二者相减t=-2

(2)第一个字符串比第二个大

(3)输入完全相同的字符串

五、附录(自己实现的源代码)

1、

#include

int main()

{

void move(int * pointer);

int a[3][3], * p, i;

printf("输入矩阵:\n");

for (i = 0; i < 3; i++)

scanf_s("%d%d%d", &a[i][0], &a[i][1], &a[i][2]);

p = &a[0][0];

move(p);

printf("转置后:\n");

for (i = 0; i < 3; i++)

printf("%d %d %d\n", a[i][0], a[i][1], a[i][2]);

return 0;

}

void move(int * pointer)

{

int i, j, t;

for (i = 0; i < 3; i++)

相关文档
最新文档