不能在C中获得菱形,对吗

不能在C中获得菱形,对吗,c,shape,C,Shape,我正在做一个c练习,用一个函数做一个带“#”的菱形。 我的代码: #include <stdio.h> //Declare function void losangle(int n); //main int main(void){ int n; do { printf("Altura do triangulo: "); scanf("%d", &n ); } while( n % 2 == 0); losangle(n);} //fun

我正在做一个c练习,用一个函数做一个带“#”的菱形。 我的代码:

    #include <stdio.h>
//Declare function
void losangle(int n);
//main
int main(void){
  int n;
  do {
    printf("Altura do triangulo: ");
    scanf("%d", &n );
  } while( n % 2 == 0);
  losangle(n);}
//function
void losangle(int n){
  int i, hashtag, spaces, j, spaces1, hashtag1;
//triangle
  for(i = 0; i < n; i++){
    for(spaces = 0; spaces < (n-i); spaces++){
      printf(" ");}
    for(hashtag = 0; hashtag < (i+1);hashtag++){
      printf("# ");}
    printf("\n");}
//inverted triangle
  for(j = 0; j < (n - 1); j++){
    for(spaces1 = 0; spaces1 < (j+2); spaces1++){
        printf(" ");}
//not working !!!  
    for(hashtag1 = (n-1); hashtag1 > 0; hashtag1--){
      printf("# ");}
    printf("\n");
  }}

是什么使得底部的“#”不递减?此行是否错误(对于(hashtag1=(n-1);hashtag1>0;hashtag1-)??顺便说一句,我也接受提高代码效率的提示

问题:

无论
j
的值是多少,循环的倒三角形
每次都从
n-1
迭代到
0

解决方案:

n-1
j
之间迭代将导致每次迭代的哈希符号数量减少

更改此行:

for(hashtag1 = (n-1); hashtag1 > 0; hashtag1--){


问题:

无论
j
的值是多少,循环的倒三角形
每次都从
n-1
迭代到
0

解决方案:

n-1
j
之间迭代将导致每次迭代的哈希符号数量减少

更改此行:

for(hashtag1 = (n-1); hashtag1 > 0; hashtag1--){


里程碑1

程序的高级逻辑是什么

void getInutAndDrawDiamond()

int getTriangleHeight();
void drawDiamond(int height);

int main()
{
   getInutAndDrawDiamond();
   return 0;
}

void getInutAndDrawDiamond()
{
   int height = getTriangleHeight();
   drawDiamond(height);
}
使用
getTriangelHeight
drawDiamond
的虚拟实现

int getTriangleHeight()
{
   return 0;
}

void drawDiamond(int height)
{
}
里程碑2

添加
getTriangleHeight
的正确实现

int getTriangleHeight()
{
   int height;
   int c;
   char const* prompt = "Enter the height of the triangle: ";

   printf("%s", prompt);
   while ( scanf("%d", &height) != 1 )
   {
      // Error reading the input.
      // Ignore rest of the line
      while ( (c = fgetc(stdin)) != '\n' && c != EOF );

      // If EOF is reached, exit.
      if ( c == EOF )
      {
         exit(EXIT_FAILURE);
      }

      // Try reading again.
      printf("%s", prompt);
   }

   return height;
}
里程碑3

使用两个具有虚拟实现的辅助函数,添加
drawDiamond
的下一级实现

void drawUpperHalfOfDiamond(int height);
void drawLowerHalfOfDiamond(int height);

void drawDiamond(int height)
{
    drawUpperHalfOfDiamond(height);
    drawLowerHalfOfDiamond(height);
}

void drawUpperHalfOfDiamond(int height)
{
}

void drawLowerHalfOfDiamond(int height)
{
}
里程碑4

使用两个辅助函数的虚拟实现,添加
drawUpperHalfDiamond
drawLowerHalfDiamond
的下一级实现

void drawUpperHalfRowOfDiamond(int row);
void drawLowerHalfRowOfDiamond(int row);

void drawUpperHalfOfDiamond(int height)
{
   for (int row = 0; row < height; ++row )
   {
      drawUpperHalfRowOfDiamond(row);
   }
}

void drawLowerHalfOfDiamond(int height)
{
   for (int row = 0; row < height; ++row )
   {
      drawLowerHalfRowOfDiamond(row);
   }
}

void drawUpperHalfRowOfDiamond(int row)
{
}

void drawLowerHalfRowOfDiamond(int row);
{
}
int getNumberOfColumsForUpperHalfRow(int row);
void drawUpperHalfCell(int row, int col);

int getNumberOfColumsForLowerHalfRow(int row);
void drawLowerHalfCell(int row, int col);

void drawUpperHalfRowOfDiamond(int row)
{
   int cols = getNumberOfColumsForUpperHalfRow(row);
   for (int col = 0; col < cols; ++col )
   {
      drawUpperHalfCell(row, col);
   }
}

void drawLowerHalfRowOfDiamond(int row)
{
   int cols = getNumberOfColumsForLowerHalfRow(row);
   for (int col = 0; col < cols; ++col )
   {
      drawLowerHalfCell(row, col);
   }
}

int getNumberOfColumsForUpperHalfRow(int row)
{
   return 0;
}

void drawUpperHalfCell(int row, int col)
{
}

int getNumberOfColumsForLowerHalfRow(int row)
{
   return 0;
}

void drawLowerHalfCell(int row, int col)
{
}
里程碑5

添加最后四个函数的正确实现——留给读者作为练习

完成程序

#include <stdio.h>
#include <stdlib.h>

void getInutAndDrawDiamond();

int getTriangleHeight();
void drawDiamond(int height);

void drawUpperHalfOfDiamond(int height);
void drawLowerHalfOfDiamond(int height);

void drawUpperHalfRowOfDiamond(int row);
void drawLowerHalfRowOfDiamond(int row);

int getNumberOfColumsForUpperHalfRow(int row);
void drawUpperHalfCell(int row, int col);

int getNumberOfColumsForLowerHalfRow(int row);
void drawLowerHalfCell(int row, int col);

int main()
{
   getInutAndDrawDiamond();
   return 0;
}

void getInutAndDrawDiamond()
{
   int height = getTriangleHeight();
   drawDiamond(height);
}

int getTriangleHeight()
{
   int height;
   int c;
   char const* prompt = "Enter the height of the triangle: ";

   printf("%s", prompt);
   while ( scanf("%d", &height) != 1 )
   {
      // Error reading the input.
      // Ignore rest of the line
      while ( (c = fgetc(stdin)) != '\n' && c != EOF );

      // If EOF is reached, exit.
      if ( c == EOF )
      {
         exit(EXIT_FAILURE);
      }

      // Try reading again.
      printf("%s", prompt);
   }

   return height;
}

void drawDiamond(int height)
{
   drawUpperHalfOfDiamond(height);
   drawLowerHalfOfDiamond(height);
}

void drawUpperHalfOfDiamond(int height)
{
   for (int row = 0; row < height; ++row )
   {
      drawUpperHalfRowOfDiamond(row);
   }
}

void drawLowerHalfOfDiamond(int height)
{
   for (int row = 0; row < height; ++row )
   {
      drawLowerHalfRowOfDiamond(row);
   }
}

void drawUpperHalfRowOfDiamond(int row)
{
   int cols = getNumberOfColumsForUpperHalfRow(row);
   for (int col = 0; col < cols; ++col )
   {
      drawUpperHalfCell(row, col);
   }
}

void drawLowerHalfRowOfDiamond(int row)
{
   int cols = getNumberOfColumsForLowerHalfRow(row);
   for (int col = 0; col < cols; ++col )
   {
      drawLowerHalfCell(row, col);
   }
}

int getNumberOfColumsForUpperHalfRow(int row)
{
   // TODO a proper implementation
   return 0;
}

void drawUpperHalfCell(int row, int col)
{
   // TODO a proper implementation
}

int getNumberOfColumsForLowerHalfRow(int row)
{
   // TODO a proper implementation
   return 0;
}

void drawLowerHalfCell(int row, int col)
{
   // TODO a proper implementation
}
#包括
#包括
void getInutAndDrawDiamond();
int gettriangelheight();
空心钻(内部高度);
钻石上半部分的空隙(内部高度);
空隙拉深较低的钻石(内部高度);
钻石的上半行(内行);
钻石(国际行)的无效拉深下限;
int GetNumberOfColumnsForuperHalfRow(int行);
无效的半单元格(整数行,整数列);
int getNumberOfColumnsForLowerHalfRow(int行);
void drawrowerhalfcell(int行,int列);
int main()
{
getInutAndDrawDiamond();
返回0;
}
void getInutAndDrawDiamond()
{
int height=getTriangleHeight();
牵引钻石(高度);
}
int gettriangelheight()
{
内部高度;
INTC;
char const*prompt=“输入三角形的高度:”;
printf(“%s”,提示符);
while(扫描频率(“%d”)和高度)!=1)
{
//读取输入时出错。
//忽略该行的其余部分
而((c=fgetc(stdin))!='\n'&&c!=EOF);
//如果达到EOF,则退出。
如果(c==EOF)
{
退出(退出失败);
}
//再试一次。
printf(“%s”,提示符);
}
返回高度;
}
空心菱形(内部高度)
{
金刚石的上半部分(高度);
金刚石的拉深下限(高度);
}
钻石上半部分的空隙(内部高度)
{
对于(int行=0;行<高度;++行)
{
绞车上半排金刚石(排);
}
}
空心拉深低阿尔福钻石(内部高度)
{
对于(int行=0;行<高度;++行)
{
金刚石(世界其他地区)的拉深;
}
}
空心图纸上半排金刚石(内排)
{
int cols=GetNumberOfColumnsForuperHalfRow(行);
for(int col=0;col
结束语


在正确地实现了最后四个功能之后,该程序的结构非常良好,能够通过更改从
main
调用的内容轻松诊断问题

程序的高级逻辑是什么

void getInutAndDrawDiamond()

int getTriangleHeight();
void drawDiamond(int height);

int main()
{
   getInutAndDrawDiamond();
   return 0;
}

void getInutAndDrawDiamond()
{
   int height = getTriangleHeight();
   drawDiamond(height);
}
使用
getTriangelHeight
drawDiamond
的虚拟实现

int getTriangleHeight()
{
   return 0;
}

void drawDiamond(int height)
{
}
里程碑2

添加
getTriangleHeight
的正确实现

int getTriangleHeight()
{
   int height;
   int c;
   char const* prompt = "Enter the height of the triangle: ";

   printf("%s", prompt);
   while ( scanf("%d", &height) != 1 )
   {
      // Error reading the input.
      // Ignore rest of the line
      while ( (c = fgetc(stdin)) != '\n' && c != EOF );

      // If EOF is reached, exit.
      if ( c == EOF )
      {
         exit(EXIT_FAILURE);
      }

      // Try reading again.
      printf("%s", prompt);
   }

   return height;
}
里程碑3

使用两个具有虚拟实现的辅助函数,添加
drawDiamond
的下一级实现

void drawUpperHalfOfDiamond(int height);
void drawLowerHalfOfDiamond(int height);

void drawDiamond(int height)
{
    drawUpperHalfOfDiamond(height);
    drawLowerHalfOfDiamond(height);
}

void drawUpperHalfOfDiamond(int height)
{
}

void drawLowerHalfOfDiamond(int height)
{
}
里程碑4

使用两个辅助函数的虚拟实现,添加
drawUpperHalfDiamond
drawLowerHalfDiamond
的下一级实现

void drawUpperHalfRowOfDiamond(int row);
void drawLowerHalfRowOfDiamond(int row);

void drawUpperHalfOfDiamond(int height)
{
   for (int row = 0; row < height; ++row )
   {
      drawUpperHalfRowOfDiamond(row);
   }
}

void drawLowerHalfOfDiamond(int height)
{
   for (int row = 0; row < height; ++row )
   {
      drawLowerHalfRowOfDiamond(row);
   }
}

void drawUpperHalfRowOfDiamond(int row)
{
}

void drawLowerHalfRowOfDiamond(int row);
{
}
int getNumberOfColumsForUpperHalfRow(int row);
void drawUpperHalfCell(int row, int col);

int getNumberOfColumsForLowerHalfRow(int row);
void drawLowerHalfCell(int row, int col);

void drawUpperHalfRowOfDiamond(int row)
{
   int cols = getNumberOfColumsForUpperHalfRow(row);
   for (int col = 0; col < cols; ++col )
   {
      drawUpperHalfCell(row, col);
   }
}

void drawLowerHalfRowOfDiamond(int row)
{
   int cols = getNumberOfColumsForLowerHalfRow(row);
   for (int col = 0; col < cols; ++col )
   {
      drawLowerHalfCell(row, col);
   }
}

int getNumberOfColumsForUpperHalfRow(int row)
{
   return 0;
}

void drawUpperHalfCell(int row, int col)
{
}

int getNumberOfColumsForLowerHalfRow(int row)
{
   return 0;
}

void drawLowerHalfCell(int row, int col)
{
}
里程碑5

添加最后四个函数的正确实现——留给读者作为练习

完成程序

#include <stdio.h>
#include <stdlib.h>

void getInutAndDrawDiamond();

int getTriangleHeight();
void drawDiamond(int height);

void drawUpperHalfOfDiamond(int height);
void drawLowerHalfOfDiamond(int height);

void drawUpperHalfRowOfDiamond(int row);
void drawLowerHalfRowOfDiamond(int row);

int getNumberOfColumsForUpperHalfRow(int row);
void drawUpperHalfCell(int row, int col);

int getNumberOfColumsForLowerHalfRow(int row);
void drawLowerHalfCell(int row, int col);

int main()
{
   getInutAndDrawDiamond();
   return 0;
}

void getInutAndDrawDiamond()
{
   int height = getTriangleHeight();
   drawDiamond(height);
}

int getTriangleHeight()
{
   int height;
   int c;
   char const* prompt = "Enter the height of the triangle: ";

   printf("%s", prompt);
   while ( scanf("%d", &height) != 1 )
   {
      // Error reading the input.
      // Ignore rest of the line
      while ( (c = fgetc(stdin)) != '\n' && c != EOF );

      // If EOF is reached, exit.
      if ( c == EOF )
      {
         exit(EXIT_FAILURE);
      }

      // Try reading again.
      printf("%s", prompt);
   }

   return height;
}

void drawDiamond(int height)
{
   drawUpperHalfOfDiamond(height);
   drawLowerHalfOfDiamond(height);
}

void drawUpperHalfOfDiamond(int height)
{
   for (int row = 0; row < height; ++row )
   {
      drawUpperHalfRowOfDiamond(row);
   }
}

void drawLowerHalfOfDiamond(int height)
{
   for (int row = 0; row < height; ++row )
   {
      drawLowerHalfRowOfDiamond(row);
   }
}

void drawUpperHalfRowOfDiamond(int row)
{
   int cols = getNumberOfColumsForUpperHalfRow(row);
   for (int col = 0; col < cols; ++col )
   {
      drawUpperHalfCell(row, col);
   }
}

void drawLowerHalfRowOfDiamond(int row)
{
   int cols = getNumberOfColumsForLowerHalfRow(row);
   for (int col = 0; col < cols; ++col )
   {
      drawLowerHalfCell(row, col);
   }
}

int getNumberOfColumsForUpperHalfRow(int row)
{
   // TODO a proper implementation
   return 0;
}

void drawUpperHalfCell(int row, int col)
{
   // TODO a proper implementation
}

int getNumberOfColumsForLowerHalfRow(int row)
{
   // TODO a proper implementation
   return 0;
}

void drawLowerHalfCell(int row, int col)
{
   // TODO a proper implementation
}
#包括
#包括
void getInutAndDrawDiamond();
int gettriangelheight();
空心钻(内部高度);
钻石上半部分的空隙(内部高度);
空隙拉深较低的钻石(内部高度);
钻石的上半行(内行);
钻石(国际行)的无效拉深下限;
int GetNumberOfColumnsForuperHalfRow(int行);
无效的半单元格(整数行,整数列);
int getNumberOfColumnsForLowerHalfRow(int行);
void drawrowerhalfcell(int行,int列);
int main()
{
getInutAndDrawDiamond();
返回0;
}
void getInutAndDrawDiamond()
{
int height=getTriangleHeight();
牵引钻石(高度);
}
int gettriangelheight()
{
内部高度;
INTC;
char const*prompt=“输入三角形的高度:”;
printf(“%s”,提示符);
while(扫描频率(“%d”)和高度)!=1)
{