华中科技大学c++第3次上机作业.doc_第1页
华中科技大学c++第3次上机作业.doc_第2页
华中科技大学c++第3次上机作业.doc_第3页
华中科技大学c++第3次上机作业.doc_第4页
华中科技大学c++第3次上机作业.doc_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

华 中 科 技 大 学计算机基础与程序设计(C+)实 验 报 告实验名称:第三次上机实验 实验学时:4姓名: 学号: 班级:电气实验日期:2017/3/27 教师批阅签字:一、实验目的l 掌握三种循环语句的使用。l 学会使用continue 和break。l 掌握多重循环的设计。l 掌握常用算法的应用。二、 实验内容1在vc环境下编写下述程序代码,编译调试然后用不同的数据测试直至得到完全正确的结果。 并解释出错原因。#include#includeusing namespace std;int main( ) float x0,x1,a; couta; if(a0) couta不能开平方!=1e-5) x0=x1; x1=(x0+a/x0)/2; cout a的平方根为:x1endl; return 0;语法错误:1.最后缺少花括号。逻辑错误:1.else后面有分号,导致花括号中的语句不受else限制。2.abs所提供的精度为整数更改后的程序:#include#includeusing namespace std;int main( ) float x0,x1,a; couta; if(a0) couta不能开平方!=1e-5) x0=x1; x1=(x0+a/x0)/2; cout a的平方根为:x1endl; return 0;2 下列程序的功能是:计算一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子,假设兔子不存在死亡问题,请问从第1个月到第20个月,每个月有多少对兔子?要求输出时按行列方式每行显示5个数据。如下图:编译调试该程序看是否正确,不正确的话修改之直至完全满足要求。并解释出错原因。int main() int fib0=0,fib1=1,fib2;int n; coutsetw(5)fib0fib1endl;for(n=1;n=20;n+) fib2=fib0+fib1;coutsetw(5)fib2; fib1=fib2; fib0=fib1; if(n%5=0) coutendl; return 0;语法错误:1.缺少头文件(iostream以及iomanip)以及命名空间。2.return 0后的分号为中文分号。逻辑错误:1. coutsetw(5)fib1;最初只需要输出一个月而且无需换行2.前面已经输出一个月 所以n=19。而且后面的换行也需要改为n+13.复制顺序错误,应该为fib0=fib1; fib1=fib2;改正后的程序:#include #include using namespace std;int main() int fib0=0,fib1=1,fib2;int n; coutsetw(5)fib1;for(n=1;n=19;n+) fib2=fib0+fib1;coutsetw(5)fib2;fib0=fib1;fib1=fib2; if(n+1)%5=0) coutendl; return 0;3 编程任意输入一个三位数,判断其是否是水仙花数(水仙花数是指这个数等于个位,十位和百位的立方和。 例如:153=13+53+33)要求:程序原代码,及运行结果截图。(直接粘贴在此)#include using namespace std;int main()cout请输入需要判断的正整数a;g=a%10;s=(a/10)%10;b=a/100;if (a=g*g*g+s*s*s+b*b*b)cout该整数为水仙花数endl;elsecout该整数不是水仙花数endl;return 0;解决本题的算法思路描述。首先要解决的是如何取得个十百三位的数字,然后用if语句进行判断。调试过程的记载(包括出现的错误,以及修改过程)对十位和百位的数字进行提取的时候出现错误。开始时:g=a%10;改正后:g=a%10; s=a%100; s=(a/10)%10;b=a%1000; b=a/100;4 输出3到100以内的所有素数。(要求每行显示8个数) % 提示:该题需要用到多重循环,外循环代表需要判断的数,从3到100,内循环判断该数是否是素数,参考教材的例4.9(判断一个数是否为素数)。要求:程序原代码,及运行结果截图。(直接粘贴在此)#include #include using namespace std;int main()int i,n,m=0,s=0,a;for (i=3;i=100;i+)a=1;for (n=2;ni;n+)if (i%n=0)a=0;break;if (a=1)coutsetw(3)i; m=m+1; if (m%8=0)coutendl; else ;return 0;解决本题的算法思路描述运用双重循环语句进行,一个用来判断是否为素数,另外一个用来循环3-100.调试过程的记载(包括出现的错误,以及修改过程)a需要每次循环都赋值,最初放在循环外,导致只能输出3一个数字。花括号位置错误,导致格式不正确。5 连续输入n 个整数(n由键盘输入)统计其中正数、负数和零的个数。 要求:程序原代码,及运行结果截图。(直接粘贴在此)#include using namespace std;int main()cout请输入所需统计的数字的个数n;cout请输入所需统计的数据endl;for (;ia;if (a=0)l+;else if (a0)z+;elsef+;cout统计的数据中正数、负数以及0的个数分别z,f,lendl;return 0;解决本题的算法思路描述首先判断输入数据的个数,然后运用for循环和if-else语句进行统计出现次数。调试过程的记载(包括出现的错误,以及修改过程)未出现错误,但是最开始的程序未进行相关提示。6 改写教材115 例18 ,规则为5局3胜制规则,其余条件不变。要求:程序原代码,及运行结果截图。(直接粘贴在此)#include #include using namespace std;int main()int v1=0,v2=0,i,p1,p2;while (v13&v23)cout请输入两个小孩的划拳值,1代表石头,2代表剪刀,3代表布。p1p2;switch (p1)case 1:cout石头;break;case 2:cout剪刀;break;case 3:cout布;break;coutt;switch (p2)case 1:cout石头;break;case 2:cout剪刀;break;case 3:cout布;break;coutn;if(p1=p2)continue;if(p1=1&p2=2|p1=2&p2=3|p1=3&p2=1)v1+;elsev2+;if (v1=3)cout小孩1获胜endl;elsecout小孩2获胜endl;return 0;解决本题的算法思路描述通过修改while的循环条件即可实现五局三胜制只需要统计两个孩子的胜利次数,谁先到达三次即获胜调试过程的记载(包括出现的错误,以及修改过程) 由于为书中例题,只需简单修改即可完成,故未出现错误7 改写教材龟兔赛跑程序,要求在指定距离的条件下比赛,其余规则不变。要求:程序原代码,及运行结果截图。(直接粘贴在此)#includeusing namespace std;int main() int s,sw=0,st=0,station=0,sleep=0,run=0;couts;while(sws&stsw)station=1;else ;else;elsesleep+;sw+=3;if(sleep=30)station=0;sleep=0;else;if(swst)cout乌龟胜endl;else if(swst)cout兔子胜endl; elsecout平局endl;return 0;解决本题的算法思路描述1.以时间为循环的控制条件,计算两者走相同路程时谁的时间少,运用累计时间的算法,有一者到达指定路程就停止计时,然后比较两者的路程。2.对乌龟和兔子的行程进行累计,通过速度和时间来完成。3.判断兔子是否在进行休息,用station来表示,0为运动1为睡觉。4.累计睡觉的时间,每到十分钟要重新从0开始计算。调试过程的记载(包括出现的错误,以及修改过程) 赋值符号与判断相等的符号混淆。8 小王拿了50元钱准备去菜场买菜,已知黄瓜3元1斤,韭菜5元1斤,西红柿4元1斤,如何买这3样菜(每种菜都必须买),并且将50元花完,列出所有可能的买法。(只考虑整斤)要求:程序原代码,及运行结果截图。(直接粘贴在此)#include using namespace std;int main()int h,j,x,z;for (h=1;h17;h+)for (j=1;j=10;j+)for(x=1;x13;x+)if (3*h+5*j+4*x=50)cout黄瓜,韭菜,西红柿的数量分别为h,j,x斤。endl;return 0;解决本题的算法思路描述利用多重循环,使用穷举法得出结果。调试过程的记载(包括出现的错误,以及修改过程)For 语句中;错写为,循环语句出错,更改了循环语句。9 编程将一个10进制整数转换成2进制整数。要求:程序原代码,及运行结果截图。(直接粘贴在此)#include using namespace std;void main()int s,i=0,j,a,b100;cout请输入需要转化的十进制整数s;while (s!=0)a=s/2;bi=s%2;s=a;i+;for (j=i-1;j=0;j-)coutbj;coutendl;解决本题的算法思路描述十进制转为二进制的各个位数的数字用对2取余获得然后用数组储存数字最后倒序输出调试过程的记载(包括出现的错误,以及修改过程)For语句中的j开始时定义错数值,应为i-1忘记减110 编程将一个10进制定点小数转换成2进制定点小数。要求:程序原代码,及运行结果截图。(直接粘贴在此)#include #include using namespace std;double main()int m=0; double s,a;cout请输入需要转化的十进制定点小数s;cout结果为0.;while (m=1)s=a-1;elses=a;m+;coutfloor(a);if (s=0)break;coutendl;解决本题的算法思路描述小数点后的每一位数字用乘2循环求得,乘2后的小数用floor取整调试过程的记载(包括出现的错误,以及修改过程)输入数据的类型出错。由int改为double11 编程要求从文件in.txt 中连续读入n个数(n由键盘输入),统计其中正数、负数和零的个数。(in.txt 是事先建好的一个文件存有若干数据,当输入的n值大于in.txt文件中的数据个数时给出相应的提示,判断文件中的数据是否读完使用eof() 函数。eof() 函数是判断是否到文件结尾,如果到文件结尾函数返回1,否则返回0,具体参考教材115页例4.17 )要求:程序原代码,及运行结果截图。(直接粘贴在此)#include #include using namespace std;int main()double x;int z=0,f=0,l=0,n,i=1,m;cout请输入所需统计的数字的个数n;ifstream in;in.open(d:in.txt);while (ix;i+;if (x=0)l+;else if (x0)z+;elsef+; m=l+z+f;if (nm)cout数据数量小于所要统计的数量endl; cout统计的正数、负数和零数量分别为z,f,lendl;in.close();return 0;解决本题的算法思路描述运用读取文件的语句,用if语句累计三种数据的个数。调试过程的记载(包括出现的错误,以及修改过程)逗号用的中文 用了标志 出现错误。更改为英文的逗号正常了。12 (选做)一位商人有一个40磅的砝码,由于跌落在地而碎成4块,后来称得每块碎片的重量都是整数,而且可以用这4块来称从1到40磅之间的任意整数磅的重物,问这4块砝码碎片各重多少?% 提示:此题需要两次用到穷举法,第一次穷举是4个砝码的重量,分别用四个循环变量i, j, k, l来表示。第二次穷举是当i+j+k+l=40时,对重1磅到40磅共40种物品使用i, j, k, l四个称进行组合,设置一个计数器,组合出1个计数器加1,如果能组合出40个,就是我们要找的答案。要求:程序原代码,及运行结果截图。(直接粘贴在此)#include using namespace std;int main() int i,j,k,l,d1,d2,d3,d4,x,flag,s=0; cout砝码分为; for(i = 1;i 41;i+) for(j = i;j 41;j+) for(k = j;k =k) s=0; for(x=1;x-2&flag=0;d1-) for(d2=1;d2-2&flag=0;d2-) for(d3=1;d3-2&flag=0;d3-) for(d4=1;d4-2&flag=0;d4-) if(x = i*d1+j*d2+k*d3+l*d4) flag = 1; s+; if(s=40) couti,j,k,l四块endl; return 0; 解决本题的算法思路描述首先找出所有组合,然后进行筛选。调试过程的记载(包括出现的错误,以及修改过程)最终的输出语句所在位置一

温馨提示

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

评论

0/150

提交评论