| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 516 人关注过本帖
标题:[原创]行结课错误?
只看楼主 加入收藏
wwiilla
Rank: 1
等 级:新手上路
帖 子:51
专家分:0
注 册:2005-9-5
收藏
 问题点数:0 回复次数:8 
[原创]行结课错误?

给一个不多于5位数的正整数按逆序打印出来,如输入123输出321
#include<stdio.h>

void main()
{
long n,a;
int n1,n2,n3,n4,n5,b,c,d;

scanf("%d",&n);

if(n >= 0 && n < 100000)
{
if ( n >= 10000 && n <100000 )
{
a = n % 10000 ;
b = a % 1000 ;
c = b % 100 ;
d = c % 10 ;
n1 = (n - a) / 10000;
n2 = (a - b) / 1000;
n3 = (b - c) / 100;
n4 = (c - d) / 10;
n5 = d ;
printf("\nThe number =%d%d%d%d%d\n",n5,n4,n3,n2,n1);
}
else if ( n >= 1000 && n < 10000 )

{ a = n % 1000;
b = n % 100;
c = n % 10;
n1 = (n - a) / 1000;
n2 = (a - b) / 100;
n3 = (b - c) / 10;
n4 = c;
printf("\nThe number =%d%d%d%d\n",n4,n3,n2,n1);
}
else if ( n>=100 && n < 1000)
{
a = n % 100;
b = a % 10;
n1 = (n - a) / 100;
n2 = (b - a) / 10;
n3 = b;
printf("\nThe number =%d%d%d\n",n3,n2,n1);
}
else if ( n >= 10 && n < 100)
{
a = n % 10;
n1 = (n - a) / 10;
n2 = a;
printf("\nThe number =%d%d\n",n2,n1);
}
else
{
a = n;
printf("\nThe number =%d%d\n", a);
}
}
else printf("\nThe number out control\n");
}
为什么运行结果不对,输入98765是结果不对,但输入较小的数字如12345是是正确的。
在单步调试是全部错误。

2006-02-24 12:34
cordier
Rank: 2
等 级:论坛游民
威 望:1
帖 子:449
专家分:14
注 册:2006-2-9
收藏
得分:0 

输入有点小问题
#include<stdio.h>

void main()
{
long n,a;
int n1,n2,n3,n4,n5,b,c,d;

scanf("%d",&n); /*改为 scanf("%ld",&n); */

if(n >= 0 && n < 100000)
{
if ( n >= 10000 && n <100000 )
{
a = n % 10000 ;
b = a % 1000 ;
c = b % 100 ;
d = c % 10 ;
n1 = (n - a) / 10000;
n2 = (a - b) / 1000;
n3 = (b - c) / 100;
n4 = (c - d) / 10;
n5 = d ;
printf("\nThe number =%d%d%d%d%d\n",n5,n4,n3,n2,n1);
}
else if ( n >= 1000 && n < 10000 )

{ a = n % 1000;
b = n % 100;
c = n % 10;
n1 = (n - a) / 1000;
n2 = (a - b) / 100;
n3 = (b - c) / 10;
n4 = c;
printf("\nThe number =%d%d%d%d\n",n4,n3,n2,n1);
}
else if ( n>=100 && n < 1000)
{
a = n % 100;
b = a % 10;
n1 = (n - a) / 100;
n2 = (b - a) / 10;
n3 = b;
printf("\nThe number =%d%d%d\n",n3,n2,n1);
}
else if ( n >= 10 && n < 100)
{
a = n % 10;
n1 = (n - a) / 10;
n2 = a;
printf("\nThe number =%d%d\n",n2,n1);
}
else
{
a = n;
printf("\nThe number =%d%d\n", a);
}
}
else printf("\nThe number out control\n");
}

有更简单的,你的太复杂了。没有必要这么多if和else
好好想一想吧。


2006-02-24 13:27
cordier
Rank: 2
等 级:论坛游民
威 望:1
帖 子:449
专家分:14
注 册:2006-2-9
收藏
得分:0 
我是用字符串处理的。
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define MAX 12
main()
{
long n;
char str[MAX],*temp;
system("cls");
do
{
printf("n=");
scanf("%ld",&n);
}while(n<0||n>999999999);
ltoa(n,str,10);
temp=str;
while (*temp!='\0')
temp++;
while (temp--!=str)
printf("%c",*temp);
getch();
}

2006-02-24 13:57
cordier
Rank: 2
等 级:论坛游民
威 望:1
帖 子:449
专家分:14
注 册:2006-2-9
收藏
得分:0 

下面不用字符串处理的。
#include <stdio.h>
#include <conio.h>
#define MAX 10
main()
{
int i=0,bit;
int data[MAX];
long n;
system("cls");
do
{
printf("n=");
scanf("%ld",&n);
}while(n<0||n>999999999);
while (n!=0)
{
data[i]=n%10;
n/=10;
i++;
}
bit=i;
for (i=0;i<bit;i++)
printf("%d",data[i]);
getch();
}


2006-02-24 14:06
wwiilla
Rank: 1
等 级:新手上路
帖 子:51
专家分:0
注 册:2005-9-5
收藏
得分:0 
cordier 谢了
2006-02-24 16:11
UKYO
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2006-2-24
收藏
得分:0 
main()
{
char ch[5];
int i;
for(i=0;i<5;i++)
ch[i]=getche();
printf("\n");
for(i=4;i>=0;i--)
printf("%c",ch[i]);
}
2006-02-24 16:43
wwiilla
Rank: 1
等 级:新手上路
帖 子:51
专家分:0
注 册:2005-9-5
收藏
得分:0 
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define MAX 12
main()
{
long n;
char str[MAX],*temp;
system("cls");
do
{
printf("n=");
scanf("%ld",&n);
}while(n<0||n>999999999);
ltoa(n,str,10);
temp=str;
while (*temp!='\0')
temp++;
while (temp--!=str)
printf("%c",*temp);
getch();
}
这段在编译时出现声明语法错
2006-02-24 16:50
UKYO
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2006-2-24
收藏
得分:0 
以下是引用wwiilla在2006-2-24 16:50:00的发言:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define MAX 12
main()
{
long n;
char str[MAX],*temp;
system("cls");
do
{
printf("n=");
scanf("%ld",&n);
}while(n<0||n>999999999);
ltoa(n,str,10);
temp=str;
while (*temp!='\0')
temp++;
while (temp--!=str)
printf("%c",*temp);
getch();
}
这段在编译时出现声明语法错

把system("cls");这个去掉就行了。
在BC++好不支持这个函数。BC++就好像是内镶了一个界面,已不是在DOS下了。

不过用TC可以不加任何修改通过!


————————————————————————————————

在下刚才写的那个程序好像太慌忙了,错误的理解为输入一个5位数将其逆顺排序。
下面已经改好:

main()
{
char ch[5],k;
int i;
for(i=0;i<5;i++)
{k=getche();if(k==13) break;ch[i]=k;}
printf("\n");
for(i-=1;i>=0;i--)
printf("%c",ch[i]);
}

2006-02-24 18:54
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 

3-4楼首先感谢你cordier,while(n<0||n>999999999);→while(n<0||n>99999);为好
system("cls");没太多的必要(这个程序中)


叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-02-24 21:41
快速回复:[原创]行结课错误?
数据加载中...
 
   



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

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