【C语言-鸡兔同笼】为什么我用我自己的方法来编程是不符合题意的

#include<stdio.h> int main() { int a,b,c; scanf("%d",&a); if(a>0&&a<32768&&a%4==0){ b=a/4; c=a/2; } if(a>0&&a<32768&&a%4!=0&&a%2==0){ b=a/4+1; c=a/2; } printf("%d %d\n",b,c); if(a%2!=0) printf("0 0\n"); return 0; } 感觉自己的方法没有问题啊,可为什么还会输出“4199420 4199522”

第1个回答  2014-10-25
逻辑问题,你的两个if语句本来已经限定a是偶数了。对于奇数的情况是未定义的,就像楼上说的b和c是未初始化的。你需要完善一下两个if逻辑判断。追问

可我在最后一个if写明了a为奇数的情况的啊
if(a%2!=0)
printf("0 0\n");

追答

请注意,你先打印输出,然后才进行判断的。

本回答被网友采纳
第2个回答  2014-10-25
当你输入21时,a既不能被4整除,也不能被2整除,所以两个if语句里面的内容都没有执行,b和c的值就没有初始化,所以输出的值就是一个未定义的很大的数。追问

可我在后面写了“if(a%2!=0) printf("0 0\n"); “啊

第3个回答  2014-10-25
你的b和c要赋初值为0。否则是编译器自动赋值。追问

如果编译器自动赋值,那编译器会给b、c赋值多少呢?
还有,应该赋值在哪个位置?
我最后有我编程的文字格式,你复制一下然后修正一下给我看可以吗

追答

#include
int main()
{
int a,b = 0,c =0;
scanf("%d",&a);
if(a>0&&a0&&a<32768&&a%4!=0&&a%2==0){
b=a/4+1;
c=a/2;
}
if(b!=0&&c!=0)
printf("%d %d\n",b,c);
if(a%2!=0)
printf("0 0\n");
return 0;
}

追问

恩 我试了下 答案是对的。
我还有个疑问:如果我没有给b、c赋值,那编译器会给b、c赋值多少呢?

追答

呵呵,这个值是不确定的。按道理说每一次它的值是不确定的。这也是我们为什么要对变量初始化的原因,在有些编译器里如果对没有初始化的变量是不能输出的,它会提示未初始化的变量被引用。注意下就好了。

追问

a是自变量,b、c是因变量。
既然都是变量,那为什么不用给a也赋值为0呢?

追答

你没给a赋值为0,你是用scanf语句输入的a的值,如果你不给a输入值,你输出它的值看看,也是不确定的。

追问

哦 那以后给变量赋值只能是0吗?
就比如说我在这里给b、c赋值是其他常数,比如b=3,c=3可以吗

追答

可以的,初始化可以随意赋值,但是以后你取它的值就是按照这个初始化的值计算了,一般我们初始化变量的值为-1,0,1三种,分别用于循环体或逻辑判断。

追问

“以后你取它的值就是按照这个初始化的值计算了”什么意思,不懂?
以后b、c的值不是由a的值决定的吗?

追答

以后它的默认值是你初始化的值,你的程序里当然是由a决定的,如果进入了if语句里,b和c的值会被修改,但是如果if的结构块没进去,那输出的就是你初始化的值了。比如你输入个a = 21,你看看输出的值就不是0和0了,而是你最新初始化的b =3,c = 3了。

本回答被提问者采纳