华师大C语言实验报告C实验报告3学号姓名课件docWord文档下载推荐.docx

上传人:b****3 文档编号:17012856 上传时间:2022-11-27 格式:DOCX 页数:20 大小:21KB
下载 相关 举报
华师大C语言实验报告C实验报告3学号姓名课件docWord文档下载推荐.docx_第1页
第1页 / 共20页
华师大C语言实验报告C实验报告3学号姓名课件docWord文档下载推荐.docx_第2页
第2页 / 共20页
华师大C语言实验报告C实验报告3学号姓名课件docWord文档下载推荐.docx_第3页
第3页 / 共20页
华师大C语言实验报告C实验报告3学号姓名课件docWord文档下载推荐.docx_第4页
第4页 / 共20页
华师大C语言实验报告C实验报告3学号姓名课件docWord文档下载推荐.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

华师大C语言实验报告C实验报告3学号姓名课件docWord文档下载推荐.docx

《华师大C语言实验报告C实验报告3学号姓名课件docWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《华师大C语言实验报告C实验报告3学号姓名课件docWord文档下载推荐.docx(20页珍藏版)》请在冰豆网上搜索。

华师大C语言实验报告C实验报告3学号姓名课件docWord文档下载推荐.docx

版]

Maxi=getMax(a,n);

printf("

Maxi=%d\n"

Maxi);

return0;

}

intread(intarr[])

inti=0,n;

FILE*fp;

if((fp=fopen("

data.txt"

"

r"

))==NULL)

{printf("

cantfindthefile!

"

);

while(!

feof(fp))

fscanf(fp,"

%d"

&

arr[i++]);

n=i;

fclose(fp);

returnn;

intgetMax(intarr[],intn)

inti,Maxi=0;

#版^*%]

for(i=0;

i<

n;

i++)

if(arr[Maxi]<

arr[i])

{[新#*新@^版]

arr[Maxi]=arr[i];

Maxi=i;

Max=%d\n"

arr[Maxi]);

returnMaxi;

运行结果窗口

任务二掌握一维数组的删除操作

1.编写功能函数:

删除第i个数组元素,返回数组实际长度。

需要考虑异常情况,给出出错

提示

intdelArray(intarr[],intn,inti)

2.编写数组构造函数,数组中存储1-n的整数序列

voidmakeArray(intarr[],intn)

3.编写输出函数,输出数组中前n个数。

voidpntArray(intarr[]intn)

4.编写主函数:

输入n个数,删除奇数位置上的数后输出。

调用上述子函数完成功能。

源程序清单ex03_02.cpp

#defineMAX100

intdelArray(intarr[],intn,inti);

voidmakeArray(intarr[],intn);

voidpntArray(intarr[],intn);

intmain()

intn,j,i,m;

n:

scanf("

n);

if(n<

=1)[新@~版版*#]

wrong,sometingwrong啦!

"

else

makeArray(a,n);

m=n;

for(j=(m+1)/2+(m+1)/2-1;

j>

0;

j=j-2)

delArray(a,n,j);

n=n-1;

pntArray(a,n);

intdelArray(intarr[],intn,inti)

intk;

for(k=i;

k<

k++)

arr[k]=arr[k+1];

voidmakeArray(intarr[],intn)

{[新%新版#~@]

for(k=1;

=n;

arr[k]=k;

arr[k]);

\n"

voidpntArray(intarr[],intn)

[新~*#新版版]

}[新版%新~@&

]

.测试用例设计

(1)n为奇数

n=7

输出:

246

(2)n为偶数

n=6[新版新^%#版]

(3)n=0

wrong,sometingwrong啦!

(4)n=1

任务三掌握一维数组的查找操作

删除第i个数组元素

intdel(intarr[],intn,inti)

2.编写功能函数:

寻找值为x的数组元素,返回下标值。

考虑:

找不到x时的处理

intfind(intarr[],intn,intx)

3.编写功能函数:

从文本文件data.txt读取数据到数组a,返回n

intgetData(intarr[])

4.编写功能函数:

将数组a的数据写入文件result.txt,成功返回1,否则0;

intsaveData(intarr[],intn)

5.编写主函数:

从文件读入数据,输入需要删除的数,处理数组数据后写入文件。

输出反馈,

删除成功还是失败。

源程序清单ex03_03.cpp

intdel(intarr[],intn,inti);

intfind(intarr[],intn,intx);

intgetData(intarr[]);

intsaveData(intarr[],intn);

inta[100];

intx,n,i,m,t;

n=getData(a);

t=n;

删除x:

x);

m=find(a,n,x);

[新*@版新#^]

if(m>

=0)

del(a,n,m);

saveData(a,n);

if(t!

=n)

删除成功"

删除失败,找不到要求的x值\n"

intdel(intarr[],intn,inti)

intfind(intarr[],intn,intx)

for(k=0;

if(arr[k]==x)

returnk;

if(k==n)

return-1;

{[新新%@版&

^]

FILE*fp;

[新%版@版#*]

intk=0;

arr[k]);

k++;

intsaveData(intarr[],intn)

result.txt"

w"

[新版版#~^%]

}[新版~新&

版@]

fprintf(fp,"

%d"

[新版@~^版&

运行结果:

(1)窗口

(2)data.txt的内容

2356892178783247845783478804675793678956632454678135879734562

57556345

(3)result.txt的内容

2356892178324453480467579

367895663245467813587973456257[新版版%~*&

556345

任务四掌握一维数组的插入操作[新^@版*&

%]

(1)编写功能函数

插入第i个数组元素

intinsert(int*pa,intn,inti,intx)

(2)编写主函数:

输入n个有序数,输入x,将x插入数组合适的地方使数组仍然有序。

源程序清单ex03_04.cpp[新*&

版~@%]

intinsert(int*pa,intn,inti,intx);

voidpntArray(intarr[],intn);

intn,x,k,i=-1;

请输入n:

if(n==0)

数组不存在!

a[k]);

请输入x:

[新%#版版^*]

[新新#版版*@]

k++)[新版版~^@新]

if(a[0]<

a[1])

if(a[k]>

x)[新%版*~@^]

i=k;

break;

[新~&

%^*版]

if(a[k]<

x)

if(i==-1)

i=n;

n=insert(a,n,i,x);

intinsert(int*pa,intn,inti,intx)

int*p=pa;

for(k=n;

k>

i;

k--)[新版新@版&

*(p+k)=*(p+k-1);

*(p+i)=x;

n=n+1;

voidpntArray(intarr[],intn)

{inti;

%5d"

arr[i]);

(1)插入值位置在序列中间

有序序列:

2456912[新^%版&

24567912

(2)插入值位置在序列第一位

234567

1234567

(3)插入值位置在序列最后

12345678

(4)插入值是序列中的重复值[新*版&

^%#]

123456

1234456

(5)n=0

数组不存在!

实验二一维数组算法

1.理解并掌握求最大(小)值,排序,查找,倒置算法。

2.了解使用文件中的数值进行测试的方法。

任务一:

最大数最小数算法

编写一个函数,功能为在一个数组中根据要求查找并返回最大值或最小值的下标,例如给一

个标志变量为1时最大值,为2时求最小值,标志变量为参数由程序员调用时指定。

intgetMaxorMin(intarrInt[],intn)

inti,Maxj=0,flag,Minj=0;

请指定标志变量flag:

flag);

if(flag==1)

if(arrInt[i]>

arrInt[Maxj])

Maxj=i;

returnMaxj;

if(arrInt[i]<

arrInt[Minj])

Minj=i;

returnMinj;

[新%^版&

任务二:

排序算法

编写三个函数,功能为按从小到大的顺序对数据中的数据进行排序。

分别采用起泡,选择,

插入算法。

[新%新@#版&

起泡算法

voidbubbleSort(intarrInt[],intn)

inti,t,j;

for(j=1;

j<

j++)

n-j;

arrInt[i+1])

t=arrInt[i];

arrInt[i]=arrInt[i+1];

arrInt[i+1]=t;

}[新~&

版%@#]

}[新版%&

@#版]

插入算法

voidInsertSort(intarrInt[],intn)

inti,j;

for(i=1;

for(j=0;

if(arrInt[j]>

arrInt[i])

Insert(arrInt,arrInt[i],j,i);

}[新@#&

*版版]

intInsert(intarrInt[],intx,intk,intn)

intj,t;

[新版%版新*@]

t=x;

for(j=n-1;

=k;

j--)

arrInt[j+1]=arrInt[j];

arrInt[k]=t;

任务三:

查找

编写两个函数,功能为查找数组中是否存在X,如存在返回下标,如不存在返回标志值。

别采用顺序查找和二分查找法完成。

顺序查找

intfind(intarrInt[],intbrr[],intn,intx)

intk,i=0;

if(arrInt[k]==x)

brr[i]=k;

i++;

returni;

二分法:

intbiFind(intarrInt[],intn,intx)

intl,h,m,q,num=0;

l=0;

h=n-1;

q=n;

while(h>

=l)

m=(h+l)/2;

if(arrInt[m]>

h=m;

if(arrInt[m]<

{l=m;

#*版新@]

if(h-l==1&

&

x==arrInt[h])

{m=h;

num++;

if(num>

q)

m=-1;

找不到与x等值的数\n"

returnm;

}[新版新~#&

任务四:

倒置

编写一个函数,功能为将一个数据中的数据逆序存放。

voidreverse(intarrInt[],intn)

inti,t;

=n/2-1;

{t=arrInt[i];

arrInt[i]=arrInt[n-i-1];

arrInt[n-i-1]=t;

任务五:

验证以上编写的函数。

编写main函数,安排合适的输入输出和函数调用语句,验证上述编写的函数功能。

要求

(1)有清晰的输入输出提示语句。

(2)数组必须在main函数中定义。

(3)数组中数据,调用一个用户自定义函数,从文本文件中读取。

源程序:

ex03_05.cpp[新*新版@&

只需列举完整main函数和其它所有函数的函数声明。

请加注释说明函数功能

intgetMaxorMin(intarrInt[],intn);

voidbubbleSort(intarrInt[],intn);

[新版版*#&

voidInsertSort(intarrInt[],intn);

[新*@^#%版]

intInsert(intarrInt[],intx,intk,intn);

[新^版版@新#]

intfind(intarrInt[],intbrr[],intn,intx);

intbiFind(intarrInt[],intn,intx);

voidreverse(intarrInt[],intn);

{[新%&

版^版@]

intb[100];

[新%新版~版#]

intn,x,y,z,m,i;

求最大或最小值:

(求最大值请将标志值定为1,否则就是求最小值啦)\n"

最大值或最小值的下标是%d\n"

getMaxorMin(a,n));

接下来是排序。

请输入选择排序的方式\n1表示起泡排序;

2表示插入排序\nx:

if(x==1)

bubbleSort(a,n);

}[新版^新#~版]

InsertSort(a,n);

}[新&

新#版@*]

接下来进行查找。

请选择查找方式\n1表示顺序查找;

2表示二分法查找\n要注

意的是其中二分法查找首先要进行排序,所以和上步操作顺序不可互换\n"

y);

在输入需要查找的数字z:

z);

if(y==1)[新%@#新版~]

m=find(a,b,n,z);

所找数字的下标依次是:

m;

b[i]);

m=biFind(a,n,z);

所找数字的下标是:

m);

最后一步倒置操作\n"

reverse(a,n);

[新%~@版*新]

思考题

1.请画出下列数据序列,使用起泡法,选择法和插入算法的排序过程。

46,12,172,98,46,9

2.我们经常会讨论排序算法的稳定性,若待排序的序列中,存在多个具有相同关键字的记[新~%*版^&

录,经过排序,这些记录的相对次序保持不变,则称该算法是稳定的;

若经排序后,记录的

相对次序发生了改变,则称该算法是不稳定的。

请问起泡,选择和插入算法的稳性如何

3.请设计符合下面要求的测试用例,画出使用二分查找算法的查找过程。

(1)没有找到

(2)第一次就找到

(3)需要查找的数在数组的第一个

(4)需要查找的数在数组的最后一个

4.如果在main要求从大到小排序,使用现有的函数,如何实现,写出功能实现语句。

实验三:

自选实验

1.加深对结构化程序结构的理解:

使用函数

2.加深对数组的掌握

3.学习二维数组

实验内容[新&

版版%@#]

任务一:

Craps

Craps是一种在娱乐场所很流行的游戏,它的规则如下:

游戏者投掷两个筛子,每个筛子有

六面,就可能得到1,2,3,4,5,6点。

当筛子停下来后,计算两个筛子的和。

如果第一

次两个筛子的和是7或11,游戏者获胜。

如果第一次两个筛子的和是2,3或12,游戏者输

了。

如果第一次两个筛子的和是4,5,6,8,9或10,两个筛子的和变成游戏者的积点,

游戏者可以继续投掷,直到两个筛子的和等于积点的值,游戏者输了。

但如果其中有一次两

个筛子的和等于7,游戏者获胜。

游戏开始时,游戏者设置参与游戏的筹码,在游戏中,游

戏者可以下注,获胜得到下注数,输了扣去下注数,当游戏者的筹码用完,整个游戏结束。

编写程序,模拟Craps游戏。

(1)编写一个函数:

投掷两个筛子,返回两个筛子的和

提示:

求随机数的方法

#include“stdlib.h”

n=rand()%(Y-X+1)+X;

/*n为X~Y之间的随机数*/

(2)编写一个函数:

检查下注值是否有效,应小于游戏者的筹码数

(3)编写一个处理函数:

根据游戏者是否获胜,修正游戏者的筹码。

(4)显示画面应如下信息,一个可能执行过程如下

源程序清单:

ex03_06.cpp

二维数组

编写程序输入一个数n,再输入一个n*n二维数组,求该数组中除副对角线,第一行和最后

一列之外的数组元素之和。

要求:

编写一个函数getSum用于实现求和操作。

ex03_07.cpp

编写程序实现输出n行杨辉三角。

用两种方法实现,编写两个函数,一个函数用一维数组实现,一个函数用二维数组实

现。

主函数中输入n值后,分别调用两函数输出杨辉三角。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

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

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