PHP学习作业一 流程控制和循环

2018年5月6日21:37:47 16 387

自从在慕课上买了PHP的入门课程,基本上很少时间来看,刚好最近把第一大章节看完了,也有一个作业,就自己写了一下,做个记录。

作业内容

任务描述

一、语言和环境

实现语言:php语言

环境要求及开发工具:wamp,phpstudy或其它集成开发环境,sublime,phpstorm或其它编辑器

二、程序整体要求

1、思路清晰,依据思路写出的实现代码需层次分明,整洁易懂

2、功能实现应逻辑严谨,判断充分合理

3、代码格式及命名要规范整齐,可读性强

4、要求程序运行效果与提供的页面效果图,结构保持一致,文字大小,颜色不做统一要求

5、将作业形成压缩文件并提交

三、思路分析:

步骤一:在这个PHP文件中混编html代码,实现输入行数的input框以及“金字塔”和“空心菱形”的button按钮。

注意:

button按钮需设置value值,方便区分页面点击button按钮出现对应的图案。

form表单的提交地址是当前页面。

 

步骤二:金字塔实现步骤:

1、在PHP部分,首先接受表单POST方式的传参,判断参数是否是金字塔,如果是金字塔参数,那么就执行实现金字塔的循环。

2、实现每行相对前一行多2个*的规律。

首先,接受页面传过来的层数n,循环n,在这个循环中先打印一个由空格组成的倒直角三角形,注意可能有些浏览器对 &nbsp 与 * 的大小解析不相等,所以这里可以输出隐藏样式(style=”color:#FFF;”)的*来保证在浏览器页面呈现的是一个完全的倒三角。

其次,在层循环中打印一个由星号组成的等腰三角形,三角形星星的个数=2*层数-1。

最后,输出换行即可。

 

步骤三:空心菱形实现步骤:

1、在PHP部分,首先接受表单POST方法的传参,判断参数是否是空心菱形,如果是空心菱形参数,那么就执行实现空心菱形的循环。

2、用循环实现一个第一行和最后一行是一颗星星,其余中间每一行是行头,行尾各一颗星星的菱形的形状。

参考实现思路:

实现菱形的上半部分(想象一个空心的无底边三角形)。

首先,接受页面传过来的层数,循环这个层数。

其次,在层数的循环中,先打印一个空的倒直角三角,然后打印一个实心型三角,判断输出行首行尾的星星,中间部分直接打印出空。

最后,给每层打印换行。

 

实现菱形的下半部分(想象成一个空心的无底边的倒三角形)。

首先,在层数的循环中,先打印一个空的倒三角,然后打印一个实心型三角,同样判断输出行首行尾的星星,中间部分直接打印出空。

(注意循环层数的条件的变化)。

其次,给每层打印换行

作业内容

  1. <html lang="zh">
  2. <head>
  3.     <title>PHP第一章节作业 - By QingShanKing</title>
  4. </head>
  5. <body>
  6. <form action="phpwork.php" method="post">
  7.     <input type="text" name="num" placeholder="请输入要打印的行数" style="width: 200px;height: 30px;border-radius: 5px;"><br><br>
  8.     <input type="submit" name="echo_jzt" value="金字塔">&nbsp;&nbsp;
  9.     <input type="submit" name="echo_kxl" value="空心菱形">
  10. </form>
  11. </body>
  12. </html>
  13. <?php
  14. if (isset($_POST[’num’])) {
  15.     $num = $_POST[’num’];
  16.     //判断是否为正整数
  17.     if ($num > 0 && floor($num) == $num) {
  18.         //如果当前为金字塔
  19.         if (isset($_POST[’echo_jzt’])) {
  20.             for ($i = 1; $i <= $num$i++) {
  21.                 for ($n = 1; $n <= $num - $i$n++) {
  22.                     echo ’&nbsp;’;
  23.                 }
  24.                 for ($j = 1; $j <= 2 * $i - 1; $j++) {
  25.                     echo ’*’;
  26.                 }
  27.                 echo ’<br>’;
  28.             }
  29.         }
  30.         //空心菱形
  31.         if (isset($_POST[’echo_kxl’])) {
  32.             for ($i = 1; $i <= $num$i++) //i表示空心菱形上半部分行数;类似于金字塔行数
  33.             {
  34.                 for ($j = 1; $j <= $num - $i$j++) //j表示每行"*"号前面的空格数
  35.                 {
  36.                     echo ’&nbsp;’;
  37.                 }
  38.                 for ($k = 1; $k <= 2 * $i - 1; $k++) //k表示每行要打印的"*"号
  39.                 {
  40.                     if ($k == 1 || $k == 2 * $i - 1) //如果要打印的"*"是第一个或最后一个则打印出来
  41.                     {
  42.                         echo ’*’;
  43.                     } else
  44.                         echo ’&nbsp;’; //如果要打印的"*"不是第一个或最后一个则打印空格
  45.                 }
  46.                 echo ’<br>’;
  47.             }        //以上打印出来的是空心菱形的上半部分
  48.             for ($i = 1; $i <= $num - 1; $i++)  //空心菱形下半部分的行数为lay-1行;比如上半部分4行,则下半部分为3行才能构成菱形
  49.             {
  50.                 for ($j = 1; $j <= $i$j++) //每行空格数
  51.                 {
  52.                     echo ’&nbsp;’;
  53.                 }
  54.                 for ($k = 1; $k <= 2 * ($num - $i) - 1; $k++) //下半部分每行总的"*"数
  55.                 {
  56.                     if ($k == 1 || $k == 2 * ($num - $i) - 1) //如果"*"处在第一和最后一位则打印出来
  57.                     {
  58.                         echo ’*’;
  59.                     } else
  60.                         echo ’&nbsp;’; //如果"*"不是处在第一和最后一位则打印出空格
  61.                 }
  62.                 echo ’<br>’;
  63.             }
  64.         }
  65.     } else echo ’层数请为正整数!’;
  66. }
历史上的今天
五月
6
weinxin
微信公众号
博客微信公众号,欢迎关注。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:16   其中:访客  8   博主  8

    • avatar 杨小杰 1

      很详细呢

        • avatar 萧瑟  博主

          @杨小杰 学习,也要有些结果。

        • avatar 芭比 0

          我最近在学习JAVA,里面也有类似的练习

            • avatar 萧瑟  博主

              @芭比 所有的编程语言都很相通的。

            • avatar 艾美乐电子 0

              技术咖,我好多年没写函数了

                • avatar 萧瑟  博主

                  @艾美乐电子 小菜鸟一个,让各位大佬见笑了。

                • avatar 陈鑫威博客 0

                  贵站文章不错,主题清晰,颜色上也很好。喜欢贵站的主题风格

                  • avatar 老姚 0

                    又见网络工作者的博客。

                      • avatar 萧瑟  博主

                        @老姚 哈哈,兴趣爱好罢了

                      • avatar 我爱辅助论坛 0

                        坚持更新,做好自己

                        • avatar 西枫里博客 4

                          首先呢else后面跟上{ 原因也很简单,在一些特定的软件中,格式化代码,这个简写的会让你非常头痛。
                          第二,你这个金字塔似乎有点问题,按照样输出的话,应该是半个金字塔。还要输出另外一半才像,比如你$j <= 2 * $i-1;换成$j <= 4 * $i-1;才更像一个金字塔,当然这样并不是你程序的原意。为了验证一下,我特地拷贝了下你的代码,兼顾简介和效率,你应该这么改下输出*号和空格之前先去定义个div容器,内容居中,然后去掉输出空格的for语句,这样就完成了一个正常的金字塔了。

                            • avatar 萧瑟  博主

                              @西枫里博客 非常感谢大佬耐心指导和留言,else 这个是从其他语言那边带过来的。这个坏习惯一定要改;相对于作业:我的想法是如何快速的去完成这个作业,而不是如何让这个作业做的更好。最后再一次谢谢大佬的指导,非常感谢。

                            • avatar 翡樾 3

                              不错,加油

                                • avatar 萧瑟  博主

                                  @翡樾 谢谢。一起努力