《C语言实验二报告.docx》由会员分享,可在线阅读,更多相关《C语言实验二报告.docx(11页珍藏版)》请在优知文库上搜索。
1、北京电子科技学院(BESTI)实验报告课程:程序设计根基班级:姓名:学号:成绩:指导教师:张晓昆实验日期:实验密级:预习程度:实验时间:15:30-18:30仪器组次:必修/选修:必修实验序号:2实验名称:函数编程练2实验目的与要求,主函数通常只处理输入和输出;掌握定义函数的方法;掌握函数实参与形参的对应关系,以及“值传递”的方式;掌握全局变量、局部变量、动态变量、静态变量的概念和使用方法,、了解函数的嵌套调用方法和递归调用方法。观察堆栈窗口Callstack,注意函数调用过程堆栈的动态变化。有兴趣的同学可以将几个函数分别放到不同的.C文件中,分别编译,再利用ProjeCl建设工程文件,然后连
2、接执行,观察结果。实验内容素数(PrimeNUmber),又称为质数,它是不能被1和它本身以外的其他整数整除的正整数。按照这个定义,负数、0和1都不是素数,而17之所以是素数,是因为除了1和17以外,它不能被216之间的任何整数整除。任务h试商法是最简单的判断素数的方法。用i=2m-l之间的整数去试商,假设存在某个m能被1与m本身以外的整数i整除(即余数为0),那么m不是素数,假设上述范围内的所有整数都不能整除m,那么m是素数。采用试商法,分别用got。语句、break语句和采用设置标志变量并加强循环测试等三种方法编写素数判断函数ISPrime(),从键盘任意输入一个整数m,判断m是否为素数,
3、如果m是素数,那么按disaprimenumbern格式打印该数是素数,否那么按disnotaprimenumbern格式打印该数不是素数。然后分析哪一种方法可读性更好。1、goto语句#include#includeintIsPrime(intn);判断是否是素数的函数原型intmain()(intm;printf(,PIeaseenterainteger:);scanf(%d,&m);用户输入欲判断的数if(IsPrime(m)=1)调用判断是否是素数的函数并输出结果printf(,%disaprimenumber!n,m);Ielseprintf(,%disnotaprimenumber
4、!nm);Ireturn0;返回0)主函数完毕intIsPrime(intn)判断是否是素数的函数(inti=2;intj=O;if(n=D假设j大于2,那么说明能被2n-l之间的数整除,返回0;否那么返回1return0;)elsereturnI;)子函数完毕2、break语句#include#includeintIsPrime(intn);判断是否是素数的函数原型intmain()intm;printf(Pleaseenterainteger:);scanf(1,%d,&m);用户输入欲判断的数if(IsPrime(m)=1)调用判断是否是素数的函数并输出结果printf(%disapri
5、menumbern,m);)elseprintf(%disnotaprimenumbernm);)return0;返回0主函数完毕intIsPrime(intn)判断是否是素数的函数(inti;intj=O;if(n2)假设n小于2,返回0值return0;)for(i=2;i)(假设j大于2,那么说明能被2n-l之间的数整除,返回0;否那么返回1return0;break;I)if(j=O)returnI;)子函数完毕3、采用设置标志变量并加强循环测试#include#includeintIsPrime(intn);判断是否是素数的函数原型intmain()(intm;printf(Plea
6、seenterainteger:);scanf(%d,&m);用户输入欲判断的数if(IsPrime(m)=1)调用判断是否是素数的函数并输出结果printf(%disaprimenumbern,m);elseprintf(%disnotaprimenumbern,m);Ireturn0;返回0主函数完毕intIsPrime(intn)判断是否是素数的函数Iinti;intj=0;if(n2)假设n小于2,返回。值return0;Ifor(i=2;i=D假设j大于2,那么说明能被2n-l之间的数整除,返回0;否那么返回1return0;IelsereturnI;I)子函数完毕任务2:用数学的方
7、法可以证明,不能被2而(取整)之间的数整除的数,一定不能被1和它本身之外的其他任何整数整除。根据素数的这个性质,通过修改素数判断函数ISPrime()的具体实现,编程完成任务Io#include#include#include因调用Sqrto函数,故需此预处理命令intIsPrime(intn);判断是否是素数的函数原型intmain()(intm;printf(Pleaseenterainteger:);scanf(%d,&m);用户输入欲判断的数if(IsPrime(m)=1)调用判断是否是素数的函数并输出结果printf(,%disaprimenumbern,m);Ielseprintf
8、(%disnotaprimenumbern,m);Ireturn0;/返回0主函数完毕intIsPrime(intn)/判断是否是素数的函数(inti;intj=0;if(n2)假设n小于2,返回。值return0;Ifor(i=2;i=D假设j大于2,那么说明能被2n-l之间的数整除,返回0;否那么返回1return0;IelsereturnI;I)子函数完毕任务3:从键盘任意输入一个整数n,编程计算并输出ln之间的所有素数之和。#include#include#include/因调用sqrt()函数,故需此预处理命令intIsPrime(intm);判断是否是素数并求和的函数原型intma
9、in()(intn;printf(,PIeaseenterainteger:);scanf(,%d,&n);/用户输入欲判断的数打印输出ln之间的所有素数之和printf(Thesumofalltheprimesbetween1andthenumberyouenteris:%dn,IsPrime(n);return0;返回0)主函数完毕intIsPrime(intm)判断是否是素数的函数(inti;intj;intsum=0;for(i=2;i=m;i+)intk=0;for(j=2J=Sqrt;j+)if(i%j=O)利用试商法判断是否能被2n的开方(取整)之间的数整除k+;if(k=0)如
10、果k等于0,说明i是素数,求和sum=sum+i;)Ireturnsum;返回素数之和)子函数完毕任务4:从键盘任意输入一个整数m,假设m不是素数,那么计算并输出其所有的因子(不包括1),例如对于16,输出2,4,8;否那么输出Nodivisor!Itisaprimenumber。#include#include#include因调用sqrt()函数,故需此预处理命令intIsPrime(intn);判断是否是素数的函数原型intmain()(intm;inti;printf(Pleaseenterainteger:);scanf(,%d,&m);用户输入欲判断的数if(IsPrime(m)=
11、1)调用判断是否是素数的函数,假设不是素数,打印因子(不包括1)for(i=2;i=m;i+)if(m%i=0)/利用试商法判断是否是因子printf(%d,i);if(IsPrime(m)=0)调用判断是否是素数的函数并输出结果printf(Nodivisor!Itisaprimenumbern);)returnO;返回O主函数完毕intIsPrime(intn)判断是否是素数的函数(inti;intj=0;for(i=2;i=D假设j大于2,那么说明能被2n-l之间的数整除,返回1;否那么返回0return1;elsereturnO;)子函数完毕任务5:如果一个正整数m的所有小于m的不同因
12、子(包括1)加起来正好等于m本身,那么就被称它为完全数(PerfeetNUmber)。例如,6就是一个完全数,是因为6=1+2+3。请编写一个判断完全数的函数IsPerfectO,然后判断从键盘输入的整数是否是完全数。#include#includeintIsPerfect(intn);判断输入的整数是否是完全数的函数原型intmain()Iintm;printf(,Pleaseenterainteger:*);scanf(,%d,&m);用户输入欲判断的数if(IsPerfect(m)=1)调用判断是否是素数的函数,假设是,打印语句printf(ThenumberyouenterisaPerfectNumber!n);Iif(IsPerfect(m)=0)/调用判断是否是素数的函数,假设不是,打印语句printf(,ThenumberyouenterisnotaPerfectNumber!n);Ireturn0;返回0主函数完毕intIsPerfect(intn)判断输入的整数是否是完全数的函数(inti;intSUm=0;for(i=1;in;i+)if(n%i=0)判断是否是因子sum=sum+