华中科技大学c++第3次上机作业由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“c语言第三次上机作业”。
华中科技大学
《计算机基础与程序设计(C++)》
实验报告
实验名称:第三次上机实验实验学时:4 姓名:学号:班级:电气
实验日期:2017/3/27
教师批阅签字:
一、实验目的
掌握三种循环语句的使用。学会使用continue 和break。掌握多重循环的设计。掌握常用算法的应用。
二、实验内容
1.在vc环境下编写下述程序代码,编译调试然后用不同的数据测试直至得到完全正确的结果。并解释出错原因。
#include #include using namespace std;int main(){ float x0,x1,a;
cout
cin>>a;
if(a
cout
else;
{
x0=a/2;
x1=(x0+a/x0)/2;
while(abs(x1-x0)>=1e-5){
x0=x1;
x1=(x0+a/x0)/2;
}
cout
} return 0;语法错误:
1.最后缺少花括号。逻辑错误:
1.else后面有分号,导致花括号中的语句不受else限制。2.abs所提供的精度为整数 更改后的程序:
#include #include using namespace std;int main(){ float x0,x1,a;
cout
cin>>a;
if(a
cout
else
{
x0=a/2;x1=(x0+a/x0)/2;
while(fabs(x1-x0)>=1e-5){
x0=x1;
x1=(x0+a/x0)/2;
}
cout
} return 0;} 2.下列程序的功能是:计算一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子,假设兔子不存在死亡问题,请问从第1个月到第20个月,每个月有多少对兔子?要求输出时按行列方式每行显示5个数据。如下图:
编译调试该程序看是否正确,不正确的话修改之直至完全满足要求。并解释出错原因。int main(){ int fib0=0,fib1=1,fib2;int n;
} cout
语法错误:
1.缺少头文件(iostream以及iomanip)以及命名空间。2.return0后的分号为中文分号。逻辑错误:
1.cout
#include #include using namespace std;int main(){
int fib0=0,fib1=1,fib2;int n;
cout
fib2=fib0+fib1;
cout
fib0=fib1;
fib1=fib2;
if((n+1)%5==0)cout
} 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
cout
解决本题的算法思路描述。
首先要解决的是如何取得个十百三位的数字,然后用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
a=1;
for(n=2;n
{
if(i%n==0)
}
{
a=0;
break;
} }
if(a==1)
{
cout
m=m+1;
if(m%8==0)
cout
}
else
;
} return 0;
解决本题的算法思路描述
运用双重循环语句进行,一个用来判断是否为素数,另外一个用来循环3-100.调试过程的记载(包括出现的错误,以及修改过程)
a需要每次循环都赋值,最初放在循环外,导致只能输出3一个数字。花括号位置错误,导致格式不正确。
5. 连续输入n 个整数(n由键盘输入)统计其中正数、负数和零的个数。要求:
程序原代码,及运行结果截图。(直接粘贴在此)
#include using namespace std;int main(){ cout>n;cout
cin>>a;
if(a==0)
l++;
else if(a>0)
z++;
else
f++;} cout
解决本题的算法思路描述
首先判断输入数据的个数,然后运用for循环和if-else语句进行统计出现次数。调试过程的记载(包括出现的错误,以及修改过程)未出现错误,但是最开始的程序未进行相关提示。
6. 改写教材115 例18,规则为5局3胜制规则,其余条件不变。要求:
程序原代码,及运行结果截图。(直接粘贴在此)
#include #include using namespace std;int main(){ int v1=0,v2=0,i,p1,p2;while(v1
cout
cin>>p1>>p2;
switch(p1)
{
case 1:cout
} case 2:cout
continue;if(p1==1&&p2==2||p1==2&&p2==3||p1==3&&p2==1)
v1++;else
v2++;} if(v1==3)cout
解决本题的算法思路描述
通过修改while的循环条件即可实现五局三胜制
只需要统计两个孩子的胜利次数,谁先到达三次即获胜 调试过程的记载(包括出现的错误,以及修改过程)由于为书中例题,只需简单修改即可完成,故未出现错误
7. 改写教材龟兔赛跑程序,要求在指定距离的条件下比赛,其余规则不变。要求:
程序原代码,及运行结果截图。(直接粘贴在此)
#include using namespace std;int main(){
int s,sw=0,st=0,station=0,sleep=0,run=0;cout>s;while(sw
if(station==0)
{
run++;
sw+=3;
st+=9;
if(run==10)
{
run=0;
if(st>sw)
station=1;
else
;
}
else
;
} else {
sleep++;sw+=3;if(sleep==30){
station=0;sleep=0;} else;} } if(sw>st)
cout
cout
else
cout
解决本题的算法思路描述
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;h
for(j=1;j
{
for(x=1;x
{
if(3*h+5*j+4*x==50)
cout
}
} } return 0;}
解决本题的算法思路描述
利用多重循环,使用穷举法得出结果。
调试过程的记载(包括出现的错误,以及修改过程)For语句中;错写为,循环语句出错,更改了循环语句。
9. 编程将一个10进制整数转换成2进制整数。要求:
程序原代码,及运行结果截图。(直接粘贴在此)
#include using namespace std;void main(){ int s,i=0,j,a,b[100];cout>s;while(s!=0){ a=s/2;b[i]=s%2;s=a;i++;} for(j=i-1;j>=0;j--)cout
解决本题的算法思路描述
十进制转为二进制的各个位数的数字用对2取余获得 然后用数组储存数字 最后倒序输出
调试过程的记载(包括出现的错误,以及修改过程)For语句中的j开始时定义错数值,应为i-1忘记减1
10. 编程将一个10进制定点小数转换成2进制定点小数。要求:
程序原代码,及运行结果截图。(直接粘贴在此)
#include #include using namespace std;double main(){ int m=0;double s,a;cout>s;cout
a=s*2;
if(a>=1)
s=a-1;
else
s=a;
m++;
cout
if(s==0)
break;}
cout
解决本题的算法思路描述
小数点后的每一位数字用乘2循环求得,乘2后的小数用floor取整
调试过程的记载(包括出现的错误,以及修改过程)输入数据的类型出错。由int改为double
11. 编程要求从文件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(i
in>>x;
i++;
if(x==0)
l++;
else if(x>0)
z++;
else
f++;}
m=l+z+f;
if(n>m)
{cout
cout
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
{
for(j = i;j
{
for(k = j;k
{
if((l = 40-i-j-k)>=k)
{ s=0;
for(x=1;x
{ flag=0;
for(d1=1;d1>-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)
{
cout
}
}
}
}
}
}
return 0;
}
解决本题的算法思路描述
首先找出所有组合,然后进行筛选。
调试过程的记载(包括出现的错误,以及修改过程)最终的输出语句所在位置一直不正确,通过调试解决。解决同一个x可能导致s多次累加的问题
解决存在重复的问题,即出现1.3.9.27和3.1.9.27等
三、对本次实验内容及方法、手段的改进建议,以及实验心得实验心得包括:1)哪些知识点已掌握
2)哪些知识点有困难 3)对讲课的建议
4)对没有掌握知识的补救建议 1)
For语句循环,while以及do-while语句已经掌握。If-else语句、break、continue已经掌握。文件的读取与写入也已经能够运用。2)
对于龟兔赛跑等很复杂的问题掌握不够熟练 For语句很多次的叠加可能出错 3)
多进行程序上的演示,更容易理解。4)
多进行相关习题的训练掌握原理 重新阅读课本。
C++ 实验总结报告研究课题:图形编辑器 学 校:华中科技大学 院 系: 班 级: 姓 名: 指导老师: 一、实验目的1.熟悉C++的一些重要性质,利用封装、继承、虚函数和多态性等特性,通过实验......
C++上机实验报告实验名称:实验专业班级:姓名:学号:实验日期:10 11 实验 目录 1.实验目的 2.实验内容 3.程序代码 4.调试结果 5.实验心得 1.实验目的 实验10 (1)进一步了解运算符......
第二次上机实验报告 姓名:王小宁班级:学号: 031012 1234 第一题:题目:编写一个类,声明一个数据成员和一个静态数据成员,其构造函数初始化数据成员,并把静态数据成员加1,其析构函......
华中科技大学卓越工程师教育培养计划工作进展报告(2012年度)一、总体情况我校卓越工程师培养计划的总体思路为“夯实基础、能力导向、创新机制、校企联动、个性培养、拔尖示范......
P179 5.9.2(11)1.意图保证一个类仅有一个实例,并提供一个访问它的全局访问点。2.动机对一些类来说,只有一个实例是很重要的。虽然系统中可以有许多打印机,但却只应该有一个打印......