C语言二级考试问题

1、已有定义uniondt{inta;charb;doublec;}data;以下叙述中,错误的是()。A、data的每个成员起始地址相同B、变量data所占的内存字节数... 1、已有定义union dt{int a;char b;double c;}data;以下叙述中,错误的是()。
A、data的每个成员起始地址相同
B、变量data所占的内存字节数与成员c所占字节数相等
C、程序段:data.a=5;printf("%f\n",data.c);输出结果为5.000000
D、data可以作为函数的实参
标准答案选择C D在我们的教材上说共用体变量不能作为函数的参数,请求解释;C答案用VC6试过输出一个看似随机的数,我不明白。 AB我都明白。
2、已有声明:int a=1,b=3,c=5,d=4,x;
则执行以下程序段后的x的值为()。
if(a<b)
if(c<d) x=1;
else if(a<c)
if(b<d) x=2;
else x=3;
else x=6;
else x=7;
A、1 B、3 C、6 D、2
标答选择D 知道If-else的就近匹配原则 但是在这道题中不知道怎么用 求较详细的解答过程
3.请问 例如在
int i;
for(i=0;i<=100;i++)
{
if(i%3==0)continue;
printf("%d",i);
}
continue 跳出本次循环,跳过continue之后的语句的时候 是否跳过i++直接去检测循环条件?

最后 谢谢大神能帮助。
展开
 我来答
百度网友21a360264
2014-03-14 · TA获得超过1855个赞
知道小有建树答主
回答量:640
采纳率:100%
帮助的人:365万
展开全部

LZ能实际实验来获取答案这点值得肯定,计算机编程本来就是动手的学问。

1、选C。至于D,C语言国际标准没有规定共用体(联合)类型变量不能做函数参数的。持这种说法的教材是以讹传讹。或者说,有谁发现哪种通用的C编译器对以共用体(联合)类型变量做函数参数的代码报错了?

至于LZ实验的结果,得等理解了两种知识后才能解释,1.共用体(联合)的内存布局,2.IEEE-754浮点数的存储格式。

2、选D。其实写这样的代码纯粹是蛋疼。加花括号及缩进之后如下(其他词法无需任何变动)

if(a<b){
    if(c<d) x=1;
    else if(a<c){
        if(b<d) x=2;
        else x=3;
    }
    else x=6;
}
else x=7;

C基于语法上的嵌套原则的就近匹配随处可见。理论上讲起来很容易,但直观上不容易看,就像盒子套盒子,容易理解但看着容易晕。

两原则:一对匹配的if-else结构是一个整体的语句块,必定是可以用花括号把它们单独包围在一起的。以下这个语句的语法

while(i!=1)
    if(i%2==1) i=i*3+1;
    else i=i/2;

是正确的。

第二,形式上,一对匹配的if-else结构里面if与else中间必定是隔着两样东西,一对圆括号和一个语句块,不多不少。

这里的语句块可以是一个普通语句,或者是一对花括号包围起来的东西或者叫块,或者是if语句、if-else语句、for语句、do-while语句等等语句块,单只有一个分号或一对花括号的空语句空块也可以。这些复合语句里面可以是更复杂但按照类似规则组合起来的语句,这就是嵌套原则。

else语句不能单独存在,那算是语法错误。

方法上,每看到一个else语句就按照第二条往回寻找最近的未匹配的if语句,将它们作为一个整体绑定,或者按第一条用花括号包围起来。

注意C语言没有elseif或者elif关键字,但else if两关键字连用的结果与之等效,将一对if-else语句接给一个else后面,结果就等效了,想想是不是。原因就是else的“就近匹配原则”。

3、continue语句的准确语义是直接跳到循环的结尾。也就是按流程图中直接跳到循环体之后的下一环节。或者说,略过循环体中continue语句后面的语句直接计算增量表达式。

城华smile
2014-03-13 · 超过20用户采纳过TA的回答
知道答主
回答量:55
采纳率:0%
帮助的人:22.2万
展开全部

虽然有点小忙,但还是帮帮忙吧,希望对你有所帮助


1:共用体中对a赋值不影响c值,故为0.000000

2:依次往下执行,

if(a<b)不成立
if(c<d) 不成立
else if(a<c)成立,继续下一条语句
if(b<d)成立,故执行语句 x=2;

依次对应的三个else语句不被执行

3:执行continue语句会跳过for循环里面continue之后的语句,继续for循环,i++当然不会跳过执行

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
三神教丶炽阳
2014-03-14
知道答主
回答量:15
采纳率:0%
帮助的人:6.5万
展开全部
C是数据存放的方式, double是双精度, 存放数据在32位系统占8个字节, 前面4个字节是小数部分, 后面4个才是放的整数部分, 所以你的整数部分是不确定的, 因为定义的是int类型, 他在联合union中只占了4字节, 没有初始化double型, 那整个联合只有4个字节, 后面4个不确定 所以C错

2. 分下段就好了
if(a<b) { //这是起始 标记1号
if(c<d) x=1; //这是1号的分支 标记2号
else if(a<c) //这也是1号的分支, 2号不执行 他就执行 标记3号
if(b<d) x=2; //这是3号的分支
else x=3; //这是3号的分支
else x=6; // 这是1号的分支, 2 3 号都不执行 他来溜溜
else x=7; // 这是和1号同级别, 一号不满足条件 他来溜溜

3 不, 他只是跳过后面的printf以及后面的语句(你printf后面没语句, 如果有也跳过), i++会执行.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式