请教C语言二级习题!

2024-12-27 14:43:09
推荐回答(5个)
回答1:

第一题:
这个题主要考察共用体。main()函数体的第一行用union关键字定义了一个共用体结构,共用体结构的特点是
1、共用体变量所占的内存长度等于最长的共用体成员的长度;在这个共用体中最长的成员是结构体成员in,它占有两个int型的内存长度,a和b都只占有一个int型的内存长度,所有共用体变量e占有的内存是两个int型的内存长度。
2、共用体的成员都是从同一个内存地址开始存放。也就是说e.a,e.b,e.in.x都是占用的第一个int型的内存空间,e.in.y则占用第二个int型的内存空间;内存空间值的修改总是覆盖的!
这道题主要涉及这两点,下面逐条显示e的两个int型的内存空间值的变化:
e.a=1 //1,y
e.b=2 //2,y
e.int.x=e.a*e.b; //4,y
e.int.y=e.a+e.b; //4,8

第二题:
这个题主要考察对break和continue的理解。break是跳出当层循环,在此题中,只有一层循环即for循环,所以一旦遇到break,就会结束for循环;continue是跳出当次循环,此题中,遇到continue就会执行a++,然后判断a<=100,看是否循环继续。我把每次循环a,b的值写下来,你再思考一下。
a=1,b=1:第一个if不运行,第二个if运行,b=4,continue
a=2,b=4:第一个if不运行,第二个if运行,b=4,continue
//循环几次后,你发现只要b < 20,总是进第二个if的
a=3,b=7
a=4,b=10
a=5,b=13
a=6,b=16
a=7,b=19
a=8,b=21:第一个if运行,退出程序
这个题应该是要输出一共循环多少次吧?就是a的值。
在这个题中,b-=5是永远不会运行的!

第三题:
这个题主要考察static。用static申明的变量缺省状态下被初始化为0。如:
int b[8][8]; //没有初始化
static int a[8][8]; //所有单元均被初始化为0
这样,在第三个for循环里,你会发现虽然i被重置为0,但是j的值此时为3,所以x累加的其实是a[0...7][3]的值,而这些内存单元在函数中并没有被修改,仍为0.

第四题:
这个题你是不是抄错了。。。

回答2:

第一题:
在共用体中,后一次赋值总是覆盖前一次的赋值即共用体中只保留最后一次赋值,这我想你该懂吧。
在e.a=1;e.b=2;中,e.b=2的值覆盖e.a=1的值,即e.a=2,所以e.in.x=e.a*e.b=2*2=4;而此后e.in.x=4的值有覆盖了e.b与e.a,即e.a==e.b==4,所以e.in.y=e.a+e.b=4+4=8.
你可能会问最后的输出为何是4,8而不是8,8,即e.in.y的值为何没有覆盖e.in.x的值,那时因为e.in.y与e.in.x都为结构体元素。

第二题:
你代码有误,没有输出,而且格式也有错误,你少了个大括号“}”,不知道“}”是在语句b-=5的前面还是后面,这关系到此语句能不能执行的问题。

第三题:
for(i=0;i<3;i++)
for(j=0;j<3;j++)
a[i][j]=2*i+j;
语句只对部分元素赋值,即只对0-2行和0-2列赋值,其他未赋值的元素值为0,而且执行完这部分循环语句后j=3,
你仔细看看分析分析这个语句
for(i=0;i<8;i++)
x+=a[i][j];
其中的j其实是个定值3,即求a[i][3]的值,也即求i行第三列的值的和,而第三列的值始终为0所以求完和后x=0

第四题:
抱歉,暂没搞懂,运行起来结果确实是3,就是不知这3从何而来。

回答3:

第一题.因为你用的union。这是一种数据格式,它可以存储不同的数据类型,但是他在某个时刻只能存储其中的一种,
比如
union abc
{
int a;
double b;
char c;
}temp;
在某个时刻temp只能是int,double,char中的某一种。它最大的一个特点是:union里的所有数据类型共用一个地址。
所以在你的题目中
e.a、e.b、e.in.x、e.a*e.b共用的是一个地址。那么不难得到正确答案。

第二题,关键是你对continue的理解。
continue是指本次循环结束,直接执行a++,然后进行下一次循环。不会走到b-=5; 。

第三题,用了static。你的数组会被初始赋值0。后面所做的所有操作没有意义,因为你加的时候,j=3(j此时是有值的)。而这列你没有对他赋值,所以全是0.所以最后结果是0.

第四题,把我给弄郁闷了。。你只有去问其他人了。我解释不了,没有返回值的函数,默认返回什么。。。。

回答4:

第一题是考联合体,实际上e.a和e.b和e.in.x所占的内存是同一块,也就是说是同一个变量。所以e.in.x=e.a*e.b;这一句实际上是e.in.x=2*2。理解了这里,后面一句就简单了,就是e.in.y=4+4 。

第二题我不知道你要求的是什么,而且题目也不对,少了个 } 。

第三个是因为初始的static int a[8][8] 是全0矩阵,求x的时候,j 已经固定等于3了,而这一列还没有赋值,仍然是全0,所以求和之后还是0 。

第四个题目也不对,因为fun(a,10)计算出来是没有返回值的,这是个错误的程序,执行的结果无法预料。

回答5:

第一题可以看下我对这个问题的回答:
http://zhidao.baidu.com/question/89892573.html