您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 其它相关文档 > 实验报告-实验2-指针(2)(1540707103-周家尧)
实验报告_实验2指针(2)(1540707103_周家尧)一、实验目的:1、掌握指针变量p的算术运算:p±n(n为整数)、p++(p--)、++p(--p),理解移动一个数据单位的真实含义;2、能够用数组名或指针变量作函数形参,在函数中实现对数据的批量处理。3、熟悉二维数组“行指针”、“列指针”的类型,加减1所移动的字节数,以及如何利用它们来存取数组元素。二、实验内容2、(基础题)使用指针编程实现:输入3个正整数,按由小到大顺序输出。程序运行结果如下所示:(提示:可以调用swap(int*x,int*y)来实现)程序代码:#includestdio.hintmain(void){inta,b,c;printf(请输入三个整数\n);scanf(%d%d%d,&a,&b,&c);swap(&a,&b);swap(&a,&c);swap(&b,&c);printf(由小到大的顺序输出为:\n);printf(%d,%d,%d,a,b,c);return0;}swap(int*x,int*y){intt;if(*x*y){t=*x;*x=*y;*y=t;}}3、(基础题)分析、运行下列程序,理解二维数组“行指针”、“列指针”的类型,加减1所移动的字节数,熟悉二维数组元素的间接访问方法,并回答相关问题:问题:(1)二维数组a的“行指针”的类型是什么?加减1所移动的字节数是多少?列举2个该类型指针的例子;1、int(*)[5];2、20;3、inta[4][5],intb[3][4][5];此时,a、b[0]为该类型指针;(2)二维数组a的“列指针”的类型是什么?加减1所移动的字节数是多少?列举2个该类型指针的例子;1、int*;2、4;3、inta[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]代表代表二维数组ai行0列的元素地址,就是*(a+i);(4)列出a[i][j]地址的4种写法。&a[i][j]a[i]+j*(a+i)+j4、&(*(a+i))[j]4、(提高题)编程实现:在主函数中定义一个有10个元素的float数组,并赋值。该程序还包含两个函数:(1)voidchange(float*x,intk)的功能是让该数组中的前k个元素值为0;(2)voidprint(float*x,intn)的功能是输出该数组中的所有元素;请在主函数中分别调用这两个函数,验证是否实现所要求功能。程序代码:#includestdio.hvoidchange(float*x,intk){inti;for(i=0;ik;i++)x[i]=0;}voidprint(float*x,intn){inti;for(i=0;in;i++)printf(%d\t,x[i]);}intmain(){floatf[10]={1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9.10.0};intk,n;printf(k=);scanf(%d,&k);change(f,k);printf(n=);scanf(%d,&n);print(f,n);return0;}
本文标题:实验报告-实验2-指针(2)(1540707103-周家尧)
链接地址:https://www.777doc.com/doc-5696791 .html