【预习报告】
1 流程图 2 代码 流程图 代码 3 流程图
代码 【实验报告】
【思考题】
1、区分while和do?while的区别,使用do?while改造教材P61页中例4-2程序
2、什么时候使用for语句比较方便
3、break和循环条件有什么联系和区别,什么时候使用break
实验五 函数程序设计
【实验目的】
1、掌握函数的定义和调用 2、掌握使用函数编写程序
3、掌握函数参数传递形式和返回值的概念
【实验性质】 验证性 【实验要求】
1、认真阅读本次实验的目的,了解本次实验要求掌握的内容 2、在程序改错题旁,将程序中存在的错误修改过来 3、将编程题的代码在预习报告中写出来
4、在实验时,将实验要求的基本题(程序改错和编程题)根据预习报告中编写的代码,在VC环境中编写出来
5、在VC中将编写的程序编译、调试,能正确运行结果 6、将正确程序上传FTP服务器 7、争取完成选作题
【实验内容】
1、程序改错
1) 下面程序从键盘输入两个数,输出两个数的最大公约数和最小公倍数,源代码如下,程序中存在错误,请将其改正写在旁边。 #include \
main(){
int x,y,acd,amd;/*定义变量,acd保存最大公约数,amd保存最小公倍数*/ printf(\请输入两个数:/n\提示输入*/ scanf(\
if(x>y){/*如果x>y,两个值互换,保证第一个参数为小值*/ x=y; y=x;
}
acd=acd(int m1,int m2);/*调用函数求最大公约数*/ amd=(x*y)/acd;/*求最小公倍数*/
printf(\最大公约数=%d,最小公倍数=%d\}
/**
函数功能:使用辗转相除法求两个数的最大公约数 参数m1:两个数中较小者 参数m2:两个数中较大者
返回值:m1和m2的最大公约数
**/
int acd(int m1,int m2); {
int r;
while (m1=0){/*使用辗转相除法求最大公约数*/ r=m2%m1; m1=r; m2=m1; }
return r;/*返回最大公约数*/ }
2、编程题
1) 若正整数A的所有因子(包括1但不包括自身,下同)之和为B,而B的因子之和为A,则称A和B为一对亲密数。例如,6的因子之和为1+2+3=6,因此6与6为一对亲密数(即6自身构成一对亲密数);又如,220的因子之和为l+2+4+5+10+11+20+22+44+55+110=284,而284的因子之和为1+2+4+71+142=220,因此,220与284为一对亲密数。 编写程序,求500以内的所有亲密数对。
【要求】
(1)编制facsum(n) 函数,返回n的所有因子(包括1但不包括自身)之和。 (2)在main函数中调用facsum(),寻找并输出500以内的所有亲密数对。
(3)输出要有文字说明。并且小数在前、大数在后,去掉重复的数对。 (4)采用程序改错题的的编码风格对源代码做注释
2) 计算并输出
m!(m?n)!n!
【要求】
(1)编制一个函数pq(n),返回n!值。
(2)在main函数中,从键盘输入m与n,调用函数pq计算。
(3)在main函数中,输入m与n之前要有提示,并检查输入数据的合理性(m≥n≥O),对于不合理的输入,应输出出错信息,不再进行计算。 (4)采用程序改错题的的编码风格对源代码做注释
3)使用函数的方法求1000之内的自守数,自守数是指一个数的平方的尾数等于该数自身的自然数。例如:252=625 ;762=5776;93762=87909376 (1)编制一个函数isAutomorphic (n),判断n是否为自守数数,如果是返回1,如果不是返回0。
(2)在main函数中,使用for循环,调用函数isAutomorphic判断n是否为自守数。 (3) 打印的数字占8个字符宽,每行显示5个自守数。 (4)采用程序改错题的的编码风格对源代码做注释