嵌套循环在C中创建模式(不是菱形)

时间:2015-02-26 19:28:20

标签: c ascii-art

因此,对于我的作业,我必须接受长度和宽度的输入并打印出" *"的模式。根据输入。最小高度为7,只有奇数整数,宽度是6的任意倍。

输出的基本格式,高度为7,宽度为12:

************
************
***   ***   
   ***   ***
***   ***  
************
************  

所以基本上第一行和最后两行是直线穿过整个宽度,奇数行包含3个星号,后面跟着3个空格,直到达到宽度的末尾。偶数行以3个空格开始。

我已经弄清楚如何使用以下代码打印前两行:

do 
    {
        printf("*");
        ++i;
    }while(i<width);

    printf("\n");

    do 
    {
        printf("*");
        ++j;
    }while(j<=width);
    printf("\n");

但是对于我的生活,我无法想出使用基本嵌套循环打印出内部模式的正确方法。我问一个不熟悉C的程序员朋友,但用Java编写了一个基本程序。我不了解Java,并试图翻译它,但注意到两种语言之间逻辑上的一些重大差异导致我头痛。这是他的代码:

// LOGGING
var consoleLine = "<p class=\"console-line\"></p>";

console = {
    log: function (text) {
        $("#console-log").append($(consoleLine).html(text));
    }
};


// PATTERN PARAMETERS
var rows = 6;
var cols = 7;

// hard code a space so html respects it
var space = "&nbsp;"

console.log("cols: " + cols + " rows: " + rows);

for (y = 0; y < rows; ++y) {
    var line = "";
    for (x = 0; x < cols; ++x) {

        // First two and last two rows do not have patterns and just print filled
        if (y == 0 || y == 1 || y == rows - 1 || y == rows - 2) {
            line += "*";
        } else {
            if (y % 2 == 0) {
                // Even row
                line += x % 6 < 3 ? "*" : space;
            } else {
                // Odd row
                line += x % 6 >= 3 ? "*" :  space;
            }
        }
    }
    console.log(line);
}

请帮助我或指出正确的方向!!我在网上搜索过,但似乎无法找到可行的解决方案!

编辑 - 忘了提及所有&#34; printf&#34;用法一次只能打印一个字符......例如单个*

编辑编辑 - 我正在努力工作!!!!谢谢大家,非常感谢您的投入和指导!这就是我所拥有的完美工作:

for (y = 0; y < height; ++y) 
    {
    printf("\n");

    for (x = 0; x < width; ++x) 
        {
        // First two and last two rows do not have patterns and just print filled lines
        if (y == 0 || y == 1 || y == height - 1 || y == height - 2) 
           {
           printf("*");
            }
        else 
        {
            if (y % 2 == 0)
            {
              if(x%6<3)
                {
                    printf("*");
                }
                else
                {
                    printf(" ");
                }

            } else {
                // Odd row
                if(x%6>=3)
                {
                    printf("*");
                }
                else
                {
                    printf(" ");
                }
        }
        }

    }
printf("\n");

2 个答案:

答案 0 :(得分:1)

编写一个包含3个参数n,a,b的函数,可以交替显示n个参数中的3个ab组。您可以调用此函数来打印4种不同的线条。您可以循环重复打印中间部分。玩得开心!

答案 1 :(得分:0)

更简单的替代方案:

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv) {
    int row, col, height = atoi(argv[1]), cols = atoi(argv[2]);
    for (row = 0; row < height; row++) {
        for (col = 0; col < cols; col++) {
            putchar(row < 2 || row >= height - 2 ||
                  col % 6 / 3 == row % 2 ? '*' : ' ');
        }
        putchar('\n');
    }
}
相关问题