C语言编程 算数出现奇怪的问题
有一个程序,如果数字满足下面两个条件,则显示该数字,如果不满足,则数字递增1,条件如下:能被3整除个十百千位至少有一个为数字3本程序从1000到9999递增。奇怪的是:在...
有一个程序,如果数字满足下面两个条件,则显示该数字,如果不满足,则数字递增1,条件如下:
能被3整除
个十百千位至少有一个为数字3
本程序从1000到9999递增。
奇怪的是:在源码第23行,如果用printf函数打印文字(无论是什么),那么所得出的结果完全正常。如果屏蔽此行,那么打印出来的结果有错误,比如说会出现9981这样不符合要求的数字。求解,并告诉我为什么会出现这样的问题???
以下为C源码:
----
#include <stdio.h>
int just(int a);
void main(void){
int a=0,m,max=9999,min=1000;
printf(" NOTICE:\nPRESS ANY KEY TO CALCULATE NUMBERS FROM 1 000 TO 9 999 !\n\n");
system("pause");
for(;min<=max;min++)
{
m=just(min);
if(m==1)
{m=0;printf("%d\n",min);a++;}
}
printf("Total numbers:%d\n",a);
system("pause");
}
int just(int k){
int i,b=10,ge,shi,bai,qian;
if(k%3!=0)
return 0;
qian=k/1000;
bai=(k-qian*1000)/100;
shi=(k-qian*1000-bai*100)/10;
ge=k-qian*1000-bai*100-shi*10;
printf("\n");
if(qian==3)
return 1;
if(bai==3)
return 1;
if(shi==3)
return 1;
if(ge==3)
return 1;
}
----------
抱歉,是第24行的printf()函数,不是第23行 展开
能被3整除
个十百千位至少有一个为数字3
本程序从1000到9999递增。
奇怪的是:在源码第23行,如果用printf函数打印文字(无论是什么),那么所得出的结果完全正常。如果屏蔽此行,那么打印出来的结果有错误,比如说会出现9981这样不符合要求的数字。求解,并告诉我为什么会出现这样的问题???
以下为C源码:
----
#include <stdio.h>
int just(int a);
void main(void){
int a=0,m,max=9999,min=1000;
printf(" NOTICE:\nPRESS ANY KEY TO CALCULATE NUMBERS FROM 1 000 TO 9 999 !\n\n");
system("pause");
for(;min<=max;min++)
{
m=just(min);
if(m==1)
{m=0;printf("%d\n",min);a++;}
}
printf("Total numbers:%d\n",a);
system("pause");
}
int just(int k){
int i,b=10,ge,shi,bai,qian;
if(k%3!=0)
return 0;
qian=k/1000;
bai=(k-qian*1000)/100;
shi=(k-qian*1000-bai*100)/10;
ge=k-qian*1000-bai*100-shi*10;
printf("\n");
if(qian==3)
return 1;
if(bai==3)
return 1;
if(shi==3)
return 1;
if(ge==3)
return 1;
}
----------
抱歉,是第24行的printf()函数,不是第23行 展开
3个回答
展开全部
语句去掉printf()才是正确的
你这个有两个条件,一个是被三整除,一个是要有三这个数字
而自定义函数必须要有返回值,返回值有两种形式,一种是return语句,一种是碰到printf语句也是返回值
所以,加了printf,则函数到这里就调用结束,所以选的只是被3整除的,总数有3000个,而去掉了printf,则后面的语句同样执行,选出的是同时符合两个要求的
另外,你这个之所以出现了9981这样不符合的,是因为9981能被3整除,但是没一个是3,但是函数里对这种情况又没有返回值,所以默认返回1,所以打印出来了,
if多个语句改为if else if嵌套就行了,最后一个else return 0就行了
望采纳
你这个有两个条件,一个是被三整除,一个是要有三这个数字
而自定义函数必须要有返回值,返回值有两种形式,一种是return语句,一种是碰到printf语句也是返回值
所以,加了printf,则函数到这里就调用结束,所以选的只是被3整除的,总数有3000个,而去掉了printf,则后面的语句同样执行,选出的是同时符合两个要求的
另外,你这个之所以出现了9981这样不符合的,是因为9981能被3整除,但是没一个是3,但是函数里对这种情况又没有返回值,所以默认返回1,所以打印出来了,
if多个语句改为if else if嵌套就行了,最后一个else return 0就行了
望采纳
追问
加上printf,返回有1056个(这应该是正确的)
不加上printf,返回有1272个(不正确)
这是为什么啊
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
拜托以后传代码选一下代码语言,不然这复制到VC++里面全在同一行,,,,一点儿缩进换行都没有,,,,
#include <stdio.h>
int just(int a);
void main(void)
{
int a=0,m,max=9999,min=1000;
printf(" NOTICE:\nPRESS ANY KEY TO CALCULATE NUMBERS FROM 1 000 TO 9 999 !\n\n");
system("pause");
for(;min<=max;min++)
{
m=just(min);
if(m==1)
{
m=0;
printf("%d\n",min);
a++;
}
}
printf("Total numbers:%d\n",a);
system("pause");
}
int just(int k)
{
int i,b=10,ge,shi,bai,qian;
if(k%3!=0)
return 0;
qian=k/1000;
bai=(k-qian*1000)/100;
shi=(k-qian*1000-bai*100)/10;
ge=k-qian*1000-bai*100-shi*10;
printf("\n");
if(qian==3)
return 1;
else if(bai==3)
return 1;
else if(shi==3)
return 1;
else if(ge==3)
return 1;
else
return 0;
}
你的判断数字中含不含3的语句是错的,,,,,,,,,
追问
谢谢了,但是我还想知道为什么加上printf语句就能返回正常的值呢?
追答
你是说在printf的\n前面加文字?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
9981能被3整除啊!!!!!
怎么不对?
怎么不对?
更多追问追答
追问
不满足条件2啊,个十百千位没有3
追答
哦,我理解了,你是两个条件都要满足啊,我再看看
if(qian==3)
return 1;
if(bai==3)
return 1;
if(shi==3)
return 1;
if(ge==3)
return 1;
这一堆if之后,少了一个其他的返回值
return 0; //不满足以上条件的,都返回0 如果不加这个,默认的返回信息是不确定的值,因此,会导致结果出现错误的数据
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询