南京江宁区工商局网站:C语言的问题。。~~~

来源:百度文库 编辑:中科新闻网 时间:2024/04/28 06:27:42
大家帮我看一下这个程序。。
输入三个数,输出他的最大值和最小值。。
为什么有一种就不行。。。这个题目是用并列的if语句做的,不用ELSE。。
main()
{
int a,b,c,max;
clrscr();
scanf("%d,%d,%d",a,b,c);
max=a;
if(a<b) max=b;
if(b<c) max=c;
min=a;
if(a>c) min=b;
if(c<b) min=c;
printf("max=%d,min=%d",max,min);
}
请大家帮我看一下,如果我输入的是1,2,3
输出的就是MAX=3,MIN=1
其它输入也可以,但是。。
如果我输入的是3,1,2
它输出的却是max=3,min=2.
为什么会出现这种情况呢。。
应该怎么改。~~~~~~~~
谢了。。~~~

对你的改动最少了。而且经过实际运行测试。
注意:编译环境为tc2.0.不是vc,如果在vc环境下需要把
clrscr()函数注销。
#include<stdio.h>
#include<conio.h>
void main()
{
int a,b,c,max,min;
clrscr();//清屏函数可要可不要
scanf("%d,%d,%d",&a,&b,&c);
max=a;
if(a<b) max=b;
if(b<c) max=c;
min=a;
if(a>b) min=b;
if(c<b) min=c;
printf("max=%d,min=%d",max,min);
}

我是完全按照您的思想修改程序的,并且对您的程序修改最少,完全正确得程序应该是这样的:(以下程序是经过实际测试的(运行环境turbo c)
#include<stdio.h>
#include<conio.h>
void main()
{
int a,b,c,max,min;
clrscr();
scanf("%d,%d,%d",&a,&b,&c);
max=a;
if(a<b) max=b;
if(max<c) max=c;
min=a;
if(a>c) min=b;
if(c<min) min=c;
printf("max=%d,min=%d",max,min);
}

main()
{
int a,b,c,min,max;
clrscr();
scanf("%d,%d,%d",&a,&b,&c);
max=a;
if(a<b) max=b;
if((b<c)&&(a<b)) max=c;
min=a;
if(b<a) min=b;
if((c<b)&&(b<a)) min=c;
printf("max=%d,min=%d",max,min);
} 试一下 看行不?
我觉得所有的基本的C语言的书 都是数学问题 你在上机试 之前 先自己试着在纸上运行依次 试再看
逻辑搞对就OK了
没什么的

max=a;
if(a<b) max=b;
if(b<c) max=c;
上述语句当a最大且b<c时会出现max=c.

您的意思是,先假设a为max,如果b比a大,让max=b,如果c比b大,再让c成为max。。。

但是这一句if(b<c) max=c;有问题

以3,1,2为例,a=3,毫无疑问是最大,但是根据
if(b<c) max=c;
max将等于c

这里的问题在于,您实际上是想比较max与c的大小,max可以是a也可以是b,具体是a还是b取决于语句:if(a<b) max=b;的结果
可是您实际上是在比较b和c的大小,只有在前提是b已经成为max时,语句
if(b<c) max=c;
才能得到您想象中的结果

scanf没有出问题?

max=a;
if(a<b) max=b;
if(b<c) max=c;
//对于max这段,如果abc分别是3,1,2的话,你看应该出什么结果呢?应该max=2 min=1

min=a;
if(a>c) min=b;
if(c<b) min=c;
//这段完全混乱,看不懂

max=a;
if(max<b) max=b;
if(max<c) max=c;
min=a;
if(min>b) min=b;
if(min>c) min=c;