c语言下列程序执行结果int a=7, b=3;

下列程序的执行结果是( )。
#include <stdio.h>
int a=7, b=3;
void fun (int x, int y)
{ x=x-y; y=x+y; }
main ( )
{ int a=8, b=6;
fun(a,b);
printf ("%d,%d", a,b);
}
A. 4, 7 B. 7,3 C. 2,6 D. 8,6
答案选D,求详细过程谢谢!

下列程序的执行结果是( D)。 #include int a=7, b=3; void fun (int x, int y) { x=x-y; y=x+y; } main ( ) { int a=8, b=6; fun(a,b); printf ("%d,%d", a,b); } A. 4, 7 B. 7,3 C. 2,6 D. 8,6
答案选D,原因是:
1、首先程序开头定义的a=7,b=3属于全局变量。它在所有函数中有效。
2、其次在main函数中又定义了两个同名变量int a=8, b=6;,它们是局部变量,仅仅在main函数中有效。
3、这就产生了一个很大的问题,在main函数中同时存在两个变量a(全局的7、局部的8)和两个变量b(全局的3、局部的6),不仅晕,而且乱!为避免矛盾和冲突,c规定:变量名称冲突时,局部变量优先与于全局变量。所以,看似高大上的"全局变量"在局部变量面前隐、身、了。
4、所以在,在main中提到的a和b,跟全局变量7和3没有半毛钱关系。它们的值一直是8和6。
5、函数void fun(a,b)虽然调用a和b做实参,但也只是把a和b复制了一份去参加fun的运行,复制完就没有a和b的什么事儿了,无论fun怎样做,都不会影响a和b,更不会影响它们的值(8和6)。
6、最后打印a.b的值,打印是8和6了!
7、也就当然选D啦😏
温馨提示:内容为网友见解,仅供参考
第1个回答  2018-12-25

这个传值和传地址的问题

他是进入了fun(a,b);这个函数

但是并没有改变外面 a和b的值

要改变的话就要用指针

#include <stdio.h>
int a=7, b=3;
void fun (int *x, int *y)
{ x=*x-*y; y=*x+*y; }
main ( )
{ int a=8, b=6;
fun(&a,&b);//这里就传了a和b的地址
printf ("%d,%d", a,b);
}

本回答被网友采纳

c语言下列程序执行结果int a=7, b=3;
下列程序的执行结果是( D)。 #include int a=7, b=3; void fun (int x, int y) { x=x-y; y=x+y; } main ( ) { int a=8, b=6; fun(a,b); printf ("%d,%d", a,b); } A. 4, 7B. 7,3C. 2,6D. 8,6 答案选D,原因是:1、首先程序开头定义的a=7,b=3属于...

c语言,int a=7,b=6,c=5,则表达式(a+b)>(c*b)&&b!=c||c>b的值为_百度...
(a+b)>(c*b)&&b!=c||c>b 13>30 && 6!=5 || 5>6 0 && 1 || 5>6 0 || 0 0

c语言运行以下程序段后变量a的值是:( ) int a=0, b=3;
条件a+b&&a++&&b-a&&a是这样执行的,a+b=3,a++先判断在自增,判断为0,自增后为1,因为判断为0,所以逻辑短路,后面的也就不判断了 switch里面是0,所以case 0执行成功,也就是说从case 0后面的语句都要执行,知道遇到break a++;case 1:b++;case 2:a+=b;也就是这些都有执行 所以是...

15道C语言的选择题,请各位帮忙阿。
(C) printf(“%s”,str[0]); (D) printf(“%s”,str);2.下面程序的输出结果是( )。int fun(int x, int y){ int m=3;return(x*y-m);} main(){int a=7,b=5;printf(“%d\\n”,fun(a,b));} (A) 28 (B) 32 (C)35 (D) 12 3.若有说明:int a[3][4]; 则对a ...

以下关于C语言的描述,哪些是正确的?
C. return 后面的值不能为表达式 D. 如果函数值类型与return 后的返回值类型不一致,则以函数值类型为准 给定下列程序,则运行结果为(B)include <stdio.h> void fun(int x, int y, int * z){ * z = x – y;} void main(){ int a, b, c;fun(11, 5, &a);fun(8, a, &b...

C语言中,下列程序执行后的输入结果是___ #define MA(x) x*(x-1) m...
define MAX(X) X,在编译时候,只做简单替换。比如说 在main()函数中,int x=MAX(a+b)*MAX(a+b),c编译器在编译的时候,将MAX替换,变成a+b*a+b。

c语言中int a=1,b=3;switch(a+b){ case 1:printf("*\\n");case 2+1...
case 1:printf("*\\n");break(分号后面都需要加break)还有需要一个大反括号在结尾 SWITCH(A+B)这个A+B是等于4的,即SWITCH(4),但是你SWITCH语句里面没有符合条件的,所以就会直接跳出去的

求C语言程序设计习题集与上机指导-第三版 (及答案)...
printf("密码是%c%c%c%c%c\\n",c1,c2,c3,c4,c5);}运行结果:密码是Glmre3.9求下面算术表达式的值。(1)x+a%3*(int)(x+y)%2\/4设x=2.5,a=7,y=4.7(2)(float)(a+b)\/2+(int)x%(int)y设a=2,b=3,x=3.5,y=2.5(1)2.5(2)3.53.10写出程序运行的结果。main(){int i,j,m,n;i=8;j=...

int a=2,b=3;if(a>0)if(b<0)b=0;else b=2;else if(b>0)b=4;else b=...
首先以else找与其最近的if,则楼主的代码等价改写为:int a=2,b=3;if(a>0){ if(b<0)b=0;else b=2;} else { if(b>0)b=4;else b=3;} printf("%d",b);\/\/这下是不是清楚多了^-^ 现在,模拟机子运行下代码:首先初值为a:2,b:3;a为2>0因此程序执行语句2,不执行语句5,...

C语言,求过程。
所以相当于 int t[3][3]。二维数组跟一维数组一样,第一维和第二维的下标也是从 0 开始。二维数组相当于一个二维矩阵。所以 t[3][3] 的结果如下:a[0][0] = 9 a[0][1] = 8 a[0][2] = 7 a[1][0] = 6 a[1][1] = 5 a[1][2] = 4 a[2][0] = 3 ...

相似回答