c - 打印矩阵
问题描述
当我想打印我输入的矩阵时,我可以使用代码:
#include <stdio.h>
int main(void)
{
int n, m; //row and column
printf("Enter row and column:\n");
scanf("%d %d", &n, &m);
int x[n][m];
printf("Enter your matrix:\n");
for (int i = 0; i < n; i++) //input my matrix
{
for (int j = 0; j < m; j++)
{
scanf("%d", &x[i][j]);
}
}
printf("print it:\n");
for (int i = 0; i < n; i++) //print it
{
for (int j = 0; j < m; j++)
{
printf("%d ", x[i][j]);
}
putchar('\n');
}
}
在此处输入图像描述(一种可能的情况)
在上面的代码中,我必须为矩阵的行和列分配值,命名为“n”和“m”。
int n, m;
scanf("%d %d", &n, &m);
但现在我在问一种自动计数的方法。
这个可以直接拿吗?
在此处输入图像描述
解决方案
您可以用一维数组模拟二维数组,如果这就是您的意思:
#include <stdio.h>
#include <stdlib.h>
#define DIGITS 3
int main(void) { // It's good practice to fill function arguments with void if not planning on using them
/* scanf("%d %d", &n, &m); Using scanf with uninitialised variables will result in
* undefined behaviour if it is unable to convert the input. Using fgets
* is easier to debug, safer, and cleaner.
* I highly recommend this: http://sekrit.de/webdocs/c/beginners-guide-away-from-scanf.html
*/
char buf[DIGITS+1];
printf("%s", "Enter array rows:");
fgets(buf, DIGITS+1, stdin);
const int n = atoi(buf);
printf("%s", "Enter array columns:");
fgets(buf, DIGITS+1, stdin);
const int m = atoi(buf);
int x[n*m];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
printf("Enter array value at %d, %d: ", i, j);
fgets(buf, DIGITS+1, stdin);
x[i+j] = atoi(buf);
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
printf("%d ", x[i+j]);
}
printf("\n");
}
}
我不太确定当 C 平等地支持你的二维数组答案时你为什么要这样做。
推荐阅读
- java - 无法对非静态字段消息进行静态引用 ..int randomNumber=r.nextInt(message.length);
- c# - 如何在桶聚合中进行过滤聚合?
- reactjs - 反应应用程序中的npm错误cb()是什么意思
- c++ - std::string 的大小总是打印字符的数量吗?
- angular - 如何在 anuglar 中使用 mailTo 在正文中创建带有 json 的邮件
- python-3.x - 如何通过在文本块外部单击来从文本块中移除焦点
- sql - SQL Server 中 MIN/MAX 的更快替代方案
- python - 如何使用 python 获取桌面音频?
- python-3.x - Python3以阻塞模式读取字符设备
- azure - Xamarin Forms UWP Azure B2C IdentityProvider 登录失败