《C和C++程序员面试秘笈》——1.1 看代码写输出—一般赋值语句

1.1 看代码写输出—一般赋值语句

C和C++程序员面试秘笈
考点: 一般赋值语句的概念和方法

出现频率:

  #include <stdio.h>
  int main(void)
  {
    int x = 3, y, z;
    x *= (y = z = 4); printf("x = %d\n", x);
    z = 2;
    x = (y = z); printf("x = %d\n", x);  
    x = (y == z); printf("x = %d\n", x);
    x = (y & z); printf("x = %d\n", x);
    x = (y && z); printf("x = %d\n", x);
    y = 4;
    x = (y | z); printf("x = %d\n", x);
    x = (y || z); printf("x = %d\n", x);
    x = (y == z)? 4: 5;
    printf("x = %d\n", x);
    x = (y == z)? 1: (y < z)? 2: 3;
    printf("x = %d\n", x);
    return 0;
  }```
【解析】

程序的说明如下:

程序执行至第8行时,x的值为3,y和z未被初始化。此行的执行顺序是首先执行z=4,然后执行y=z,最后执行x=y。因此x的值为34=12。
程序执行至第10行时,z的值为2。此行的执行顺序是首先执行y=z,然后执行x=y。因此x的值为2。
程序执行至第11行时,y和z的值都为2。此行的执行顺序是首先执行y==z,比较y和z的值是否相等,然后将比较的结果赋给x。因此x的值为1。
程序执行至第12行时,y和z的值都为2。此行把y和z做按位与(&)运算的结果赋给变量x。y和z的二进制都是10,因此y & z 的结果为二进制10。因此x的值为2。
程序执行至第13行时,y和z的值都为2。此行把y和z做逻辑与(&&)运算的结果赋给变量x。此时y和z的值都不是0,因此y && z 的结果为1。因此x的值为1。
程序执行至第16行时,y的值为4,z的值为2。此行把y和z做按位或(|)运算的结果赋给变量x。此时y和z的二进制表示分别为100和010,因此y|z的结果为110。因此x的值为110,十进制表示为6。
程序执行至第17行时,y的值为4,z的值为2。此行把y和z做逻辑或(||)运算的结果赋给变量x。此时y和z的值都不是0,因此y||z的结果为1。因此x的值为1。
程序执行至第19行时,y的值为4,z的值为2。此行首先比较y和z的大小是否相等,如果相等,则将x取4和5的前者,否则x取4和5的后者。在这里,y不等于z,因此x的值为5。
程序执行至第22行时,y的值为4,z的值为2。此行首先比较y和z大小是否相等,如果相等,x取1,否则,判断y是否大于z,如果是,则取2,否则取3。在这里,y的值大于z的值,因此x的值为3。
总结:这个考题只是考查各种基本的赋值运算。这里,读者要注意位运算与逻辑运算的区别,以及三元操作符的用法。通过程序代码17行以及19行的举例,我们可以发现三元操作符有时可以代替条件判断if/else/else if的组合。

【答案】

x = 12
x = 2
x = 1
x = 2
x = 1
x = 6
x = 1
x = 5
x = 3`

时间: 2025-01-28 00:06:12

《C和C++程序员面试秘笈》——1.1 看代码写输出—一般赋值语句的相关文章

《.NET程序员面试秘笈》---- 面试题11 举例说明简单工厂模式的作用

面试题11 举例说明简单工厂模式的作用 .NET程序员面试秘笈 [考点]工厂模式的理解,工厂模式在实际应用中的编写. [出现频率] [解答] 在软件系统中,经常面临着"一系列相互依赖的对象"的创建工作:同时由于需求的变化,往往存在着更多系列对象的创建工作.为了绕过常规对象的创建方法(new运算符创建实例),工厂模式提供一种"封装机制"来减少使用程序和这种"多系列具体对象创建工作"的耦合性. 说明: 这里的程序指客户程序之类的使用者. 简单工厂模式

《.NET程序员面试秘笈》----面试题16 请简述 .NET的命名空间

面试题16 请简述 .NET的命名空间 .NET程序员面试秘笈 [考点].NET的命名空间的基本理解,自定义命名空间的知识,在程序中使用命名空间的各种技巧. [出现频率] [解答] 使用命名空间的方法可以反映程序中的逻辑关系,并且可以有效避免类名冲突.命名空间就是各种类或其他类型名称的逻辑组织方式,而不代表物理组织方式.例如以下代码: System.Windows.Forms.MessageBox.Show("文本内容"); 在执行以上代码时,将跳出一个带有"确定"

《Java程序员面试秘笈》—— 面试题11 使用jar命令

面试题11 使用jar命令 Java程序员面试秘笈 请使用jar命令,将test文件夹压缩成.jar文件,并简述其压缩包的结构. 考点:对于Java程序员来说,更多情况下是使用的集成Java开发工具,例如JBuilder.Eclipse等,而对于最基本的Java编译和常见的命令行工具往往都不熟悉.这个面试题主要考察求职者对于Java命令行基本工具的使用,从而了解求职者对Java编程的熟悉程度. 出现频率: [面试题解析]熟练的Java开发者应该掌握常用的Java命令行工具.求职者应该熟练掌握ja

《C和C++程序员面试秘笈》——1.8 C++与C有什么不同

1.8 C++与C有什么不同 C和C++程序员面试秘笈 考点: C和C++的联系与区别 出现频率: [答案] C是一个结构化语言,它的重点在于算法和数据结构.对语言本身而言,C是C++的子集.C程序的设计首要考虑的是如何通过一个过程,对输入进行运算处理,得到输出.对于C++,首要考虑的是如何构造一个对象模型,让这个模型能够配合对应的问题,这样就可以通过获取对象的状态信息得到输出或实现过程控制. 因此,C与C++的最大区别在于,它们用于解决问题的思想方法不一样. C实现了C++中过程化控制及其他相

《Java程序员面试秘笈》—— 面试题12 如何执行mian()方法

面试题12 如何执行mian()方法 Java程序员面试秘笈 利用Java SDK中哪一条命令能够执行test的main()方法? (a)java test (b)javac test (c)java test.java (d)java test.class (e)java test.main 考点:考察求职者对java命令的熟悉程度. 出现频率: [面试题解析]求职者容易出现的错误是选择了(d).实际上,java命令后面只需要class文件的名称就可以,不用加入.class全名.如果使用jav

《.NET程序员面试秘笈》----面试题13 举例说明索引器的作用

面试题13 举例说明索引器的作用 .NET程序员面试秘笈 [考点]索引器的理解,this在索引器中的作用. [出现频率] [解答] 索引器可以使客户程序很方便地访问类中的集合或数组,访问方法类似于通过索引访问数组,并且索引器向客户程序隐藏了内部的数据结构.索引器和属性同样使用get和set访问器读取.写入值,不过索引器的get和set访问器必须具有与索引器相同的形参表.但是属性可以为静态成员,而索引器必须为实例成员.索引器不支持类似于属性的自动实现的语法. 说明: 形参表即为声明索引器时接收的形

《.NET程序员面试秘笈》----第1章 .NET概念题 面试题1 简述面向对象的程序设计思想

第1章 .NET概念题 .NET程序员面试秘笈 本章内容包含面向对象程序设计和.NET的基础概念题,由于这部分题目涉及的范围比较广,因此在很多公司的面试题中占了比较大的比重.很多.NET程序员在编写代码时非常熟练,但往往缺乏对基础知识的深刻理解,从而导致面试失败.这类知识是程序设计的基础,如果不加以重视,程序编写就没有创造性,只能学一步,做一步. 面向对象编程是当前流行的编程方式,被大多数高级语言支持..NET程序同样是基于面向对象的设计,只有深刻理解面向对象的编程理念,才可以开发出结构良好的.

《.NET程序员面试秘笈》----面试题12 访问关键字this和base有什么作用

面试题12 访问关键字this和base有什么作用 .NET程序员面试秘笈[考点]this的理解,base的理解. [出现频率] [解答] this关键字用于引用类的当前实例.base关键字用于派生类访问基类成员. 为了说明this和base在类中的具体应用,在ch01目录下新建一个程序文件,并命名为This.cs,编写代码如程序1.13所示. 程序1.13 this和base示例:This.cs using System; class This { static void Main() { C

《C和C++程序员面试秘笈》——1.2 看代码写输出—C++域操作符

1.2 看代码写输出-C++域操作符 C和C++程序员面试秘笈考点: C++域操作符的使用 出现频率: 请指出下面这个程序在C和C++中的输出分别是什么. #include <stdio.h> int value = 0; void printvalue() { printf("value = %d\n", value); }; int main() { int value = 0; value = 1; printf("value = %d\n", v

《C和C++程序员面试秘笈》——1.5 选择编程风格良好的条件比较语句

1.5 选择编程风格良好的条件比较语句 C和C++程序员面试秘笈考点: 良好的编程风格 出现频率: A.假设布尔变量名字为flag,它与零值比较的标准if语句如下. 第一种: if (flag == TRUE) if (flag == FALSE)``` 第二种: if (flag) if (!flag)`B.假设整型变量的名字为value,它与零值比较的标准if语句如下. 第一种: if (value == 0) if (value != 0)``` 第二种: if (value) if (!