读程序,写结果,具体程序下图
1、第一题:
先了解以下基本知识:
a++和++a的区别在于:如果是表达式的一部分的话,那么+1的顺序会影响到结果
如
int a=1;
int b=1+a++;
则b=2;a=2
而int b=++a+1;
则b=3;a=2;
如果表达式就是一个简单的a++或++a;那是一样的
所以第一行a++ + ++b = 3 + 8 = 11,其中a++是先取值再累加,所以为3,++b是先累加再取值,所以是8,两者之和为11;
到第二行的时候a=4,b=8了,b%a表示求b除以a即8除以4的余数,所以是0;
第三行,a=4,b=8,所以a>b是不成立的,其值为1,!表示取反,1取反后是0,这里要注意的是bool类型其实只有两个值true(1)、false(0),表达式成立值就是true,不成立就是false,true取反就是false,false取反就是true;
第四行,a=4,b=8,所以两者之和是12;
第五行,&&表示逻辑与,a&&b表示对表达式a和b取逻辑与,其结果是bool类型,即true或false,也就是1或0,对于整型值,非0就表示真,0表示假,因为这时a、b均非0,因此两个数值相与后仍是真,即结果为1.
2、第三题:
先了解以下背景知识:
所有的ASCII码都可以用“\”加数字(一般是8进制数字)来表示。而C中定义了一些字母前加"\"来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思了。
字符型常量所表示的值是字符型变量所能包含的值。我们可以用ASCII表达式来表示一个字符型常量,或者用单引号内加反斜杠表示转义字符。
'A', '\x2f', '\013';
其中:\x表示后面的字符是十六进制数,\o表示后面的字符是八进制数。例如十进制的17用十六进制表示就是
‘\x11’,用八进制表示就是‘\021’;
printf()函数是式样化输出函数, 一般用于向准则输出设备按规定式样输出消息。正在编写步骤时经常会用到此函数。printf()函数的挪用式样为: printf("<式样化字符串>",<参量表>);
其中式样化字符串包括两部分内容: 一部分是正常字符, 这些字符将按原样输出;另一部分是式样化规定字符, 以"%"开端, 后跟一个或几个规定字符, 用来确定输出内容式样。 参量表是需求输出的一系列参数, 其个数务必与式样化字符串所阐明的输出参数个数一样多, 各参数之间用","分开, 且顺序逐一对应, 不然将会出现意想不到的过失。
注意:函数printf从右到左压栈,然后将先读取放到栈底,最后读取的放在栈顶,处理时候是从栈顶开始的,所以我们看见的结果是,从右边开始处理的。
所以第一行:结果应该是:aabb cc abc
其中第一个%c用c1表示的字符a代替,第二个%c用c2表示的字符b代替;第三个%c用c3表示的字符c代替,所有\t表示按一次tab键,\n表示换行。
第二行结果应该是: A N
其中,第一个%c用c4表示的字符A(‘\101’表示八进制101所对应的字符,八进制101就是十六进制41,对应的字符就是A)代替,第二个%c用c5表示的字符N(‘\116’表示八进制116所对应的字符,八进制116就是十六进制4E,对应的字符就是N)代替,\t表示按一次tab键。
为什么第三题答案中要有那么多空格?
TAB键的作用:
一个制表栏是8个字符的大小
假设printf(“1111111\t1”),那么输出的是 1111111 1
但是如果是1111111111\t1的话那就是 1111111111 1
因为第二次输出的前面那串1已经超过8个了所以就自动跳到下个制表栏也就是第17位的地方开始
主要是用于让输出的东西像表格一样每列平齐
所以\t会输出多少个空格取决于前面输出的字符数有多少,如果前面输出的字符数是8的倍数,\t就输出8个空格,或者你这么算\t输出的空格数就是8-本行前面输出的字符数除以8的余数