下面这段C语言程序的运行结果是多少呢?哪位高手给解释一下啊?

作者&投稿:安泊 (若有异议请与网页底部的电邮联系)
下面这段程序的运行结果是多少呢?我运行了一下,是12,可我不理解,哪位高手给解释一下啊?~

struct num
{int a;
int b;
float f;
}n={1,3,5.0};
的含义是定义结构体num,n是该结构体的一个变量,并且被赋值,其中

n={1,3,5.0};

的意思一分别为n中的a,b,c赋值:a等于1,b等于3,c等于5.0

struct num *pn=&n;
的含义是声明一个num型的指针变量pn,指向变量n;

pn->b/n.a*++pn->b
的含义可以理解为

(pn->b/n.a)*(++pn->b)

其中pn->b等于3;n.a等于1;

++pn->b

是先取pn->b的值(等于3;pn->b等价于n.b);再对pn->b做自加运算(结果是4);

所以

(pn->b/n.a)*(++pn->b)

就等价于
(3/1)*(4)
结果就是
12

常量是指在程序运行过程中不会改变的值,pn->b是一个变量,他等价于n.b,所以是可以自加的。

执行过func(x,x+=2)之后,x的值变为8,所以形参a,b接收到的值应为8,8.所以执行过的结果c=a+b=8+8=16,即上机实验的结果为16

最后的结果应该是:
2,3

解释一下:
union的意思是union中的元素都公用一块内存,所以a和b使用了同一块内存存储;也就是说,对于s内的任一个元素来说,经过运算:
s[i].a=n;
s[i].b=s[i].a+1;
以后,b和a的值是相同的。

例如:
n==1,i==0时,s[0].a=1;
s[0].b=s[0].a+1;
结果就是s[0].a == s[0].b == 2

n==3,i==1时,s[1].a=3;
s[1].b=s[1].a+1;
结果就是s[0].a == s[0].b == 4

p=&s[0]的含义是p指向数组s的首地址,
++p->a的含义是说先取成员变量a的值,再对取得的值做累加1的操作。

因为c语言中的关键字union的含义就是说,它所定义的所有的成员变量使用一块共享的内存空间,内存空间的大小是根据成员变量中占用内存最大的来确定的。
一个int型的变量占4个字节,现在,a和b都是int型变量,所以他们共同占用4个字节的内存,共享的意思是说,改变了b的值就等于改变了a的值,所以,经过
s[i].a=n;
s[i].b=s[i].a+1;
的操作以后,a和b都被修改了,并且是一样的,以为他们使用相同的内存。

等于3是因为语句:
++p->a
先执行了p->a的操作,再执行了自加的操作,
p->a的值为2,再自加就变成3了。
操作符“->”的优先级要大于"++"的优先级。

可以,因为p->a等价于s[0].a,所以可以自加。


C语言 线面这段代码有什么问题? 下面这段代码的作用是从五个字符串中...
主要是三个问题:1.对指针的概念有点混淆;2.fun函数中strcmp是用来比较字符串大小的(比的是ascii码值,而不是字符串长度),你是找最长的那个,所以应该用strlen来做比较;3.在fun函数中,如果发现sp比sq[i]的字符串长度小,不应该把sq[i]这个指针去赋给sp,而应该用strcpy把整个字符串赋值过去。

c语言程序代码大全(c语言程序编程代码大全)
C语言源代码,就是依据C语言规则所写出的程序代码,常见的存储文件扩展名为.c文件和.h文件,分别对应C源文件(sourcefile)和C头文件(headerfile)。 C语言是一门编程语言,简单点说,就是由人类书写按照一定规范书写的字符,通过一定手段(编译链接)转换后,可以让电脑或者其它电子芯片"读懂",并按照其要求工作的语言。在所...

如何用Code Blocks编写并运行C语言程序
1、首先打开Code Blocks软件,点击左上角的文件菜单,选择新建下面的项目,如下图所示 2、接下来在弹出的新建界面,我们选择左侧的文件选项,然后选择右侧的C\/C++ source选项,如下图所示 3、然后会进入选择语言的界面,我们这里直接选择C即可,接着点击下一步按钮,如下图所示 4、接下来需要设置文件路...

这是一个C语言程序,是计算三角形面积的,第二幅图%1f%1f%1f是表示什么的...
1f%1f%1f 就是输出3个浮点数,而且点后面保留一位 比如结果是1.222,但是%1f的话就是输出1.2,保留一位

怎么编写C语言程序,如:Helloworld的?
1、点击确定即可,创建出一个helloworld.c的小程序,然后我们就可以编写我们的Hello World小程序了。此时就需要我们的VC++ 6.0来编译此程序,编译无错误才运行此程序,编译按钮和运行按钮如下图的红色箭头处:2、或者可以点击组建工具栏下的编译菜单项,然后再点击执行菜单项,也有快捷键,按Ctrl+F7编译...

如何用c语言编写一个输入一个长方形面积的程序?
方法一:include <stdio.h> include <stdlib.h> int main(){ float a,b,C,S;printf("请输入长方形的长\\n");scanf("%f",&a);printf("请输入长方形的宽\\n");scanf("%f",&b);C=(a+b)*2,S=a*b;printf("长方形的周长是%f面积是%f",C,S);return 0 } 方法二:include <stdio....

急求C语言编写欢迎界面几秒后跳入菜单界面的程序代码,哪位大神会呀_百...
void main(){ int n;printf("欢迎界面");\/\/欢迎界面 Sleep(1000);\/\/延时 system("cls");\/\/清屏 \/\/菜单界面 printf("***\\n");printf("***1、 ***\\n");printf("***2、 ***\\n");printf("***3、 ***

10分钟了解C语言基本语法知识
这个程序所实现的效果很简单,就是在屏幕上输出了一行字符"Hello World"。 #include <stdio.h> int main() { printf("Hello World\\n"); return 0; } 我们根据这一小段代码,借此了解一些C语言的基础语法知识。 1. 主函数 首先,主函数main,一个标准的主函数如下: int main() \/\/ 这是主函数 { return...

用C语言能把程序的界面做的很漂亮吗?
c 语言 可以做出非常漂亮的界面。理论上界面只不过是计算机对每一个像素的控制而已。c 完全有这种能力,只不过较复杂。这个例子看起来就很漂亮嘛。include<math.h> include<dos.h> include<graphics.h> define CENTERX 320 \/*表盘中心位置*\/ define CENTERY 175 define CLICK 100 \/*喀嗒声频率...

如何编写C语言程序?
2.快捷键“CTRL+N”建立新源代码。3.输入源代码,下面给出最简单的Hello,world源代码:include <stdio.h> int main( ){ printf("Hello,World\\n");return 0;} 4.按下F11编译并且运行源代码,得到运行结果:5.点击任意键返回源代码编辑界面可以继续进行开发,接下来就是C语言语法的学习了。

宁强县18276717517: 下面这段C语言程序的运行结果是多少呢?能给我解释一下吗? -
独孤谈麻仁: 执行过func(x,x+=2)之后,x的值变为8,所以形参a...

宁强县18276717517: c语言中,下面程序的运行结果是? -
独孤谈麻仁: 你好 1.程序的运行结果是:1,-2 2.解释每一步的运行过程: #include void main() { int y, a ; y=2, a=1; while (y--!=-1) { do{ a*=y ; a++ ; } while(y--); } printf("%d,%d\n",a,y); } 从y=2,a=1开始哈 (首先我们要知道后自减y--型的返回值是y自减前的值 例...

宁强县18276717517: c语言题目下面程序的运行结果是 -
独孤谈麻仁: #include main() {int a=11,b=10,c=0; a/=b+(b&&c); printf("%d\n ",a);} 我运行过了,是1选b

宁强县18276717517: C语言中,下面程序段的运行结果是? -
独孤谈麻仁: while (a<b<c) 从左至右运算 1<2 所以 a<b的结果为0 0<2 所以(a<b) < c的结果为1 故a b 交换 c减一 选D

宁强县18276717517: 在C语言中,下面程序的执行结果是 ( ) -
独孤谈麻仁: a+=SUM(i+j)/SUM(i+j); 相当于 a=a+SUM(i+j)/SUM(i+j);=a+i+j*i+j+2/i+j*i+j+2=2+1+1*1+1+2/1+1*1+1+2=2+1+1+1+2+1+1+2=11

宁强县18276717517: C语言,下面程序运行的结果是 -
独孤谈麻仁: a<b<c你理解错了,在c语言里不能这样用的,只能写成a<b && b<c,a<b<c在c语言里的真正意思是(a<b)<c,而(a<b)给出的结果是真(1)或假(0),所以其实a<b<c就是1或者0跟c比较.第一次比较,a<b得1(也就是说a<b是真),1比c(=2)小,执行程序,使得a=2,b=1,c=1 第二次比较,a<b得0(也就是说a<b是假),0比c(=1)小,执行程序,使得a=1,b=2,c=0 第三次比较,a<b得1(也就是说a<b是真),1比c(=0)大,不执行程序,所以最后的结果还是a=1,b=2,c=0

宁强县18276717517: 下面C语言程序运行结果是什么
独孤谈麻仁: 结果是2和1,p=d++,是先将d的值赋给p之后d再执行++,所以p是2,至于a的值从来就没变过,因为传的是形参,所以不会改变a的值

宁强县18276717517: 在C语言中,下列代码的运行结果是( ?) -
独孤谈麻仁: 你那什么破答案,你打印下J的值就知道了,选A才是对的,循环的第一次j的值是1,i是0,打印出来的结果是 0,第二次是j的值是2,打印出来的结果是1,第三次j的值是3,进入if中的break循环和后面的语句就不执行了,所以B:012是不可能的,因该是A

宁强县18276717517: C语言 以下程序段的输出结果是多少?? -
独孤谈麻仁: 第一个是100 var 取b得地址 所以*var = b = 100 , 所以b = 110, 所以*var = 110 第二个,因为== 的优先级高于=的优先级,所以先执行 getchar == 'A', 输入A后,二者相等,返回1 所以ch = 1 p = a ,就是取a数组的第一个元素的地址,所以*p = a[0] = 5;*p++ 这儿优先级相等,结合性为从右至左,且p++只在表达式结束后才自增, 所以就等于*p++ = a[0] = 5 同理和上面一样, ++会在表达式结束后自增,(*p)++ = a[0]++ = 5

宁强县18276717517: c语言编程问题,下面的程序输出结果是多少? -
独孤谈麻仁: 以下是答案:整理后的代码:(望采纳)#define MAX 5 int a[MAX],k; int main() { fun1();//使数组每个成员值分别为0,2,4,6,8() fun3(); //输出数组a的成员:02468 fun2(); //这句不能影响数组a的值,所以没啥用 fun3();//再次输出数组a...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网