(实验五:函数的调用工程化设计试验)
实验成绩:
(实验六:C程序函数递归调用工程化设计试验)
实验成绩:
专 业: 轨道交通信号与控制
班 级: 1303班
姓 名: 卢鹏伟
学 号: 201310032 指导教师: 李建国
兰州交通大学自动化与电气工程学院
20 14 年 5 月 17 日
实验五:函数的调用工程化设计试验
一 实验内容:
1. 判断101-1000之间有多少个水仙花数,并输出所有水仙花数和水仙花数的个数。所谓水仙花数是指一个数,其各位数字立方和等于该数本身。如153 = 1^3+5^3+3^3。
要求:
1 设计2个函数实现;其中一个函数以相乘方式实现,一个函数以求幂的方式实现;
2 主函数存放于main.c文件中,子函数存放于func1.c文件中,如有多个子函数,则依次存放于不同的funcX.c文件中,其中X为依次增长的数字;
3 函数名和变量名采用有意义的名字,应有必要的注释;
4按照编程风格要求编写程序;
二 实验目的:
完成求解101-1000之间的水仙花数的输出
本实验的目的是检验对工程化设计,函数设计,函数声明,函数定义,函数调用的掌握程度,在一定程度上也反应了对流程图,循环,条件判断的掌握情况。
提示:求幂的函数为pow。
1 / 17
三 实验过程:(学生完成)
1 解题思路
方法一:判断101-1000之间有多少个水仙花数,并输出所有水仙花数和水仙花数的个数。用循环做,定义一个三位数的个十百位的变量作如下循环for(i=100;i<1000;i++)
{ a=i/100;
b=i%100/10;
c=i%10;
if(pow(a,3)+pow(b,3)+pow(c,3)==i)
方法二:采用乘法的方式作如下循环 for(i=100;i<1000;i++{ b=i%100/10;c=i%10;if(a*a*a+b*b*b+c*c*c==i)
可以在结束时加一个如下循环来计数水仙花的个数{ k++; }
2 设计算法,画流程图如下图
2 / 17
a=i/100; 3编写源代码
#include #include int main() { 3 / 17 int print_chengfa(); int print_lifang(); print_chengfa(); print_lifang(); return 0; }#include int print_chengfa() { int a,b,c,i,k=0; for(i=100;i<1000;i++) { a=i/100; b=i%100/10; c=i%10; 4 / 17 if(a*a*a+b*b*b+c*c*c==i) { printf(\"shuixianhuashushi%d\\n\ k++; } } printf(\"shuixianhuashu %d\\n\ return (k,i); }‘ #include #include int print_lifang() { int a,b,c,i,k=0; 5 / 17 for(i=100;i<1000;i++) { a=i/100; b=i%100/10; c=i%10; if(pow(a,3)+pow(b,3)+pow(c,3)==i) { printf(\"shuixianhuashushi%d\\n\ k++; } } printf(\"shuixianhuashu %d\\n\ return (k,i); } 6 / 17 4实验步骤上机 1建立一个空工程 2输入源代码 3执行build命令检查错吴发现座乘法是没有水仙花的个数 7 / 17 4 调试 5 实验结果 在代码四 实验分析 程序输出正常但做的过程中没有很好的在一个过程里面调用成功。经过好多次调试才得到结果。希望下次一次编写成功。 8 / 17 实验六:C程序函数递归调用工程化设计试验 一 实验内容: 小猴子吃桃。第一天摘下桃子吃了一半又一个,第二天又吃了剩下的桃子的一半又一个,以后每天都吃前一天剩下的一半再多吃一个,第十天就剩一个桃子了,求小猴子第一天摘了多少桃子。 要求: 1 设计两个函数实现;第一个函数采用循环方式实现;第二个函数采用递归方式实现; 2 主函数存放于main.c文件中,子函数存放于func1.c文件中,如有多个子函数,则依次存放于不同的funcX.c文件中,其中X为依次增长的数字; 3 函数名和变量名采用有意义的名字,应有必要的注释; 4 按照编程风格要求编写程序; 二 实验目的:完成求解第一天猴子摘了多少桃。 本实验的目的是检验对工程化设计,函数设计,函数声明,函数定义,函数调用,函数递归调用,在一定程度上也反应了对流程图,循环,条件判断的掌握情况。 三 实验过程: 9 / 17 1 解题思路方法一:函数采用循环方式实现采取逆向思维的方法,从后往前推断。第一天的桃子数是第2天桃子数加1后的2倍。for(i=1;i<10;i++){n=(n+1)*2;printf(\"猴子第%d天摘了%d个桃子\\n\ } 方法二采用递归方式实现。采用调用自身的方法做;int h; if(t==1 h=1; Else h=(dg(t-1)+1)*2; return (h); 2 设计算法,画流程图 printf(\"猴子第%d天摘了%d个桃子\\n\ 10 / 17 3编写源代码#include int main() { int dg(int m); void print_xh(); printf(\"用方法一递归得桃子数:\\n\"); printf(\"小猴子第%d天摘了%d个桃子\\n\ 11 / 17 printf(\"用方法二循环得桃子数:\\n\"); print_xh(); return 0; }#include void print_xh() { int i,n=1; for(i=1;i<10;i++) { n=(n+1)*2; printf(\"猴子第%d天摘了%d个桃子\\n\ } return 0; }#include 12 / 17 int dg(int t) { int h; if(t==1) h=1; else h=(dg(t-1)+1)*2; printf(\"猴子第%d天摘了%d个桃子\\n\ return (h); } 4实验步骤上机 1建立一个空工程 13 / 17 2输入源代码 3执行build命令检查错吴发现输出的天数是错误的‘还有循环是没有输出,想是由于调用时出现错误了’经过多次调试后得到真确结果 14 / 17 4 调试 在调试过程中发现调用函数时出现好多问题 为什么在16天后桃子吃不完了,难道猴子吃的撑死了。。原来int型数不出来了’原来如此 5 实验结果 15 / 17 四 实验分析 通过使用递归和循环两种方法做得实验结果,从中体验到两种方法的优点。循环做多了,做起来比较容易,递归不太会会做,最后还想算出每天吃了几个桃子,就加了 printf(\"猴子第%d天摘了%d个桃子\\n\语句。这样就可以找到每天吃了几个桃子。嘻嘻,设计的好。 16 / 17 因篇幅问题不能全部显示,请点此查看更多更全内容