C语言程序设计实验第六次上机实验报告Word文件下载.docx
《C语言程序设计实验第六次上机实验报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《C语言程序设计实验第六次上机实验报告Word文件下载.docx(42页珍藏版)》请在冰豆网上搜索。
scanf("
%d"
&
n);
enternumbers:
for(i=0;
i<
n;
i++)
p+i);
sort(x,n);
%4d"
*(p+i));
return0;
}
voidsort(int*a,intn)
inti,j,t;
n-1;
{
for(j=0;
j<
n-1-i;
j++)
t=*(a+j);
*(a+j)=*(a+j+1);
*(a+j+1)=t;
}
实验步骤:
1.定义一个数组存放数据,实现数据的输入和存储。
2.定义一个子函数进行排序,用把数据两两交换来实现。
调试及编译过程:
测试数据:
任意选取一组数据:
出现的不足及修改:
无运行结果:
出现预期的结果。
(二)设计一个函数BubbleSort(a,n),采用冒泡排序算法,实现一维数组的整数进行排序的功能。
shangji6\chengxu30
voidBubbleSort(int*a,intn);
inta[100],n,i;
a[i]);
BubbleSort(a,n);
%6d"
a[i]);
voidBubbleSort(int*a,intn)
intt,*p=a,i,j;
if(*(p+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。
shangji6\chengxu31
intfind(int*a,intn,intx);
inta[100],n,x,i;
(a+i));
enterx:
x);
if(find(a,n,x)==-1)
notfound!
else
thenumberis%d"
find(a,n,x));
intfind(int*a,intn,intx)
inti,*p=a;
if(*(p+i)==x)
return(i);
return(-1);
1.定义一个数组实现数据的输入和存放。
2.定义一个子函数实现查找的功能并在主函数中调用该函数。
调试及编译过程
任意选取一组数据,后来输入的数能被找到
任意选取一组数据(后来输入的数不能被找到)
出现预期的结果
(四)输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。
如果有多对数字的和等于输入的数字,输出任意一对即可。
例如,输入数组1、2、4、7、11、15和数字15。
由于4+11=15,因此,输出4和11。
shangji6\chengxu32
inta[100],n,x,i,j;
a+i);
if(*(a+i)+*(a+j)==x)
%d+%d=%d"
*(a+i),*(a+j),x);
1.定义一个数组实现数据的输入和存放。
2.用两层循环逐一检验,遇到满足条件的即输出。
(五)检验并打印魔方矩阵
在下面的5×
5阶魔方矩阵中,每一行、每一列、每一对角线上的元素之和都是相等的,试编写程序将任意5×
5阶矩阵中的元素存储到一个二维整型数组中,然后检验其是否为魔方矩阵,并将其按如下格式显示到屏幕上。
17
24
1
8
15
23
5
7
14
16
4
6
13
20
22
10
12
19
21
3
11
18
25
2
9
shangji6\chengxu33
inta[5][5],i,j,s=0,s1=0,s2,s3;
5;
*(a+i)+j);
*(*(a+i)+j));
\n"
s+=*(*(a+i)+i);
s1+=*(*(a+i)+4-i);
if(s==s1)
s2=0;
s2+=*(*(a+i)+j);
if(!
(s2==s))
not!
s3=0;
s3+=*(*(a+j)+i);
(s3==s))
1.定义数组实现数据的输入和存放。
2.分别对二维矩阵的行列主次对角线进行求和运算,判断是否为魔方矩阵。
输入一组魔方矩阵的数据
输出预期结果。
(六)编写一个函数swap(x,y),分别采用3种不同的算法实现两个变量值的交换功能。
源程序1如下:
shangji6\chengxu34shangji6\chengxu34`shangji6\chengxu34``
voidswap(int*x,int*y);
inta,b;
%d%d"
a,&
b);
swap(&
%d\t%d"
a,b);
voidswap(int*x,int*y)
intt;
t=*x;
*x=*y;
*y=t;
源程序2如下:
voidswap(int*a,int*b);
intx,y;
x,&
y);
x,y);
*x=(*x)+(*y);
*y=(*x)-(*y);
*x=(*x)-(*y);
源程序3如下:
*x=*x^*y;
*y=*x^*y;
1.选取三种合适的方法进行交换。
2.因为要用到子函数,于是将这三种方法中的参数均改为指针操作。
任意选取一组数据
将以上数据交换输入
(七)设计一个计算MAX{a,b}的程序,要求a和b,以命令行中参数形式给出。
shangji6\chengxu35
#include<
intmain(intargc,char*argv[])
inta=atoi(argv[1]);
intb=atoi(argv[2]);
if(a>
b)printf("
a);
elseprintf("
b);
直接进行比较并输出较大值
交换上面两数
刚开始没有将字符型换成整型导致错误,后来使用atoi函数解决。
运行结果:
改正后输出预期的结果。
(八)设计一个函数create(L),其功能是建立一个“先进后出”的链表。
shangji6\chengxu36
stdlib.h>
structList{
inti;
structList*next;
};
typedefstructListmylist;
intmain(intargc,constchar*argv[])
structList*h=NULL;
mylist*p;
h=(mylist*)malloc(sizeof(mylist));
h->
i=0;
next=NULL;
intn;
while(n){
inttemp;
temp);
p=(mylist*)malloc(sizeof(mylist));
p->
i=temp;
next=h;
h=p;
--n;
while(h&
&
(h->
i!
=0))
%8d\t"
h->
i);
h=h->
next;
1.定义结构型的变量,创建链表。
2.循环定义链表的起点和终点,定义结构的数据域。
3.输出。
调试及编译结果:
将上述数据反向输入
输出预期的结果。
(九)设计一个函数insert(L,i,e),其功能是在链表L中的第i个元素之间插入新元素e。
shangji6\chengxu37
mylist*insert(mylist*L,inti,inte){
mylist*pri=L;
intj;
for(j=1;
j<
i;
++j){
pri=pri->
mylist*p=(mylist*)malloc(sizeof(mylist));
i=e;
next=pri->
pri->
next=p;
returnL;
intinsert_number,locate;
enterthenumberyouwanttoinsertin:
insert_number);
enterthelocateyouwanttoinsert:
locate);
enterthenumberoflist:
h=insert(h,locate,insert_number);
mylist*temp=h;
while(temp&
(temp->
=0)){
%d"
temp->
temp=temp->
实验步骤:
1.根据上一个实验写出创建链表的过程。
2.定义子函数进行数据的插入,在此过程中,将要插入的数放入一个新的结构性变量中,并将此结构性变量的指针域指向原链表中的插入位置,使链表按原顺序继续下去。
(十)设计一个函数delete(L,i),其功能是删除在链表L中的第i个元素。
shangji6\chengxu38
mylist*insert(mylist*L,inti){
i-1;
next=pri->
next->
intlocate;
enterthelocateyouwanttodelete:
h=insert(h,locate);
1.根据第一个创建链表的程序创建链表。
2.定义一个子函数完成删除第i个元素的功能。
(十一)设计一个程序,利用链表输出约瑟夫环的结果序列。
注释:
约瑟夫环是一个数学的应用问题:
已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。
从编号为k的人开始报数,数到m的那个人出列;
他的下一个人又从1开始报数,数到m的那个人又出列;
依此规律重复下去,直到圆桌周围的人全部出列。
shangji6\chengxu39
structlist{
intdata;
structlist*next;
structlist*create(intn)
inti=1;
structlist*head=NULL,*tail;
head=(structlist*)malloc(sizeof(structlist));
head->
data=i;
tail=head;
while(n-1)
tail->
next=(structlist*)malloc(sizeof(structlist));
tail=tail->
data=++i;
n--;
next=head;
returnhead;
intn,m,t=0,k=0;
structlist*mylist=NULL,*mylist1=NULL;
enterthenumberofpeople:
enterm:
m);
mylist=create(n);
mylist1=mylist;
while(t!
=n-1)
k++;
if(k==m)
mylist1->
next=mylist1->
t++;
k=0;
mylist=mylist->
thelastnumberis%d"
mylist->
data);
1.创建链表,将链表中各部分的数据域分别设为1,2,…n,其中n又键盘端输入。
2.输入人数和需要删除的数,用到上一个程序的思想,在将要删除的数前,将上一个指针直接指向下一个而不指向该数。
任意输入一组数据
刚开始没有注意到若直接在删除的过程中采用一个变量进行处理,则实际上去掉的是该数的下一个数,因此在修改的过程中加上了另外一个变量,使后来加上的变量指向当前变量的前一个,利用它进行删除工作,而当前变量仍起到控制循环的作用。
修改后能输出预期的结果。
(十二)设计一个程序完成文件的复制(COPY)功能。
shangji6\chengxu40
charc;
FILE*fin,*fout;
fout=fopen("
out.txt"
"
w+"
fin=fopen("
in.txt"
r+