谷歌公司制度:C语言:这个小程序错哪了?

来源:百度文库 编辑:高校问答 时间:2024/05/09 10:21:16
输入16,32等没问题,其它的就不会输出了,该怎么改进?或者有没更好的算法?
-------------------------
#include<stdio.h>
main()
{
int i;
printf("请输入您级别:");
scanf("%d",&i);
while(i>0)
if(i>=16){
printf("¤");
i-=16;
}
if(i<16&&i>=4){
printf("¢");
i-=4;
}
if(i<4&&i>0){
printf("☆");
i-=1;
}
}

你的程序是想干吗,你的while(0)后面的{}括号呢,怎么不加呢?这样的话while循环只执行第一个if语句。
如果你输入不能被16整除的数,比如说19那么执行完第一个循环之后i等于3,此时的i满足循环条件,但是不满足if条件,所以i永远等于3,在while中发生死循环现象,永远不能跳出来。如果你输入的数是16的倍数,那么i经过循环总有减到0的时候,这样就可以跳出循环,当然随后的两个if都不执行,程序正常结束。
你该在while之后加上{}
将程序改成这样
#include<stdio.h>
main()
{
int i;
printf("请输入您级别:");
scanf("%d",&i);
while(i>0){
if(i>=16){
printf("¤");
i-=16;
}
if(i<16&&i>=4){
printf("¢");
i-=4;
}
if(i<4&&i>0){
printf("☆");
i-=1;
}
}
}

改成这样就行了 少了2个ELSE
#include<stdio.h>
main()
{
int i;
printf("请输入您级别:");
scanf("%d",&i);
while(i>0)
if(i>=16){
printf("¤");
i-=16;
}
else if(i<16&&i>=4){
printf("¢");
i-=4;
}
else if(i<4&&i>0){
printf("☆");
i-=1;
}
}

改成这样:效率会高一些,你后面几个判断的条件是多余的

#include<stdio.h>
main()
{
int i;
printf("请输入您级别:");
scanf("%d",&i);
while(i>0)
if(i>=16){
printf("¤");
i-=16;
}
else if(i>=4){
printf("¢");
i-=4;
}
else {
printf("☆");
i--;
}
}