| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1311 人关注过本帖
标题:【菜鸟自学】00002-----{循环控制}------(问题已在11楼解决)
只看楼主 加入收藏
s158298261
Rank: 1
来 自:郑州
等 级:新手上路
帖 子:13
专家分:0
注 册:2009-7-28
结帖率:0
收藏
 问题点数:0 回复次数:12 
【菜鸟自学】00002-----{循环控制}------(问题已在11楼解决)
编译环境:vc++6.0

程序目的:输入一个最多五位的数字。1.求共几位。2.分别打印每一位。3.逆顺序打印,如123,打印321.

错误程序:
-------------------------------------------
#include "stdio.h"
main()
{
    long a;int h,i,w[5];h=5;
    printf ("请输入一个五位数:");
    scanf ("%ld",&a);
    w[5]=(int)(a/10000);if (w[5]<=0) h-=1;a=a-w[5]*10000;
    w[4]=(int)(a/1000);if (w[4]<=0) h-=1;a=a-w[4]*1000;
    w[3]=(int)(a/100);if (w[3]<=0) h-=1;a=a-w[3]*100;
    w[2]=(int)(a/10);if (w[2]<=0) h-=1;a=a-w[2]*10;
    w[1]=a;

    printf ("总共%d位。\n各个位数为:",h);
   
    for (i=h;i<1;i--)
    {printf ("%d\t",w[i]);}
   
    printf ("\n反位输出为:");

    for (i=1;i>h;i++)
    {printf ("%d",w[i]);}
    printf ("\n");
}
-------------------------------------------------------
程序编译无错,但是结果和预想不符。。。。


结果:

请输入一个五位数:12345(回车)
总共5位。
各个位数为:
反位输出为:



即循环中的输出什么都没打印。我在程序中加过一个printf,打印w[1]-w[5],证明算法没错。应该是循环错了。。。

自己看不出所以然,望指教!

[ 本帖最后由 s158298261 于 2009-12-30 14:29 编辑 ]
搜索更多相关主题的帖子: 自学 
2009-12-29 19:54
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
建议您翻一翻论坛的老帖子,关于这道题的成熟解法有很多。我不清楚你是怎样想的,但这道题这样解法很麻烦,效率不高。

       祝您学 C 愉快。
2009-12-29 20:08
s158298261
Rank: 1
来 自:郑州
等 级:新手上路
帖 子:13
专家分:0
注 册:2009-7-28
收藏
得分:0 
恩,感谢楼上。

我本身会用basic,我只是想通过一些程序熟悉各个函数的用法。毕竟是自学。

算法不是目的。

拜谢~
2009-12-29 20:11
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
呵,如这道题,可以利用 int 的特性,开一个足够大的数组,每次存储一个位数上的元素:

程序代码:
#include<stdio.h>
#define N 20
int main(void)
{
    int a[N];
    int num;
    int i,t;
    while((scanf("%d",&num))==1)
    {
        t=0;
        while(num)//存储元素
        {
            a[t++]=num%10;
            num/=10;
        }
        printf("num=%3d\n",t);
        for(i=0;i<t;++i)//顺序输出
        {
            printf("%2d",a[i]);
        }
        puts("");
        for(t-=1;t>=0;--t)//逆序输出
        {
            printf("%2d",a[t]);
        }
        puts("");
    }
    return 0;
}  



这个小程序,仅作您参考。
2009-12-29 20:49
xixistudio
Rank: 2
等 级:论坛游民
帖 子:24
专家分:53
注 册:2009-12-23
收藏
得分:0 
顶菜鸟
2009-12-29 21:08
maoyan20034
Rank: 2
等 级:论坛游民
帖 子:27
专家分:46
注 册:2009-11-30
收藏
得分:0 
#include"stdio.h"
#include"conio.h"
void main()
{
  int  i,j,k,m,n=0,x;

  clrscr();
  scanf("%d",&x);
  printf("%d\n",x);

  i=x/1000;if(i!=0)n++;
  j=x%1000/100;if(j!=0)n++;
  k=x%100/10;if(k!=0)n++;
  m=x%10;if(m!=0)m++;
  printf("Wei %d SHU:",n);
  printf("%d %d %d %d %d\n",i,j,k,m);
  printf("\n\n\n\n\n");
  printf("%d%d%d%d%d\n",m,k,j,i);

}

有时候沉迷是一种境界!
不是非主流!不是信春哥! 是C语言!

  
2009-12-29 21:34
ljc_zy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:56
专家分:131
注 册:2009-7-14
收藏
得分:0 
当字符串输入,如果能确保输入都是正确的话。
位数就是字符串长度。

恋恋花事 www.
2009-12-29 22:07
dancing1wolv
Rank: 2
来 自:中国
等 级:论坛游民
帖 子:36
专家分:78
注 册:2009-12-25
收藏
得分:0 
可以看下这个:
//输入一个最多五位的数字。1.求共几位。2.分别打印每一位。3.逆顺序打印,如123,打印321
#include<stdio.h>
#include<math.h>
main()
{
    int x,a,e,n=0;
    scanf("%d",&x);e=x;
    do
    {
        x/=10;
        n++;
    }while(x);
    printf("\n%d是%d位数。\n",e,n);x=e;
    for(;n>0;n--)
    {
        a=e/pow(10,n-1);
        e-=a*pow(10,n-1);
        printf("%d ",a);   
    }
    puts("");
    do
    {
        a=x%10;
        x/=10;
        printf("%d ",a);
    }while(x);
}
感觉循环挺方便的


相信自己,每天进步一点点,C语言,you can do it 。
2009-12-30 01:08
dancing1wolv
Rank: 2
来 自:中国
等 级:论坛游民
帖 子:36
专家分:78
注 册:2009-12-25
收藏
得分:0 
你的就是输出时for循环语句的控制语句,范围弄错了而已,
第一个for循环应该是for (i=h;i>=1;i--)……

相信自己,每天进步一点点,C语言,you can do it 。
2009-12-30 01:35
l3315534
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2009-12-28
收藏
得分:0 
#include<stdio.h>
main()
{
      int m1,m2;
      int fun(int n);
      printf("Input m1:");
      scanf("%d",&m1);
      printf("Input m2:");
      scanf("%d",&m2);
      printf("%d的逆向是%d\t",m1,fun(m1));
      printf("%d的逆向是%d\n",m2,fun(m2));
      getchar();
      getchar();
}

int fun(int n)
{
    int m,y;
    y=0;
    if (n>0) m=n;
    else m=-n;
    while (m!=0){
          y=y*10+m%10;
          m=m/10;
          }
    if (n>=0) return y;
    else return -y;
}这样子做  比你那个简单多了
2009-12-30 08:40
快速回复:【菜鸟自学】00002-----{循环控制}------(问题已在11楼解决)
数据加载中...
 
   



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

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