刚刚学c 经常遇到这样的问题 请输入n个数据 然后排序 挑选啊之类的 我就不明白 这n个数据怎么输入 怎么控制它的长度 比如说 输入学生成绩 a班10个人 就输入10个 换做b班12个人 就要输入12个 怎么弄?
编写函数fun(int n),其功能是可以输入n个学生的成绩,统计出各个分数段的人数,返回值为这些人数的平均分
拿这个问题举例子
这个n 怎么控制 可能是5、6、7 、8 、9 、10000等 好多好多个学生 我特别头疼这种类型的题 求大神笼罩啊
C语言怎么输入n个数据 然后进行处理
答案:4 悬赏:40
解决时间 2021-03-10 05:27
- 提问者网友:生亦何欢
- 2021-03-09 14:58
最佳答案
- 二级知识专家网友:抱不住太阳的深海
- 2021-03-09 16:16
你知道数组分配是固定的吧? 那你学过指针么.还有内存分配的命令不晓得你学过没.
如果是我 我写个给你看下.仅供参考
#include <stdio.h>
#include <malloc.h>
//数组排序
void _ArraySort(int * _arr,int len);
int main()
{
int len; //存放数组长度
int * arr; //指向新空间
int i;
len=0;
arr=NULL;
//初始化数据
do
{
printf("输入要排序的人数(len>0): ");
scanf("%d",&len);
}while(len<1);
arr=(int*)malloc(sizeof(int)*len); //分配 len * sizeof(int) 的大小 这就成了动态数组了
for(i=0;i<len;i++)
{
printf("第 %2d 个学生成绩: ",i+1);
scanf("%d",arr+i);
}
_ArraySort(arr,len); //排序
for(i=0;i<len;i++)
{
printf("编号: %2d 成绩: %3d\n",i+1,arr[i]);
}
free(arr); //释放内存
//因为申请了就要释放避免驻留虽然程序结束系统会自动回收但还是要养成申请用完就释放的好习惯
//Over
return 0;
}
//数组排序
void _ArraySort(int * _arr,int len)
{
int i,l,temp;
for(i=0;i<len;i++)
{
for(l=i+1;l<len;l++)
{
if(_arr[l]<_arr[i])
{
temp=_arr[l];
_arr[l]=_arr[i];
_arr[i]=temp;
}
}
}
return;
}
补充下 这是动态方式 也有固定 也就是一开始分配 1000个数据 这样数据够大吧?不过.这样会很浪费空间我好像还记得栈内存 2M最大 不清楚.反而堆还很大.至少是看剩余可用内存大小.
或者如果是C++ 就直接new (malloc)和 delete (free) 反正做法都差不多 而且我这个不是很好.或者用链表结构 输入多少就分配多少 而且是可以判断是否退出 而我这个是一开始要固定大小 后面如果输入时候想改变那就不行了.不过其实也可以看你怎么写了.
如果是我 我写个给你看下.仅供参考
#include <stdio.h>
#include <malloc.h>
//数组排序
void _ArraySort(int * _arr,int len);
int main()
{
int len; //存放数组长度
int * arr; //指向新空间
int i;
len=0;
arr=NULL;
//初始化数据
do
{
printf("输入要排序的人数(len>0): ");
scanf("%d",&len);
}while(len<1);
arr=(int*)malloc(sizeof(int)*len); //分配 len * sizeof(int) 的大小 这就成了动态数组了
for(i=0;i<len;i++)
{
printf("第 %2d 个学生成绩: ",i+1);
scanf("%d",arr+i);
}
_ArraySort(arr,len); //排序
for(i=0;i<len;i++)
{
printf("编号: %2d 成绩: %3d\n",i+1,arr[i]);
}
free(arr); //释放内存
//因为申请了就要释放避免驻留虽然程序结束系统会自动回收但还是要养成申请用完就释放的好习惯
//Over
return 0;
}
//数组排序
void _ArraySort(int * _arr,int len)
{
int i,l,temp;
for(i=0;i<len;i++)
{
for(l=i+1;l<len;l++)
{
if(_arr[l]<_arr[i])
{
temp=_arr[l];
_arr[l]=_arr[i];
_arr[i]=temp;
}
}
}
return;
}
补充下 这是动态方式 也有固定 也就是一开始分配 1000个数据 这样数据够大吧?不过.这样会很浪费空间我好像还记得栈内存 2M最大 不清楚.反而堆还很大.至少是看剩余可用内存大小.
或者如果是C++ 就直接new (malloc)和 delete (free) 反正做法都差不多 而且我这个不是很好.或者用链表结构 输入多少就分配多少 而且是可以判断是否退出 而我这个是一开始要固定大小 后面如果输入时候想改变那就不行了.不过其实也可以看你怎么写了.
全部回答
- 1楼网友:安稳不如野
- 2021-03-09 19:07
int a[10];
int i;
puts("enter 10 numbers");
for(i=0;i<10;i++)
scanf("%d", &a[i]);
- 2楼网友:最后战士
- 2021-03-09 18:29
先读一个n 然后 再读 数据
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",a[i]);
- 3楼网友:狙击你的心
- 2021-03-09 17:39
#include <stdio.h> #include <stdlib.h> int main() { int n ; printf("您要输入几个啊?:"); scanf("%d",&n); double* t = (double*)malloc( n*sizeof(double) ); for( int i=0;i<n; ++i ) { printf("请输入第%d个:",i+1); scanf("%lf",t+i); } while( n-- ) { printf("%lf ",*(t+n)); } free(t); } 您要输入几个啊?:5 请输入第1个:23 请输入第2个:4.5 请输入第3个:6.7 请输入第4个:-23.5 请输入第5个:9.7 9.700000 -23.500000 6.700000 4.500000 23.000000 请按任意键继续. . . 补充:我真的服了,你不知道把所有double都替换成int???
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯