学习型 ASP/PHP/ASP.NET 主机 30元/年全能 ASP/PHP/ASP.NET 主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付
 32 1234
发新话题
打印

求解,高手进

求解,高手进

题目:
1.输入一个小于8位的数
2.倒序
3.每一位数加5(大于10的除10取余数)
4.首尾互换
5.输出所得数据

例如:输入2008
      倒序:8002
       每一位数加5(大于10的除10取余数):3557
       首尾互换:7553
        输出:7553

高手写出c代码啊。谢谢拉

TOP

不会
qq:304742297

TOP

复制内容到剪贴板
代码:
/*********************************************************************  ]

            题目:
            1.输入一个小于8位的数
            2.倒序
            3.每一位数加5(大于10的除10取余数)
            4.首尾互换
            5.输出所得数据

            例如:输入2008
            倒序:8002
            每一位数加5(大于10的除10取余数):3557
            首尾互换:7553
            输出:7553

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

        bccn人才济济,这点小问题高手们是不屑于于作的,让偶小小菜鸟
    抛砖引玉,希望能再出现高深的代码。

        程序写到现在,出现个问题,想了很久,想不出来对策:数组越界问题。
    我试过用EOF以及“*”结束,可都出现问题,现在输入多于8个数字,也会运
    行。请哪位指点迷津,谢谢。

        由于是菜鸟,所以算法稀松平常,大家担待则个。

*********************************************************************/
#include<stdio.h>
#include<string.h>
void daoxu(char *p,int n)  /*  倒序函数  */
{
        char *q;
        char ch;
        q=p+n-1;
        while(q>p)
        {
                ch=*p;
                *p=*q;
                *q=ch;
                p++;
                q--;
        }
}
void jia5(char *p,int n)  /* 加5函数 */
{
        int i;
        for(i=0;i<n;++i)
        {
                *(p+i)=(*(p+i)+5);
                if(*(p+i)>=58)    /* 如果ascII码大于数字10*/
                        *(p+i)-=10;  /* 当前值减去10 */
        }
}
void jiaohuan(char *p,int n)  /* 首尾交换函数 */
{      
        char ch;
        ch=*p;
        *p=*(p+n-1);
        *(p+n-1)=ch;
}
int main(void) /*********主函数********/
{
        char a[8];
        int n;
        printf("请输入待转换的数字:\n");
        gets(a);
        n=strlen(a);
        daoxu(a,n);
        printf("倒序:%s\n",a);
        jia5(a,n);
        printf("每一位加5:%s\n",a);
        jiaohuan(a,n);
        printf("首尾交换:%s\n",a);


        getch();
}

TOP

引用:
以下是引用 广陵绝唱 在 2008-5-17 23:22 的发言:

程序写到现在,出现个问题,想了很久,想不出来对策:数组越界问题。

            ...
可以读取完数字后,在下一位做个标记,
每个函数操作以0至标记位置为操作对象
“视频教程网”免费提供教学资源
C不限制你的自由!
条件是自己承担滥用自由的恶果!

TOP

#include<stdio.h>
#include<string.h>
main()
{
    char n[8];
    int m[8],h[8];
    int i,j,k,s;
    printf("请输入一个小于8位的整数:\n");
    scanf("%s",&n);
    k=strlen(n);
    for(i=0,j=k-1;i<k;i++,j--)
    {
        m[i]=n[i]-48;
        h[j]=m[i];
    }
    for(i=0;i<k;i++)
        h[i]=(h[i]+5)%10;
    s=h[0];
    h[0]=h[k-1];
    h[k-1]=s;
    for(i=0;i<k;i++)
        printf("%d",h[i]);
    
    printf("\n");
}

TOP

复制内容到剪贴板
代码:
/*********************************************************************  ]

            题目:
            1.输入一个小于8位的数
            2.倒序
            3.每一位数加5(大于10的除10取余数)
            4.首尾互换
            5.输出所得数据

            例如:输入2008
            倒序:8002
            每一位数加5(大于10的除10取余数):3557
            首尾互换:7553
            输出:7553

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

        感谢4#朋友的指点,程序已经更改过来。谢谢了。

*********************************************************************/
#include<stdio.h>
#include<string.h>
#define X {char c;c=getchar()!='\n';}
void daoxu(char *p,int n)  /*  倒序函数  */
{
        char *q;
        char ch;
        q=p+n-1;
        while(q>p)
        {
                ch=*p;
                *p=*q;
                *q=ch;
                p++;
                q--;
        }
}
void jia5(char *p,int n)  /* 加5函数 */
{
        int i;
        for(i=0;i<n;++i)
        {
                *(p+i)=(*(p+i)+5);
                if(*(p+i)>=58)    /* 如果ascII码大于数字10*/
                        *(p+i)-=10;  /* 当前值减去10 */
        }
}
void jiaohuan(char *p,int n)  /* 首尾交换函数 */
{      
        char ch;
        ch=*p;
        *p=*(p+n-1);
        *(p+n-1)=ch;
}
int main(void) /*********主函数********/
{
        char a[10];
        int n;
        printf("请输入待转换的数字,程序将数字限定为前8位有效:\n");
        gets(a);
        n=strlen(a);
        if(n>8)    /* 限定数字位数 */
        {
                n=8;
                a[8]='\0';
        }
        daoxu(a,n);
        printf("倒序:%s\n",a);
        jia5(a,n);
        printf("每一位加5:%s\n",a);
        jiaohuan(a,n);
        printf("首尾交换:%s\n",a);


        getch();
}

TOP


不会写
那个首尾的不知道怎么换
想用指针又用不来

TOP

非常感谢大家的热心啊
看来我得好好把c语言学好了

强烈要求斑竹给热心的网友奖励

TOP

引用:
以下是引用 fambit025 在 2008-5-18 00:40 的发言:

for(i=0,j=k-1;i<k;i++,j--)
    {
        m[i]=n[i]-48;
        h[j]=m[i];
    }
m[i]=n[i]-48;
h[j]=m[i];
这两句怎么解释啊?看不明白?
qq:304742297

TOP

TOP

 32 1234
发新话题