实验报告_实验2 指针(2)(学号_姓名)
一、实验目的:
1、掌握指针变量p的算术运算:p±n(n为整数)、p++(p--)、++p(--p),理解移动一个数据单位的真实含义;
2、能够用数组名或指针变量作函数形参,在函数中实现对数据的批量处理。
3、熟悉二维数组“行指针”、“列指针”的类型,加减1所移动的字节数,以及如何利用它们来存取数组元素。
二、实验内容
2、(基础题)使用指针编程实现:输入3个正整数,按由小到大顺序输出。程序运行结果如下所示:
(提示:可以调用swap(int * x, int * y)来实现)
程序代码:
3、(基础题)分析、运行下列程序,理解二维数组“行指针”、“列指针”的类型,加减1所移动
的字节数,熟悉二维数组元素的间接访问方法,并回答相关问题:
问题:
(1)二维数组a的“行指针”的类型是什么?加减1所移动的字节数是多少?列举2个该类型指针的例子;
答:
问题1:是int型的数组
问题2:1个字节
a[2][2]={{1,2}{3,4}}
(2)二维数组a的“列指针”的类型是什么?加减1所移动的字节数是多少?列举2个该类型指针的例子;
问题1:是int型的数组
问题2:4个字节
a[2][2]={{1,2}{3,4}}
(3)二维数组a的“列指针”与“行指针”有什么联系?a+i与a[i]、*(a+i)、&a[i]有什么关系?
(4)列出a[i][j]地址的3种写法。
Int *p=a;
4、(提高题)编程实现:在主函数中定义一个有10个元素的float数组,并赋值。该程序还包含两个函数:
(1)void change(float *x,int k)的功能是让该数组中的前k个元素值为0;
(2)void print(float *x,int n)的功能是输出该数组中的所有元素;
请在主函数中分别调用这两个函数,验证是否实现所要求功能。
程序代码:
#include<stdio.h>
int main()
{
void change(float* x, int k);
void print(float* x, int n);
float a[10], * p = a;
int i, k, n;
printf("请输入k的值:");
scanf_s("%d", &k);
printf("请输入10个数的值:");
for (p = a; p < (a + 10); p++)
scanf_s("%f", p);
printf("输入的10个数的值:");
for (i = 0, p = a; i <= 9; i++, p++)
printf("%2f", *p);
printf("\n");
p = a;
change(p, k);
p = a;
print(p, 10);
}
void change(float* x, int k)
{
int i = 0;
指针与二维数组 for (i = 0; i < k; i++, x++)
{
*x = 0;
}
}
void print(float* x, int n)
{
int i;
for (i = 0; i < n; i++, x++)
printf("%2f", *x);
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论