实验4-函数与预处理_第1页
实验4-函数与预处理_第2页
实验4-函数与预处理_第3页
实验4-函数与预处理_第4页
实验4-函数与预处理_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、中 南 大 学实 验 报 告课程名称 c+程序设计 实验项目名称 实验4 实验5 实验6 指导老师 向瑶 实验学生班级 电子信息工程1503 实验学生姓名 陶韬 学号 实验时间 2016.4.1至4.10 实验地点 校本部科技楼4楼实验成绩评定 实验4 函数与预处理实验4.14.1.1题目: 写一个判别素数的函数,在主函数输入一个整数,输出是否为素数的信息。4.1.2自己写的代码:#includeusing namespace std;bool isprime(int x);/函数声明int main()int x;/定义一个变量来储存等下要输入的数cout请输入一个整数x;if(isprim

2、e(x)/用if条件语句根据isprime函数的返回值来输出不同的结果cout输入的是一个素数endl;else cout输入的不是一个素数endl;return 0;bool isprime(int x)int i=2;if(x=2)/特例 如果输入的是2 直接返回truereturn true;if(x=1)return false;for(;ix;i+)if(x%i=0)return false;return true;4.1.3根据教材优化修改后的代码 主要是对素数的算法进行优化-i只需要遍历到x的1/2即可,这样的算法对于输入的数是2也是可以正确执行的,为了便于测试可以加上一个循环结

3、构#includeusing namespace std;bool isprime(int x);/函数声明int main()int x;/定义一个变量来储存等下要输入的数cout当输入的数不为负数时一直进行循环endl;cout请输入一个整数x;while(x=0)if(isprime(x)/用if条件语句根据isprime函数的返回值来输出不同的结果cout输入的是一个素数endl;else cout输入的不是一个素数endl;cout请继续输入一个整数:x;return 0;bool isprime(int x)int i=2;if(x=1|x=0)return false;for(;

4、ix/2;i+)if(x%i=0)return false;return true; 4.1.4测试结果当输入的数不为负数时一直进行循环请输入一个整数17输入的是一个素数请继续输入一个整数:34输入的不是一个素数请继续输入一个整数:2输入的是一个素数请继续输入一个整数:1输入的不是一个素数请继续输入一个整数:0输入的不是一个素数请继续输入一个整数:实验4.2 4.2.1题目:写一个函数验证哥德巴赫猜想,一个不小于6的偶数可以表示为两个素数之和,如6=3+3,8=3+5,10=3+7,。在主函数中输入一个不小于6的偶数n,然后调用函数gotbaha,在gotbaha函数中再调用prime函数,p

5、rime函数的作用是判别一个数是否为素数。在gotbaha函数中输出以下形式的结果34=3+31;运行时输入该偶数的值为6,12,20,458,分析运行结果。如果输入2,4,会出现什么情况?修改程序 ,使之能输出相应的信息4.2.2代码部分#includeusing namespace std;bool isprime(int x);/判断一个数是否是素数的函数声明void gotbaha(int y);/验证哥德巴赫猜想的函数int main()cout请输入一个不小于6的偶数endl;cout当输入的数不为负数时一直循环x;while(x=0)/循环直到输入的数为负数gotbaha(x);

6、coutx;bool isprime(int x)int i=2;if(x=1|x=0)return false;for(;i=x/2;i+)if(x%i=0)return false;return true;void gotbaha(int y)int x1,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的偶数当输入的数不为

7、负数时一直循环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请输入一个新的数据进行验证

8、4.2.6修改代码 使之能输出相应的信息分析 :因为哥德巴赫猜想是针对大于或者等于6的偶数而言 所以如果用户输入一个小于6的偶数时只要提示其输入错误 需要重新输入即可。4.2.7代码2#includeusing namespace std;bool isprime(int x);/判断一个数是否是素数的函数声明void gotbaha(int y);/验证哥德巴赫猜想的函数int main()cout请输入一个不小于6的偶数endl;cout当输入的数大于或者等于6时一直循环x;if(x6)cout请根据哥德巴赫猜想的前提条件输入一个大于或者等于6的偶数=6)/循环直到输入的数为负数gotba

9、ha(x);coutx;if(x6)cout请根据哥德巴赫猜想的前提条件输入一个大于或者等于6的偶数endl;return 0;bool isprime(int x)int i=2;if(x=1|x=0)return false;for(;i=x/2;i+)if(x%i=0)return false;return true;void gotbaha(int y)int x1,x2;for(x1=2,x2=y-x1;x1=y/2;x1+,x2=y-x1)/*这里的算法是设出x1 那么x2自然也就等于y-x1分别验证这两个数都满足素数即可*/if(isprime(x1)&isprime(x2)co

10、uty=x1+x2endl;elsecontinue;4.2.8 运行结果请输入一个不小于6的偶数当输入的数大于或者等于6时一直循环66=3+3请输入一个新的数据进行验证4请根据哥德巴赫猜想的前提条件输入一个大于或者等于6的偶数Press any key to continue实验4.34.3.1题目: 解决汉诺塔问题。古代有一个梵塔,塔内有3个座,A,B,C,开始时A座上有64个盘子,盘子大小不等,大的在下,小的在上。有一个老和尚想把这64个盘子从A座移到C座,但每次只允许移动一个盘,且在移动过程中在3个座上都始终保持大盘在下 小盘在上。在移动过程中可以利用B座,要求编程序打印出移动的步骤。

11、在运行时分别指定盘子数为3.,5,7,。并统计在不同盘子数的情况下,移动盘子多少次。请试一下如果盘子数为16,在你所用的计算机上要运行多少时间。设想一下,如果盘子数为63,会出现什么情况?4.3.2代码#includeusing namespace std;void hannuota(int x,char one,char two,char three);/汉诺塔函数表示one座借助two座把x个盘子移动到three座void move(char a,char b);/移动函数 输出从a移动到bint times=0;/全局变量用来统计一共搬运了多少次int main()cout请输入一共有多

12、少个盘子在A座x;cout具体的操作步骤:endl;hannuota(x,A,B,C);cout一共执行了times次endl;return 0;void hannuota(int x,char one, char two,char three)if(x=1)move(one,three);/当盘子数只为1的时候显然只需要从one搬到threeelsehannuota(x-1,one,three,two);/递归把x-1个盘子从one借助tree移动到twomove(one,three);/把剩下的一个盘子从one搬到threehannuota(x-1,two,one,three);/把x-1

13、个盘子从two借助one移动到threevoid move(char a,char b)coutabCA-BC-BA-CB-AB-CA-C一共执行了7次Press any key to continue4.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次Press any key to continue4.3.3.3考虑篇幅原因就不复制过来 当x=7 一共搬运 127次如果盘子数

14、为16在我的pc上需要运行大约5s4.3.4 如果盘子数为16 要运行多久?如果盘子数为64 会出现什么情况如果盘子数为64 需要执行(264-1=x1019),将会运行几十分钟左右。实验4.44.4.1题目:输入一个字母字符,设置条件编译,使之能根据需要将小写字母改写为大写字母输出,或将大写字母改写为小写字母输出。4.4.2代码:#includeusing namespace std;/#define UPPER/ 如果需要将大写改为小写把这一行注释即可int main()char c;cout请输入一个字符字母c;#ifdef UPPERif(c=a&c=A&c=Z)c+=32;#endi

15、fcoutcendl;4.4.3 运行结果请输入一个字符字母AaPress any key to continue请输入一个字符字母aAPress any key to continue实验4.54.5.1题目:求ab和am的值,其中b的值在程序中给出,a和m值由键盘输入,卸一个power函数求am的值,在主函数中求ab,并调用power函数得到am的值。要求将主函数和power函数分别写成两个文件file1.cpp和file2.cpp,用extern将外部变量作用域扩展到其他文件。建立一个项目文件,包含file1.cpp和file2.cpp,按照本书第2部分中介绍的对包含多文件的程序的处理办法,对包含多文件的程序进行编译、连接和运行。通过这个简单的程序,初步掌握处理包含多文件程序的方法。4.5.2 file1.cpp的代码#includeusing namespace std;int a;extern int power(int);int main()int b=2;cout请输入a和m的值am;cout

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论