| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 926 人关注过本帖
标题:怎样减少定义变量的个数?
只看楼主 加入收藏
L502
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2015-2-6
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:15 
怎样减少定义变量的个数?
从键盘输入一个四位整数,首先分离出该正整数中的每一位数字,并按逆序输出各位数字;然后用分离出的每位数字组成一个最大四位数和一个最小四位数,并显示输出。例如,若输入的四位正整数为3157,按逆序输出分离出的各位数字为7   5   1   3;组成的最大数为7531,最小数为1357。

下面是我写的程序,但是变量太多了,该怎么改呢?
#include"stdio.h"
void main()
{
    int a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,x;
    printf("请输入一个四位整数\n");
    scanf("%d",&x);
    {
    a=x/1000;
    b=x%1000;
    c=b/100;
    d=b%100;
    e=d/10;
    f=d%10;
    g=a;
    a=f;
    h=c;
    c=e;
    e=h;
    f=g;
    }
    if(a>c)
    {
        i=a;
        j=c;
    }
    else
    {
        i=c;
        j=a;
    }
    if(e>f)
    {
        k=e;
        l=f;
    }
    else
    {
        k=f;
        l=e;
    }
    if(i>k)
    {
        m=i;
        n=k;
    }
    else
    {
        m=k;
        n=i;
    }
    if(j>l)
    {
        o=j;
        p=l;
    }
    else
    {
        o=l;
        p=j;
    }
    q=m*1000+n*100+o*10+p;
    printf("各位逆顺序输出结果:%d,%d,%d,%d\n",a,c,e,f);
    printf("四个数字组成的最大四位数为%d\n",q);
}

搜索更多相关主题的帖子: include 正整数 键盘 
2015-02-06 11:51
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:3 
如果一系列变量有固定的规律 当然应该用数组了
2015-02-06 12:11
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:3 
这种类型的好玩些,代码如下:
程序代码:
#include<stdio.h>
int ipow(int n,int p)
{//算整数幂,不做任何错误类型判断,做不了负数
    int y=1,i;
    for(i=0;i<p;i++)y*=n;
    return y;
}
void main()
{
    int i,j,x,y;
    printf("请输入一个四位整数\n");
    scanf("%d",&x);
    for(i=x,j=0;i>0;i=i/10)j++;
    for(i=x,y=0;i>0;i/=10)
    {
        j--;
        y=y+i%10*ipow(10,j);
    }
    printf("原数据:%d  变换后=%d\n",x,y);
}
请输入一个四位整数
12345
原数据:12345  变换后=54321

能编个毛线衣吗?
2015-02-06 13:11
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9008
专家分:53957
注 册:2011-1-18
收藏
得分:3 
程序代码:
#include <stdio.h>

#define SORT(a,b) ( (a)>(b) ? ((a)^=(b),(b)^=(a),(a)^=(b)) : 0 )

int main()
{
    unsigned n;
    printf( "请输入一个四位整数: " );
    scanf( "%u", &n );

    {
        unsigned a = n/1000%10;
        unsigned b = n/100%10;
        unsigned c = n/10%10;
        unsigned d = n/1%10;

        printf( "reverse = %u\n", a*1+b*10+c*100+d*1000 );

        SORT( a, b );
        SORT( c, d );
        SORT( a, c );
        SORT( b, d );
        SORT( b, c );

        printf( "maximum = %u\n", a*1+b*10+c*100+d*1000 );
        printf( "minimum = %u\n", a*1000+b*100+c*10+d*1 );
    }

    return 0;
}
2015-02-06 13:17
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
回复 3楼 wmf2014
错了,不是倒换啊

能编个毛线衣吗?
2015-02-06 13:18
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
这样做就对了
程序代码:
#include<stdio.h>
int ipow(int n,int p)
{//算整数幂,不做任何错误类型判断,做不了负数
    int y=1,i;
    for(i=0;i<p;i++)y*=n;
    return y;
}
void sort(int *p,bool f)
{//冒泡排序,true从小到大,false从大到小
    int i,j,t;
    for(i=0;p[i]>=0;i++)
    {
        for(j=i+1;p[j]>=0;j++)
        {
            t=p[i];
            if(f&&p[i]>p[j]&&p[j]>=0){p[i]=p[j];p[j]=t;}
            if(!f&&p[i]<p[j]&&p[j]>=0){p[i]=p[j];p[j]=t;}
        }
    }
}
void main()
{
    int i,j,x,max,min,a[10];
    for(i=0;i<10;i++)a[i]=-1;
    printf("请输入一个四位整数\n");
    scanf("%d",&x);
    for(i=x,j=0;i>0;i=i/10){a[j]=i%10;j++;}
    sort(a,true);
    for(i=0,max=0;a[i]>=0;i++)max=max+a[i]*ipow(10,i);
    sort(a,false);
    for(i=0,min=0;a[i]>=0;i++)min=min+a[i]*ipow(10,i);
    printf("原数据:%d  最大数=%d  最小数=%d\n",x,max,min);
}
请输入一个四位整数
53758293
原数据:53758293  最大数=98755332  最小数=23355789


[ 本帖最后由 wmf2014 于 2015-2-6 13:58 编辑 ]

能编个毛线衣吗?
2015-02-06 13:50
young
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:223
专家分:160
注 册:2004-9-5
收藏
得分:3 
可以利用string操作函数

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define MAX_LEN        8
char *SortArray(char *myArray)
{
    int len = strlen(myArray);
    int i, j, temp;

    for(i=0; i<len-1; i++)
    {
        for(j=0; j<len-1-i; j++)
        {
            if(myArray[j] < myArray[j+1])
            {
                temp=myArray[j+1];
                myArray[j+1]=myArray[j];
                myArray[j]=temp;
            }
        }
    }

    return myArray;
}

void main(void)
{
    char array[MAX_LEN];
    int x;

    printf("请输入一个四位整数\n");
    scanf("%d",&x);
    memset(array, 0, sizeof(array));
    itoa(x, array, 10);        // 整形转化为字符串
#if 1
    printf("resversed %s \n", strrev(array));    // 字符串倒转
#else
    printf("resversed %d \n", atoi(strrev(array)));    // 字符串倒转
#endif
    printf("Sort %s \n", SortArray(array));        // 字符串排序
}

如果你爱C语言,请你爱指针; 如果你爱指针,请你爱指针的指针;
2015-02-06 14:46
lovegh
Rank: 5Rank: 5
来 自:图灵学院
等 级:职业侠客
威 望:3
帖 子:117
专家分:311
注 册:2015-1-23
收藏
得分:3 

#include <string.h>
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#define NUM 4
int cmp(const void * a, const void *b);
int main()
{
    //  输入
    char ch;
    char num[5] = {0};
    for (int i = 0; i < NUM;) {
        
        ch = getchar();
        isdigit(ch) == 0? ch : (num[i++] = ch);
        
    }
   
    //  调用快排算法进行排序
    qsort(num, NUM, sizeof(char), cmp);
   
    //  输出
    printf("Min = %s\n", num);
    printf("Max = ");
    for (int i = NUM - 1; i >= 0; i--) {
        putchar(num[i]);
    }
    printf("\n");
    return 0;
}

int cmp(const void * a, const void *b) {
   
    return *(char*)a - *(char*)b;
   
}

别老是写代码,要多陪妹子,多了解老婆大人,血淋淋的教训。
2015-02-06 15:39
lovegh
Rank: 5Rank: 5
来 自:图灵学院
等 级:职业侠客
威 望:3
帖 子:117
专家分:311
注 册:2015-1-23
收藏
得分:0 
贴成引用了,重新贴下
程序代码:
#include <string.h>
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#define NUM 4
int cmp(const void * a, const void *b);
int main()
{
    //  输入
    char ch;
    char num[5] = {0};
    for (int i = 0; i < NUM;) {
        
        ch = getchar();
        isdigit(ch) == 0? ch : (num[i++] = ch);
        
    }
    
    //  调用快排算法进行排序
    qsort(num, NUM, sizeof(char), cmp);
    
    //  输出
    printf("Min = %s\n", num);
    printf("Max = ");
    for (int i = NUM - 1; i >= 0; i--) {
        putchar(num[i]);
    }
    printf("\n");
    return 0;
}

int cmp(const void * a, const void *b) {
    
    return *(char*)a - *(char*)b;
    
}

别老是写代码,要多陪妹子,多了解老婆大人,血淋淋的教训。
2015-02-06 15:40
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
回复 9楼 lovegh
你好,你声明的cmp是有参数的,为什么在快排里使用可不需要参数?他返回的是什么?我单独试验"int i;i=cmp;",编译出错,还望不吝赐教!

能编个毛线衣吗?
2015-02-06 16:14
快速回复:怎样减少定义变量的个数?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019473 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved