ImageVerifierCode 换一换
格式:DOCX , 页数:42 ,大小:339.24KB ,
资源ID:6142734      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6142734.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C语言程序设计实验第六次上机实验报告.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C语言程序设计实验第六次上机实验报告.docx

1、C语言程序设计实验第六次上机实验报告7.第六次实验C语言程序设计 实验报告专业 计算机科学与技术 班级 信安1302班 日期 2014.5.24 成绩 实验组别 第 6 次实验 指针实验&结构与联合实验 指导教师 学生姓名 学号 同组人姓名 实验名称 指针实验&结构与联合实验 7.1实验目的1.熟练掌握指针的说明、赋值、使用。2.掌握用指针引用数组的元素,熟悉指向数组的指针的使用。3.熟练掌握字符数组与字符串的使用,掌握指针数组及字符指针数组的用法。4.掌握指针函数与函数指针的用法。5.掌握带有参数的main函数的用法。6.熟悉和掌握结构的说明和引用,结构的指针,结构数组,以及函数中使用结构的

2、方法。7.掌握动态储存分配函数的用法,掌握自引用结构和单向链表的创建,遍历,结点的增删,查找等操作。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

3、:); for(i=0;in;i+) scanf(%d,p+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. 定义一个子函数进行排序,用把数据两两交换来实现。调试及编译过程:测试数据:任意选取一组数据:出现的不足及修改:无 运行结果:出现预期的结果。(

4、二)设计一个函数BubbleSort(a, n),采用冒泡排序算法,实现一维数组的整数进行排序的功能。源程序如下: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

5、 *a,int n) int t,*p=a,i,j; for(i=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。源

6、程序如下:shangji6chengxu31#include int find(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

7、find(int *a,int n,int x) int i,*p=a; for(i=0;in;i+) if(*(p+i)=x) return (i); return (-1);实验步骤:1. 定义一个数组实现数据的输入和存放。2. 定义一个子函数实现查找的功能并在主函数中调用该函数。调试及编译过程测试数据:任意选取一组数据,后来输入的数能被找到测试数据:任意选取一组数据(后来输入的数不能被找到)出现的不足及修改:无 运行结果:出现预期的结果(四)输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。如果有多对数字的和等于输入的数字,输出任意一对即可。

8、例如,输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此,输出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),*(

9、a+j),x); return 0; return 0;实验步骤:1 定义一个数组实现数据的输入和存放。2 用两层循环逐一检验,遇到满足条件的即输出。调试及编译过程:测试数据:任意选取一组数据:出现的不足及修改:无 运行结果:出现预期的结果。(五)检验并打印魔方矩阵在下面的55阶魔方矩阵中,每一行、每一列、每一对角线上的元素之和都是相等的,试编写程序将任意55阶矩阵中的元素存储到一个二维整型数组中,然后检验其是否为魔方矩阵,并将其按如下格式显示到屏幕上。17241815235714164613202210121921311182529源程序如下:shangji6chengxu33#includ

10、e int main() int a55,i,j,s=0,s1=0,s2,s3; printf(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+

11、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.分别对二维矩阵的行列主次对角线进行求和运算,判断是否为魔方矩阵。调试及编译过程:测试数据:输入一组魔方矩阵的数据出现的不足及修改:无 运行结果:输出预期结果。(六)编写一个函数swap(x,y),分别采用3种不同的算法实现两个变量值的交

12、换功能。源程序1如下:shangji6chengxu34shangji6chengxu34shangji6chengxu34#include void swap(int *x,int *y);int main() int a,b; scanf(%d%d,&a,&b); swap(&a,&b); printf(%dt%d,a,b); return 0;void swap(int *x,int *y) int t; t=*x; *x=*y; *y=t;源程序2如下:#include void swap(int *a,int *b);int main() int x,y; scanf(%d%d,&x

13、,&y); swap(&x,&y); printf(%dt%d,x,y); return 0;void swap(int *x,int *y) *x=(*x)+(*y); *y=(*x)-(*y); *x=(*x)-(*y);源程序3如下:#include void swap(int *x,int *y);int main() int x,y; scanf(%d%d,&x,&y); swap(&x,&y); printf(%dt%d,x,y); return 0;void swap(int *x,int *y) *x=*x*y; *y=*x*y; *x=*x*y;实验步骤:1 选取三种合适的方

14、法进行交换。2 因为要用到子函数,于是将这三种方法中的参数均改为指针操作。调试及编译过程:测试数据:任意选取一组数据测试数据:将以上数据交换输入出现的不足及修改:无 运行结果:出现预期的结果。(七)设计一个计算MAXa,b的程序,要求a和b,以命令行中参数形式给出。源程序如下:shangji6chengxu35#includeint main(int argc,char *argv) int a=atoi(argv1); int b=atoi(argv2); if(ab) printf(%d,a); else printf(%d,b); return 0;实验步骤:直接进行比较并输出较大值调试

15、及编译过程:测试数据:任意选取一组数据测试数据:交换上面两数出现的不足及修改:刚开始没有将字符型换成整型导致错误,后来使用atoi函数解决。运行结果:改正后输出预期的结果。(八)设计一个函数create(L),其功能是建立一个“先进后出”的链表。源程序如下:shangji6chengxu36#include #include struct List int i; struct List * next;typedef struct List mylist;int main(int argc, const char * argv) struct List * h = NULL; mylist *

16、p; h = (mylist*)malloc(sizeof(mylist); h-i = 0; h-next = NULL; int n; scanf(%d,&n); while (n) int temp; scanf(%d,&temp); p = (mylist*)malloc(sizeof(mylist); p-i = temp; p-next = h; h = p; -n; while(h&(h-i!=0) printf(%8dt,h-i); h=h-next; return 0;实验步骤:1. 定义结构型的变量,创建链表。2. 循环定义链表的起点和终点,定义结构的数据域。3. 输出。调

17、试及编译结果:测试数据:任意选取一组数据测试数据:将上述数据反向输入出现的不足及修改:无 运行结果:输出预期的结果。(九)设计一个函数insert(L,i,e),其功能是在链表L中的第i个元素之间插入新元素e。源程序如下:shangji6chengxu37#include #include #include struct List int i; struct List * next;typedef struct List mylist;mylist* insert(mylist * L ,int i,int e) mylist * pri =L; int j; for (j = 1; j ne

18、xt; mylist * p = (mylist*)malloc(sizeof(mylist); p-i = e; p-next = pri-next; pri-next = p; return L;int main(int argc, const char * argv) struct List * h = NULL; int insert_number,locate; printf(enter the number you want to insert in:); scanf(%d,&insert_number); printf(enter the locate you want to i

19、nsert:); scanf(%d,&locate); mylist * p; h = (mylist*)malloc(sizeof(mylist); h-i = 0; h-next = NULL; int n; printf(enter the number of list:); scanf(%d,&n); while (n) int temp; scanf(%d,&temp); p = (mylist*)malloc(sizeof(mylist); p-i = temp; p-next = h; h = p; -n; h = insert(h,locate,insert_number);

20、mylist * temp = h; while (temp&(temp-i!=0) printf(%d ,temp-i); temp = temp-next; return 0;实验步骤:1. 根据上一个实验写出创建链表的过程。2. 定义子函数进行数据的插入,在此过程中,将要插入的数放入一个新的结构性变量中,并将此结构性变量的指针域指向原链表中的插入位置,使链表按原顺序继续下去。调试及编译过程:测试数据:任意选取一组数据测试数据:任意选取一组数据出现的不足及修改:无 运行结果:出现预期的结果。 (十)设计一个函数delete(L,i),其功能是删除在链表L中的第i个元素。源程序如下:shan

21、gji6chengxu38#include #include #include struct List int i; struct List * next;typedef struct List mylist;mylist* insert(mylist * L ,int i) mylist * pri =L; int j; for (j = 1; j next; pri-next=pri-next-next; return L;int main(int argc, const char * argv) struct List * h = NULL; int locate; printf(ent

22、er the locate you want to delete:); scanf(%d,&locate); mylist * p; h = (mylist*)malloc(sizeof(mylist); h-i = 0; h-next = NULL; int n; printf(enter the number of list:); scanf(%d,&n); while (n) int temp; scanf(%d,&temp); p = (mylist*)malloc(sizeof(mylist); p-i = temp; p-next = h; h = p; -n; h = inser

23、t(h,locate); mylist * temp = h; while (temp&(temp-i!=0) printf(%d ,temp-i); temp = temp-next; return 0;实验步骤:1. 根据第一个创建链表的程序创建链表。2. 定义一个子函数完成删除第i个元素的功能。调试及编译过程:测试数据:任意选取一组数据测试数据:任意选取一组数据出现的不足及修改:无 运行结果:出现预期的结果。(十一)设计一个程序,利用链表输出约瑟夫环的结果序列。注释:约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3.n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m

24、的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。源程序如下:shangji6chengxu39#include #include struct list int data; struct list *next;struct list *create(int n) int i=1; struct list *head=NULL,*tail; head=(struct list *)malloc(sizeof(struct list); head-data=i; tail=head; while(n-1) tail-next=(struc

25、t list *)malloc(sizeof(struct list); tail=tail-next; tail-data=+i; n-; tail-next=head; return head;int main() int n,m,t=0,k=0; struct list *mylist=NULL,*mylist1=NULL; printf(enter the number of people:n); scanf(%d,&n); printf(enter m:n); scanf(%d,&m); mylist=create(n); mylist1=mylist; while(t!=n-1)

26、k+; if(k=m) mylist1-next=mylist1-next-next; t+; k=0; mylist1=mylist; mylist=mylist-next; printf(the last number is %d,mylist-data); return 0;实验步骤:1. 创建链表,将链表中各部分的数据域分别设为1,2,n,其中n又键盘端输入。2. 输入人数和需要删除的数,用到上一个程序的思想,在将要删除的数前,将上一个指针直接指向下一个而不指向该数。调试及编译过程:测试数据:任意输入一组数据测试数据:任意输入一组数据出现的不足及修改: 刚开始没有注意到若直接在删除的过程中采用一个变量进行处理,则实际上去掉的是该数的下一个数,因此在修改的过程中加上了另外一个变量,使后来加上的变量指向当前变量的前一个,利用它进行删除工作,而当前变量仍起到控制循环的作用。运行结果: 修改后能输出预期的结果。(十二)设计一个程序完成文件的复制(COPY)功能。源程序如下:shangji6chengxu40#include #include int main() char c; FILE *fin,*fout; fout=fopen(out.txt,w+); fin=fopen(in.txt,r+

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1