| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1729 人关注过本帖
标题:C语言初学者的编程问题,希望能在论坛得到解答
只看楼主 加入收藏
a814513604
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2017-8-14
结帖率:100%
收藏
 问题点数:0 回复次数:8 
C语言初学者的编程问题,希望能在论坛得到解答
题目是判断一个不超过5位的正整数的位数,并且把各个位上的数输出。这是C程序教材上的题,虽然有答案,但是还是想知道自己的程序哪里有问题,恳请路过的花两分钟解答下,不胜感激

#include <stdio.h>
#include <math.h>
int main()
{
    double b;
    int a,i,j,t,d,p;
    scanf("%d",&a);
    d=0;
    p=1;
    if(a>99999)
        printf("error\n");       //判断是否小于5位数
    else
        for(i=1;i<=5;i++)
        {if(a/(pow(10,i))<1)
        break;}                  //循环除10知道小于1,循环次数i为位数
    printf("位数为%d\n",i);
    b=a;                         //由于后面要将a除10为小数,所以换个变量类型
    for(t=i-1;t>=0;t--)          //t为目前数b的最高位
    {b=b/(pow(10,t));            //除10的次幂将其最高位变为个位
     for(j=1;j<=9;j++)           //将其不断减1,j为减1的次数,直到b小于1,此时j即为其最高位上的数
     {b=b-1;
     if(b<1&&b>0)                //由于存在0的情况所以分两种情况讨论,此处为最高位不为0的情况
         printf("第%d位数为%d\n",i,j);
     else
         if(b<0)                 //此处为最高位为0的情况
         {b=b+1;printf("第%d位数为%d\n",i,d);}             //由于此时数为负数,要将其个位消除,所以加1
     }
     b=b*(pow(10,t));            //经过上述循环最高位已减完,将其由小数还原为出去最高位的初始数,然后进行下一个大循环求下一位数,即为此时b的最高位
    }
    return 0;
}

[此贴子已经被作者于2017-8-14 14:44编辑过]

搜索更多相关主题的帖子: 位数 printf for 循环 最高位 
2017-08-14 13:15
a814513604
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2017-8-14
收藏
得分:0 
求位数时,程序里是想当数a除了10的i次方才小余1,那么它就是有i位的数
2017-08-14 13:23
a814513604
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2017-8-14
收藏
得分:0 
求每一位置上的数时,是从高位向低位求的,先从最高位第i位开始,将第i位变为个位,然后将其个位循环减1直到它小于1,然后输出循环减1的次数就是它第i位上的数
2017-08-14 13:27
a814513604
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2017-8-14
收藏
得分:0 
为0的特殊情况也考虑了
2017-08-14 13:28
a814513604
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2017-8-14
收藏
得分:0 
真心求教,希望有人解答,只想弄清楚错在哪,谢谢
2017-08-14 13:29
a814513604
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2017-8-14
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册
运行结果
2017-08-14 13:32
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
是不是这样子:
图片附件: 游客没有浏览图片的权限,请 登录注册

#include <stdio.h>
int main()
{
    int a, i, j;
    char c[20];
    scanf("%d",&a);
    if (a<0 || a>99999)
    {
        printf("error\n");
        return 0;
    }
    if (a == 0)
    {
        printf("位数为1\n第1位数为0\n");
        return 0;
    }
    for (i=0; a; a/=10,++i)
        c[i] = a%10;
    printf("位数为%d\n",i);
    for (j=i-1; j>=0; --j)
       printf("第%d位数为%d\n", i-j, c[j]);
    return 0;
}
2017-08-14 14:49
a814513604
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2017-8-14
收藏
得分:0 
回复 7楼 吹水佬
谢谢您的解答,因为初学C语言,我想知道自己的程序错在哪这样才能学的好,如果有时间请解答下,谢谢
2017-08-14 15:02
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
不知道你的设计思路  所以也无法更改你的代码  

只不过 你的设计绝对有些问题  用了那么多 变量 居然还涉及到了负数 简直不可思议

程序代码:
#include <stdio.h>

int main()
{
    int a,num=0;
    int s[6]={0};
    scanf("%d",&a);
    if(a==0)
    {
        num=1;
        s[0]=0;
    }
    while(a>0)
    {
        s[++num]=a%10;
        a/=10;
    }
    printf("您所输入的是一个%d位数字。\n",num);
    for(int i=0;i<num;i++)
    {
        printf("第%d位数字是%d \n",i+1,s[num-i]);
    }
    return 0;
}

DO IT YOURSELF !
2017-08-14 15:18
快速回复:C语言初学者的编程问题,希望能在论坛得到解答
数据加载中...
 
   



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

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