【问题标题】:How do I handle printf in a nested for Loops construct in C?如何在 C 中的嵌套 for 循环构造中处理 printf?
【发布时间】:2020-03-27 05:07:20
【问题描述】:

我需要在 C 中使用嵌套的 for 循环来实现一个函数。

该函数具有以下声明:

void nest_loop(int n);

并且应该为值 n = 5 打印以下内容

A B C D E
  A B C D
    A B C
      A B
        A

但是我需要实现该函数,以便它为以下 Intervall [0,9] 中的任何 unsigned int n 生成输出

n = 5的情况

据我了解,有 5 个 for 循环。

for_loop1 打印 5 次 char 'A'

for_loop2 打印 4 次 char 'B'

for_loop3 打印 3 次 char 'C'

for_loop4 打印 char 'D' 的 2 倍

for_loop5 打印 1 次 char 'E'

根据我的理解,嵌套循环结构应该是这样的:

int n = 5;
int c = n - 1;

for(int i = c ; i < 0; i--){ // loop for 'E'
  c--;
  for(int j = c; j < 0; j--){ // loop for 'D'
    c--;
   for(int k = c; k < 0; k--){ // loop for 'C'
     c--;
    for(int l = c; l < 0; l--){ // loop for 'B'
      c--;
     for(int p = c; p < 0; p--){ // loop for 'A'
     }
    }
   }
  }
}

我的嵌套 for 循环结构是否正确? 如果是,那么我现在如何实现 printf 以产生提到的输出?

【问题讨论】:

  • “但是我需要实现该函数,以便它为以下 Intervall [0,9] 中的任何 unsigned int n 生成输出” 如果输入的数字不是5?那么你的 5 个嵌套循环会做什么呢?
  • 你只需要两个for循环:一个打印一行中的每个字符,一个负责打印一行。
  • 如果问题是打印 2D 图案,那么您的问题有 2 个维度。这意味着 2 个循环。用笔确定行和列索引(从零开始),这样可以更容易理解如何在(row, column)(i, j) 打印字母。

标签: c for-loop printf nested-loops


【解决方案1】:

这是功能代码。

#include <stdio.h>
#include <ctype.h>

void nest_loop(int n) {
    for(int i = 0; i < n; i++){
        for (int j = 0; j < i; j++)
            printf("  ");
        char init_char = 'A';
        for(int j = 0; j < n-i; j++, init_char++)
            printf("%c ", init_char);
        printf("\n");
    }
}

int main()
{
    int num;
    printf("input number: ");
    scanf("%d", &num);
    nest_loop(num);
    return 0;
}

输出是

input number: 5
A B C D E 
  A B C D 
    A B C 
      A B 
        A 

【讨论】:

    【解决方案2】:

    你知道在书中我们也是从左到右而不是从上到下写的,所以你对循环的理解是错误的。随时要求任何澄清谢谢。

     #include<stdio.h>
        void nest_loop(int n)
        {
            int i,j;
            char k = 'A';
            for(i=n;i>0;i--)
            {
                for(j=n;j>i;j--)
                {
                    printf(" ");//print required spaces.
                }
                for(j=0;j<i;j++)
                {
                    printf("%c",k+j);//initial char value of k is A and will be incremented by one as looping continues.
                }
                printf("\n");
            }
        }
        int main()
        {
            int n;
            printf("Enter the row number\n");
            scanf("%d",&n);
            nest_loop(n);
            return 0;
        }
    

    【讨论】:

      【解决方案3】:

      这里有你的目的的功能代码

      #include <stdio.h>
      #include <ctype.h>
      
      int main()
      {
          int num;
          scanf("%d", &num);
          char init_char = 'A';
      
          for(int i = 0; i < num; i++, init_char++){
              for(int j = num; j > i; j--)
                  printf("%c", init_char);
              printf("\n");
          }
      
              return 0;
      }
      

      答案在 cmets 中得到了很好的解释,祝你好运 :) *我要补充一点,在 C 语言中,您还可以递增字符、读取什么是 ASCII 表以及字符如何编码为数字

      【讨论】:

      • 您的代码没有产生预期的输出。您会得到 A、B 和 C 行。
      • 对不起,这段代码在我的机器上工作得很好,除了输出向左对齐。它真的只输出到你机器上的“C”字符吗?
      【解决方案4】:

      正如@Jonathon Reinhart 所解释的,您只需要在类似于以下的构造中使用两个循环:

      for (int i = n; i > 0; i--) {
        for (int j = 0; j <= i; j++) {
          [...]
        }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-05-03
        • 2011-05-19
        • 2016-01-11
        • 2021-03-20
        • 1970-01-01
        • 2015-01-21
        • 2021-01-17
        相关资源
        最近更新 更多