常熟理工学院
《C语言程序设计》实验指导与报告书
______学年 第____ 学期
专 业: ___________________________________________ 学 号: ___________________________________________ 姓 名: ___________________________________________ 实验地点:___________________________________________ 指导教师:___________________________________________
计算机科学与工程学院
2014
1
实验9 函数程序设计(1)
9.1 实验目的
1.理解函数的概念,掌握函数的定义与调用方法。
2.理解参数传递的概念,理解形参与实参之间的对应关系。 3.理解局部变量与全局变量的概念。
4.掌握数组作为函数的参数的程序设计方法。
9.2 示例程序
【实验9.1】本程序的功能是:求任意两个正整数的最小公倍数。 程序代码:
#include int r,p; p=m*n; while((r=m%n)!=0) { } p=p/n; return(p); } int main() { int a,b,c; printf(\"Enter two integers:\"); scanf(\"%d,%d\ c=gbs(a,b); printf(\"c=%d\\n\return 0; } /* 调用函数 */ /* 最小公倍数 */ m=n; n=r; /* 余数不为0时循环 */ /* 上一次的除数作为新的被除数 */ /* 上一次的余数作为新的除数 */ 说明: 1.函数中首先求出两个整数的最大公约数,采用的算法是辗转相除法。 2.以其中一个数做被除数,另一个数做除数,相除求余数。若余数不为0,则以上一次的除数作为新的被除数,上一次的余数作为新的除数,继续求余数。 3.直至余数为0时,对应的除数就是最大公约数。两个整数的乘积除以最大公约数即为最小公倍数。 ),输出m~n之间所有的完数,完【实验9.2】输入两个正整数m和n(m1,n1000数就是其因子和与它本身相等的数。要求定义和调用函数factsum(n),它的功能是返回n的 因子和。例如,factsum(12)的返回值是16(1+2+3+4+6)。 程序代码: #include 2 int factsum(int n); int main() { int i,m,n, result; printf(\"Enter two integer numbers m and n:\"); scanf(\"%d,%d\if(m>n) { { i=m;m=n;n=i;} /* 使m for(i=m;i<=n;i++) result=factsum(i); if(i==result) printf(\"%d.\\n\ } return 0; } int factsum(int n) { int i,sum; sum=1; for(i=2;i<=n/2;i++) if(n%i==0) sum=sum+i; return sum; } /* 累加因子 */ /* 返回因子和 */ /* 找所有因子 */ /* 求因子和函数 */ /* 对函数进行声明 */ 说明: 1.函数factsum(n)的功能是返回整数n的因子和。 2.调用返回后,将因子和与i进行比较,若相等则是完数。 9.3 阅读程序 【实验9.3】以下程序的功能是:由键盘输入一个正整数n,调用判断素数的函数,输出小于n的所有素数,将素数以每行3个的形式输出。 程序代码: #include int i; for(i=2;i return(0); return(1); } int main() { int i,n,k=0; printf(\"Enter a integer:\"); scanf(\"%d\for(i=2;i<=n;i++) 3 /* */ /* */ if(prime(i)) { printf(\"%4d\k++; if(k%3==0) printf(\"\\n\"); } return 0; } /* */ /* */ 说明: 1.输入一个整数后,则判断由2到n之间的每个数是否为素数。 2.函数prime用于判断一个整数n是否为素数。若是素数返回值1,否则返回值0。 【实验9.4】下面程序的功能是:一维数组中存放了10名同学某门课程的成绩,使用全局变量与函数,求出10名同学的平均分、最高分和最低分。 程序代码: #include float max=0,min=0; float average(float array[],int n) { int i; float aver,sum=array[0]; max=min=array[0]; for(i=1;i max=array[i]; else if(array[i] aver=sum/n; return(aver); } int main() { float ave,score[10]; int i; for(i=0;i<10;i++) scanf(\"%f\ ave=average(score,10); return 0; } /* */ printf(\"max=%.0f\\n min=%.0f\\n average=%.2f\\n\ /* */ /* */ /* */ /* */ 说明: 1.程序中将最高分与最低分变量定义为全局变量,这样可以实现从函数中返回多个值。 2.但在程序设计中应尽量少使用全局变量,否则会使函数的通用型降低。 9.4 完善程序 4 【实验9.5】下面程序的功能是:寻找具有下列特性的四位正整数,其百位数为0,去掉百位数0可得到一个三位正整数,而该三位正整数乘以9等于原四位正整数。例如,6075=675×9,所以6075是具有上述特性的正整数。请完善程序。 程序代码: #include int a,b,c,d; a=n/1000; /* 求出千位数字 */ /* 求出百位数字 */ b=________; d=n%10; if((b==0)&&(_________) return 1; else return 0; } int main() { int i; for(i=1000; i<10000; i++) if(________) printf(\"%6d\ printf(\"\\n\"); return 0; } /* 判断i是否所要找的数 */ /* 判断是否满足条件 */ c=(n-a*1000-b*100)/10; 说明: 1.程序采用循环遍历1000到9999之间的每个数。 2.函数fun中分别求出每一位数字,由得到的数字判断是否满足题目的条件,若满足条件返回1,否则返回0。 9.5 改错程序 【实验9.6】本程序的功能是:以每行5个的格式输出2~2000之间满足下列条件的数: (1)该数是素数; (2)从个位开始依次去掉一位数字后的数仍然是素数。例如,233是素数,23和2仍然是素数,则233满足条件。请改正程序中的错误,并调试。 注意:改错时不允许增加及删除语句,只允许修改或移动语句的位置。 【含有错误的程序代码】 #include int i; for(i=2;i return 0; return 1; } 5 /* 判断n是否为素数的函数 */ int main() { int m,n,k,flag; for(n=2;n<2000;n++) if(prime(n)) continue; else { m=n; flag=1; { /* 标志变量置为1 */ /* 依次去掉一位数字 */ /* 若不是素数标志变量置为0 */ while(m<0) m=m/10; if(!prime(m)) { } } if(flag) { k++; if(k%5==0) printf(\"\\n\"); } } return 0; } /* 若是素数则输出 */ printf(\"\%d\ flag=0; break; /* 若不是素数则判断下一个 */ 9.6 自己练习 1.编写程序,输出1~100之间各位数的乘积大于各位数的和的数。要求判断各位数的乘积大于各位数的和用函数实现。 2.编写程序验证哥德猜想:任何充分大的偶数都可由两个素数之和来表示。例如:4=2+2,6=3+3,8=3+5,…。验证4~20之间的数。要求判断素数用函数实现。 3.编写程序,输出100以内的正整数中包含数字3,5,7中的一个的数。要求判断一个数中包含数字3,5,7中的一个的数用函数实现。 6 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- awee.cn 版权所有 湘ICP备2023022495号-5
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务