《C程序设计上机实验报告.doc》由会员分享,可在线阅读,更多相关《C程序设计上机实验报告.doc(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C程序设计实验报告实验名称:指针与数组 学时安排:2课时实验类别:上机操作型 实验要求:1人1组 一、实验目的1. 理解指针、地址和数组间的关系;2. 掌握通过指针操作数组元素的方法;3. 掌握数组名作为参数的编程方式。二、实验设备介绍软件需求: Visual C+ 6.0或CFree3.5以上版本硬件需求: 对于硬件方面的要求,建议配置是Pentium III 450以上的CPU处理器,64MB以上的内存,200MB的自由硬盘空间、CD-ROM驱动器、能支持24位真彩色的显示卡、彩色显示器、打印机。三、实验内容1. 定义函数void sort(int a,int n),用选择法对数组a中的元
2、素升序排序。自己定义main函数,并在其中调用sort函数。示例如下:Input n: 6Input array of 6 integers: 1 5 -9 2 4 -6After sorted the array is: -9 -6 1 2 4 52. 输入10个整数存储到数组a,再输入一个整数x,在数组a中查找x,若找到则输出相应的下标,否则显示“Not found!”。要求定义和调用函数search(int list, int n, int x),在数组list中查找元素x,若找到则返回相应下标,否则返回-1。参数n代表数组list中元素的数量。3. 改正程序error08_1.cpp中
3、的错误。该程序实现功能,有n个整数,使前面各数顺序循环移动m个位置(mn)。编写一个函数实现以上功能,在主函数总输入n个整数并输出调整后的n个数。输入输出结果如下面4行所示: Input n, m: 5 3Input array of 5 integers: 1 2 3 4 5After moved the array is: 3 4 5 1 2要求先读该源程序,并理解其中的算法。然后把正确的代码(按规范缩进)写入报告,并以注释的方式说明错误原因。注释示例如下:int i;/*循环控制变量不能定义为double类型*/提示:这是一个双重循环问题,内循环进行循环移位,外循环确定后移的位置。4.
4、有n个人围成一圈,按顺序从1到n编号。从第一个人开始报数,报数3的人退出圈子,下一个人从1开始重新报数,报数3的人退出圈子。如此循环,直到留下最后一个人。问留下来的人的编号。要求用指针来操作数组。输入输出示例如下:Input n: 5Last No. is: 4提示:可以把编号存在一个数组中,报到3的人赋值为0表示退出。可以另外定义两个变量,一个用来记录退出的人数,到n-1即结束,另外一个用来报数。四、程序清单第一题#include void swap(int *,int*); void sort(int a,int n);void main() int i,n,a8; printf(Inpu
5、t n:); scanf(%d,&n); printf(Input array of %d integers: ,n); for(i=0;in;i+) scanf(%d,&ai); sort(a,n); printf(After sorted the array is:); for(i=0;in;i+) printf(%3d,ai); printf(n);void sort(int a,int n) int i,j,index; for(i=0;in-1;i+) index=i; for(j=i+1;jn;j+) if(ajaindex) index=j; swap(&ai,&aindex);
6、 void swap(int *px,int *py) int t; t=*px; *px=*py; *py=t;第二题#includeint search(int list,int n,int x);void main() int i,x,result,a10; printf(Enter a0-a9:); for(i=0;i10;i+) scanf(%d,&ai); printf(Enter x:); scanf(%d,&x); result=search(a,10,x); if(result=-1) printf(Not found!n); else printf(The position
7、 is %dn,result); return 0;int search(int list,int n,int x) int i,result=-1; for(i=0;in;i+) if(listi=x) result=i; break; return result; 第三题#include void mov(int *, int, int);int main() int m, n, i, a80, *p; printf(Input n, m:); scanf(%d%d,&n,&m); printf(Input array of 5 int55egers:); for(p=a,i=0;in;i
8、+) scanf(%d,p+);/ p本身可取地址 mov(a,n,m); printf(After moved the array is:); for(i=0;in;i+) printf(%5d,ai); printf(n); return 0;void mov(int *x, int n, int m) int i,j,t; for(i=0;i0;j-)/*从倒数第二个元素开始,每个元素向后一个位置 */ xj=xj-1; /* 调试时设置断点 */ x0=t; /*将保存的最后元素值放在最前面*/ 第四题#includeint main() int i,j,n,t,count,a1000
9、0; printf(Input n:); scanf(%d,&n); for(i=0;i=n;i+) ai=i; count=0; i=1; j=0; while(countn) i=1; if(ai!=0) j+; if(j=3) t=i; ai=0; j=0; count+; i+; printf(Last No. is:%dn,t); return 0; 五、运行结果六、实验心得1、 C中数组名即是数组中首元素(下标为0的元素)的地址。注意:这不包括形参数组名,因为形参数组名并不占据实际的内存单元。它只是指向其它数组首地址的指针。2、 数组名(比如a)代表数组首元素的地址,它是一个指针常量,在程序中不能改变它的值。例如:a+是非法的。3、 实参数实参数组名代表一个固定的地址,或者说是指针常量。但形参数组并不是一个固定的地址,而是作为指针变量,它的值是可以改变的。在函数调用开始时,它的值等于实参数组首元素的地址,在函数执行期间,它可以再被赋值。4、指向数组的指针变量也可以带下标,如:pi与*(p+i)等价。*(p+i)与*(a+i)等价。5、 当实参是数组名时,传递的是该数组首元素的地址,即是一个指针。