1  用for循环编出系列图形

该图形一共10行,每一行增加一个字符,所以应循环10次,每次输出一行。其循环模式为:

  1. forint i=;i<=;++i
  2. {
  3. 输出第i
  4. 换行
  5. }

我们注意到,每一行长度的变化正好与循环变量i同步,故可以依赖于i。我们注意到第i行的M字符数与i的关系:

所以可以得到“输出第i行”的循环为:

  1. for (int j = ; j <= i; ++j)
  2. cout << "M";

将内、外循环嵌套起来,得到完整代码如下:

  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. for (int i = ; i <= ; ++i)
  6. {
  7. for (int j = ; j <= i; ++j)
  8. cout << "M";
  9. cout << endl;
  10. }
  11. cin.get();
  12. return ;
  13. }

对于这种字符图形,一般用两重循环,外循环遍历所有行,内循环遍历行中每个字符。

输出结果如我们所料:

2  画出下列图案

按照上面的分析方法,一共10行,这次要考虑没行中,先输出若干个空格,所以其外循环为:

  1. forint i=;i<=;++i
  2. {
  3. 输出若干空格
  4. 输出若干M
  5. 换行
  6. }

略加思考,列出在第i行,其空格数,M数与i的关系为:

即第i行的空格数为i-1个,M数为21-2i。即在第i行输出空格和输出M字符的内循环分别为:

  1. for (int j = ; j <= i; ++j)
  2. cout << " ";
  3. for (int k = ; k <= - * i; ++k)
  4. cout << "M";

合起来构成一个完整的程序如下:

  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. for (int i = ; i <= ; ++i)//控制行数
  6. {
  7. for (int j = ; j <= i; ++j)//输出每行空格数
  8. cout << " ";
  9. for (int k = ; k <= - * i; ++k)//输出每行M字符数
  10. cout << "M";
  11. cout << endl;
  12. }
  13. cin.get();
  14. return ;
  15. }

运行结果:

3  画出下列图形

按照上面的例子,得到相似的外循环形式:

  1. forint i=;i<=;++i
  2. {
  3. 输出若干空格
  4. 输出若干M
  5. 换行
  6. }

若要输出A起头依序的n(n<27)个字母,我们可以:

  1. for (int i = ; i <= n; ++i)
  2. cout << 'A' + i - ;

或者

  1. for (char ch = 'A'; ch < 'A' + n; ++ch)
  2. cout << ch;

'A' + i - 1的值为整数,因为'A'是char(字符)类型,而i-1是整数类型,整数的表示范围大于字符,所以,结果的类型为整形。为了输出该整数所对应的字符,需要整数表达式做一下转换,转换的形式是将整数表达式括起来,前边加上要转成的类型名char。

知道了行中要输出的字符个数,就可以实现上面的图形了。现在我们还是从分析每一行中的空格数和字符数与第i行之间的关系着手:

即第i行的空格数为10-i个,字符数为2*i-1。因此,输出空格数和字符数的内循环分别为:

  1. for (int j = ; j <= - i; ++j)
  2. cout << " ";
  3. for (char ch = 'A'; ch < 'A' + *i-; ++ch)
  4. cout << ch;

合起来的完整代码为:

  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. for (int i = ; i <= ; ++i)
  6. {
  7. for (int j = ; j <= - i; ++j)
  8. cout << " ";
  9. for (char ch = 'A'; ch < 'A' + * i - ; ++ch)
  10. cout << ch;
  11. cout << endl;
  12. }
  13. cin.get();
  14. return ;
  15. }

运行结果:

C++ code:for loop designs的更多相关文章

  1. C++ code:More Loop Designs

    1  逻辑判断 对于逻辑判断问题,一般都要考虑全部的可能性,然后从这些可能性中按条件逐一排查,直到最后获得某个结论. [百钱买百鸡问题] 问题描述: 雄鸡(cock)7元一只,母鸡(hen)5元一只, ...

  2. VS Code:让你工作效率翻倍的23个插件和23个编辑技巧

    VS Code:让你工作效率翻倍的23个插件和23个编辑技巧 总结了一些平时常用且好用的 VS Code 的插件和编辑技巧分享出来. 文章详情可查阅我的博客:lishaoy.net ,欢迎大家访问. ...

  3. Windows could not set the offline local information.Error code:0X80000001解决方法

    我的笔记本是联想Y460(白色) 昨天在重装系统的时候遇到如下错误:Windows could not set the offline local information.Error code:0X8 ...

  4. Code:Blocks 中文乱码问题原因分析和解决方法

    下面说说修改的地方. 1.修改源文件保存编码在:settings->Editor->gernal settings 看到右边的Encoding group Box了吗?如下图所示: Use ...

  5. Libevent:4event loop

    一:运行loop       一旦一些events在event_base注册之后(下一节会讨论如何创建和注册events),就可以使Libevent等待events,并且在events准备好时能够通知 ...

  6. HTML Standard系列:Event loop、requestIdleCallback 和 requestAnimationFrame

    HTML Standard系列:Event loop.requestIdleCallback 和 requestAnimationFrame - 掘金 https://juejin.im/post/5 ...

  7. JavaScript 运行机制详解:Event Loop

    参考地址:http://www.ruanyifeng.com/blog/2014/10/event-loop.html 一.为什么JavaScript是单线程? JavaScript语言的一大特点就是 ...

  8. JavaScript:event loop详解

    之前已经有两篇随笔提到了event loop,一篇是事件机制,一篇是tasks和microtasks,但是里面的event loop都是文字描述,很难说细,逻辑也只是简单的提了一遍.其实之前也是通过阮 ...

  9. VS Code:快捷方式

    转于:vscode: Visual Studio Code 常用快捷键 博主:魚魚 更多操作参见官网:https://code.visualstudio.com/docs/getstarted/key ...

随机推荐

  1. 也谈同步异步I/O

    也谈同步异步I/O [转自: http://www.smithfox.com/?e=191 ] I/O Model 是一个很大的话题, 也是一个实践性很强的事情, 网上有各种说法和资料, 我们必须用辩 ...

  2. 【tools】vim删除命令

    x 删除当前光标下的字符dw 删除光标之后的单词剩余部分.d$ 删除光标之后的该行剩余部分.dd 删除当前行. c 功能和d相同,区别在于完成删除操作后进入INSERT MODEcc 也是删除当前行, ...

  3. Python基础【day03】:集合进阶(四)

    本节内容 1.关系测试(特殊符号) 1.交集2.并集3.差集4.对称差集5.是否是子集6.是否是父集 2.基本操作 1.add2.update3.remove VS pop vs discard4.l ...

  4. 一个Entity Framework、ADO.NET查询性能测试

    Entity Framework自然是会比ADO.NET性能慢点,这个不多说了.直接上结果. 本该用测试项目的,不过我建了个aspx.下面是随便测20遍得到的结果 补充!!把12行改成 list = ...

  5. .Net进阶系列(11)-异步多线程(委托BeginInvoke)(被替换)

    一. BeginInvoke最后两个参数的含义 倒数第二个参数:指该线程执行完毕后的回调函数:倒数第一个参数:可以向回调函数中传递参数. 下面以一段代码说明: /// <summary> ...

  6. u-boot移植(八)---代码修改---存储控制器--MMU

    一.MMU介绍 1.1 虚拟地址与物理地址 建立两个应用程序,hello1.c和hello2.c,然后运行: hello1.c hello2.c 运行结果如下: 可以看到两个结果打印的地址是一样的,都 ...

  7. VMware workstation 网络选择 NAT模式 访问外网

    多年不用本地做测试  尽然被 nat 模式給卡着了  :动手的还是所以要记录一下: 1.根据自己需求创建 虚拟机 之后: 配置[网络适配器] -- 选择 nat 模式 ( 选择网卡 )   虚拟机   ...

  8. 绘图QPainter-字体

    方式一: import sys from PyQt5.QtGui import QPainter, QFont,QPen from PyQt5.QtWidgets import QApplicatio ...

  9. js设置div透明度

    原生js设置透明度 为了兼容IE与其他浏览器对透明度的设置,我们需要对以上两种样式分别进行设置: 复制代码代码如下: var alpha = 30; //透明度值变量 var oDiv = docum ...

  10. Java SE之初探反射机制

    [Keywords]:Java,Hibernate,虚拟机,框架,SQL [Abstract]:   反射的概念:所谓的反射就是java语言在运行时拥有一项自观的能力,反射使您的程序代码能够得到装载到 ...