实验二 运算符和表达式

更新时间:2023-12-04 09:35:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实 验 指 导 书 实验二 运算符和表达式

实验时间:2010年10月8日

【实验目的】

1、掌握C语言各种基本数据类型的定义和表示方法; 2、掌握变量的定义、赋值方法; 3、掌握基本运算符的功能及其应用; 4、掌握基本运算符的优先级和结合性; 5、掌握表达式的概念及运算规则; 6、掌握常用数据类型的转换规则。

【实验内容】

1、常用基本数据类型的存储长度,求字节运算符的使用; 2、运算符及其表达式的应用; 3、数据类型的自动转换与强制转换。

【实验步骤】

一、在E或F盘上建立以自己的学号命名的文件夹。 二、内容与步骤 1、求字节运算符的使用

利用sizeof()函数,了解C语言各种数据类型所占用的存储空间大小,将编写的源程序以文件名ex2_1.c保存在自己的文件夹内,并将结果填在下表内。 数据类型 char int float ⑴、/*ex2_2.c*/ #include

#define PRICE 12.5 main()

{ int num=3; float total; char ch1,ch2=?D?; total=num*PRICE; ch1=ch2-?A?+?a?;

printf(“total=%f,ch1=%c\\n”,total,ch1); }

⑵、/*ex2_3.c*/ # include main()

- 1 -

长度(字节) long 数据类型 short double 长度(字节) 2、写出下列程序运行的结果

实 验 指 导 书

{

int i, j, k; int m, n, p; i = 8; j = 10; k = 12;

/* 自增在操作数之前 */ m = ++i; printf(\printf(\ /* 自减在操作数之后 */ n = j--;

printf(\ printf(\ /* 自增、自减的混合运算 */ p = (++m)*(n++)+(--k); printf(\ printf(\}

3、运算符的优先级别和结合性:请写出下列程序运行的结果,并进行分析。 /*ex2_4.c*/ #include Main() { int x,y,z; x=y=z=-1; ++x&&++y||++z;

printf(“x=%d\\ty=%d\\tz=%d\\n”,x,y,z); /*”\\t”为按横向跳格格式输出*/ x=y=z=-1; ++x||++y&&++z;

printf(“x=%d\\ty=%d\\tz=%d\\n”,x,y,z); x=y=z=-1; ++x&&++y&&++z;

printf(“x=%d\\ty=%d\\tz=%d\\n”,x,y,z); }

4、位运算符的使用

位运算符C语言提供了六种位运算符:

- 2 -

实 验 指 导 书

& 按位与 | 按位或 ^ 按位异或 ~ 取反 << 左移 >> 右移 ⑴按位与运算

按位与运算符“&”是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。 例如:9&5

可写算式如下: 00001001 (9的二进制补码)&00000101 (5的二进制补码) 00000001 (1的二进制补码)可见9&5=1。

按位与运算通常用来对某些位清0或保留某些位。例如把a 的高八位清 0 , 保留低八位, 可作 a&255 运算 ( 255 的二进制数为0000000011111111)。

⑵按位或运算

按位或运算符“|”是双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。 例如:9|5

可写算式如下: 00001001|00000101 00001101 (十进制为13)可见9|5=13 main() {

int a=9,b=5,c; c=a|b;

printf(\}

⑶按位异或运算

按位异或运算符“^”是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。参与运算数仍以补码出现, 例如9^5

可写成算式如下: 00001001^00000101 00001100 (十进制为12) /*ex2_5.c*/ #include main() { int a=9;

- 3 -

实 验 指 导 书

a=a^15;

printf(\}

⑷求反运算

求反运算符~为单目运算符,具有右结合性。 其功能是对参与运算的数的各二进位按位求反。 例如~9

运算为: ~(0000000000001001)结果为:1111111111110110 /*ex2_6.c*/ #include main() { int a=9; a=~9;

printf(“b=%d\\n\}

⑸左移运算

左移运算符“<<”是双目运算符。其功能把“<< ”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数,高位丢弃,低位补0。例如: a<<4 指把a的各二进位向左移动4位。如a=00000011(十进制3),左移4位后为00110000(十进制48)。

⑹右移运算

右移运算符“>>”是双目运算符。其功能是把“>> ”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移动的位数。 例如:设 a=15,a>>2

表示把000001111右移为00000011(十进制3)。 应该说明的是,对于有符号数,在右移时,符号位将随同移动。当为正数时, 最高位补0,而为负数时,符号位为1,最高位是补0或是补1 取决于编译系统的规定。Turbo C和很多系统规定为补1。

5、程序调试与编程

(1)求圆锥体积,判定下列程序是否正确: main( ) {

int r=5, h=15; double v; v=1/3*3.14*r*r*h; printf(“v=%f ”,v); }

并将修改后的程序,以ex2_7.c保存在自己的文件内。

- 4 -

实 验 指 导 书

(2)计算下面各程序段的输出结果 int a=3,b=2,c; ① b*=a+4*3%5; printf(\,b ); ② a=8; a*=b=c=3;

printf(\,%d“,a,b); ③ a=5+(c+=3);

printf(\,%d“,a,c);

并将编译运行后的程序,分别以ex2_8.c、ex2_9.c、ex2_10.c命名,保存在自己的文件内。

(3)已知:a=3,b=2, c =1, 编程计算并输出下面各表达式的值, ①c > a+b ②a>b== c ③a==b c ⑤m=a>b>c ⑥c+1>= a ⑦c *2 != b ⑧m=c==a%b

并将编译运行后的程序,以ex2_11.c命名,保存在自己的文件内。 (4)计算下面各程序段的输出结果

①int i=2 ; float f =3.6; double d=3.2; long int e=45; 10+?a?+i*f-d/e ; ②char st=?a? ; printf(“%d”,st); ③int a; double b=3.25 ; a=(int)b+8; printf(“%d, %f ”,a,b); ④ main( ) {

int a=1,b=2,c=3,d=4; int m, n=1; m=a>b&&(n=c>d);

printf(\ }

⑤ int a , b ,c ;

c=( a=1 , b = 3 , a+b ) ⑥ x = ( a=3, 6*a ) x = a = 3, 6*a ⑦ int x=5, y=2, z ;

- 5 -

实 验 指 导 书

z = sizeof( x > y? 1 : 1.5 ); ⑧ int a=1,b=2,c=3,d=4,m ; m = a>b ? a : c>d ? c :d ;

并将编译运行后的程序,分别以ex2_12.c、ex2_13.c、ex2_14.c、ex2_15.c、ex2_16.c、ex2_17.c、ex2_18.c、ex2_19.c、ex2_20.c命名,保存在自己的文件夹内。

【实验小结】

应知:

1、基本运算符的功能及其应用; 2、基本运算符的优先级和结合性; 3、基本数据类型及其转换。 应会:

1、各种运算符及其表达式的应用; 2、各种表达式的正确表示; 3、数据类型转换规则。

【实验思考】

1、请说明自增/自减运算符(++/--)前置运算和后置运算的区别。 2、试列出常用几种运算符的优先级别与结合方向。 3、数据类型转换的规则是什么?

- 6 -

本文来源:https://www.bwwdw.com/article/82wt.html

Top