C语言院实验报告.doc
池州学院实验报告姓 名_ 刘江地 学 号 专 业 计算机科学与技术 年级 10级计本(2)班 成 绩_课程名称:语言程序设计 教师签字_实验项目实验七 指针基础指导教师夏启寿实验目的1掌握指针和指针变量的概念。2掌握简单指针变量的定义和基本使用方法。3熟悉指针和一维数组的关系,掌握指向一维数组的指针变量的定义方法,熟练使用指针变量访问一维数组元素。4了解指针和二维数组的关系,掌握用指针表示二维数组元素的方法。5了解指针与字符串的关系,能熟练使用指针处理字符串。实验仪器计算机实验内容1用指针访问简单变量。从键盘输入三个整数,要求设三个指针变量p1,p2,p3,使p1指向三个数的最大者,p2指向次大者,p3指向最小者,然后按由小到大的顺序输出这三个数。2用指针实现选择法排序程序。输入20个整数,并用指针实现选择法升序排序。实验指导1用指针访问简单变量。 编程分析定义指向整型变量的指针变量,然后通过“*指针变量”的形式即可访问相应的简单变量。 参考程序/* 用指针访问简单变量的程序 */#include "stdio.h"void main() int a,b,c,temp; int *p1,*p2,*p3; printf("请输入三个整数值(a,b,c):n"); scanf("%d,%d,%d",&a,&b,&c); p1=&a; /* 使指针p1指向简单变量a */ p2=&b; /* 使指针p2指向简单变量b */ p3=&c; /* 使指针p3指向简单变量c */ if(*p1<*p2) if(*p1<*p3) ; /* 至此p1指向了三个数中的最大数 */ if(*p2<*p3) ; /* 至此p3指向了最小数,p2指向了中间数 */ printf("%d,%d,%dn",*p3,*p2,*p1); 程序调试 运行程序,任意输入三个整数(之间以逗号分隔),察看并分析程序运行结果。 运行程序,按由小到大的顺序输入三个整数(之间以逗号分隔),察看并分析程序运行结果。 运行程序,按由大到小的顺序输入三个整数(之间以逗号分隔),察看并分析程序运行结果。 3用指针实现选择法排序程序。 编程分析 定义一个int型一维数组a,并用指针p指向它。 用指针实现各个数组元素的输入。 用指针访问各个数组元素实现选择法排序。 输出排序结果。 参考程序/* 用指针实现的选择法排序程序 */#include "stdio.h"#define M 20void main( ) int aM,n,i,j,min,temp,*p,*q; printf("请输入排序数据:n"); for(p=a;p<a+M;p+) /* 输入数据 */ scanf("%d",p); printf("排序前数列:n"); for(p=a;p<a+M;p+) printf("%d ",*p); for(i=0;i<M-1;i+) /* 选择法排序 */ q=&ai; for(p=&ai+1;p<a+M;p+) if(*p<*q) i+ ; temp=ai; ai=*q; *q=temp; printf("n排序后数列:n"); for(p=a;p<a+M;p+) /* 输出排序结果 */ printf("%d ",*p); 程序调试 凡是排序程序,输入数据调试时至少要包括三种情况:任意的一组数据;一组升序数据;一组降序数据。 在上面的参考程序中,指针变量p在每一次的数组处理中都是变化的,不管是数组数据输入、数组数据输出、每一趟排序等,p指针总是逐步向后指向下一个元素。在编写调试程序时,指针p的指向也可以相对固定,而采用加(或减)移动量的方式指向其他的数组元素。系统实施(程序流程图、重要过程说明、参数设置、变量的说明等)1.输入:1,3,2 输出:1,2,3测试报告(调试输入数据、结果数据或状态。给出一、两个不同的输入和结果)1.输入:3,1,2 输出:3,2,12.输入:20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1输出:排序前数列:20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 排序后数列:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20结果分析(碰到的问题、如何解决、有何体会) 碰到的问题1.输入:123 结果错误 解决输入的数据之间要用逗号隔开体会输入数据时要看清输入的格式要求。附录(主要的源程序代码)1. #include "stdio.h"void main() int a,b,c,temp; int *p1,*p2,*p3; printf("请输入三个整数值(a,b,c):n"); scanf("%d,%d,%d",&a,&b,&c); p1=&a; /* 使指针p1指向简单变量a */ p2=&b; /* 使指针p2指向简单变量b */ p3=&c; /* 使指针p3指向简单变量c */ if(*p1<*p2) temp=*p2; *p2=*p1; *p1=temp; if(*p1<*p3) temp=*p3; *p3=*p1; *p1=temp; /* 至此p1指向了三个数中的最大数 */ if(*p2<*p3) temp=*p3; *p3=*p2; *p2=temp; ; /* 至此p3指向了最小数,p2指向了中间数 */ printf("%d,%d,%dn",*p3,*p2,*p1);2. #include "stdio.h"#define M 20void main( ) int aM,i,j=0;temp,*p,*q; printf("请输入排序数据:n"); for(p=a;p<a+M;p+) /* 输入数据 */ scanf("%d",p); printf("排序前数列:n"); for(p=a;p<a+M;p+) printf("%d ",*p); for(i=0;i<M-1;i+) /* 选择法排序 */ q=&ai; for(p=&ai+1;p<a+M;p+) if(*p<*q) i+ ; temp=ai; ai=*q; *q=temp;i=j+; printf("n排序后数列:n"); for(p=a;p<a+M;p+) /* 输出排序结果 */ printf("%d ",*p);