我们刚学函数,还没有学指针,如何利用函数实现可以自由输入一个数组的长度? 不知道我这个程序哪里有问题 10
#include<stdio.h>voidf(intn){inta[n][n];}intmain(){inti,j,n;scanf("%d",&n);f(n);for(i...
#include<stdio.h>
void f(int n){
int a[n][n];
}
int main(){
int i,j,n;
scanf("%d",&n);
f(n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
a[i][j]=8;
for(i=0;i<n;i++)
{for(j=0;j<n;j++)
printf("%2d",a[i][j]);
printf("\n");}
return 0;
} 展开
void f(int n){
int a[n][n];
}
int main(){
int i,j,n;
scanf("%d",&n);
f(n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
a[i][j]=8;
for(i=0;i<n;i++)
{for(j=0;j<n;j++)
printf("%2d",a[i][j]);
printf("\n");}
return 0;
} 展开
展开全部
c语言里不允许a[n][n]的定义方式(c++貌似允许),如果你想定义一个数组有两种方法
1.int a[3][3];//固定个数
2.int *a;//一维数组
int n;
n=5;
a=(int *)malloc(sizeof(int)*n);//分配空间,有n个元素用的时候直接就是a[0]到a[n-1];
3.int **a;//二维数组
int i,n;
n=5;
a=(int **)malloc(sizeof(int *)*n);//分配空间,有n个指针元素
for(i=0;i<n;i++)
a[i]=(int *)malloc(sizeof(int)*n);//为每个指针元素分配空间,每个指针元素分配n个元素,用的时候直接是a[0][0]到a[n-1][n-1];
注:n是自己定的,分配空间时n可以是变量也可以是常数,还有要使用malloc需要在头文件添加#include<malloc.h>文件头
c语言所有变量的定义都得放在最前面,即先定义所有变量,然后才能使用其他语句,所以在你不知道数组个数的情况下一般用指针分配空间这种方式,还有一种方法就是把数组元素个数设大点就可以了,使用的时候记录你需要的个数,如:
int a[1000][1000];
int i,j;
int m,n;//m,n为行数和列数;
m=3;
n=3;
for(i=0;i<m;i++)
for(j=0;j<m;j++)
{
}
传给函数的时候你可以多加几个参数
1.int a[3][3];//固定个数
2.int *a;//一维数组
int n;
n=5;
a=(int *)malloc(sizeof(int)*n);//分配空间,有n个元素用的时候直接就是a[0]到a[n-1];
3.int **a;//二维数组
int i,n;
n=5;
a=(int **)malloc(sizeof(int *)*n);//分配空间,有n个指针元素
for(i=0;i<n;i++)
a[i]=(int *)malloc(sizeof(int)*n);//为每个指针元素分配空间,每个指针元素分配n个元素,用的时候直接是a[0][0]到a[n-1][n-1];
注:n是自己定的,分配空间时n可以是变量也可以是常数,还有要使用malloc需要在头文件添加#include<malloc.h>文件头
c语言所有变量的定义都得放在最前面,即先定义所有变量,然后才能使用其他语句,所以在你不知道数组个数的情况下一般用指针分配空间这种方式,还有一种方法就是把数组元素个数设大点就可以了,使用的时候记录你需要的个数,如:
int a[1000][1000];
int i,j;
int m,n;//m,n为行数和列数;
m=3;
n=3;
for(i=0;i<m;i++)
for(j=0;j<m;j++)
{
}
传给函数的时候你可以多加几个参数
展开全部
/*
数组行数 : 4
请输入16个整数 :
12 43 65 78 90 51 47 89 90 71 54 68 73 26 88 44
12 43 65 78
90 51 47 89
90 71 54 68
73 26 88 44
请按任意键继续. . .
*/
#include <stdio.h>
#include <stdlib.h>
#define N 4
/* 利用函数Input()读入数组元素,注意形参二维数组的写法 */
void Input(int a[][N], int m) {
int i,j;
printf("请输入%d个整数 :\n", m * N);
for(i = 0;i < m;i++)
for(j = 0;j < N;j++)
scanf("%d",&a[i][j]);
}
/* 显示数组 */
void Show(int a[][N], int m) {
int i,j;
for(i = 0;i < m;i++) {
for(j = 0;j < m;j++)
printf("%4d",a[i][j]);
printf("\n");
}
}
int main() {
int i,j,m,a[10][N];
printf("数组行数 : ");
scanf("%d",&m);
Input(a,m);/* 实参类型要与形参一致 */
Show(a,m); /* 显示数组元素 */
system("pause");
return 0;
}
数组行数 : 4
请输入16个整数 :
12 43 65 78 90 51 47 89 90 71 54 68 73 26 88 44
12 43 65 78
90 51 47 89
90 71 54 68
73 26 88 44
请按任意键继续. . .
*/
#include <stdio.h>
#include <stdlib.h>
#define N 4
/* 利用函数Input()读入数组元素,注意形参二维数组的写法 */
void Input(int a[][N], int m) {
int i,j;
printf("请输入%d个整数 :\n", m * N);
for(i = 0;i < m;i++)
for(j = 0;j < N;j++)
scanf("%d",&a[i][j]);
}
/* 显示数组 */
void Show(int a[][N], int m) {
int i,j;
for(i = 0;i < m;i++) {
for(j = 0;j < m;j++)
printf("%4d",a[i][j]);
printf("\n");
}
}
int main() {
int i,j,m,a[10][N];
printf("数组行数 : ");
scanf("%d",&m);
Input(a,m);/* 实参类型要与形参一致 */
Show(a,m); /* 显示数组元素 */
system("pause");
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
void f(int n){
int a[n][n];
}
int a[n][n]这个定义通不过编译,数组a的大小未确定,而且你的a是在函数f中定义的,是局部变量,在主函数main中不能用,要实现动态数组只能通过指针形式实现。
int a[n][n];
}
int a[n][n]这个定义通不过编译,数组a的大小未确定,而且你的a是在函数f中定义的,是局部变量,在主函数main中不能用,要实现动态数组只能通过指针形式实现。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
要实现一个动态的数组,也即是数组的长度是可变的,你需要学习malloc和free两个函数,这个是在指针的时候应该会讲的。
追问
请帮我看看我这个程序有什么问题?
追答
问题就是数组不能那样实现动态
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的a[n][n]只是函数f(n)里面的变量,跳出这个函数,可就没这变量了,你应该将a[n][n]设置为全局变量
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
静态数组定义:a[2][3];必须这样,如果使用动态定义,得用malloc,错误就是int a[n][n],语法错误。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询