C语言里面 数组都要事先定义长度吗 ?
如果我想随便输入一个数“n”然后让这个n就等于这个一维数组的长度呢?第一行中有个正整数n(n<=100),表示班级中参加考试的同学人数。第二行中包含n个成绩分数,都用非负...
如果我想 随便输入一个数“n” 然后 让 这个n 就等于这个 一维数组的长度呢?
第一行中有个正整数n(n<=100),表示班级中参加考试的同学人数。
第二行中包含n个成绩分数,都用非负整数表示,并且数据之间用空格隔开。,成绩输出的顺序就是学生学号的从小到大的顺序,并且规定学生的学号都是从第1号开始的,然后是2号、3号、4号,......,依次顺序编号到n。
Output
第一行输出最高分。
第2行请输出取得最高分的同学学号,如果有多个同学,请用空格隔开。 展开
第一行中有个正整数n(n<=100),表示班级中参加考试的同学人数。
第二行中包含n个成绩分数,都用非负整数表示,并且数据之间用空格隔开。,成绩输出的顺序就是学生学号的从小到大的顺序,并且规定学生的学号都是从第1号开始的,然后是2号、3号、4号,......,依次顺序编号到n。
Output
第一行输出最高分。
第2行请输出取得最高分的同学学号,如果有多个同学,请用空格隔开。 展开
8个回答
展开全部
在数组一章中,曾介绍过数组的长度是预先定义好的, 在整个程序中固定不变。C语言中不允许动态数组类型。例如: int n;scanf("%d",&n);int a[n]; 用变量表示长度,想对数组的大小作动态说明, 这是错误的。但是在实际的编程中,往往会发生这种情况, 即所需的内存空间取决于实际输入的数据,而无法预先确定。对于这种问题, 用数组的办法很难解决。为了解决上述问题,C语言提供了一些内存管理函数,这些内存管理函数可以按需要动态地分配内存空间, 也可把不再使用的空间回收待用,为有效地利用内存资源提供了手段。 其它文献中所提到的"动态数组",指的就是利用内存的申请和释放函数,在程序的运行过程中,根据实际需要指定数组的大小.其本质是一个指向数组的指针变量.常用的内存管理函数有以下三个:
1.分配内存空间函数malloc
2.分配内存空间函数 calloc
3.释放内存空间函数free
1.分配内存空间函数malloc
2.分配内存空间函数 calloc
3.释放内存空间函数free
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
数组必须是固定长度,但是可以通过动态内存申请来实现你的要求。
unsigned int *pAllScores;
main()
{
int n = 0;
//输入n请自行完成;
if(n > 0)
{
pAllScores = (unsigned int*)malloc(sizeof(unsigned int) * n);//申请内存
memset(pAllScores, 0, sizeof(unsigned int) * n);//内存清零
//此时,pAllScores就可以当做一个长度为n的整形数组使用了。比如pAllScores[0]表示学号为0的学生的成绩。但是在使用完毕后,要注意释放该动态内存。
//假设此处为输入成绩,保存到pAllScores,并打印输出。在此之后须执行如下操作:
free(pAllScores);
}
}
unsigned int *pAllScores;
main()
{
int n = 0;
//输入n请自行完成;
if(n > 0)
{
pAllScores = (unsigned int*)malloc(sizeof(unsigned int) * n);//申请内存
memset(pAllScores, 0, sizeof(unsigned int) * n);//内存清零
//此时,pAllScores就可以当做一个长度为n的整形数组使用了。比如pAllScores[0]表示学号为0的学生的成绩。但是在使用完毕后,要注意释放该动态内存。
//假设此处为输入成绩,保存到pAllScores,并打印输出。在此之后须执行如下操作:
free(pAllScores);
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是的,而且要定义数组类型。比如整数数组就是: int a[k]; 其中a是数组名,k是数组长度
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
C语言里定义数组必须确定其长度,如:int arr[n];其中n必须是一个确定的正整数。如果想实现动态数组效果,那就利用链表吧,或者使用数组转值的方法。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询