您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 交通运输 > 实验4-函数与预处理
中南大学实验报告课程名称c++程序设计实验项目名称实验4实验5实验6指导老师向瑶实验学生班级电子信息工程1503实验学生姓名陶韬学号0903130309实验时间2016.4.1至4.10实验地点校本部科技楼4楼实验成绩评定实验4函数与预处理实验4.14.1.1题目:写一个判别素数的函数,在主函数输入一个整数,输出是否为素数的信息。4.1.2自己写的代码:#includeiostreamusingnamespacestd;boolisprime(intx);//函数声明intmain(){intx;//定义一个变量来储存等下要输入的数cout请输入一个整数endl;cinx;if(isprime(x))//用if条件语句根据isprime函数的返回值来输出不同的结果cout输入的是一个素数endl;elsecout输入的不是一个素数endl;return0;}boolisprime(intx){inti=2;if(x==2)//特例如果输入的是2直接返回truereturntrue;if(x==1)returnfalse;for(;ix;i++){if(x%i==0)returnfalse;}returntrue;}4.1.3根据教材优化修改后的代码主要是对素数的算法进行优化-i只需要遍历到x的1/2即可,这样的算法对于输入的数是2也是可以正确执行的,为了便于测试可以加上一个循环结构#includeiostreamusingnamespacestd;boolisprime(intx);//函数声明intmain(){intx;//定义一个变量来储存等下要输入的数cout当输入的数不为负数时一直进行循环endl;cout请输入一个整数endl;cinx;while(x=0){if(isprime(x))//用if条件语句根据isprime函数的返回值来输出不同的结果cout输入的是一个素数endl;elsecout输入的不是一个素数endl;cout请继续输入一个整数:endl;cinx;}return0;}boolisprime(intx){inti=2;if(x==1||x==0)returnfalse;for(;ix/2;i++){if(x%i==0)returnfalse;}returntrue;}4.1.4测试结果当输入的数不为负数时一直进行循环请输入一个整数17输入的是一个素数请继续输入一个整数:34输入的不是一个素数请继续输入一个整数:2输入的是一个素数请继续输入一个整数:1输入的不是一个素数请继续输入一个整数:0输入的不是一个素数请继续输入一个整数:实验4.24.2.1题目:写一个函数验证哥德巴赫猜想,一个不小于6的偶数可以表示为两个素数之和,如6=3+3,8=3+5,10=3+7,。。。。在主函数中输入一个不小于6的偶数n,然后调用函数gotbaha,在gotbaha函数中再调用prime函数,prime函数的作用是判别一个数是否为素数。在gotbaha函数中输出以下形式的结果34=3+31;运行时输入该偶数的值为6,12,20,458,分析运行结果。如果输入2,4,会出现什么情况?修改程序,使之能输出相应的信息4.2.2代码部分#includeiostreamusingnamespacestd;boolisprime(intx);//判断一个数是否是素数的函数声明voidgotbaha(inty);//验证哥德巴赫猜想的函数intmain(){cout请输入一个不小于6的偶数endl;cout当输入的数不为负数时一直循环endl;intx;cinx;while(x=0)//循环直到输入的数为负数{gotbaha(x);cout请输入一个新的数据进行验证;cinx;}}boolisprime(intx){inti=2;if(x==1||x==0)returnfalse;for(;i=x/2;i++){if(x%i==0)returnfalse;}returntrue;}voidgotbaha(inty){intx1,x2;for(x1=2,x2=y-x1;x1=y/2;x1++,x2=y-x1)/*这里的算法是设出x1那么x2自然也就等于y-x1分别验证这两个数都满足素数即可*/{if(isprime(x1)&&isprime(x2))couty=x1+x2endl;elsecontinue;}}4.2.3运行结果1请输入一个不小于6的偶数当输入的数不为负数时一直循环66=3+3请输入一个新的数据进行验证1212=5+7请输入一个新的数据进行验证2020=3+1720=7+13请输入一个新的数据进行验证458458=19+439458=37+421458=61+397458=79+379458=109+349458=127+331458=151+307458=181+277458=229+229请输入一个新的数据进行验证4.2.4本题第二问:如果输入2,和4会输出什么情况?修改程序使之能输出相应的信息4.2.5运行结果2请输入一个不小于6的偶数当输入的数不为负数时一直循环2请输入一个新的数据进行验证44=2+2请输入一个新的数据进行验证4.2.6修改代码使之能输出相应的信息分析:因为哥德巴赫猜想是针对大于或者等于6的偶数而言所以如果用户输入一个小于6的偶数时只要提示其输入错误需要重新输入即可。4.2.7代码2#includeiostreamusingnamespacestd;boolisprime(intx);//判断一个数是否是素数的函数声明voidgotbaha(inty);//验证哥德巴赫猜想的函数intmain(){cout请输入一个不小于6的偶数endl;cout当输入的数大于或者等于6时一直循环endl;intx;cinx;if(x6)cout请根据哥德巴赫猜想的前提条件输入一个大于或者等于6的偶数endl;while(x=6)//循环直到输入的数为负数{gotbaha(x);cout请输入一个新的数据进行验证;cinx;if(x6)cout请根据哥德巴赫猜想的前提条件输入一个大于或者等于6的偶数endl;}return0;}boolisprime(intx){inti=2;if(x==1||x==0)returnfalse;for(;i=x/2;i++){if(x%i==0)returnfalse;}returntrue;}voidgotbaha(inty){intx1,x2;for(x1=2,x2=y-x1;x1=y/2;x1++,x2=y-x1)/*这里的算法是设出x1那么x2自然也就等于y-x1分别验证这两个数都满足素数即可*/{if(isprime(x1)&&isprime(x2))couty=x1+x2endl;elsecontinue;}}4.2.8运行结果请输入一个不小于6的偶数当输入的数大于或者等于6时一直循环66=3+3请输入一个新的数据进行验证4请根据哥德巴赫猜想的前提条件输入一个大于或者等于6的偶数Pressanykeytocontinue实验4.34.3.1题目:解决汉诺塔问题。古代有一个梵塔,塔内有3个座,A,B,C,开始时A座上有64个盘子,盘子大小不等,大的在下,小的在上。有一个老和尚想把这64个盘子从A座移到C座,但每次只允许移动一个盘,且在移动过程中在3个座上都始终保持大盘在下小盘在上。在移动过程中可以利用B座,要求编程序打印出移动的步骤。在运行时分别指定盘子数为3.,5,7,。并统计在不同盘子数的情况下,移动盘子多少次。请试一下如果盘子数为16,在你所用的计算机上要运行多少时间。设想一下,如果盘子数为63,会出现什么情况?4.3.2代码#includeiostreamusingnamespacestd;voidhannuota(intx,charone,chartwo,charthree);//汉诺塔函数表示one座借助two座把x个盘子移动到three座voidmove(chara,charb);//移动函数输出从a移动到binttimes=0;//全局变量用来统计一共搬运了多少次intmain(){cout请输入一共有多少个盘子在A座endl;intx;cinx;cout具体的操作步骤:endl;hannuota(x,'A','B','C');cout一共执行了times次endl;return0;}voidhannuota(intx,charone,chartwo,charthree){if(x==1)move(one,three);//当盘子数只为1的时候显然只需要从one搬到threeelse{hannuota(x-1,one,three,two);//递归把x-1个盘子从one借助tree移动到twomove(one,three);//把剩下的一个盘子从one搬到threehannuota(x-1,two,one,three);//把x-1个盘子从two借助one移动到three}}voidmove(chara,charb){couta-bendl;times++;}4.3.3运行结果4.3.3.1当输入3请输入一共有多少个盘子在A座3具体的操作步骤:A-CA-BC-BA-CB-AB-CA-C一共执行了7次Pressanykeytocontinue4.3.3.2当输入5请输入一共有多少个盘子在A座5具体的操作步骤:A-CA-BC-BA-CB-AB-CA-CA-BC-BC-AB-AC-BA-CA-BC-BA-CB-AB-CA-CB-AC-BC-AB-AB-CA-CA-BC-BA-CB-AB-CA-C一共执行了31次Pressanykeytocontinue4.3.3.3考虑篇幅原因就不复制过来当x=7一共搬运127次如果盘子数为16在我的pc上需要运行大约5s4.3.4如果盘子数为16要运行多久?如果盘子数为64会出现什么情况如果盘子数为64需要执行(264-1=1084467x1019),将会运行几十分钟左右。实验4.44.4.1题目:输入一个字母字符,设置条件编译,使之能根据需要将小写字母改写为大写字母输出,或将大写字母改写为小写字母输出。4.4.2代码:#includeiostreamusingnamespacestd;//#defineUPPER//如果需要将大写改为小写把这一行注释即可intmain(){charc;cout请输入一个字符字母endl;cinc;#ifdefUPPERif(c='a'&&c='z')c-=32;#elseif(c='A'&&c='Z')c+=32;#endifcoutcendl;;}4.4.3运行结果请输入一个字符字母AaPressanykeytocontinue请输入一个字符字母aAPressanykeytocontinue实验4.54.5.1题目:求a×b和am的值,其中b的值在程序中给出,a和m值由键盘输入,卸一个power函数求am的值,在主函数中求a×b,并调用power函数得到am的值。要求将主函数和power函数分别写成两个文件file1.cpp和file2.cpp,用extern将外部变量作用域扩展到其他文件。建立一个项目文件,包含file1.cpp和file2.cpp,按照本书第2部分中介绍的对包含多文件的程序的处理办法,对包含多文件的程序进行编译、连接和运行。通过这个简单的程序,初步掌握处理包含多文件程序的方法。4.5.2file1.cpp的代码#includeiostreamu
本文标题:实验4-函数与预处理
链接地址:https://www.777doc.com/doc-5621629 .html