⦁ 设有说明: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' )