c语言问题!!!
答案:4 悬赏:50
解决时间 2021-01-30 04:04
- 提问者网友:芷芹
- 2021-01-29 12:30
(1)有以下程序
#include
#include
struct A
{int a; char b[10];double c;};
void f(struct A t);
main()
{struct A a={1001,"zhangDa",1098.0};
f(a); pringt("%d,%s,%6.1f\n",a.a,a.b,a.c);
}
void f(struct A t)
{t.a=1002;strcpy(t.b,"ChangRong");t.c=1202.0;}
程序运行后的输出结果是
A)1001,zhangDa,1098.0 B)1002,ChangRong,1202.0
C)1001,ChangRong,1098.0 D)1002,ZhangDa,1202.0
(2)有以下程序
#include
#include
struct A
{ int a; char b[10]; double c;};
struct A f(struct A t);
main()
{ struct A a={1001,”ZhangDa”,1098.0};
a=f(a);jprintf(“%d,%s,%6.1f\n”,a.a,a.b,a.c);
}
struct A f(struct A t)
( t.a=1002;strcpy(t.b,”ChangRong”);t.c=1202.0;return t; )
程序运行后的输出结果是
A)1001,ZhangDa,1098.0
B)1002,ZhangDa,1202.0
C)1001,ChangRong,1098.0
D)1002,ChangRong,1202.0
答案分别为A D。这两题不一样吗????求解释
最佳答案
- 二级知识专家网友:邪性洒脱
- 2021-01-29 13:16
这两题一样吗???呵呵。首先,还有studio.h这样的头文件啊???如果没有的话,还是别这样写,编译会出错的。这两道题的不一样之处是f函数的返回值类型不同。第一道题中,f函数的返回值类型为空类型,即没有返回值。而第二道题中的f函数有返回值,并且返回值类型为结构体A类型。在(1)中,当执行语句f(a)时,将实参a的值传递给形参t,计算机将分配出一段内存来存放t的内容,在子函数中操作的都是形参t的内容,而结构体变量a中的内容并不发生变化,执行完f(a)后,存放t的那段内存将留给别的用,因此执行完后a中的值不发生变化。
在(2)中,当执行语句a=f(a)时,同样将实参a的值传递给形参t,然后对形参t进行操作,由于f函数的返回值为结构体A类型,故执行到子函数最后一条语句时,会将t的值返回并赋给a,因此a的值发生了变化。
所以选择AD。所以这两道题不一样!!!
全部回答
- 1楼网友:情窦初殇
- 2021-01-29 16:47
第二题
a=f(a) 用返回的结构体直接赋给结构体a,值就改变了
- 2楼网友:而你却相形见绌
- 2021-01-29 15:12
这两题当然不一样,问题主要出在f函数上,第一个f函数没有任何返回值,而参数也只是普通的值传递而已,并不是指针, 所以f函数中对对象a中作不了任何修改,因为修改的是对象t,而t是对a没有任何影响的(除非它是指针).
而第二个中f函数有返回值,并且返回值赋值给了main函数中的对象a,这也就导致第二个main函数中的对象a发生了改变,因为重新赋值的原因。
- 3楼网友:不服输的倔强
- 2021-01-29 13:34
结果是22
7+7+8=22
你可以将
(++i)+(++i)+(++i)
++i是先+1再计算,还有这里的运算顺序是从左到右,所以应该是
7+7+(++i)=14+8=22(前两个相加时,i先加1,加了两次,所以是7,因为第三个++i还没运算到,所以保持不变)
我要举报
大家都在看
推荐资讯