2014秋C++ 第9周项目 循环程序设计
课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703。课程资源在云学堂“贺老师课堂”同步展示,使用的帐号请到课程主页中查看。
阅读程序
程序分析题,阅读下列程序,写出程序的运行结果。建议在上机时进行验证(云学堂将给出代码。直接拷贝到C4droid或CodeBlocks中运行就可以)。假设与自己的预期有出入。尤其注意对比找出问题。
读这些小程序,能够见识不少处理技巧。读程序,也是一种很很重要的学习方式,应该给予重视!
1.
#include<iostream>
using namespace std;
int main()
{
char c1,c2;
for(c1='0',c2='9';c1<c2;c1++,c2--)
cout<<c1<<c2;
cout<<endl;
return 0;
}
2.
#include<iostream>
using namespace std;
int main( )
{
int x=0;
while(x<=5)
{
cout<<"B";
x+=2;
}
return 0;
}
3.
#include<iostream>
using namespace std;
int main ( )
{
int i , j, s=0;
for (i=1; i<=4; i++)
{
for( j=1; j<=i; j++)
s=s+1;
}
cout<<"s="<<s<<endl;
return 0;
}
4.
#include<iostream>
using namespace std;
int main()
{
int number=7239,digit;
do
{
digit=number%10;
number=number/10;
cout<<digit;
} while(number>0);
cout<<endl;
return 0;
}
5.
#include <iostream>
#include <windows.h> //使用Sleep()函数必须包括windows.h,这样的方法仅仅适用于windows
using namespace std;
int main( )
{
int i;
for(i=1; i<=10; i++)
{
Sleep(200); //等待200毫秒
cout<<"■";
}
cout<<endl;
return 0;
}
说明:在Linux下。有sleep函数,但头文件不是windows.h(请自行查阅资料)。这个程序不能在C4droid下运行。由于C4droid基于安卓平台,底层是Linux。
6.
#include <iostream>
#include <windows.h>
using namespace std;
int main( )
{
int i;
cout<<"安装进度:"<<0<<'%';
for(i=1; i<100; i++)
{
Sleep(100);
if(i<=10)
cout<<"\b\b";
else
cout<<"\b\b\b";
cout<<i<<'%';
}
cout<<"\b\b\bdone!"<<endl;
return 0;
}
重要技能体验
单步运行。是程序运行的第二种形式,是对程序进行调试的时候使用的一种很很很实用的的手段。请用CodeBlocks的单步运行方式。运行上面阅读程序部分的2和4,对程序进行单步运行,并观察变量的值的变化。
请选取当中的一个程序发表博文。截屏中能够看到代码、当前观察变量的值以及输出窗体中的中间结果。
单步运行的指导文档和视频,请到云学堂第5讲和第6讲的材料中找。
C++课程新玩法
完毕本周实践项目的过程中。请思考用刚刚学过的知识。能解决什么样的有应用价值的问题,或者完毕什么好玩的事情。将你的想法写成一个编程题目,并写出參考解答(自己解答不了的,也能够仅仅写个思路。让兄弟们补充),通过你的博客、我们的QQ群分享。
假设你将题目和參考解答发给老贺(sxhelijian@163.com),你编制的题目将有机会成为我们的学期中间的练习题,甚至是期末考试的题目!期待好题。期待原创!
上机实践项目
【项目1:利用循环求和】求1000以内所有偶数的和
要求:请编出3个程序来,分别用三种循环语句完毕,注意体会各种循环语句的运行过程及语法特点。
【项目2:分数的累加】编程序,输出1/3-3/5+5/7-7/9…+19/21的结果
提示:关注效率,要求用单重循环完毕,累加项目一正一负交替,不能用pow(-1,i)(pow()是C++中求幂的函数,但效率低)。处理一正一负交替的技巧是:专门设置一个变量s表示累加项的符号。初值为1。每次循环乘以-1,从而在+1、-1之间交替变化,再将待加项与s相乘后再相加。
【项目3:输出星号图】自选以下的几个图案,编程序输出(自选两个完毕,其它的想想思路就可以)。
【项目4:乘法口诀表】编程序。输出一个乘法口诀表,形如
提示:一共要输出9行,每一行……
【项目5:程序填充题】在程序中横线上填上恰当的成分,使完毕题目要求的功能:
1.输出1000以内能被3整除且个位数为6的所有整数。
#include <iostream>
using namespace std;
int main()
{
int i, j;
for (i=0;_________; i++) // (1)
{
j=i*10+6;
if (j%3==0)
____________; // (2)
}
cout<<endl;
return 0;
}
2.输入10个整数,找出最大数。
#include <iostream>
using namespace std;
int main()
{
int k,x,max;
cin>>x;
max=______; // (1)
for(k=2; k<=___ ; k++) // (2)
{
cin>>x;
if (_______) max=x; // (3)
}
cout<<"Max="<<max<<endl;
return 0;
}
3.从键盘输入20个整数,输出它们的和。
#include <iostream>
using namespace std;
int main()
{
int a,sum=0;
for (int i=1。i<=20。________) // (1)
{
cin>>a;
sum=______; // (2)
}
cout<<"sum="<<sum<<endl。
return 0;
}
【项目6:穷举法解决组合问题】(自选两题完毕。其它的想一想就可以。当然。全做完收效更好)
先阅读例题。领会穷举法(意为“穷尽式列举”,也称枚举)的思想。然后自行选题进行解决,掌握这样的程序设计的一般方法。
例题:小明有五本新书,要借给A,B,C三位小朋友,若每人每次仅仅能借一本,则能够有多少种不同的借法?
问题分析与算法设计:本问题实际上是一个排列问题。即求从5个中取3个进行排列的方法的总数。首先对五本书从1至5进行编号,然后使用穷举的方法。假设三个人分别借这五本书中的一本。当三个人所借的书的编号都不同样时,就是满足题意的一种借阅方法。
以下是程序及其凝视,要注意利用三重循环“穷举”:
#include <iostream>
using namespace std;
int main()
{
int a,b,c,count=0;
cout<<"小明借书给三位小朋友书的方案有:"<<endl;
for(a=1;a<=5;a++) //穷举a借5本书中的1本的所有情况
for(b=1;b<=5;b++) //穷举b借5本书中的一本的所有情况
for(c=1;c<=5;c++) //穷举c借5本书中的1本的所有情况
if(a!=b&&c!=a&&c!=b) //推断三个人借的书是否不同,(a-b)*(b-c)*(c-a)!=0更好
{
++count;
cout<<count<<": "<<a<<", "<<b<<", "<<c<<endl;//输出方案
}
return 0;
}
任务:利用穷举的方法解决以下的问题(选做一道即算完毕任务。其它能够抽时间自由安排,多做会使你更聪明。)
(1)百钱百鸡问题:中国古代数学家张丘建在他的《算经》中提出了著名的“百钱买百鸡问题”:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?
提示:设鸡翁、鸡母、鸡雏的个数分别为x,y,z,题意给定共100钱要买百鸡,若全买公鸡最多买20仅仅,显然x的值在0~20之间;同理,y的取值范围在0~33之间。可得到以下的不定方程:
5x+3y+z/3=100
x+y+z=100
所以此问题可归结为求这个不定方程的整数解。
由程序设计实现不定方程的求解与手工计算不同。
在分析确定方程中未知数变化范围的前提下,可通过对未知数可变范围的穷举。验证方程在什么情况下成立,从而得到对应的解。
引申:这类求解不定方程的实现。各层循环的控制变量直接与方程未知数有关,且採用对未知数的取值范围上穷举和组合的方法来复盖可能得到的所有各组解。假设要採取技巧,往往是依据题意。更合理地设置循环控制条件来降低这样的穷举和组合的次数,提高程序的运行效率,须要详细问题详细分析。
(2)换分币:用一元人民币兑换成1分、2分和5分硬币,有多少种不同的兑换方法?请输出所有可能的方案。
提示:依据题意设i,j,k分别为兑换的1分、2分、5分硬币的枚数,则i,j,k的值应满足:i+j*2+k*5=100,依据取值范围构造循环解题就可以。
(3)年龄几何:张三、李四、王五、刘六的年龄成一等差数列,他们四人的年龄相加是26,相乘是880,求以他们的年龄为前4项的等差数列的前20项。
提示:设数列的首项为n。项差为a。则前4项之和为n+(n+a)+(n+a+a)+(n+a+a+a)=4*n+6*a"。前4 项之积为n*(n+a)*(n+a+a)*(n+a+a+a)。同一时候有1<=a<=4和1<=n<=6。可採用穷举法求出此数列。
(3)三色球问题:若一个口袋中放有12个球,当中有3个红的。
3个白的和6个黒的,问从中任取8个共同拥有多少种不同的颜色搭配?
提示:设任取的红球个数为i。白球个数为j。则黒球个数为8-i-j,依据题意红球和白球个数的取值范围是0~3,在红球和白球个数确定的条件下。黒球个数取值应为8-i-j<=6。
(4)委派任务:某侦察队接到一项紧急任务,要求在A、B、C、D、E、F六个队员中尽可能多地挑若干人,但有以下限制条件:
l A和B两人中至少去一人;
l A和D不能一起去。
l A、E和F三人中要派两人去。
l B和C都去或都不去;
l C和D两人中去一个;
l 若D不去。则E也不去。
问应当让哪几个人去?
提示:用a、b、c、d、e、f六个变量表示六个人是否去运行任务的状态,变量的值为1,则表示该人去;变量的值为0,则表示该人不參加运行任务,依据题意可写出表达式:
l a+b>1 //A和B两人中至少去一人;
l (a+d)!=2 //A和D不能一起去;
l a+e+f==2 // A、E、F三人中要派两人去;
l b+c==0或b+c==2 // B和C都去或都不去。
l c+d==1 //C和D两人中去一个。
l d+e==0或d==1 //若D不去,则E也不去(都不去;或D去E随便)。
上述各表达式之间的关系为“与”关系。穷举每一个人去或不去的各种可能情况。代入上述表达式中进行推理运算,使上述表达式均为“真”的情况就是正确的结果。
(5)在以下的加法算式中,不同的符号代表不同的数字,同样的符号代表同样的数字。
请设计程序求出"都、要、学、C"4个符号分别代表的数字。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3hoZWxpamlhbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
提示:让计算机解奥数题。穷举"都、要、学、C"4个符号分别代表的数字(从0到9),然后进行组合,假设组合起来符合规则(不同的符号代表不同的数字,同样的符号代表同样的数字,且使等式成立),则为正解。
(6)警察局抓住了A、B、C、D四名盗窃嫌疑犯,当中仅仅有一人是小偷。
在审问时。A说:“我不是小偷”;B说:“C是小偷”;C说:“小偷肯定是D”;D说:“C在冤枉好人”。如今已经知道这四人中有三人说的是真话,一人说的是假话。
请问究竟谁是小偷?
提示:设4个变量a,b,c,d,为0时表示不是小偷。为1时表示是小偷。用四重循环穷举a,b,c,d可能的取值的组合,对每一种组合推断其是否符合题目中给出的约束。
最后结论:C是小偷。
(7)有等式[※×(※3+※)]^2=8※※9,当中※处为1个数字。滴上了墨水无法辨认。
请编程找出※表示哪个数字。
拓展:有等式[※×(※3○※)]^2=8※※9,当中※处为1个数字,○处为+、-、×、÷四个运算符之中的一个,现滴上了墨水无法辨认。
请编程找出※表示哪个数字。○表示哪个运算符。
=================== 迂者 贺利坚 CSDN博客专栏================= |
2014秋C++ 第9周项目 循环程序设计的更多相关文章
- 2014秋C++ 第8周项目 分支程序设计
课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703.课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课 ...
- 2014秋C++ 第7周项目 数据类型和表达式
课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课 ...
- 2014秋C++第5周项目1參考-见识刚開始学习的人常见错误
课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,实践要求见http://blog.csdn.net/sxhelijian/a ...
- Surprise团队第三周项目总结
Surprise团队第二周项目总结 项目进展 这周我们小组的项目在上周的基础上进行了补充,主要注重在注册登录界面的实现,以及关于数据库的一些学习. 在设计注册登录界面时,每一块的地方控件都不一样,比如 ...
- Surprise团队第二周项目总结
Surprise团队第二周项目总结 项目进展 已实现五子棋人人模式部分 人人模式: 基本方式:采取黑棋先行,黑白交替的下棋顺序. 模式:通过鼠标点击相应棋盘中的"交叉点",在lay ...
- Surprise团队第一周项目总结
Surprise团队第一周项目总结 团队项目 基本内容 五子棋(Gobang)的开发与应用 利用Android Studio设计一款五子棋游戏,并丰富其内涵 预期目标 实现人人模式:2个用户可以在同一 ...
- JavaEDU614 团队第三周项目总结
JavaEDU614 团队第三周项目总结 本周,根据项目计划完成模块的设计代码 本项目主要是完成俄罗斯方块的基本操作.用户可以自己练习和娱乐.需要满足以下几点要求. (1)界面控制游戏开始.暂停和结束 ...
- FromBottomToTop第十三周项目博客
FromBottomToTop第十三周项目博客 本周项目计划 完成游戏核心算法以及界面相关类和怪物类 项目进展 用户可选择游戏模式,共有20张不同的地图. 炮台的建立和升级. 小怪的路径算法. 参考资 ...
- FromBottomToTop第十二周项目博客
FromBottomToTop第十二周项目博客 本周项目计划 设计整体架构,收集素材,制作出静态界面部分 项目进展 已完成游戏整体架构设计 已完成游戏界面.背景音乐等素材的收集 正在进行静态界面部分的 ...
随机推荐
- Revit Family API 添加对齐
没测试成功,留待以后研究. [TransactionAttribute(Autodesk.Revit.Attributes.TransactionMode.Manual)] ; ; i < nV ...
- Snmp学习总结(六)——linux下安装和配置SNMP
一.安装SNMP 1.1.下载Net-SNMP的源代码 选择一个SNMP版本,比如5.7.1,下载地址如下:http://sourceforge.net/projects/net-snmp/files ...
- mysql大文本数据类型的使用需要考虑实际情况
mysql数据类型简介(http://news.newhua.com/news1/program_database/2008/618/08618103911CD92HJ6CKI2I9I0AH5CGK1 ...
- ASP.NET MVC遍历ModelState的错误信息
在ASP.NET MVC中,ModelState中包含了验证失败的错误信息,具体被存储在ModelState.Values[i].Errors[j].ErrorMessage属性中.当然,通过打断点, ...
- mysql 和 sqlite 区别 及 SQLite Expert Professional sqliteManager 区别
mysql 和 sqlite 区别 SQLITE是单机数据库.功能简约,小型化,追求最大磁盘效率MYSQL是完善的服务器数据库.功能全面,综合化,追求最大并发效率 MYSQL.Sybase.Oracl ...
- SQL 参考
本主题将介绍 ArcGIS 中的选择表达式所用的常规查询的各个元素.ArcGIS 中的查询表达式使用常规 SQL 语法. 警告: SQL 语法不适用于使用字段计算器计算字段. 字段 在 SQL 表达式 ...
- Cocos2d-x之CCMenu
from://http://blog.linguofeng.com/archive/2012/11/14/cocos2d-x-CCMenu.html Cocos2d-x之CCMenu Cocos2dx ...
- Linux内核:分析coredump文件 - 内核代码崩溃
转自:http://blog.csdn.net/guowenyan001/article/details/12975221 一.分析Core文件 1.1 找到core文件目录,启动mycrash:my ...
- [wxWidgets]_[0基础]_[不常见但有用的类wxStandardPaths]
场景: 1.wxStandardPaths 用来获取各种系统路径.能够用于存放app的配置数据.比方文档文件夹,appData等. 代码: #include "wx/wxprec.h&q ...
- 诺基亚S40手机联系人导入安卓手机
电话号码较少的话比较简单,拷贝到SIM卡中通过SIM卡中转,只是一般SIM卡只能存储200个左右,联系人比较多的情况就麻烦一点,今天帮导师把诺基亚5220中的800个电话转到三星S4中,综合下来还是使 ...