C语言语句的顺序
解决时间 2021-04-07 03:36
- 提问者网友:萌卜娃娃
- 2021-04-06 10:43
#include
void order(int a,int b)
{
int t;
if(a>b)
{
t=a;
a=b;
b=t;
}
printf("两个数由小到大的顺序是%d %d\n",a,b);
}
int main()
{
int x,y;
printf("请输入两个整数:");
scanf("%d%d",&x,&y);
order(x,y);
return 0;
}
这是一个输入两个值,然后将两个值按从小到大的顺序排列的代码!我想问一下为什么不可以把printf("两个数由小到大的顺序是%d %d\n",a,b);这条语句移到main函数的return 0;之前,改成如下那样
#include
void order(int a,int b)
{
int t;
if(a>b)
{
t=a;
a=b;
b=t;
}
}
int main()
{
int x,y;
printf("请输入两个整数:");
scanf("%d%d",&x,&y);
order(x,y);
printf("两个数由小到大的顺序是%d %d\n",x,y);
return 0;
}
我试过,改成这样后就不能正确的排列两个数的顺序,输入的顺序是什么样,就输出什么样!我想问一下是不是因为定义的函数没有返回值的原因,如果有返回值的话应该就可以这样改了吧?!还有想问一下!怎样判断一个定义的函数有没有返回值,什么样的叫有返回值,什么样的没有返回值!谢谢了!我是自学的!
最佳答案
- 五星知识达人网友:你哪知我潦倒为你
- 2021-04-06 11:17
您好。第一段代码可以达到目的是因为printf语句在子函数中,在临时变量生存周期结束之前已经将正确结果输出到了屏幕上(输出设备),第二个程序错误的错误是因为你将printf语句放到了主函数中,那么这里就牵扯到一个问题:函数参数的传递方式是什么?
一般来讲作为函数的参数传递方式有三种:1.值传递 2.引用传递 3.地址传递,第一种:如果在子程序中改变了变量的值,那么着不会改变主调函数中该变量的值;后两种:如果在子程序中改变了所传参数的值的话,那么在主调函数中该参数(变量)的值也会随之改变。根据这个结论,你应该容易明白你的疑问了。详细深入的了解:请随便参阅一本比较权威的C\C++教程,看函数参数的传递部分,都会有这三种分类的,介绍的很详细,也有很多经典的例子供你参考。
PS:希望能帮到您,O(∩_∩)O~!
全部回答
不是b++ 而是执行for(b=0;b<=9;b++)这局代码. 如果非要把上面这句代码差开,也是先执行b = 0. 执行顺序应该是这样的: 1)a=1; 2)a<=9; 3)b=0; 4)b<=9; 5)c=0; 6)c<=9; 7)c++; ...c的循环体运行完后 执行的是 b++,b每自加一次都要去执行 b<=9的判断条件,满足条件就会去执行c的循环. ...同理~! 简单说就是for的循环语句中的++是执行完一次for的循环体后才进行的运算.所以回答你"对的"这个人说的是错的!^_^~!
- 2楼网友:荒野風
- 2021-04-06 14:30
有返回值的话倒是可以
函数名前面就是定义返回值类型,void就是没有返回值,int 返回值类型是个整型。。。其它。。
- 3楼网友:廢物販賣機
- 2021-04-06 13:43
这就是‘值传递’的不足,改成‘引用传递’就行了【方法:第二个程序里的void order(int a,int b)改成void order(int &a,int &b)】
- 4楼网友:青灯有味
- 2021-04-06 12:45
首先main()是主函数,order()是被调用的函数,注意order()是个函数!当调用order(x,y);就可以得到ab的顺序。当你把 printf("两个数由小到大的顺序是%d %d\n",x,y);移到主函数中,那么order(x,y);就不是一个完整的函数了,所以才得不到ab的顺序!
至于返回值,只要函数名前加有void 就表示无返回值,其它都有
我要举报
大家都在看
推荐资讯