关于函数应用的实验报告.docx
- 文档编号:13960235
- 上传时间:2023-06-19
- 格式:DOCX
- 页数:14
- 大小:18.70KB
关于函数应用的实验报告.docx
《关于函数应用的实验报告.docx》由会员分享,可在线阅读,更多相关《关于函数应用的实验报告.docx(14页珍藏版)》请在冰点文库上搜索。
关于函数应用的实验报告
《计算机编程》实验报告
一、实验目的:
(1)充分理解循环结构的语法与作用。
(2)运行自编程序,寻求最优。
(3)巡回经典算法的应用,并且掌握它,用它来解决一些像类似的问题。
(4)再次理解算法与结构的配合作用。
(5)观察并掌握循环语句中的一些经典现象。
求和问题中孤立数的处理办法
若此程序为调用函数
则可用if语句返回孤立值,用for语句返回一般值
求和问题中的孤立数处理方法
若此程序用调用函数,则可用
if语句for语句嵌套
二、实验内容与过程分析:
1、皮球落地问题
#include
intmain(void)
{inti,n;
doubleheight,sum,an,item;
printf("Enterheight,n:
");
scanf("%lf%d",&height,&n);
if(n==1)
printf("sum=%d,an=%d",sum,an);
else{
item=sum=height;
for(i=2;i<=n;i++){
sum=sum+item;
item=item*0.5;
}
printf("sum=%f,an=%f",sum,item/2);}
return0;
}
2、输出最小值
1、此程序用打擂台法,为经典程序
2、Scanf语句与循环语句的嵌套
1scanf语句放在for语句前,对应for语句中初值的改变
2scanf语句放在while语句中,注意scanf放在前与后的现象差别。
#include
intmain(void)
{intn,min,mark,i;
printf("Entern:
");
scanf("%d",&n);
printf("Entermarks:
");
scanf("%d",&min);
for(i=2;i<=n;i++){
scanf("%d",&mark);
if(min>mark)
min=mark;
}
printf("min=%d",min);
return0;
}
3、换钱问题(搬砖头问题)
1、搬砖头问题是典型算法,注意掌握
2、搬砖头问题注意寻找更多限制条件以减少循环次数。
#include
intmain(void)
{inti,j,a;
printf("Entera:
");
scanf("%d",&a);
for(i=1;i<=20;i++)
for(j=1;j<=47;j++)
if(a-i-j>0)
printf("5分:
%d\t2分:
%d\t1分:
%d\t",i,j,a-i-j);
return0;
}
分解质因数有三个难点:
1找到质因数
2循环终止条件的选择
3“*”号的处理
4、分解质因数
<1>#include
intmain(void)
{inti,j,n,count;
printf("Entern:
");
scanf("%d",&n);
count=0;
对程序1分析
①找到质因数:
既是质数,又是因数
②循环终止条件的选择:
n=0
③“*”号的处理:
count的引入
while(n!
=1){
for(i=2;i<=n;i++)
{
for(j=2;j<=i/2;j++)
if(i%j==0)
break;
if(j>i/2&&n%i==0)
break;
}
count++;
if(count==1)
对程序2分析
①找到质因数:
只要是因数,则输出的一定是质数
②循环终止条件的选择:
Product=m
③“*”号的处理:
if语句中若product则跳出循环
从而解决了多余*号的问题。
printf("%d=%d",n,i);
else
printf("*%d",i);
n=n/i;
}
printf("\n");
return0;
}
<2>#include
intmain(void)
{inti,m,n,product;
For语句后赋值i=1,其可实现对整个for语句进行循环。
其作用相当于while语句中嵌套for语句
printf("Enterm:
");
scanf("%d",&m);
product=1;
n=m;
printf("%d=",m);
for(i=2;i<=n;i++)
if(n%i==0)
{printf("%d",i);
product=product*i;
if(product==m)
break;
printf("*");
n=n/i;
i=1;
}
return0;
}
5
、求一批整数中的奇数和
#include
intmain(void)
{inta,sum;
printf("Enternumbers:
");
scanf("%d",&a);
sum=0;
while(a>0){
if(a%2!
=0){
sum=sum+a;}
scanf("%d",&a);
}
printf("sum=%d",sum);
return0;
}
6、求最大公约数与最小公倍数
方法1与方法2都很巧妙,方法一用了最大公约数是离本身最近的一个约数,最小公倍数是离其最近的一个公倍数。
方法二用了
1辗转相除法
2最大公约数*最小公倍数=m*n
<1>#include
intmain(void)
{intm,n,i,j;
printf("Enterm,n:
");
scanf("%d%d",&m,&n);
for(i=m;i>=0&&i<=m;i--)
if(m%i==0&&n%i==0)
{printf("最大公约数%d",i);break;}
for(j=m;j>=m;j++)
if(j%m==0&&j%n==0){
printf("最小公倍数=%d",j);
break;}
return0;
}
<2>#include
intmain(void)
{
intm,n,j,k;
printf("Entertwonumbers:
");
scanf("%d%d",&m,&n);
j=m;
while(j%n!
=0)
j=j+m;
k=(m*n)/j;
printf("最小公倍数=%d,最大公约数=%d",j,k);
return0;
}
7正序输出整数的各个数字
对整数各位数的操作:
(1)统计整数位数
(2)用“%”与“/”输出整数的各个位上的数字
#include
#include
intmain(void)
{intn,count,m;
printf("Entern:
");
scanf("%d",&n);
count=0;
m=n;
do{m=m/10;
count++;
}while(m!
=0);
do{m=n/pow(10,(count-1));
printf("%3d",m%10);
count--;}
while(count!
=0);
return0;
}
8、验证哥德巴赫猜想
#include
intmain(void)
{longm,i,j,n,a,b,count;
printf("Enterm:
");
scanf("%d",&m);
count=0;
for(n=6;n<=m;n=n+2)
for(i=2;i<=n;i++){
for(j=2;j<=i/2;j++)
if(i%j==0)
无论多门复杂的编程题,都可经过分解数据与算法,进行分析。
并且利用典型经典算法,这样就可以攻克疑难问题。
break;
if(j>i/2)
{
a=i;
b=n-a;
}
for(j=2;j<=b/2;j++)
if(b%j==0)
break;
if(j>=b/2)
{
printf("%d=%d+%d",n,a,b);
count++;
if(count%5==0)
printf("\n");
break;
}
}
return0;
}
9、输出雪花形状
<1>#include
分析1与2程序,发现1程序较繁琐,而2程序简明且简单。
由此针对打印图案问题可总结如下:
1大for循环下,嵌套两个小的for循环。
第一个for循环用于输出空格,第二个for循环用于输出图案。
2观察图形结构与每一个数字的特点进行编程。
intmain(void)
{inti,j,n;
printf("Entern:
");
scanf("%d",&n);
for(i=1;i<=n;i++){
for(j=1;j<=2*n-1;j++)
if(j>=n-i+1&&j<=n+i-1)
printf("*");
else
printf("");
putchar('\n');
}
for(i=1;i<=n-1;i++){
for(j=1;j<=2*n-1;j++)
if(j>=i+1&&j<=2*n-i-1)
printf("*");
else
printf("");
putchar('\n');
}
return0;
}
<2>#include
intmain(void)
第二种做法可用于编写杨辉三角。
{intn,i,j;
printf("Entern:
");
scanf("%d",&n);
for(i=1;i<=n;i++){
for(j=1;j<=n-i;j++)
printf("");
for(j=1;j<=2*i-1;j++)
printf("*");
putchar('\n');
}
for(i=1;i<=n-1;i++){
for(j=1;j<=i;j++)
printf("");
for(j=1;j<=2*n-2*i-1;j++)
printf("*");
putchar('\n');
}
return0;
}
10、杨辉三角
#include
杨辉三角正是用了大for循环下,嵌套两个小的for循环,只是雪花变为了组合数。
intmain(void)
{inti,j,n;
intf(intm,intn);
printf("Entern:
");
scanf("%d",&n);
for(i=1;i<=n;i++){
for(j=1;j<=n-i;j++)
printf("");
for(j=1;j<=i;j++)
printf("%d",f(j-1,i-1));
putchar('\n');
}
return0;
}
intf(intm,intn){
intitem1,item2,i;
item1=item2=1;
for(i=1;i<=m;i++){
item1=item1*(n-i+1);
item2=item2*i;
}
returnitem1/item2;
}
11、用一重嵌套循环求和
解决1/2=0的问题
11×1.0/2
2(double)1/2
2/1+3/2+5/3+8/5+……
#include
intmain(void)
{inta,b,i,n;
doubleitem,sum;
printf("Entern:
");
scanf("%d",&n);
a=2;
b=1;
sum=0;
for(i=1;i<=n;i++){
item=(double)a/b;
sum=sum+item;
a=a+b;
b=a-b;
}
printf("%.2f",sum);
return0;
}
三、实验结果分析与建议:
1、实验过程中。
“边实验,边总结。
”这个学习习惯让自己获益不少,以后得坚持。
2、在实验中,采用类比归纳的总结方法,有利于探清实验本质。
3、实验过程中,进一步加强了:
数据与算法的协调作用对于编程的重要性。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 关于 函数 应用 实验 报告