算法与程序设计实验报告文档格式.docx
《算法与程序设计实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《算法与程序设计实验报告文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
实验代码:
的递归算法的编写。
#include<
stdio.h>
intdigui(intn)
{
if(n==1)
return1;
else
returnn*digui(n-1);
}
voidmain()
intn;
printf("
请输入待求阶乘数(小于15的一个数):
"
);
scanf("
%d"
&
n);
结果为:
%d\n"
digui(n));
2、计算Fib(n)的递归算法
longFib(intn){
if(n==1||n==2)//终止递归条件
return1;
else
returnFib(n-1)+Fib(n-2);
请输入裴波那契数列的待求项数:
裴波那契数列第%d项值为%ld\n"
n,Fib(n));
3、二分查找法的实现。
intBinarySearch(inta[],intn,intx)/*二分查找功能函数*/
intl=0,r=n,i;
while(l<
=r){
i=(l+r)/2;
if(x==a[i])returni;
elseif(x<
a[i])r=i-1;
elsel=i+1;
return-1;
voidmaopao(inta[])/*冒泡排序功能函数*/
inti,j;
intn=10;
for(i=0;
i<
n;
i++)
for(j=0;
j<
n-i-1;
j++)
if(a[j]>
a[j+1])
{
inttemp;
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
inti,a[10],x;
intflag=-1;
请输入10个带查找数据(空格分隔):
10;
scanf("
a[i]);
maopao(a);
带查序列有序化后变为:
printf("
%d,"
a[i]);
\n"
请输入待查关键字:
x);
flag=BinarySearch(a,10,x);
if(flag==-1)
未找到带查关键字!
找到关键字,位于有序序列的第%d个位置!
flag+1);
算法与程序设计实验报告三(4学时)
6、了解贪心算法思想
7、掌握贪心法典型问题,如背包问题、作业调度问题等。
4、键盘输入一个高精度的正整数n(n<
10位)去掉任意s个数字后剩下的数字按原左右次序组成一个新的正整数。
编程对给定的n和s,寻找一种方案,使得剩下的数最小。
5、设计实现超市收银程序,假设顾客在超市购买各种商品,来到收银台结账,收银员具有面值为100,20,10,5和1元的纸币和各种面值为5角、2角、1角的硬币。
设计程序计算顾客各种所买商品的钱数,并根据顾客所付的钱数输出零钱的数目及要找的各种货币的数目。
算法思想:
贪心算法的基本思路
1.建立数学模型来描述问题。
2.把求解的问题分成若干个子问题。
3.对每一子问题求解,得到子问题的局部最优解。
4.把子问题的解局部最优解合成原来解问题的一个解。
1.键盘输入一个高精度的正整数n(n<
#include<
string.h>
#defineM100
main()
{charch[M];
intr[M],d[M],l,s,i,j,k;
请输入正整数:
gets(ch);
请输入删除的位数:
s);
l=0;
ch[i]!
='
\0'
;
{
r[i]=i;
l++;
}
s;
for(j=0;
l-i-1;
if(ch[j]>
ch[j+1])
break;
if(j==l-i)
k=l-i-1;
elsek=j;
d[i]=r[k];
for(j=k;
j++)
{
ch[j]=ch[j+1];
r[j]=r[j+1];
ch[j]='
删除%d后最小的整数为:
%s\n"
s,ch);
删除的数位为:
i++)
%d\t"
d[i]+1);
return0;
2.设计实现超市收银程序,假设顾客在超市购买各种商品,来到收银台结账,收银员具有面值为100,20,10,5和1元的纸币和各种面值为5角、2角、1角的硬币。
doubleprice,total=0,givemoney,leamoney;
intn,i,k=0,m=0,x=0,y=0;
请输入商品的数目:
输入每件商品的价格:
for(i=1;
=n;
{
第%d件:
i);
%lf"
price);
total=total+price;
总的价格=%5.2f\n"
total);
输入顾客所给的钱:
givemoney);
leamoney=givemoney-total;
剩余的钱为%5.2f\n"
leamoney);
\n各种货币的数目如下:
\n"
while(leamoney>
=100)
leamoney=leamoney-100;
k++;
if(leamoney<
100)
100元=%d张\n"
k);
while(leamoney>
=20)
leamoney=leamoney-20;
x++;
20)
20元=%d张\n"
x);
=10)
leamoney=leamoney-10;
10元=1张\n"
=5)
leamoney=leamoney-5;
5元=1张\n"
=1)
leamoney=leamoney-1;
m++;
1)
1元=%d张\n"
m);
=0.5)
leamoney=leamoney-0.5;
5角=1\n"
=0.2)
leamoney=(float)(leamoney-0.2);
y++;
0.2)
2角=%d张\n"
y);
=0.1)
leamoney=(float)(leamoney-0.1);
1角=1张\n"
算法与程序设计实验报告四(4学时)
8、流程图的绘制。
9、背包问题求解。
6、绘制下列各题的程序流程图。
1.输人一个数到变量a,输出它的绝对值。
(分别用单双分支绘制)
单分支结构算法:
(1)输入任意数并赋值给变量a;
(2)判断a是否小于0,如果a小于0,取a的相反数;
(3)输出a。
双分支结构算法:
(1)输人任意数并赋值给变量a;
(2)判断a是否小于0,如果a小于0则输出a的相反数,否则输出a。
2.最值问题:
(1)求输人的两个数中的最大值。
(2)求输人的三个数中的最大值。
(3)求输入的十个数中的最大值。
3.循环求和(不同的控制循环方法)
(1)求输人20个数的和。
计数法
(知道循环次数,可以采用循环变量i来控制循环次数)
(2)求输入的若干个学生成绩的和,输入-1表示结束。
标志法
(不能确定次数,可以用输入的数据的值来进行控制)
(3)对输入的数据求和,当所求的和超过100则停止输入并输出求和结果(设此题中输人的数皆为正数)。
(没有指出输人数据的具体个数,且不能依据对输入数据的值来控制循环,控制循环的关键就在于对循环体中变量s的判断)
7、利用贪心策略解决背包问题。
现有载重为M公斤的背包和n种货物。
第i种货物的重量为Wi,它的总价值为Pi,假定M、Wi、Pi均为整数。
设计程序给出装货方法,使装入背包的货物总价值达到最大。
(2)求输人的三个数中的最大值。
3.循环求和
1.求输人20个数的和。
计数法
2.求输入的若干个学生成绩的和,输入-1表示结束。
(不能确定次数,可以用输入的数据