Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中使用数组显示模式_C_Arrays - Fatal编程技术网

在C中使用数组显示模式

在C中使用数组显示模式,c,arrays,C,Arrays,我试图用C显示一个模式。它如下所示: 目标: ABCDCBA ABC CBA AB BA A A 我知道如何使用更传统的模式方法获得大致相同的输出。这是使用常规方式显示的内容(用于循环和换行符): 获取输出: ABCDDCBA ABC CBA AB BA A A 我想用阵列而不是传统的方法来实现精确的目标模式。我试图将所有内容存储在一个数组中,然后只显示数组元素 这是我的代码: #include<stdio.h> #include<conio.

我试图用C显示一个模式。它如下所示:

目标:

ABCDCBA
ABC CBA
AB   BA
A     A
我知道如何使用更传统的模式方法获得大致相同的输出。这是使用常规方式显示的内容(用于循环和换行符):

获取输出:

ABCDDCBA
ABC  CBA
AB    BA
A      A
我想用阵列而不是传统的方法来实现精确的目标模式。我试图将所有内容存储在一个数组中,然后只显示数组元素

这是我的代码:

#include<stdio.h>
#include<conio.h>

void main()
{
    int k,n=6,m;
    int i=0,j=0;
    int arr[10][10];
    clrscr();
    while(i<=n)
    {
        j=0;
        k=65;
        m=2*n;
        while(j<=m)
        {    
            while(j<=n-i)
            {
                arr[i][j]=k;
                k++;
                j++;
            }
            for(j=n-i;j<=n+i;j++)
            {
                printf(" ");
            }
            for(j=n+i;j<=m;j++)
            {
                printf("%c",k);
                k--;
            }
        }
        i++;
    }
    i=0;
    while(i<=n)
    {
        j=0;
        while(j<=m)
        {
            printf("%c",arr[i][j]);
            j++;

        }
        printf("\n");
        i++;
    }

    getch();
}
#包括
#包括
void main()
{
int k,n=6,m;
int i=0,j=0;
国际航空公司[10][10];
clrsc();

虽然(i我在看你的acode,必须说所有的
i
j
k
等等。我真的很困惑。有一个原因告诉你要有有有意义的变量名,因为这样读代码和理解每一个变量的含义更容易。我很确定一旦你改变了真正的n艾姆斯,你很快就会发现你的错误

话虽如此,请查看下面的代码:

        for(j=n+i;j<=m;j++)
        {
            printf("%c",k);
            k--;
        }
(j=n+i;j)的

但是对于
ABCDDCBA
的输入,输出是错误的:

ABCDDCBA
ABCD CBA
ABC   BA
AB     A
A
我的第一个想法是: 做两个循环,第一个循环将字母A…放入数组,第二个循环将字母A?-1放入数组

#include <stdio.h>

int main(void)
{
  int no_ofrows;
  char array[26][51];
  int row_no;
  int index;
  int i,j;

  printf("No of rows: ");
  scanf("%d", &no_ofrows);

  for(row_no=0;row_no<no_ofrows;row_no++)
  {
    for(index=0;index<no_ofrows;index++)
    {
      if(index<no_ofrows-row_no)
        array[row_no][index]='A'+index;
      else
        array[row_no][index]=' ';
    }
    for(index=0;index<no_ofrows-1;index++)
    {
      if(index<row_no-1)
        array[row_no][no_ofrows+index]=' ';
      else
        array[row_no][no_ofrows+index]='A' + no_ofrows-2 - index;
    }
  }

  for(i=0;i<no_ofrows;i++)
  {
    for(j=0;j<no_ofrows*2-1;j++)
      printf("%c", array[i][j]);
    putchar('\n');
  }


  return 0;
}
#包括
内部主(空)
{
整数不可数;
字符数组[26][51];
int row_no;
整数指数;
int i,j;
printf(“行数:”);
scanf(“%d”,没有行);

对于(RooNoNO=0;RooNo.NO.P>填充数组是很简单的,如果你找出一种方法来表示字符(行,COL)是什么。因为输出在列3周围是对称的,所以考虑<代码> ABS(COL—3)是合乎逻辑的。
,因为这是距离中心列的距离。称之为
d
。后续行显示的中心列较少:我的观察结果是,当
d
小于行号时,会忽略一列。最后,要打印哪个字符?中心列是“d”,字母会随着从中心移出而减少

把这些放在一起,你会得到几行填充数组的代码。我在后面做了一个循环,将数组打印成字符串。你也可以像原始代码一样迭代每个字符串和
putc
字符

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

int main(int argc, char *argv[]) {
    char arr[4][8] = {'\0'};
    for (int row = 0; row < 4; row++) {
        for (int col = 0; col < 7; col++) {
            int d = abs(col - 3);
            arr[row][col] = d < row ? ' ' : 'D' - d;
        }
    }
    for (int row = 0; row < 4; row++) {
        puts(arr[row]);
    }
    return 0;
}
#包括
#包括
int main(int argc,char*argv[]){
char arr[4][8]={'\0'};
用于(int行=0;行<4;行++){
for(int col=0;col<7;col++){
int d=绝对值(第3列);
arr[row][col]=d
我将提供此解决方案,它尊重使用2D数组的愿望。如前所述,它使用了C99特性,即
bridge()
函数中的VLA。(
bridge()
函数因其输出看起来有点像桥接而得名。)您可以使用合适的最大大小来固定数组的大小(
字符行[9][18];
最多可容纳9个字符行)


这是否有一个初始输入,或者它总是简单的
“ABCDCBA”
您的工作对象?请注意
void main()
不是标准C或Microsoft的官方支持-请不要使用它。使用
int main(void)
对于不接受命令行参数并在末尾返回状态的程序-
返回0;
如果没有其他内容。MS编译器不符合C99,因此忽略返回是不正确的。用户将输入行数,并根据ABC的值显示…a,变量k存储字符。..ohk@JonathanLeffler i w我会处理它不需要使用数组,只要'printf'i,j是我的数组索引变量,k是用于打印ascii值,n是用户将输入的总行数..问题在于我的逻辑..@Divyang当然是的,我没有说如果更改变量名,问题会得到解决,只是说这样更容易实现wcode@Divyang如果我的回答对你有帮助,请接受,如果没有,我会来回答你的问题
#include <stdio.h>

int main(void)
{
  int no_ofrows;
  char array[26][51];
  int row_no;
  int index;
  int i,j;

  printf("No of rows: ");
  scanf("%d", &no_ofrows);

  for(row_no=0;row_no<no_ofrows;row_no++)
  {
    for(index=0;index<no_ofrows;index++)
    {
      if(index<no_ofrows-row_no)
        array[row_no][index]='A'+index;
      else
        array[row_no][index]=' ';
    }
    for(index=0;index<no_ofrows-1;index++)
    {
      if(index<row_no-1)
        array[row_no][no_ofrows+index]=' ';
      else
        array[row_no][no_ofrows+index]='A' + no_ofrows-2 - index;
    }
  }

  for(i=0;i<no_ofrows;i++)
  {
    for(j=0;j<no_ofrows*2-1;j++)
      printf("%c", array[i][j]);
    putchar('\n');
  }


  return 0;
}
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
    char arr[4][8] = {'\0'};
    for (int row = 0; row < 4; row++) {
        for (int col = 0; col < 7; col++) {
            int d = abs(col - 3);
            arr[row][col] = d < row ? ' ' : 'D' - d;
        }
    }
    for (int row = 0; row < 4; row++) {
        puts(arr[row]);
    }
    return 0;
}
#include <stdio.h>

enum { FirstLetter = 'A' };

static void bridge(int n)
{
    int len = n*2 - 1;
    char lines[n][len+1];

    for (int i = 0; i < n; i++)
    {
        char c = FirstLetter;
        char LastLetter = c + n - i - 1;
        for (int j = 0; j < n; j++)
        {
            lines[i][len-1-j] = c;
            lines[i][j] = c;
            if (c >= FirstLetter && c < LastLetter)
                c++;
            else
                c = ' ';
        }
        lines[i][len] = '\0';
    }
    for (int i = 0; i < n; i++)
        printf("%s\n", lines[i]);
}

int main(void)
{
    for (int i = 1; i < 10; i++)
        bridge(i);
    return 0;
}
A
ABA
A A
ABCBA
AB BA
A   A
ABCDCBA
ABC CBA
AB   BA
A     A
ABCDEDCBA
ABCD DCBA
ABC   CBA
AB     BA
A       A
ABCDEFEDCBA
ABCDE EDCBA
ABCD   DCBA
ABC     CBA
AB       BA
A         A
ABCDEFGFEDCBA
ABCDEF FEDCBA
ABCDE   EDCBA
ABCD     DCBA
ABC       CBA
AB         BA
A           A
ABCDEFGHGFEDCBA
ABCDEFG GFEDCBA
ABCDEF   FEDCBA
ABCDE     EDCBA
ABCD       DCBA
ABC         CBA
AB           BA
A             A
ABCDEFGHIHGFEDCBA
ABCDEFGH HGFEDCBA
ABCDEFG   GFEDCBA
ABCDEF     FEDCBA
ABCDE       EDCBA
ABCD         DCBA
ABC           CBA
AB             BA
A               A