新手求教, 一个让我很晕的问题
这个程序的作用是: 输入三个整数,然后按从小到大的顺序输出。原代码是:
#include <stdio.h>
int max(int x,int y)
{
int z;
if(x>y) z=x;
else z=y;
return (z);
}
void main()
{
int a,b,c,z,t,p;
int max(int x,int y);
int min(int x,int y);
printf("请输入三个数\n");
scanf("%d,%d,%d",&a,&b,&c);
t=max(a,max(b,c));
z=min(a,max(b,c));
if((a<b&&b<c)||(b<c&&b<a)) p=b;
if((b<a&&a<c)||(c<a&&a<b)) p=a;
if((a<c&&c<b)||(b<c&&c<a)) p=c;
printf("%d,%d,%d",z,p,t);
}
int min(int x,int y)
{
int z;
if(x<y) z=x;
else z=y;
return (z);
}
但运行时候有很奇怪的问题:
① 输入:1,2,3 结果:1,2,3 正确结果
② 输入:2,1,3 结果: 2,2,3 错误结果
③ 输入:3,2,1 结果: 2,187,3 错的离谱
不知道什么````
IDE:WIN-TC
谨请指教
谢谢
----------------解决方案--------------------------------------------------------
用数组和FOR循环来写
----------------解决方案--------------------------------------------------------
不好意思,
我只学到数组前面的循环语句,
想用IF语句和逻辑关系来写这个程序
还望指出错误
----------------解决方案--------------------------------------------------------
这个解题方式也让我很晕
一定是在转换的时候有未转换过的变量,然后输出,就出现很奇怪的格式了。但排序用到这种方式,我是头一回见到。其实用一种很简单的方法就行了。
----------------解决方案--------------------------------------------------------
程序代码:
/*******************************************************************
根据题意所写,未用到数组与指针,也未用到函数。
********************************************************************/
#include<stdio.h>
int main(void)
{
int a,b,c,t;
printf("请输入三个整数,空格格开,enter结束输入:\n");
scanf("%d %d %d",&a,&b,&c);
if(a>b)
{
t=a;
a=b;
b=t;
}
if(a>c)
{
t=a;
a=c;
c=t;
}
if(b>c)
{
t=b;
b=c;
c=t;
}
printf("\n转换后为:\n%d,%d,%d\n",a,b,c);
getch();
}
----------------解决方案--------------------------------------------------------
PS:
另外,如果函数在main前面,就不用声明了吧? ----------------解决方案--------------------------------------------------------
谢谢 楼上的兄弟
谢谢 楼上的兄弟我也知道这个替换t的方法
谭浩强 的书上例题就是用的楼上兄弟的方法,
但是我看到这个题的时候就是想用
想用IF语句和逻辑关系来改写这个程序
结果就发生了这个百思不得其解的问题
望大家指正``
不要说我钻牛角尖呀``
----------------解决方案--------------------------------------------------------
void main()
{
int a,b,c,Max,Min,Mid;
printf("请输入三个数\n");
scanf("%d%d%d",&a,&b,&c);//这里你又错了 你是不是刚才没输入逗号 原来你是scanf("%d,%d,%d",&a,&b,&c);
Max=max(a,max(b,c));
Min=min(a,min(b,c));//这里出错了
if((a<b&&b<c)||(c<b&&b<a)) Mid=b;
if((b<a&&a<c)||(c<a&&a<b)) Mid=a;
if((a<c&&c<b)||(b<c&&c<a)) Mid=c;
printf("%d%d%d",Max,Min,Mid);
}
你逻辑上没什么问题了 我也糊涂了 我再看看 你写的很乱
我改了你把我的放进去看看
[[it] 本帖最后由 走一圈 于 2008-5-12 00:08 编辑 [/it]]
----------------解决方案--------------------------------------------------------
回复 9# 的帖子
先谢谢楼上的兄弟了,我试着去掉 int max(int x,int y); 中的 int
但提示编译失败```
它说:表达式语法错在 main 函数中
``
不过还是感谢关注
另外
我朋友说这里不是不要int 而是不要int max(int x,int y);整个语句
我按他说的试了下,过然通过了```,但还是会出现1楼的那些错误,我朋友说他也不清楚为什么
还望广大高手赐叫
[[it] 本帖最后由 black_boy 于 2008-5-11 23:45 编辑 [/it]]
----------------解决方案--------------------------------------------------------
我改过了你再试试 我调试不方便
----------------解决方案--------------------------------------------------------