本章涉及数据与数据类型、常量与常量定义、变量与变量说明、数据的运算、表达式与赋值语句等内容,都是C语言程序设计中非常重要的基本概念。现综合举例说明,以便读者能更深入地掌握本章涉及的内容。
(1)写出下列程序的运行结果。
/* 文件名:chap02_6.cpp */
#include<stdio.h>
void main()/*注意转义符号\t和\b的含义*/
{
printf("The file name is c:\tools\booklist.txt\n");
printf("1234567890123456789012345678901234567890\n");
}
运行结果:
The file name is c:oolooklist.txt
1234567890123456789012345678901234567890
(2)分析下列运算的结果。
/* 文件名:chap02_7.cpp */
#include<stdio.h>
#define printt(x,y,z) printf("x=%d,y=%d,z=%d\n",x,y,z) /*定义宏替换*/
void main()
{
int x,y,z;
x=y=z=2;
++x||++y&&++z; /*由于++x后不为0,所以不再执行||后的++y&&++z*/
printt(x,y,z); /*输出:x=3,y=2,z=2*/
x=y=z=2;
++x&&++y||++z; /*由于++x&&++y后不为0,所以不再执行||后的++z*/
printt(x,y,z); /*输出:x=3,y=3,z=2*/
x=y=z=2;
++x&&++y&&++z;/*由于是&&运算,要依次执行++x、++y、++z后才能得到结果*/
printt(x,y,z); /*输出:x=3,y=3,z=3*/
/*虽然以下x、y、z的值都<0,但运行时遵从的规律不变*/
x=y=z=-2;
++x||++y&&++z;
printt(x,y,z); /*输出:x=-1,y=-2,z=-2*/
x=y=z=-2;
++x&&++y||++z;
printt(x,y,z); /*输出:x=-1,y=-1,z=-2*/
x=y=z=-2;
++x&&++y&&++z;
printt(x,y,z); /*输出:x=-1,y=-1,z=-1*/
}
(3)分析下列位运算的结果。
/* 文件名:chap02_8.cpp */
#include<stdio.h>
#define PR(x) printf("d=%d;octal=%o;hex=%x\n",x,x,x)/*定义宏替换*/
void main()
{
unsigned a=0252,b=0xcc,x;
printf("a=%u,b=%u\n",a,b); /*输出:a=170,b=204*/
x=a&b;PR(x); /*输出:d=136;octal=210;hex=88*/
x=a|b;PR(x); /*输出:d=238;octal=356;hex=ee*/
x=a^b;PR(x); /*输出:d=102;octal=146;hex=66*/
}
(4)分析下列"?"运算的结果。
/* 文件名:chap02_9.cpp */
#include<stdio.h>
void main()
{
int x=1,y=2,z=3;
x+=y+=z;/*等价于:y=y+z;x=x+y;*/
printf("%d\n",x<y?y:x);/*输出x:6*/
printf("%d\n",x<y?x++:y++);/*输出y:5。输出后y加1,x不加1*/
printf("%d,%d\n",x,y); /*输出x和y:6,6*/
printf("%d\n",z+=x>y?x++:y++); /*输出z:9。按优先级计算输出后y加1*/
printf("%d,%d\n",y,z); /*输出y和z:7,9*/
x=3;
y=z=4;
printf("%d\n",(z>=y&&y==x)?1:0); /*输出:0*/
printf("%d\n",z>=y&&y>=x); /*输出:1*/
}
(5)分析下列++和--运算的结果。
/* 文件名:chap02_10.cpp */
#include<stdio.h>
void main()
{
int a=5,b=4,x,y;
x=a++*a++*a++; /*后缀形式。先取x的值运算后再进行三次++运算*/
y=--b*--b*--b; /*前缀形式。先进行三次--运算后再取b的值相乘*/
printf("a=%d,x=%d\n",a,x); /*输出:a=8,x=125*/
printf("b=%d,y=%d\n",b,y); /*输出:b=1,y=1*/