程序设计综合实验报告册Word格式文档下载.docx
《程序设计综合实验报告册Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《程序设计综合实验报告册Word格式文档下载.docx(36页珍藏版)》请在冰豆网上搜索。
//中文的查询函数
voidQuery1()
printf("
======================\n"
)
printf(“此账户有%.2f元\n"
sum);
//对sum已初始化
pause"
//中文的存钱函数
voidDeposit1(float*p)
floatx;
================================\n"
输入您要存的数目:
"
scanf("
%f"
&
x);
*p+=x;
}
//中文的取钱函数
voidWithDraw1(float*p)
floaty;
inta=1;
====================================\n"
输入您要取的数目:
while(a)
scanf("
y);
if(y>
sum)
{printf("
\n余额不足,按任意键后重新输入\n"
else
{*p-=y;
a=0;
}
实验二:
进制转换器
写一个进制转换器,实现十进制、二进制、十六进制的相互转换
1、转换要求包括整数和小数;
2、提供清晰、有好的用户界面;
3、各种转换可以反复多次执行,直到用户选择”退出“按钮。
voidmain(){...}
voidMainmenu(){...}
//二进制到十进制和十六进制
voidBtoDH()
intiExit=0;
iExit)
{system("
strings1,s2,s3,s;
inti,len;
......//输入字符串s
s=s1;
len=s1.length();
for(i=0;
i<
len;
i++)
{s3=s1.substr(0,1);
//截取从0到1的字符,包括0不包括1s1=s1.substr(1,s1.length()-1);
if(s3=="
."
{s2=s.substr(0,i);
//截取0到i的字符
break;
}
if(s2.length()==0)
{
s2=s;
s1="
"
;
intin=BtoDint(s2);
//把二进制数分离开后,调用整数部分
floatdou=BtoDdecimal(s1);
//调用二进制小数部分
dou=in+dou;
stringss1,ss2;
ss1=BtoHint(s2,1);
ss2=BtoHint(s1,0);
......//输出十进制形式和十六进制形式
//二进制整数到十进制整数
intBtoDint(strings)
inti,ss=0,len,l;
len=s.length()-1;
l=len;
for(i=0;
=len;
stringch=s.substr(0,1);
s=s.substr(1,s.length()-1);
if(ch=="
1"
ss+=pow(2,l);
l--;
else
returnss;
//二进制小数到十进制小数
floatBtoDdecimal(strings)
floatss=0.0;
inti,len,l;
l=-1;
{ss+=pow(2,i);
//pow函数返回值为计算2的i次方
//十六进制到二进制和十进制
voidHtoBD()
intiExit=0,len,i;
strings,s1,s3,s2,ss1,ss2;
cout<
<
pleaseinputthenumber"
cin>
>
s1;
s3=s1.substr(0,1);
s1=s1.substr(1,s1.length()-1);
{
s2=s.substr(0,i);
if(s2.length()==0)
ss1=HtoBint(s2,1);
ss2=HtoBint(s1,0);
intin=BtoDint(ss1);
floatdou=BtoDdecimal(ss2);
......//输出二进制形式和十进制形式
stringHtoBint(strings,intin)
strings1;
intlen;
len=s.length();
stringret="
for(inti=0;
s1=s.substr(0,1);
if(in==1)
ret=HtoBbit(s1)+ret;
ret+=HtoBbit(s1);
returnret;
//十六进制字符与二进制字符串的互相转换
stringHtoBbit(strings)
{stringret;
if(s=="
0"
)ret="
0000"
...
//二进制到十六进制
stringBtoHint(strings,intin)
intlen=s.length();
intt=len%4;
len=(4-t)%4;
while(len--)
s="
+s;
s+="
intnum=s.length()/4,i;
stringret;
num;
stringtemp=s.substr(0,4);
s=s.substr(4,s.length()-4);
ret+=BtoHbit(temp);
//BtiHbit函数使二进制字符串与十六进制字符互相转换,与上面相似,略写
//十进制到二进制和十六进制
voidDtoBH()
doublenum,n2;
intiExit=0,len,n1;
strings1,s2,s3,s4;
pleaseinputthenumberandthelengthofdecimal"
num>
n1=int(num);
n2=num-n1;
s1=DtoBdecimal(n2,len);
s2=DtoBint(n1);
s3=BtoHint(s2,1);
s4=BtoHint(s1,2);
......//输出二进制形式和十六进制形式
//十进制小数到二进制小数
stringDtoBdecimal(doublein,intlen)
doublep=in;
p*=2;
if(p>
=1)
ret+="
p-=1.0;
//十进制整数到二进制整数
stringDtoBint(intin)
{if(in==0)
return"
intq=in,remain;
while(q)
{remain=q%2;
q=q/2;
if(remain)ret="
+ret;
elseret="
实验三:
随机数生成、中奖者
生成一组均匀分布的伪随机数,根据随机数编写一个抽奖程序
1、能够根据用户的输入,控制随机数生成的数目,随机数用动态数组保存;
2、能够根据用过的输入,控制随机数的范围:
比如能够生成一组【a,b】范围内的随机数;
3、由用户输入抽奖者人数N;
4、为每一个人分配一个代号(类似于名字)和一个随机号码(即抽奖票号,加你控制在1-N之间)并将其打印出来;
5、由机器摇号:
生成一个在1-N之间的随机数作为中奖号码,查找中奖者,并公布中奖者信息(注:
可以有多人同时中奖);
6、如果没有对应的中奖者,需要将该号码公布出来,然后重新生成一个中奖号码,知道中奖者存在为止。
#include<
iostream>
time.h>
string>
usingnamespacestd;
staticunsignedholdrand=1L;
voidLottery(intn);
voidmysrand(unsignedseed);
intmyrand(void);
intllottery(intnum);
intn;
structPEOPLE{
char*name;
intnumber;
}mem[100];
{
cout<
Inputthetotalnumberofthepeople:
cin>
n;
==========================="
endl;
Informationofall:
Lottery(n);
voidLottery(intn)
inti,N,k;
intnum;
InputN:
N;
mysrand((unsigned)time(NULL));
k=myrand();
k=k%(N-1)+1;
mem[i].number=k;
endl<
i+1<
:
p"
"
hisnumberis"
mem[i].number;
num=myrand();
num=num%(N-1)+1;
while(!
llottery(num))
num=myrand();
voidmysrand(unsignedseed)
holdrand=seed;
intmyrand(void)
return(((holdrand=holdrand*201413+2531011L)>
16)&
0x7fff);
intllottery(intnum)
inti,j=0;
Theinvalidlotterynumberis:
num<
if(mem[i].number==num)
{cout<
Theinvalidis:
hisnumberis"
mem[i].number<
j++;
if(j==0)
return0;
else
return1;
实验四:
插入排序、快速排序
1、生成一组随机整数,对该组数据进行排序,采用插入排序法;
2、生成一组随机整数,对该组数据尽心排序,采用快速排序法。
1、数组长度由用户输入;
2、随机数范围在【100,10000】范围内;
3、采用插入排序法和快速排序法进行排序;
4、根据用户要求,可以实现增序、降序两种排序。
1、插入排序
intmain()
......//用户定义数组长度len
lottery(len);
voidlottery(intlen)
{inti;
charch;
//time函数返回1970年1月1日00:
00:
00起距函数调用时相聚的时间,以秒为单位,在<
的头文件中
......
if(ch=='
1'
)swap1(b,len);
//升序
elseif(ch=='
2'
)swap2(b,len);
//降序
b[i]<
voidmysrand(unsignedseed){......}
intmyrand(void)//此函数在实验三里有写
{......
h=h%(10000-100)+100;
//控制随机数范围在【100-10000】之内,
returnh;
voidswap1(int*c,intn)
inti,j,x,k=1;
c[0]=myrand();
for(j=1;
j<
j++)
x=myrand();
i=j-1;
while(i>
=0&
&
c[i]>
x)
c[i+1]=c[i];
i--;
c[i+1]=x;
2、快速排序
intA[100],n,k;
...//用户定义数组长度
intexit=0;
exit)
for(inti=0;
k=myrand();
//与产生随机数有关的函数略,实验三有写
k=k%(MAX-MIN)+MIN;
//控制随机数的范围,MIN=1,MAX=100,在开始有定义
A[i]=k;
mainmenu();
//mainmenu函数为主菜单,略写
ch=getch();
switch(ch)
case'
QuikUp(A,0,n-1);
print(A,n);
break;
case'
QuikDown(A,0,n-1);
case'
3'
exit=1;
default:
printf("
error!
\n"
//升序排序
voidQuikUp(inta[],intp,intr)
if(p>
=r)
return;
inti=p;
intj=r+1;
intx=a[p];
while
(1)
while(i<
=r&
a[++i]<
while(j>
=p&
a[--j]>
if(i>
=j)break;
Swap(&
a[i],&
a[j]);
//Swap函数为交换*p与*q的值,略写
if(i==j)
j--;
a[p]=a[j];
a[j]=x;
QuikUp(a,p,j-1);
QuikUp(a,j+1,r);
实验五:
模块计时器、常用排序算性能测试
设计一组计时函数,封装所有计时函数,采用测试性能函数对快速函数、插入函数、选择排序算法进行性能测试。
1、计时精确:
封装的高精度的计时API函数QueryPerformanceCounter(),可以达到微秒级的精度;
2、使用简单:
只用在待测试的模块前后加上两个宏BM_START和BM_END,不需要对结果进行计算,也不需要考虑对各个模块结果数据的维护;
3、多组测试:
最多可以同时实现20个模块的测试,及可以保存20组数据;
4、结果输出独立:
在系统运行结果时,只需要用一个函数就可以把计时结果保存在一个文本文件里
5、对一组数据进行排序;
6、数组长度为10000,数组应随机产生;
7、为了保证测试数据的稳定,每种排序算法运行10次,计算总的时间
intret[BENCHMARK_MAX_COUNT];
//BENCHMARK_MAX_COUNT为模块总数
InitBenchmark();
BMTimerStart
(1);
//开始计时
10;
sort_quick(a,10000);
//快速排序,实验四有写,略写
sort_chr(a,10000);
//插入排序,实验四有写,略写
sort_choice(a,10000);
//选择排序,略写
BMTimerEnd
(1);
//结束计时
WriteData(1,"
Test1"
D:
\\log.txt"
//将数据填入文件中
voidInitBenchmark()
ResetBenchmarkCounters();
//对数组gStats,gEnds,gCounter清零
GetClockFrequent();
//获得机器内部定时时钟频率
voidBMTimerStart(intiModel)
LARGE_INTEGERlitmp;
QueryPerformanceCounter(&
litmp);
//提高精度,在头文件"
windows.h"
中
gStarts[iModel]=litmp.QuadPart;
voidBMTimerEnd(intiModel)
gEnds[iModel]=litmp.QuadPart;
voidWriteData(intTotalCount,stringsModel,stringpath)
//openthefileandmovepointertotheendofthefile,需要头文件"
fstream"
ofstreampFile(path.data(),ios:
app|ios:
out);
//1Header
stringtitle,s2;
stringsperator="
\r\n\r\n=========================================\r\n"
title="
Model---"
+sModel;
chartemp1[100],temp2[100];
sprintf(temp1,"
\r\nIterationCounter:
5d\r\n"
TotalCount);
title+=temp1;
//2Times
strings;
doublegTotal=0;
BENCHMARK_MAX_COUNT;
i++)//将结果写进文件
if(gCounters[i]==0)
continue;
sprintf(temp1,"
Total%d"
i);
intlen=strlen(temp1)/8;
//*calculatethenumberof'
\t'
s+=temp1;
for(;
len<
2;
len++)
s+="
\t"
sprintf(temp2,"
%dms\r\n"
(int)(gCounters[i]/1000));