将从键盘输入的一对数由小到大排序输出,当输入一对相等数时,结束循环(C语言)

如题所述

不限数字位数?不区分整数,浮点数?

#include<stdio.h>
#include<malloc.h>
#include<string.h>
#define nsize 10 //输入的10进制数字初始长度(包含结束符号),及内存增长幅度
typedef struct num
{
    char *iNum;//数字的整数部分
    int iCnt;//整数部分位数
    char *fNum;//数字的小数部分
    int fCnt;//小数位数
}NUM;
void getNum10(NUM *num);//通过输入获取一个任意长度10进制数字
int compare(NUM *num1,NUM *num2);//比大小 如果num1>num2返回1,num1<num2返回0;num1==num2返回2
int main()
{
    int i;
    NUM nums[2],*maxNum,*minNum;
    while(1)
    {
        for(i=0;i<2;i++)
            getNum10(&nums[i]);

        if(compare(&nums[0],&nums[1])==1)//因为只有2个数比较,就不做冒泡排序了。数字多,你用排序写
        {
            maxNum=&nums[0];
            minNum=&nums[1];
        }
        else if(compare(&nums[0],&nums[1])==0)
        {
            maxNum=&nums[1];
            minNum=&nums[0];
        }
        else
        {
            printf("输入2数字相等,程序结束\n");
            break;
        }
        printf("最大数:%s%s%s\n",maxNum->iNum,maxNum->fCnt>0?".":"",maxNum->fCnt>0?maxNum->fNum:"");
        printf("最小数:%s%s%s\n\n",minNum->iNum,minNum->fCnt>0?".":"",minNum->fCnt>0?minNum->fNum:"");
    }

    return 0;
}
int compare(NUM *num1,NUM *num2)//比大小 如果num1>num2返回1,num1<num2返回0;num1==num2返回2
{
    int i,ir=-1,fr=-1,fcnt1,fcnt2,fcnt;
    if(num1->iCnt>num2->iCnt)//比较整数部分的位数
        ir=1;
    else if(num1->iCnt<num2->iCnt)
        ir=0;
    else//整数位数相同,从最高位依次比较
    {
        for(i=0;i<num1->iCnt;i++)
        {
            if(num1->iNum[i]>num2->iNum[i])
            {
                ir=1;
                break;
            }
            if(num1->iNum[i]<num2->iNum[i])
            {
                ir=0;
                break;
            }
        }
        if(ir==-1)
            ir=2;
    }
    fcnt1=num1->fCnt;
    fcnt2=num2->fCnt;
    if(fcnt1>fcnt2)
    {
        fcnt=fcnt2;//取小数位短的,做比较迭代次数
        fr=1;
    }
    else if(fcnt1<fcnt2)
    {
        fcnt=fcnt1;
        fr=0;
    }
    else
    {
        fcnt=fcnt2;
        fr=2;
    }
    for(i=0;i<fcnt;i++)
    {
        if(num1->fNum[i]>num2->fNum[i])
        {
            fr=1;
            break;
        }
        if(num1->fNum[i]<num2->fNum[i])
        {
            fr=0;
            break;
        }
    }

    if(ir!=2)
        return ir;
    else
        if(fr!=2)
            return fr;
        else
            return 2;

}
void getNum10(NUM *num)//输入任意长度10进制数字存储到结构num中
{
    char c,*n10=NULL,*n10Save=NULL,*inum=NULL,*fnum=NULL,fflag=1;//fflag=1时识别小数点,=0识别为多余的字符
    int size=nsize,count=0,icnt,fcnt;
    n10=(char *)malloc(sizeof(char)*size);
    printf("输入一个任意位数的数字,回车确认:\n");
    while(1)
    {
        scanf("%c",&c);
        if(c>='0' && c<='9')
            if(count<=size-2)
            {
                n10[count++]=c;
                n10[count]=0;
            }
            else
            {
                size=size+nsize;
                n10Save=(char *)malloc(sizeof(char)*size);
                n10Save[0]=0;
                strcpy(n10Save,n10);
                free(n10);
                n10=n10Save;
                n10[count++]=c;
                n10[count]=0;
            }
        else if(c=='.' && fflag==1)//开始记录小数部分
        {
            fflag=0;
            inum=n10;
            icnt=count;
            count=0;
            size=nsize;
            n10=(char *)malloc(sizeof(char)*size);
            continue;
        }
        else if(c=='\n' && fflag==1)//输入结束,只有整数部分
        {
            inum=n10;
            icnt=count;
            break;
        }
        else if(c=='\n' && fflag==0)//输入结束,有小数部分
        {
            fnum=n10;
            fcnt=count;
            break;
        }
        else
        {
            printf("输入错误:只能输入数字,且只能有1个小数点!!请重新输入\n");
            count=0;
            fflag=1;
            n10Save=NULL;
            free(n10);
            size=nsize;
            n10=(char *)malloc(sizeof(char)*size);
            fflush(stdin);// 清空剩余缓存
        }
    }
    num->iNum=inum;
    num->iCnt=icnt;
    if(fflag==0)//如果有小数部分
    {
        fnum=n10;
        fcnt=count;
        num->fNum=fnum;
        num->fCnt=fcnt;
    }
    else
    {

        num->fNum=NULL;
        num->fCnt=0;
    }
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-06-07
#include<stdio.h>
int main()
{
int a,b;
while(1)
{
printf("请输入俩数:\n");
scanf("%d%d",&a,&b);
if(a==b)
break;
if(a>b)
printf("排序后:%d %d\n",b,a);
else
printf("排序后:%d %d\n",a,b);
}
return 0;
} 希望能帮助到LZ,也希望采纳本回答被网友采纳
第2个回答  2013-06-07
要程序不?加我Q。我发给你!

将从键盘输入的一对数由小到大排序输出,当输入一对相等数时,结束循环...
if(compare(&nums[0],&nums[1])==1)\/\/因为只有2个数比较,就不做冒泡排序了。数字多,你用排序写 { maxNum=&nums[0]; minNum=&nums[1]; } else if(compare(&nums[0],&nums[

...输入一对数,由小到大排序输出.当输入一对相等数时结束循环,请选择...
选B,将while循环执行的条件设为a不等于b,当a等于b时就跳出循环

...由小到大排序输出,当输入一对相等数时结束循环。
include "stdio.h"void main(){ int a,b,t;scanf("%d %d",&a,&b);\/*输入两个数*\/ if(a>b)\/\/*比较大小*\/ { t=a;a=b;b=t;} if(a=b) goto x;\/*当两个数相等时,强制执X语句结束*\/ printf("%d %d",a,b);x: getch();} ...

从键盘输入一对数,由小到大排序输出当输入一对相的数时结束循环。c语言...
else printf("%d %d\\n",b,a); } }}

2013计算机二级C语言完整预测试题及答案一
C)输出的是3和0 D)是死循环 20.下面程序的功能是将从键盘输入的一对数,由小到大排序输出,当输入一对相等数时结束循环,在划线处应填入的语句是 #include main() { int a,b,t; scanf("%d%d",&a,&b); while() { f(a>b) { =a;a=b;b=t;} printf("%d,%d\\n",a,b); scanf("%d%d",&a...

求2011年3月c语言计算机二级考试题库下载 笔试加上机 和公共基础 我邮 ...
3.下面程序的功能是将从键盘输入的一对数,由小到大排序输出,当输入一对相等数时结束循环,请选择填空( B )。#include <stdio.h>main(){int a,b,t; scanf(“%d%d”,&a,&b); while( ___ ) {if(a>b) {t=a;a=b;b=t;} printf(“%d,%d\\n”,a,b); scanf("%d%d",&a,&b); }}A)...

想深入学习C#语言,有没有达人知道C#的好的资料呢?
1、从键盘输入一个正整数,按数字的相反顺序输出。2、从键盘上输入两个整数,由用户回答它们的和,差,积,商和取余运算结果,并统计出正确答案的个数。3、写一条for语句,计数条件为n从100~200,步长为2;然后再用while语句实现同样的循环。4、编写一段程序,运行时向用户提问“你考了多少分?(0~100)”,接受输入...

c语言考试。问数组,常见的数组排序算法有那几种?选择一个描述过程。
常用冒泡排序的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面(数组由小到大排序)。即首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后,此时第一趟结束,在最后的数必...

C语言中的loop是什么意思
只是是一个c语言语句行的标号,而不是循环语句。就像在上面 c 语言程序中的“loop6”和“loop10”就是为了配合 goto (跳转)语句而给某行程序起的名字(标号)。例如下图:它的意思是:当 q 的值等于 14时,跳转到标号为 loop6 的那条程序语句继续执行, 也就是打印出 "Hello world"。

c语言中,如何实现输入一个整数,输出一个偶数或者奇数?
在C语言中,你可以通过判断输入的整数除以2的余数来实现这个功能。如果余数为0,那么这个数就是偶数;否则,它就是奇数。下面是一个简单的C语言程序实现这个功能:在这个程序中,我们首先使用scanf函数从用户那里获取一个整数。然后,我们使用模运算符(%)来判断这个数是偶数还是奇数。如果num % 2等于0...

相似回答