- //比较复杂的数组接收方法,然后从大到小排序。VC环境
- #include <stdio.h>
- #include <stdlib.h>
- int over=0;//用于读取数,如果读取结束,为1
- int main(void)
- {
- //这一部分,接收数据,判断数据个数
- int getvalue(void); //函数原型。返回从缓冲区取得的数,如果输入结束,返回42949672
- int k; //子循环临时变量
- int a[100]; //建立100个数空间,可增缩范围
- int num; //输入的个数
- int ifend = 1; //逻辑变量,控制while语句
- int i=0; //通用计次临时变量
- int value; //元素值储存地
- printf("请输入任意数的序列,空格隔开:\\n");
- while (ifend)
- {
- value = getvalue();
- if(value == 42949672)
- ifend = 0;
- else
- {
- a[i] = value;
- i++;
- }
- } //结束后,i为数组成员个数
- num = i;
- //开始排序
- for (i=0; i < num-1; i++) //循环8次,第n次把第n位以后的数的最大值放第n个
- {
- for(k=i+1; k<num; k++) //用k表示后面的各位,递增。
- {
- if (a[i] < a[k]) //选大数,放第n位
- {
- a[i] = a[i] + a[k];
- a[k] = a[i] - a[k];
- a[i] = a[i] - a[k];//以上三步,把较大值放到a[i]
- }
- }
- }
- //输出新数组
- printf("排序后:\\n");
- for (i=0; i<num; i++)
- {
- printf("%d ",a[i]);
- }
- printf("\\n");
- return 0;
- }
- int getvalue(void)
- {
- char a[16]={0}; //数字接收临时数组
- int k;
- int value=0;
- char temp;
- int last = 1;
- int ifend = 1;
- int i = 0; //用来定位数组
- if (over == 1)
- {
- ifend = 0;
- return (42949672);
- }
- temp = getchar();
- while(ifend)
- {
- if (temp == 32)//接收结束,把临时数组转化成数字
- {
- value = atoi(a);
- ifend = 0;
- }
- else if (temp == '\\n')//缓冲区已无数值
- {
- value = atoi(a);
- over = 1;
- ifend = 0;
- }
- else //输入有效数值
- {
- if (temp == '-')
- {
- last = -1;
- }
- else
- {
- a[i] = temp;
- i++;
- }
- temp = getchar();
- }
- }
- value*=last;
- return (value);
- }
- //本程序由Cenby林安成编写
- //欢迎加QQ827418637交流、指导
- //该片段来自于http://www.codesnippet.cn/detail/2511201514075.html
来源: http://www.codesnippet.cn/detail/2511201514075.html