返回顶部

一些难堪的题目

第一道

#include<iostream>
using namespace std;
int main()
{
int a = 2147483647;
a = a + 1;
cout << "a=" << a << endl;
 return 0;
}

输出:-2147483648

整型变量的边界,超过上界就回到下界。

如果是 2147483647+5 呢?

答案 -2147483644

第二道

 #include<iostream>
using namespace std;
int main()
{
    int  b = 0, a = 100;
    char  ch = 'A';
    b = a + ch;
    cout << ch << " " << int(ch) << " " << b << endl;
    return 0;
}        
输出:A 65 165

字符的几个常见ACSII码值:

字符 ASCII
A 65
a 97
0 48

注意小写变大写就是 +32

第三道

#include<iostream>
using namespace std;
int main()
{
    int a;
    char b, ch;
    a=50;
    ch=’B’;
    b = a + ch;
    cout << ch << " " << int(ch) << " " << b << endl;
    return 0;
}   

输出:B 66 t

同第二道

强制类型转换:类型+()

第四道

#include<iostream>
using namespace std;
int main()
{
     char x,y;
     x = ‘ m ’ ;
     y = ‘ n ’ ;
     int n;
     n = x < y;
     cout << n << endl;
     n = x == y - 1;
     cout << n << endl;
     n = ( ‘ y ’ != ‘ Y ’ ) + (5 > 3) + (y - x == 1);
     cout << n << endl;
     return 0;
}

输出:1
1
3

第一:n = x < y

因为 'm' < 'n',所以 x < y ,所以 n = 1.

第二:n = x == y - 1

因为 x == y - 1为真,所以 n = 1

第三:n = ('y' != 'Y') + (5 > 3) + (y - x == 1)
因为 'y' != 'Y' 且 (5 > 3) 且 (y - x == 1),所以 n = 1 + 1 + 1,所以 n = 3

第五道

#include<iostream>
using namespace std;
int main()
{
	int a,b,c,d;
	a = 2; b = 3; c = 0;
	d = (a + b || c);
	cout << d << endl;
	return 0;
}

输出:1

算术运算符 级别高于 逻辑运算符,故 a+b先算 5

第六道

#include<iostream>
using namespace std;
int main(){
    int a,b,c,d;
    a = 2;
    b = 3;
    c = 0;
    d = (a > b) && (c = 4);
    cout << d << ” ” << c << endl;
    return 0;
}
输出:0 0

涉及逻辑运算符的短路求值。

在 与运算&& 中表现为: 当前一个条件不成立时,其后的条件判断会中止(即短路)

d = (a < b) && (c = 4) 时,输出 1 4,起到对照,证明了短路求值的真实性。

第七道

#include<iostream>
using namespace std;
int main()
{
    int x = 5,y = 10,z;
    z = x > y ? x : y;
    cout << z << endl;
    z = x > 0 ? 1 : -1;
    cout << z << endl;
    cout << (x % 2 == 0 ? “ x is even ” : ” x is odd “ ) << endl;
    return 0;
}

输出:10
1
x is odd

此题涉及三目运算符? :

a?x:ya成立时,运算结果取x,反之取y

另,题中x % 2 == 0 可简写为 x & 1(仅x>=0时)

第八道

#include<iostream>
using namespace std;
int a,b;
int main()
{
	a = b = 5;
	cout << a << ' ' << b << endl;
	(a = b) = 10;
	cout << a << ' ' << b << endl;
	(a += b) = 20;
	cout << a << ' ' << b << endl;
	return 0;
}
输出:5 5
10 5
20 5

按照括号安排运算顺序,不再多说。

第九道

#include<iostream>
using  namespace  std;
int  main()
{
    int  a,x, y;
     a=10;
     x=a++*5;
     y=++a*5;
     cout<<“x=“<<x<<“y=“<<y<<“a=“<<a<<endl;
    return  0;
}

此题涉及自增自减运算。

以下给出几个例子:

假设有 a = 1, b = 2,按照以下语句依次执行运算。

  • a++

此时 a = 2, b = 2

  • ++b

此时 a = 2, b = 3

  • int x = a--

此时 x = 2, a = 1, b = 3

  • int y = a+++b

此时 y = 4, a = 2, b = 3

以上总结出:

1、当自增减运算变量单独自增减(即不被赋值)的情况下,无论符号前后。

2、当自增减运算变量在自增减的同时,又被另一变量赋值时。则符号在前时,先改变此变量的值再参与运算;符号在后时,先参与运算后改变此变量的值。

第十道

#include<iostream>
using namespace std;
int main()
{
	int  a=0, b=3, c, d;
	if(c=a<b)
	{
	       d=1;
	       cout<<"d="<<d<<"\n";
	}
	return 0; 
}

输出:d=1

关于此问题的讨论,参见 灌水区传送

当 if 语句中包含变量赋值时,不考虑是否赋值成功,而考虑所赋之值的非零性。

尾声

到此为止,题单还没结束。我将在明天继续更新!

posted @ 2022-07-21 13:15  zrc4889  阅读(27)  评论(0)    收藏  举报