c语言编程 输入N个数据 求复合条件的数据个数 要求输入数据后 显示大于50的有多少个 小于50的有多少个

还要显示每个数据所属哪个范围(即属于大于50范围还是小于50的范围) 这点难倒我了 课上没教。。
我所谓的是要连续输入N个数 不能提前设定有多少个数据
比如输入3个数 77 80 30
if(data>50)
prinf("The number of data larger than 50:")
同理小于50
但是这之后要怎么显示77 80 30都属于哪些范围?
我希望是可以prinf("Data consider to be larger than 50:") /*即大于50的数据有哪些*/

第1个回答  2013-02-20
要想不提前设定有多少个数据当然会难住楼主,因为要真正做到这样得会动态分配内存。
最简单的解决办法就是弄两个非常大的数组,一个用来存储大于50的数,一个用来存储小于50的数,最后输出两个数组中的数。例如:int iLessThan50[1000],iMoreThan50[1000]。
否则就得会动态分配内存。
第2个回答  2013-02-20
这个几乎符合楼主的要求哦!虽然迟了一点,但还是给楼主看一下,有一个小技巧在里面,利用了scanf函数的返回值
#include<stdio.h>
int main()
{
int i,j,k,x,y,goon;
int a[150],ii[150],jj[150];
for (x=0,goon=1;goon==1;x++) {
goon=scanf("%d",&a[x]);
}
x--;
for (i=0,j=0,k=0,y=0;y<x;y++) {
if (a[y]<50) {
ii[i]=y;
i++;
}else{
if (a[y]>50) {
jj[j]=y;
j++;
}else{
k++;
}
}
}
printf("\n There are %d numbers smaller than 50. They are :\n",i);
for (y=0;y<i;y++) {
printf(" %d ",a[ii[y]]);
}
printf("\n There are %d numbers larger than 50. They are:\n",j);
for (y=0;y<j;y++) {
printf(" %d ",a[jj[y]]);
}
printf("\n %d numbers equals 50",k);
//getch();//如果窗口不停留把这句补上
return 0;
}

150个数字以内的任意个都没问题
输入方式:如 78 50 42 13 68; 最后记得加一个非数字符号即可,超过150个的自己修改
第3个回答  2013-02-20
#include <stdio.h>
int main(void){ int nDayu50 = 0, nXiaoyu50 = 0, n = 0;
while (1)
{
printf("输入一个数:\n");
scanf("%d",&n);
if (n == 0)
break;
else if (n < 50)
nXiaoyu50 ++;
else if (n >= 50)
nDayu50 ++;
}
printf("比50大的有%d个,比50小的有%d个\n",nDayu50,nXiaoyu50);
return 0;
}

这是个比较简单的方法,局限在与不能判断0,如果你要做变长的话就比较复杂了追问

额 我试了下 但是只能一直提示你输入数字 却没把他们分类或显示属于哪个范围

追答

你输入0的时候就跳出了,因为你需要判断的数量不变,所以必须给程序定制一个跳出的条件。我这里给你定的是0。如果你输入0就跳出了。

追问

但还是没有把每个数据分类 求出大于小于分别有多少后 需要将每个数据归类在大于或小于名下

即应该有一项是大于50的数据有哪些 小于50的数据有哪些
谢谢了!

追答

#include
int main(void){ int nDayu50 = 0, nXiaoyu50 = 0, n = 0, i = 0;
int arrDayu50[1000] = {0};
int arrXiaoyu50[1000] = {0};
while (1)
{
printf("输入一个数:\n");
scanf("%d",&n);
if (n == 0)
break;
else if (n = 50)
arrDayu50[nDayu50++] = n;
}
printf("小于50的数据有:");
for(i = 0; i < nXiaoyu50; i++)
{
printf("%d\t",arrXiaoyu50[i]);
}
printf("\n");
printf("大于50的数据有:");
for(i = 0; i < nDayu50; i++)
{
printf("%d\t",arrDayu50[i]);
}
printf("\n");
printf("比50大的有%d个,比50小的有%d个\n",nDayu50,nXiaoyu50);
return 0;
}

同样也是输入0跳出程序,把大于50的数和小雨50的数分表存到2个数组里面,然后打印出来就OK了。

本回答被提问者采纳
第4个回答  2013-02-20
循环接收数据,每接收一个就判断在什么范围,输出所在范围,相应计数变量自加1。
第5个回答  2013-02-20
设置整数型变量int a;a=0;输入整数b;int c=50;d==b-c; if(d>a)则 b>50,反之亦然。
相似回答