嵌入式软件开发试题 2024.9.2

⦁    设有说明:char w; int x; double y; 则表达式w*x-y 值的数据类型为( )。 (智洋)
A. float    B. char     C. int     D. double

答案:D

解析:由题可知有char,int,double3个数据类型,其中char,int为整形数据字节数分别为1和4,double是双精度的浮点数类型,但是这里存在浮点数类型且double的字节是最高的(8),这个时候会对低字节的类型转化为高字节的数据类型,所以这道题选D。
⦁    若有以下类型说明:(    ) (北京凝思软件)    char w;     int x;     float y, z;  则表达式w*x+z-y的结果为____类型。
A.float         B.char          C.int            D.double

答案:A

解析:由题可知有char,int,flaot3个数据类型,其中char,int为整形数据字节数分别为1和4,float的浮点数类型,但是这里存在浮点数类型且float的字节是最高的(8),这个时候会对低字节的类型转化为高字节的数据类型,所以这道题选A同上题解法相同。
⦁    假定下列 x 和 y 均为 int 型变量,则不正确的赋值为( );(晟安信息)
A. x+=y++         B. ++x=++y
C. x=++y             D. x++=y++

 

答案:B D

解析:++在前先加1再运算,++在后先运算再加1 ,  = 右边只能是变量。

⦁    以下程序运行后输出的结果是______。(电工时代)
#include <stdio.h>
int main()
{
int k = 011;    
printf("%d\n", k++);
    return 0;
}

答案:9

解析:int k=011; 011 是一位八进制数 0000 1001; k++=k+1 也就是0000 1001+0000 0001=

0000 1010 结果就是输出结果 10。


⦁    请正确填写输出结果。(恩易物联2)
int main()
{
    int a = 15;
    int b = 20;
    int c;
    a && b = ? (1)
    a & b = ? (2)
    a || b ? (3)
    a | b = ? (4)
    a >> 2 = ? (5)
}
(1)_____(2)________(3)______(4)________(5)________

答案:(1)1   

解析:&&代表 逻辑与 ,法则是全真为真,遇假全假。(0为假,1为真)

答案:(2)0000 0100   =4

解析:&代表位于,int a的二进制0000 1111  int b的二进制 0001 0100;a&b是与a&&b相同的法则,同为全真为真,遇假全假。 对位相加。

答案:(3)1

解析:||代表 逻辑或,法则为遇真为真,全假则假。、

答案:(4)0001 1111   =31

解析:|代表位或,法则是遇1为1。0|1=1 ,1|0=1 , 1|1=1, 0|0=0。

答案:(5)0000 0011   =3

解析:>>代表a右移2为 0000 1111 右移两位变为 0000 0011 。


⦁    为了表示“a和b都不等于0”应使用( )。(山东丁一)
A. (a!=0) || (b!=0)             B. allb
C. !((a==0)&&(b==0))         D. a&d

答案:C

解析:A:(a!=0)||(b!=0)  已知a,b都不等于0 ;  !=为不等于,||为或者,他们有一条成立了都能为真的,所以A错误。B,D答案明显出错。C答案:!逻辑非,已经知道a=0,b=0,而逻辑非是非真为假,非假为真,则对立面就是a和b都不等于0,所以选c。

⦁    设 a=3,b=4,c=4,则表达式 a+b>c&&b==c&&allb+c&&b==c 的值为(    )。(易购软件)

答案:1


⦁    已知 a = 13, a << 2的十进制数值为 (    )。(易购软件)

答案:52

解析:13的二进制 0000 1101 左移两位变为 0011 0100 转为10禁止为 52
⦁    int x = 2, y = 3, z = 4; 则表达式 x + (y > !z)的值为( )。(易购软件)

答案:3


⦁    能正确表示a和b同时为正或同时为负的逻辑表达式是:( ) (宇视科技,紫光云数,新华三,石峰)
A. (a >= 0 ll b >= 0) && (a < 0 ll b < 0)
B. (a>=0 && b>=0) && ( a < 0 && b < 0)
C. (a + b > 0) && (a + b <= 0)
D. a * b > 0

答案:D

解析:A答案:表示是是一个a和b>=0 和a<0或者b< 不能和a,b同时为正或为负成立。B答案:a和b都大于等于0而且a和b小于0;C答案:a+b>0且b>=0但是a+b又同时<=0 答案错。D答案:可以,a*b>0,a和b得符号相同。


⦁    int a=1, b=2, c=3, d=4, m=2, n=2; 执行 (m=a>b) && (n=c>d) 后,n=________(杭州快越科技)

答案:n=0

解析:执行后c>d赋值给n ,c>d输出为0赋值给n。
⦁    语句 printf("%d \n", 12 & 012); 的输出结果是:( ) (紫光云数,新华三,石峰)
A. 12     B. 8         C. 6         D. 012

答案:B 

解析:12的二进制位 0000 1100 ,  012 的十进制为10 二进制为0000 1010,12&012 为0000 1000 输出为 8


⦁    有如下代码char cTwoLength = 153;那么 print("\r\n %d", cTwoLength >> 4)打印的值为 ________ (紫光云数)
提示:char是有符号字符型,取值范围[-128 , +127],153属于最大值越界,结果是-103,然后对-103进行右移4位的计算输出。右移规则:
- 对于无符号整数,左侧补0。
- 对于有符号整数,如果原数是正数,则在左侧补0;如果原数是负数,则在左侧补1。
提示到这里,你试试计算一下吧,一定要理解清楚原理啊

答案 :-7

解析:char是有符号字符型,取值范围[-128 , +127],153属于最大值越界,结果是-103,然后对-103进行右移4位的计算输出。-103 的二进制为  1110 0111, 且是有符号字形 为1,反码为0001 1000 补码为 1001 1001  右移4位 0000 1001 。反码为 1111 1000 原码为 0000 0111 因为是有符号的字符 所有源码为 1000 0111,结果为-7。


⦁    以下所列的C语言常量中,错误的是: (华三外协,紫光云数,新华三,石峰)
A.    0.1f             B. 1.0e0.1     
C. 'z'             D. '\110'

答案:B

解析:1.0e0.1 指数只能是整数


⦁    sizeof(float)是( )。(山东丁一)
A. 一个双精度型表法式     B. 一个整型表达式
C. 一个数调函用           D. 一个不合法的表达式

答案:B
⦁    一个32位的机器,一个 char 代表的范围是?一个 int 代表的范围是?(广域科技)

答案:1.char代表范围【-128,+127】。int代表范围【-2^31,2^31-1】。
⦁    下面的代码输出是什么,为什么? (信雅达)
void foo(void)
{
    unsigned int a = 6;
    int b = -20;
    (a+b > 6) ? puts(">6") : puts("<=6");
}

答案:>6 

解析:在这里 int b 被unsigned int a =6 变为无符号数 unsigned int b = -20 ,取值范围为       【0,2^31-1】。属于最小值越界 ,输出大于0 所以大于6。
⦁    按位或运算符(|) (深圳元征信息科技)  0x10 | 0x01 = ? 十六进制的结果是多少?

答案:0x11  

解析:转化为二进制 0x10 为  0000 0000 0001 0000  ,0x01 为 0000 0000 0000 0001,按位或运算位0000 0000 0001 0001。答案为 0x11
⦁    按位与运算符(&) (深圳元征信息科技)  0x10 & 0x01 = ? 十六进制的结果是多少?

答案:0x00

解析:转化为二进制 0x10 为  0000 0000 0001 0000  ,0x01 为 0000 0000 0000 0001,按位或运算位0000 0000 0000 0000。
⦁    关于条件的书写
判断year是不是闰年    
if(                     )

if(((year%4==0 && year%!=0) || year%400==0))
判断num是偶数
if(                     )

if( num%2==0)
判断num是一个三位数
if(                     )

if(num>=100&&num<=1000)
判断字符ch是大写字母
 

if(ch>'A'&&ch<'Z'  )

判断字符ch是偶数数字字符
if( ch%2==0&&ch>='0'&&ch<'9'  )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值