C程序n维0,1矩阵的输出,各位帮我看下,好吗
#include<stdio.h> void main() { int m; printf("请输入m的值"); scanf("m=%d维特殊矩阵",&m); int i,j; i=m; j=m; int a[i][j]; for(i=0;i<m;i++) {for(j=0;j<=i;j++) a[i][j]=1; } for(i=0;i<m;i++) {for(j=0;j<m;j++) printf("%d\n",a[i][j]); } }
#include<stdio.h> void main() { int m; printf("请输入m的值"); scanf("m=%d维特殊矩阵",&m); int i,j; i=m; j=m; int a[i][j]; for(i=0;i<m;i++) {for(j=0;j<=i;j++) a[i][j]=1; } for(i=0;i<m;i++) {for(j=0;j<m;j++) printf("%d\n",a[i][j]); } }
答案:有几个问题
一一说吧:
①、scanf()函数不能用来打印字符串
scanf()只用于接受标准输入
②、c语言不接受不固定长度的数组申请
如果int a[i][j]中的i和j都是变量 则在c语言中是非法的
int a[10][10]这样的才是可以接受的
如果需要定义不固定长度的数组需要动态申请内存
使用的函数是malloc() 其参数为申请内存的大小
特别注意动态申请的内存需要释放否则会发生内存泄露
释放动态申请的内存的函数是free()
这两个函数包含在stdlib.h中
要把这个文件include进来
③、动态申请的内存要进行初始化
④、用sprintf()函数的 \t \n 格式化输出
-------------------------------------------
更改后的代码如下:
#include<stdio.h>
#include <stdlib.h>
int main()
{
int m;
printf("请输入m的值");
scanf("%d",&m);
int i,j;
i=m;
j=m;
int *a = (int*)malloc(m*m*sizeof(int));
if (a == NULL)
{
printf("内存不足\n");
return -1;
}
for(i=0;i<m;i++) //③
{ // 将矩阵初始化为0
for(j=0;j<m;j++)
*(a+i*m+j) = 0 ;
}
for(i=0;i<m;i++)
{
for(j=0;j<=i;j++)
*(a+i*m+j) = 1 ;
}
for(i=0;i<m;i++)
{
for(j=0;j<m;j++)
printf("%d\t",*(a+i*m+j));
printf("\n"); //④
}
free(a);
return 0;
}
如有不足之处请指正
--- ---
个人意见 仅供参考
其他:1:scanf("m=%d维特殊矩阵",&m);
这里不要这样写,scanf("%d".&m);
2修改后的程序:
#include<stdio.h>
int main()
{
int m;
printf("请输入m的值\n");
scanf("%d",&m);
int i,j;
i=m;
j=m;
int a[i][j];
for(i=0;i<m;i++)
{
for(j=0;j<m;j++)
a[i][j]=0;
}
for(i=0;i<m;i++)
{
for(j=0;j<=i;j++)
a[i][j]=1;
}
for(i=0;i<m;i++)
{
for(j=0;j<m;j++)
printf(" %d",a[i][j]);
printf("\n");
}
return 0;
}
效果:
3
请输入m的值
1 0 0
1 1 0
1 1 1 //本题数组空间必须动态分配,静态无法实现的。
#include<stdio.h>
void main()
{
int m;
printf("请输入m的值");
scanf("%d",&m);
int i,j;
int *a=new int[m*m];
for(i=0;i<m;i++)
{for(j=0;j<m;j++)
*(a+i*m+j)=1;
}
for(i=0;i<m;i++)
{for(j=0;j<m;j++)
printf("%d ",*(a+i*m+j));
printf("\n");
}
delete []a;
}
上一个:c语言问题
下一个:[C语言]请问下面这些句子是什么意思?谢谢大家