实验报告_实验2 指针(2)(1540707103_周家尧) 下载本文

内容发布更新时间 : 2024/12/25 17:22:26星期一 下面是文章的全部内容请认真阅读。

实验报告_实验2 指针(2)(1540707103_周家尧)

一、实验目的:

1、掌握指针变量p的算术运算:p±n(n为整数)、p++(p--)、++p(--p),理解移动一个数据单位的真实含义;

2、能够用数组名或指针变量作函数形参,在函数中实现对数据的批量处理。 3、熟悉二维数组“行指针”、“列指针”的类型,加减1所移动的字节数,以及如何利用它们来存取数组元素。

二、实验内容

2、(基础题)使用指针编程实现:输入3个正整数,按由小到大顺序输出。程序运行结果如下所示:

(提示:可以调用swap(int * x, int * y)来实现)

程序代码:

# include int main(void) {

int a,b,c;

printf(\请输入三个整数\\n\ scanf(\ swap(&a, &b); swap(&a, &c); swap(&b, &c);

printf(\由小到大的顺序输出为:\\n\ printf(\ return 0; }

swap(int * x, int * y) {

int t;

if(*x > *y) {

}

t = *x; *x = *y; *y = t; }

3、(基础题)分析、运行下列程序,理解二维数组“行指针”、“列指针”的类型,

加减1所移动的字节数,熟悉二维数组元素的间接访问方法,并回答相关问题: 问题:

(1)二维数组a的“行指针”的类型是什么?加减1所移动的字节数是多少?列举2个该类型指针的例子;

1、int(*)[5]; 2、20;

3、int a[4][5],int b[3][4][5];此时,a、b[0]为该类型指针;

(2)二维数组a的“列指针”的类型是什么?加减1所移动的字节数是多少?列举2个该类型指针的例子;

1、int *; 2、4;

3、int a[4][5];此时,a[0]、a[1]为该类型指针

(3)二维数组a的“列指针”与“行指针”有什么联系?a+i与a[i]、*(a+i)、&a[i]有什么关系?

1、二维数组a的“列指针”在数值上与“行指针”的首地址相同,但代表的意义不同, “行指针”在进行加减运算时,每加一跳到下一行,而“列指针”在进行加减运算时,每加一跳到下一列。

2、a + i 代表二维数组a的i行的首地址,与&a[i]相同;a[i]代表代表二维数组 a i行0列的元素地址,就是*(a+i);

(4)列出a[i][j]地址的4种写法。

&a[i][j] a[i]+j

*(a+i)+j

4、&(*(a+i))[j]

4、(提高题)编程实现:在主函数中定义一个有10个元素的float数组,并赋值。该程序还包含两个函数:

(1)void change(float *x,int k)的功能是让该数组中的前k个元素值为0; (2)void print(float *x,int n)的功能是输出该数组中的所有元素;

请在主函数中分别调用这两个函数,验证是否实现所要求功能。

程序代码:

#include

void change(float *x,int k) {

int i;

for(i=0;i

void print(float *x,int n) {

int i;

for(i=0;i

printf(\ }

int main() {

float f[10]= {1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9. 10.0}; int k, n;

printf(\ scanf(\