




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第九周实验内容 函数与预处理1 完成下面实验内容,将程序清单或运行结果截图复制到实验作业文档中。以“学号_姓名”命名此实验作业文档。在截止时间前上传至课程中心。注:本次作业的选做题有加分!作业上传方式:登录课程中心,进入“C+程序设计-黄晓璐”课堂(重修生请注意任课教师,不要选错了!)。查看课程作业,在相应作业的最右侧点击“提交作业”将完成的作业文档上传即可。(若遇到无法上传的情况,请使用Chrome浏览器进行上传操作!当作业上传后,可在相应作业的最右侧看到“查看”按钮,可单击此按钮查看作业是否上传成功!)一、实验内容和实验要求 1练习题一 编写程序实现判断一个数是否为素数的功能。 要求 编写一个函数,完成判断素数的功能。 在主函数输入一个整数,输出是否是素数的信息。 思路 主函数中键盘输入一个整数,并作为实参传递给素数判断函数。 素数判断函数中,使用穷举法进行素数判断,函数的返回值作为是否为素数的标志。 主函数中根据素数判断函数的返回值,输出是否为素数的信息。 程序代码#includeusing namespace std;int prime(int n); /函数声明 int main() int m; printf(输入一个整数: ); cinm; if (prime(m) /*根据prime函数的返回值输出相应信息*/ coutm是素数n; else printf(%d不是素数n,m); return 0;prime(int n) /*素数判断函数*/ int i; for (i=2; i=n-1; i+) if (n%i=0) break; if (i=n) return 1; /*输入数据是素数*/ else return 0; /*输入数据不是素数*/ 运行结果 思考题及问题如果要求按每行5个数的格式输出200300中所有素数,如何修改主函数?主函数修改后代码:#includeusing namespace std;int prime(int n); /函数声明 int main() int m;for(m=200;m=300;m+) if (prime(m) /*根据prime函数的返回值输出相应信息*/ coutmtt; return 0;prime(int n) /*素数判断函数*/ int i; for (i=2; i=n-1; i+) if (n%i=0) break; if (i=n) return 1; /*输入数据是素数*/ else return 0; /*输入数据不是素数*/ 运行结果:2练习题二 求两个正整数的最大公约数和最小公倍数。 要求 编写两个函数,分别求最大公约数和最小公倍数,在主函数中输出结果。 思路 求最大公约数函数中,使用辗转相除法完成功能。 最小公倍数等于两个正整数乘积除以最大公约数,因此可以在求最小公倍数函数中调用求最大公约数函数,形成函数嵌套调用。 程序代码#includeusing namespace std;int CommonDivisor(int m, int n) ;int LowestCommonMultiple(int m, int n); /函数声明 int main() int m, n; coutmn; cout最大公约数为CommonDivisor(m,n),最小公倍数为LowestCommonMultiple(m, n)endl; return 0;int CommonDivisor(int m, int n) int remainder, temp; if(nm) temp=m; m=n; n=temp; remainder=m%n; /辗转相除法求最大公约数 while( remainder != 0 ) m=n; n=remainder; remainder=m%n; return n;int LowestCommonMultiple(int m, int n) return m*n/CommonDivisor(m,n); /调用求最大公约数函数求最小公倍数 运行结果 思考题及问题如果使用没有返回值函数,通过定义全局变量定义也可以完成本题要求功能,如何修改程序? 修改后程序代码:#includeusing namespace std;int m;int n;void CommonDivisor( int x, int y);int main() coutmn; cout最大公约数为n,最小公倍数为mendl; return 0;void CommonDivisor( int x, int y) int remainder, temp; if(nm) temp=m; m=n; n=temp; remainder=m%n; /辗转相除法求最大公约数 while( remainder != 0 ) m=n; n=remainder; remainder=m%n; 3练习题三 编程实现对键盘输入的英文字符进行加密。加密方法为,当内容为英文字母时,使用26个字母中该字母后的第三个字母代替该字母,即A替换为D,X替换为A等等,若为其它字符时不变。 要求编写一个内联函数完成每个字符的加密功能,在主函数中输入数据和输出结果。 思路 使用循环从键盘连续读入若干字符,当输入为“回车”时结束。 每读入一个字符,如果该字符在A和W或a和w之间,对应输出字符为原字符ASCII码加3;如果字符在X和Z或x和z之间,对应输出字符为原字符ASCII码加3,再减去26;其它字符不变输出。 程序代码#include#include using namespace std;inline char fun(char ch) if(ch=A&ch=a&ch=X&ch=x&ch=z) ch=(ch+3)-26; return ch;int main() char c; coutplease input a string:; while(c=getchar()!=n) /*连续读入若干字符,输入为回车时结束*/ coutfun(c); coutn; return 0; 运行结果 思考题及问题如果要实现与本题过程相反的解密功能,如何修改程序?修改后代码:#include#include using namespace std;inline char fun(char ch) if(ch=D&ch=d&ch=A&ch=a&ch=c) ch=(ch-3)+26; return ch;int main() char c; coutplease input a string:; while(c=getchar()!=n) / coutfun(c); cout0时,方程有两个不相等的实根:x1=(-b+sqrtd)/(2*a)x2=(-b-sqrtd)/(2*a)l 当d0时,方程有两个虚根:x1=jp+ipi,x2=jp-ipi,其中:实部jp=-b/(2*a),虚部ip=sqrt(-d)/(2*a) 程序代码#include#include using namespace std;int main() void root(float a, float b); /函数声明void root(float a, float b, float d);void root1(float a, float b, float d);void print(float b, float c);void print (float a, float b, float c);float a, b, c, d;couta;coutb;coutc;d=b*b-4*a*c;cout”the equation is “;if (fabs(a)1e-6)print(b, c);else if (fabs(d)1e-6)/方程有两个不相等的实根print( a, b, c);root(a, b, d);else/方程有两个虚根print(a, b, c);root1(a, b, d);return 0;/求相等实根函数void root(float a, float b)cout “has two equal roots:n”;cout”x1=x2=”-b/(2*a)endl;/求方程有两个不相等的实根函数void root( float a, float b, float d)float x1, x2;x1=(-b+sqrt(d)/(2*a);x2=(-b-sqrt(d)/(2*a);cout”has two real roots:n”;cout”x1=”x1”, x2=”x2endl;/求方程有两个虚根函数void root1(float a, float b, float d)float jp, ip;jp=-b/(2*a);ip=sqrt(-d)/(2*a);cout “has two complex roots:n”;cout “x1=”jp”+”ip”in”;cout “x2=”jp”-”ip”in”;/输出a=0时方程的函数void print(float b, float c)cout b “x+” c “ =0n”;cout “ not quadraticn”;/输出a不等于0时方程的函数void print(float a, float b, float c)cout a “x*x+” b “x+” c ”=0n”; 运行结果 思考题及问题程序中,哪些函数是重载函数?答:void root(float a, float b); /函数声明void root(float a, float b, float d);void print(float b, float c);void print (float a, float b, float c);5. 数字反射(此题为新增内容) 要求编写一个函数,接收一个整数值,返回这个数中数字逆序后的结果值。例如:给定数7631,函数返回1367. 思路 通过% 10运算与循环的结合,可依次获得给定数的每位数字。例如:7631%10=1,获得了个位数;7631 / 10 =763,即丢掉了个位数字。继续下去,可依次得到数字1、3、6、7. 边循环边将每次得到的数字添加到需返回的数值中。例如:0*10+1=1;1*10+3=13;13*10+6=136;136*110+7=1367.程序代码:#include using namespace std; int main() int t,n,i,j; cint; for(i=1;in; while(n != 0) sum=sum*10+n%10; n=n/10; coutsumendl; return 0;运行结果:6. 猜数字游戏(此题为新增内容)要求编写一个程序,可以玩“猜数字”的游戏。具体描述如下:程序在11000之间的整数中随机选择需要猜的数。然后显示:I have a number between 1 and 1000.Can you guess my number?Please type your first guess.玩家于是输入猜想的第一个数。程序会做出如下响应之一:1. Excellent You guessed the number!Would you like to play again (y or n)?2. Too low. Try again.3. Too high. Try again.如果玩家的猜测是不正确的,程序应继续循环,直到玩家最终猜对为止。此过程中程序要一直提醒玩家是猜大了(Tool high)还是猜小了(Tool low),这样帮助玩家尽快获得正确的答案。 思路 通过rand( )函数产生随机数。关于rand()的介绍和使用方法已附在本文档最后,请参考使用。 程序流程介绍如下:a) 产生一个让玩家猜想的介于11000的数,并显示提示.b) 通过循环检测玩家猜想是否正确。如正确,输出相应提示并退出循环;如不正确,输出相应提示,继续循环。 本题中关于函数的使用不做具体限制,可使用函数,也可不使用函数。若使用函数,可将本程序按功能进行分解,每一个子功能应用函数。程序代码:#include#include#includeusing namespace std;int main ()int x;srand(time(NULL);x=rand()%1000;int a;coutI have a number between 1 and 1000.endl Can you guess my number?endl Please type your first guessendl; for(int i=0;ia;if(xa)coutToo low. Try again.endl; if(xa)coutToo high. Try again.endl; if(x=a)coutExcellent You guessed the number!endl Would you like to play again (y or n)?; if(x!=a) continue;return 0;运行结果:二、自测练习 1自测练习一编写函数实现删除字符串中字符T的功能,要求使用内联函数。程序代码:#include using namespace std; inline int fun(char ch) if(ch=T) return 0; else cout ch; int main() char c; cout输入字符串:; while(c=getchar()!=n) fun(c); coutn; return 0; 运行结果:2自测练习二编写重载函数Max可分别求取两个整数,三个整数,两个双精度数,三个双精度数的最大值。程序代码:#include using namespace std;int max1(int a,int b) return (ab?a:b); int max1(int a,int b,int c) return max1(a,max1(b,c); double max1(double a,double b) return (ab?a:b); double max1(double a,double b,double c) return max1(a,max1(b,c); int main() int a,b,c; float d,e,f; cout输入三个整数abc;cout输入三个双精度数def;cout整型中输入的第一个和第二个数较大的是max1(a,b)endl; cout双精度型中输入的第一个和第二个数较大的是max1(d,e)endl; cout最大整数是:max1(a,b,c)endl; cout最大双精度数是:max1(d,e,f)endl; return 0; 运行结果:3自测练习三设计一个打印年历的程序。要求:打印每个月的月历的功能有一个独立的函数完成,程序运行时,主程序通过若干次调用该函数完成年历的输出。注意处理闰年问题。(此题选作!)提示:在主程序中输入年份,然后调用打印月历的函数依次打印该年12个月的月历。打印月历的函数参数为:年份,月份,无返回值。打印结果:纵向对应星期日至星期六,依次在相应位置输出日期。如:2012年4月的月历:2012年4月月历:日一二三四五六123456789101112131415161718192021222324252627282930此函数有两个问题需要解决:1、该月的天数。关于此问题只需注意闰年的影响即可。2、该月的第一天是星期几?这个问题需找一个参照点,如设2000年1月1日为参照点,这天是星期六,则可计算该月的第一天距离参照点有多少天,如2012年4月1日与2000年1月1日相差4474天,4474&7=1,所以2012年4月1日是星期日。可设计一个专门的函数计算某年某月的天数,一个专门的函数计算某年某月某日是星期几,一个专门的函数计算两个日期之间相差的天数程序代码:#include #include using namespace std;void printmonth(int m);void printheed(int m);int daysofmonth(int m);int isleep(int y);int firstday(int y);int year,weekday;void main() int i; coutyear; weekday=firstday(year); cout year年endl; for(i=1;i=12;i+) printmonth(i); void printmonth(int m) int i,days; printheed(m); days=daysofmonth(m); for(i=1;i=days;i+) coutsetw(5)i; weekday=(weekda
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 第三课 三种基本结构教学设计初中信息技术(信息科技)九年级浙教版(广西、宁波)
- 2025年气焊高级焊工考试题库及答案
- 2025年CDFI医师上岗证考试试题及答案
- 2025年9月机器人三级理论综合考试试题及答案
- 2025煤矿开采安全试题及答案
- 第三单元 盐类的水解教学设计高中化学苏教版选修化学反应原理-苏教版2004
- 2025-2030中国速冻面米制品抗裂剂作用机理分析
- Unit 1 Making friends Part A Letters and sounds(教学设计)-人教PEP版(2024)英语三年级上册
- 2025-2030中国藏药行业发展现状及市场推广策略报告
- 2025-2030中国老年人群饮料产品适老化改造设计指南报告
- 医院中医科常见病症诊疗规范
- 《电子商务概论》(第6版) 教案 第11、12章 农村电商;跨境电商
- 2025年电气工程及其自动化专业考试试卷及答案
- 大象牙膏教学课件
- 颅脑创伤急性期凝血功能障碍诊治专家共识(2024版)解读
- 2025至2030年中国健康保险市场运行态势及行业发展前景预测报告
- 沙棘采摘协议书
- 2026版创新设计高考总复习数学(人教B版)-学生答案一~五章
- 资产评估学教程(第八版)习题及答案
- 工业设计课件全套
- 道路运输企业安全生产责任制度
评论
0/150
提交评论