C语言返回值 输出
答案:4 信息版本:手机版
解决时间 2019-10-06 02:36
已解决
2019-10-05 09:36
void change(int x,int y)
{int temp;
temp=x;x=y;y=temp;
printf("%d%d\n",x,y);
}
main()
{int a,b;
printf("input two numbers:\n");
scanf("%d%d",&a,&b);
change(a,b);
printf("%d%d\n",a,b);
getch();
}
为什么输入1 2则显示 两个结果
2 1
1 2
change 函数不是没有返回值吗 那为什么还能printf 输出呢
主函数中 change(a,b);
printf("%d%d\n",a,b);
这里change(a,b);执行void 在这里就输出结果吗?
那 下边的printf("%d%d\n",a,b); 执行的结果又是哪个呢
是change(a,b)的结果吗 要是 那为什么不输出2 1呢
那要不是 要他有什么用呢 因为在change(a,b);中已经输出2 1了
void main()
{
int n;
printf("input number\n");
scanf("%d",&n);
s(n);
printf("n=%d\n",n);
}
int s(int n)
{
int i;
for(i=n-1;i>=1;i--)
n=n+i;
printf("n=%d\n",n);
}
这个程序和上边同样的问题 在第六步输出值吗? 第七步输出的是谁的值? 怎么让上边的程序运行结果是 输入100 返回 100,5050呢
int s1,s2,s3,v;
main()
{int a,b,c;
printf("input three nums:\n");
scanf("%d\n%d\n%d\n",&a,&b,&c);
s1=a*b;
s2=a*c;
s3=b*c;
v=a*b*c;
printf("%d\n%d\n%d\n%d\n",s1,s2,s3,v);
getch();
}
为什么输入三个值不可以 非得输入四个值才能显示结果呢?
学了c语言 学的是越来越不懂了
最佳答案
2019-10-05 10:11
以后最好把问题编上号,方便回答。
Q:change 函数不是没有返回值吗 那为什么还能printf 输出呢
A:因为change里有printf,不管有没有返回值,都要执行这一句啊。
Q:这里change(a,b);执行void 在这里就输出结果吗?
A:是的。这里调用了change,change里有个printf.所以会输出第一次。
Q:那 下边的printf("%d%d\n",a,b); 执行的结果又是哪个呢
是change(a,b)的结果吗 要是 那为什么不输出2 1呢
那要不是 要他有什么用呢 因为在change(a,b);中已经输出2 1了
A:下边的printf("%d%d\n",a,b);的执行结果就是1 2.为什么不输出2 1是因为在change函数里输出前把这2个值对调了。而change内部的a b与main中的a b不是相同的内存空间,只是change内部的a b在change函数刚开始时被赋上了main中a b的值而已。所以change中的a b不是main中的a b,因此输出值不同。
Q:这个程序和上边同样的问题 在第六步输出值吗? 第七步输出的是谁的值? 怎么让上边的程序运行结果是 输入100 返回 100,5050呢
A:首先,程序不是以“步”为计数单位的,而是以“行”为计数单位的,所以我完成不明白你第六步,第七步是什么意思。这个程序在调用s(n);时输出了5050,而在main中的printf("n=%d\n",n); 时输出了100.因为你main中的n值完全没变。
因为你scanf时用的是\n,建议用逗号之类的可以显示的字符。scanf是以无法显示的字符作为默认分隔符的。你的程序最好写为:
int s1,s2,s3,v;
main()
{int a,b,c;
printf("input three nums:\n");
scanf("%d,%d,%d",&a,&b,&c);
s1=a*b;
s2=a*c;
s3=b*c;
v=a*b*c;
printf("%d\n%d\n%d\n%d\n",s1,s2,s3,v);
getch();
}
除了最后一个问题以外,都是不应该犯的错误。你学C的时候完全没有学习好形参和实参。如果你弄明白了函数形参和实参,以及函数内部变量的知识,你就明白了。
至于最后一个问题,看过scanf的实现,你就明白了。
全部回答
1楼
2019-10-05 13:07
当你调用函数 需要用到返回值的时候 就用咯。
比如说 你想写个prt函数 想把里面的i打印出来。 有两种方法
1是直接在里面打印
void int prt()
{
int i=0; printf("%d",i);
}
你也 可以 使用函数返回值来 打印
void main()
{
int x;
x=prt(); printf("%d",x);
}
int prt()
{
int i=0;
return i;
}
函数是否需要返回值 是根据程序员来定义的
什么情况下才在函数前面加void?
当函数不需要 返回值的时候就加void。加了void 就表示 没有返回值的 你们retuen 就是错误的
2楼
2019-10-05 12:01
是C语言的初学者吗,我也是,咱们来讨论一下吧
首先,这个输出的结果是正确的,肯定是有两个输出的,因为一个是在change()函数中,另一个是在main()函数中的,无论调用的函数是否有返回值,都会执行这个函数中的语句,自然也就会有输出了;另外函数参数的传递,传的只是值,也就是在change()中的参数接受了主函数传给它的值,利用这个值来操作,但是改变的只是这个函数中相应变量的值,而无法改变主函数中对应变量的值,所以主函数中的a,b是没有变化的,但是change()中的x,y的值确实是交换了,主函数中的输出是没用的,这个只是交换前的值;
对于第二个程序,首先它是不对的,s()函数是int的,但是却没有返回值,所以应该改为void s(),这个和上面的的同样原理,也是,执行到s()函数,s里有输出语句,所以自然要输出,输出的是1+2+3+......+100的结果,执行完,返回到主函数,又有一个输出,所以一共有两个输出,调用函数传递的参数是值传递,所以不可以改变原变量的值;
对于第三个程序,输入格式是不对的,不应该有\n才对
3楼
2019-10-05 10:56
change 函数不是没有返回值吗 那为什么还能printf 输出呢 ```
虽然它没有返回值但是 执行到了printf所以输出2者没有关系```
返回值是代表这个函数的值的```
函数里面的输出的是形参的结果 `
main中是输出调用后变量的结果`
为的是让你看清形参 和main中实参的区别``
这个程序和上边同样的问题 在第六步输出值吗? 第七步输出的是谁的值?``
问题同上面一样``
100对应的是函数中的输出
5050对应的是main中的n
为什么输入三个值不可以 非得输入四个值才能显示结果呢?
```输入3个值 1个回车即可```
我要举报
如果感觉以上信息为低俗/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!
大家都在看
推荐资讯