【问题标题】:Drawing with matrices in C在 C 中使用矩阵绘图
【发布时间】:2020-12-30 00:18:29
【问题描述】:

如何绘制 n 不大于 10 的函数 x+y=n 以及仅使用没有任何函数或库的矩阵的坐标系?我是初学者,希望你能帮助我。

      #include<stdio.h>
       int main() {
       int n,i,j;
       scanf("%d", &n);
       char m [12][63]={" "};
       for(i=0;i<12;i++){
           for(j=0;j<63;j++){
           m[i][j]=' ';
         if(i==0 && j==1) m[i][j]='0';
         if(i==11 && j==61) m[i][j]='2';
         if(j==0 && i!=0 && i!=11) m[i][j]='0'+10-i;
         if(j==2 && i!=11) m[i][j]='+';
         if(i==11 && j%3==2) m[i][j]='0'+((j-2)/3)%10;
         if(i==11 && j%3==1 && j>29 && j<59) m[i][j]='1';
         if(i==10 && j%3==2) m[i][j]='+';
        if(j==3*(n+i-10) && i>2 && j>2)  m[i][j]='*';       
    }
}        
   for(i=0;i<12;i++){
       for(j=0;j<63;j++){
           printf("%c", m[i][j]);
       }  printf("\n");
       }
      }
      //my code doesn't print the correct result(the coordinate system is correct except that it prints 0+ instead of 10+ on y axis and x+y=n is not correct

      0+                                                            
     9 +                                                            
     8 +                                                            
     7 +                                                            
     6 +                                                            
     5 +                                                            
     4 +                                                            
     3 +                                                            
     2 +                                                            
     1 +*                                                           
     0 +  +* +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +
       0  1  2* 3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20

【问题讨论】:

  • m[j][i] = x - 1; 中的x 是什么?

标签: c matrix


【解决方案1】:

我不知道你在这些条件下尝试了什么。检查这个

#include <stdio.h>
#include <string.h>

#define N 100

int main() {
    
    int n;
    char m[N][N];
    
    while( scanf("%d", &n) != 1 && n > (N-1)/2 );
    
    memset(m, ' ', N*N);

    for(int i = 0; i < n-1; i++) {
        
        m[i][0] = '*';
        m[i][i] = '*';
    }
    
    for(int i = 0; i < (n-1)*2; i++) m[n-1][i] = '*';
    
    for(int i = 0; i < n; i++) {
        
        for(int j = 0; j < (n-1)*2; j++) printf("%c", m[i][j]);
        puts("");
    }
    
    return 0;
}

程序可以改进,它浪费了大量内存并打印了很多不必要的空格。尝试通过减少矩阵的未使用部分来改进它。这样你也可以减少不必要的打印。

【讨论】:

  • 但是,我实际上需要用加号和数字绘制图片,图片中的所有内容都应该在我的结果中
  • 修改程序即可
  • 我是否必须将 1 到 19 的数字一一写入矩阵中,或者有更快的方法吗?我的意思是,我必须一个一个地写 m[0][1] =1... 吗?
  • 不,您不必这样做。只需使用索引i。对于这种特殊情况,m[i][0] = i+1 应该可以解决问题。 0 表示第一列,而i 沿行切换。随便玩一下,对这个行/列系统充满信心,一切都会好起来的
  • 我之前尝试过,但我得到了一些问号和很多数字
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-10
  • 1970-01-01
  • 2019-08-28
  • 2019-08-09
相关资源
最近更新 更多