当前位置:编程学习 > C/C++ >>

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]); } }
答案:有几个问题
一一说吧:
①、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语言]请问下面这些句子是什么意思?谢谢大家

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,