C语言返回值 输出

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言返回值 输出相关的知识,希望对你有一定的参考价值。

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语言 学的是越来越不懂了

以后最好把问题编上号,方便回答。
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的实现,你就明白了。
参考技术A change 函数不是没有返回值吗 那为什么还能printf 输出呢 ```
虽然它没有返回值但是 执行到了printf所以输出2者没有关系```
返回值是代表这个函数的值的```

函数里面的输出的是形参的结果 `
main中是输出调用后变量的结果`
为的是让你看清形参 和main中实参的区别``

这个程序和上边同样的问题 在第六步输出值吗? 第七步输出的是谁的值?``
问题同上面一样``

100对应的是函数中的输出

5050对应的是main中的n

为什么输入三个值不可以 非得输入四个值才能显示结果呢?
```输入3个值 1个回车即可```
参考技术B 是C语言的初学者吗,我也是,咱们来讨论一下吧
首先,这个输出的结果是正确的,肯定是有两个输出的,因为一个是在change()函数中,另一个是在main()函数中的,无论调用的函数是否有返回值,都会执行这个函数中的语句,自然也就会有输出了;另外函数参数的传递,传的只是值,也就是在change()中的参数接受了主函数传给它的值,利用这个值来操作,但是改变的只是这个函数中相应变量的值,而无法改变主函数中对应变量的值,所以主函数中的a,b是没有变化的,但是change()中的x,y的值确实是交换了,主函数中的输出是没用的,这个只是交换前的值;
对于第二个程序,首先它是不对的,s()函数是int的,但是却没有返回值,所以应该改为void s(),这个和上面的的同样原理,也是,执行到s()函数,s里有输出语句,所以自然要输出,输出的是1+2+3+......+100的结果,执行完,返回到主函数,又有一个输出,所以一共有两个输出,调用函数传递的参数是值传递,所以不可以改变原变量的值;
对于第三个程序,输入格式是不对的,不应该有\n才对
参考技术C 简单的说:
你的change函数中的参数x,y在函数调用的过程中只是获得了内存中a,b的值,所以在函数中x,y的值的对换是理所当然的!
但是,在主程序中a,b的值并未改变,在你定义的change函数调用不是真正意义上的值传递...
我们在读取输入数据时赋给变量用的是取地址符“&”
因此,如果想要改变函数参数的值,正确的函数定义及完整的程序如下:
void change(int &x,int &y)
int temp;
temp=x;x=y;y=temp;
printf("%d%d\n",x,y);

void main()
int a,b;
printf("input two numbers:\n");
scanf("%d%d",&a,&b);
change(a,b);
printf("%d%d\n",a,b);


至于你说的两个输出,change函数中有这语句当然要执行一次咯!
主程序里的printf当然也要执行!
printf并不能作为一个返回值
你在定义时change的返回值是空-void

以上是关于C语言返回值 输出的主要内容,如果未能解决你的问题,请参考以下文章

C语言函数定义时既有返回值也有输出(ptintf),可以调用时只用返回值而不

急求一个c语言定义函数的程序,有一个参数但无返回值,实现输出一行n

易语言 取telnet返回值问题

C语言函数执行成功时,返回1和返回0,究竟哪个好?

C语言问题!!输入一个整数,将它逆序输出。。例如reverse(123)的返回值是321

C语言中如何实现多组数据输入输出?