《C语言程序设计-实验第六次上机实验报告》由会员分享,可在线阅读,更多相关《C语言程序设计-实验第六次上机实验报告(34页珍藏版)》请在金锄头文库上搜索。
1、7.第六次实验C语言程序设计 实验报告专业 计算机科学与技术 班级 信安1302班 日期 成绩 实验组别 第 6 次实验 指针实验&结构与联合实验 指导教师 学生姓名 学号 同组人姓名 实验名称 指针实验&结构与联合实验 7.1实验目的1.熟练掌握指针的说明、赋值、使用。2.掌握用指针引用数组的元素,熟悉指向数组的指针的使用。3.熟练掌握字符数组与字符串的使用,掌握指针数组及字符指针数组的用法。4.掌握指针函数与函数指针的用法。5.掌握带有参数的main函数的用法。6.熟悉和掌握结构的说明和引用,结构的指针,结构数组,以及函数中使用结构的方法。7.掌握动态储存分配函数的用法,掌握自引用结构和单
2、向链表的创立,遍历,结点的增删,查找等操作。8.了解字段结构和联合的用法。7.2实验内容一设计一个函数reverse(a, n),将一维数组a的值逆置。如,逆置前,A:20、10、90、59、60、80、70,逆置后,A:70、80、60、59、90、10、20。源程序如下:shangji6chengxu29#include void sort(int *a,int n);int main() int x100,n,i,*p=x; printf(enter n:); scanf(%d,&n); printf(enter numbers:); for(i=0;in;i+) scanf(%d,p+
3、i); sort(x,n); for(i=0;in;i+) printf(%4d,*(p+i); return 0;void sort(int *a,int n) int i,j,t; for(i=0;in-1;i+) for(j=0;jn-1-i;j+) t=*(a+j);*(a+j)=*(a+j+1);*(a+j+1)=t; 实验步骤:1. 定义一个数组存放数据,实现数据的输入和存储。2. 定义一个子函数进行排序,用把数据两两交换来实现。调试及编译过程:测试数据:任意选取一组数据:出现的缺乏及修改:无 运行结果:出现预期的结果。二设计一个函数BubbleSort(a, n),采用冒泡排序算
4、法,实现一维数组的整数进行排序的功能。源程序如下:shangji6chengxu30#include void BubbleSort(int *a,int n);int main() int a100,n,i; printf(enter n:); scanf(%d,&n); printf(enter numbers:); for(i=0;in;i+) scanf(%d,&ai); BubbleSort(a,n); for(i=0;in;i+) printf(%6d,ai); return 0;void BubbleSort(int *a,int n) int t,*p=a,i,j; for(i
5、=0;in-1;i+) for(j=0;j*(p+j+1) t=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=t; 实验步骤:1. 定义数组实现数据的输入和存放。2. 定义一个子函数实现数据的冒泡法排序。调试及编译过程:测试数据:任意选取一组数据按从小到大顺序排列测试数据:任意选取一组数据按任意顺序排列出现的缺乏及修改:无 运行结果:出现预期的结果。 三设计一个一个函数find(a, n, x),实现对在一个数组的整数进行查找功能。如果给定值x在数组a中,返回其所在的位置(即下标值),否那么返回-1。源程序如下:shangji6chengxu31#include int fi
6、nd(int *a,int n,int x);int main() int a100,n,x,i; printf(enter n:); scanf(%d,&n); printf(enter numbers:); for(i=0;in;i+) scanf(%d,(a+i); printf(enter x:); scanf(%d,&x); if(find(a,n,x)=-1) printf(not found!); else printf(the number is %d,find(a,n,x); return 0;int find(int *a,int n,int x) int i,*p=a;
7、for(i=0;in;i+) if(*(p+i)=x) return (i); return (-1);实验步骤:1. 定义一个数组实现数据的输入和存放。2. 定义一个子函数实现查找的功能并在主函数中调用该函数。调试及编译过程测试数据:任意选取一组数据,后来输入的数能被找到测试数据:任意选取一组数据后来输入的数不能被找到出现的缺乏及修改:无 运行结果:出现预期的结果四输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。如果有多对数字的和等于输入的数字,输出任意一对即可。例如,输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此,输出
8、4和11。源程序如下:shangji6chengxu32#include int main() int a100,n,x,i,j; printf(enter n:); scanf(%d,&n); printf(enter numbers:); for(i=0;in;i+) scanf(%d,a+i); printf(enter x:); scanf(%d,&x); for(i=0;in;i+) for(j=0;jn;j+) if(*(a+i)+*(a+j)=x) printf(%d+%d=%d,*(a+i),*(a+j),x); return 0; return 0;实验步骤:1 定义一个数组
9、实现数据的输入和存放。2 用两层循环逐一检验,遇到满足条件的即输出。调试及编译过程:测试数据:任意选取一组数据:出现的缺乏及修改:无 运行结果:出现预期的结果。五检验并打印魔方矩阵在下面的55阶魔方矩阵中,每一行、每一列、每一对角线上的元素之和都是相等的,试编写程序将任意55阶矩阵中的元素存储到一个二维整型数组中,然后检验其是否为魔方矩阵,并将其按如下格式显示到屏幕上。17241815235714164613202210121921311182529源程序如下:shangji6chengxu33#include int main() int a55,i,j,s=0,s1=0,s2,s3; pr
10、intf(enter numbers:); for(i=0;i5;i+) for(j=0;j5;j+) scanf(%d,*(a+i)+j); for(i=0;i5;i+) for(j=0;j5;j+) printf(%4d,*(*(a+i)+j); printf(n); for(i=0;i5;i+) s+=*(*(a+i)+i); for(i=0;i5;i+) s1+=*(*(a+i)+4-i); if(s=s1) for(i=0;i5;i+) s2=0; for(j=0;j5;j+) s2+=*(*(a+i)+j); if(!(s2=s) printf(not!); return 0; for(i=0;i5;i+) s3=0; for(j=0;j5;j+) s3+=*(*(a+j)+i); if(!(s3=s) printf(not!); return 0; else printf(not!); return 0;实验步骤:1.定义数组实现数据的输入和存放。2.分别对二维矩阵的行列主次对角