C语言二级考试问题
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++直接去检测循环条件?
最后 谢谢大神能帮助。 展开
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语句后面的语句直接计算增量表达式。
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++会执行.