当前位置:文档之家› 二级C语言-运算符与表达式

二级C语言-运算符与表达式

二级C语言-运算符与表达式
二级C语言-运算符与表达式

二级C语言-运算符与表达式

(总分:60.00,做题时间:90分钟)

一、{{B}}选择题{{/B}}(总题数:38,分数:38.00)

1.设变量已正确定义并赋值,以下合法的C语言赋值语句是______。

? A.x=y==5

? B.x=n%2.5

? C.x+n=i

? D.x=5=4+1

(分数:1.00)

A. √

B.

C.

D.

解析:[解析] 赋值运算符左侧的操作数必须是一个变量,而不能是表达式或者常量,选项C和D错误。“%”运算符两侧都应当是整型数据,选项B错误。

2.在x值处于-2~2、4~8时值为“真”,否则为“假”的表达式是______。

? A.(2>x>-2)||(4>x>8)

? B.!(((x<-2)||(x>2))&&((x<=4)||(x>8)))

? C.(x<2)&&(x>=-2)&&(x>4)&&(x<8)

? D.(x>-2)&&(x>4)||(x<8)&&(x<2)

(分数:1.00)

A.

B. √

C.

D.

解析:[解析] 本题是考查关系运算和逻辑运算的混合运算。要给出此题的正确答案,首先需要了解数学上的区间在C语言中的表示方法,如x在[a, b]区间,其含义是x既大于等于a又小于等于b,相应的C语言表达式是x>=a&&x<=b。本例中给出了两个区间,一个数只要属于其中一个区间即可,这是“逻辑或”的关系。在选项A中,区间的描述不正确。选项B把“!”去掉,剩下的表达式描述的是原题中给定的两个区间之外的部分,加上“!”否定正好是题中的两个区间的部分,是正确的。选项C是恒假的,因为它的含义是x同时处于两个不同的区间内。选项D所表达的也不是题中的区间。

3.sizeof(double)是______。

? A.一种函数调用

? B.一个整型表达式

? C.一个双精度表达式

? D.一个不合法的表达式

(分数:1.00)

B. √

C.

D.

解析:[解析] sizeof是一个C语言关键字,有着特定的功能。在C语言中,一个函数的调用格式是:函数名(参数列表)。虽然“sizeof(double)”与函数调用有着相同的格式,但sizeof是一个C语言关键字,因此,它不是一个函数调用。sizeof在C语言中是表示求一个变量或数据类型所占用的内存字节数的运算符,所以“sizeof(double)”表示求双精度浮点型数据占用内存的字节数。显然,该表达式返回的是一个整数,而不是一个双精度数。

4.对于条件表达式(M)? (a++):(a--),其中的表达式M等价于______。

? A.M==0

? B.M==1

? C.M!=0

? D.M!=1

(分数:1.00)

A.

B.

C. √

D.

解析:[解析] 因为条件表达式e1?e2:e3的含义是e1为真时,其值等于表达式e2的值,否则为表达式e3的值。“为真”就是“不等于假”,因此M等价于M!=0。

5.设变量已正确定义并赋值,以下正确的表达式是______。

? A.x=y*5=x+z

? B.int(15.8%5)

? C.x=y+z+5, ++y

? D.x=25%5.0

(分数:1.00)

A.

B.

C. √

D.

解析:[解析] 求余运算符“%”两边的运算对象必须是整型数据,而选项B和D中“%”两边的运算对象有浮点整型数据,所以选项B和D是错误的表达式。在选项A中赋值表达式两边出现相同的变量x,也是错误的。选项C是一个逗号表达式,所以正确的答案为C。

6.设变量已正确定义为整型,则表达式n=i=2,i=n+1,i+n的值为______。

? A.2

? B.3

? C.4

? D.5

(分数:1.00)

B.

C.

D. √

解析:[解析] 本题考查的是C语言逗号表达式相关知识。程序在计算逗号表达式时,从左到右计算由逗号分隔的各表达式的值,整个逗号表达式的值等于其中的最后一个表达式的值。本题中,首先i和n被赋值为2,i再加上n和1为3,最后i+n等于2+3=5。本题答案为D。

7.若已定义x和y为double类型,则表达式“x=1, y=x+3/2”的值是______。

? A.1

? B.2

? C.2.0

? D.2.5

(分数:1.00)

A.

B.

C. √

D.

解析:[解析] 本题中的表达式为逗号表达式,此表达式的结果为y=x+3/2的值。y=x+3/2的运算次序为:先进行3/2运算,两个运算数均为整型量,结果也为整型量,等于1,此结果将与double类型数进行相加,要转换为1.00...00。最后将x的值1转换成double型,与1.00...00相加。

8.设变量已正确定义并赋值,以下正确的表达式是______。

? A.x=y*5=x+z

? B.int(15.8%5)

? C.x=y+z+5, ++y

? D.x=25%5.0

(分数:1.00)

A.

B.

C. √

D.

解析:[解析] 求余运算符“%”两边的运算对象必须是整型,而选项B、D中“%”两边的运算对象有浮点整型数据,所以选项B、D是错误的表达式。在选项A中赋值表达式的两边出现相同的变量“x”,也是错误的。选项C是一个逗号表达式,所以正确的答案为C。

9.现有定义int a;double b;float c;char k;,则表达式a/b+c-k的值的类型为______。

? A.int

? B.double

? C.float

? D.char

(分数:1.00)

A.

B. √

C.

D.

解析:[解析] 双目运算中两边运算量类型转换规则。

运算数1 运算数2 转换结果类型

短整型

整型

字符型

有符号整型整型长整型

长整型

整型

无符号整型

浮点型

短整型->长整型

整型->长整型

字符型->整型

有符号整型->无符号整型

整型->浮点型

在a/b的时候,a、b的类型不一致,根据类型转换规则,要把整型转换成double类型,之后的加、减类似。转换规则char,short→int→unsigned→long→double→float。

10.设有定义:int k=0;,以下选项的4个表达式中与其他3个表达式的值不相同的是______。

? A.k++

? B.k+=1

? C.++k

? D.k+1

(分数:1.00)

A.

B.

C.

D. √

解析:[解析] 选项A、B、C都使k的值增加1,D选项不改变k的值。本题答案为D。

11.以下关于单目运算符++、--的叙述中正确的是______。

? A.它们的运算对象可以是任何变量和常量

? B.它们的运算对象可以是char型变量和int型变量,但不能是float型变量

? C.它们的运算对象可以是int型变量,但不能是double型变量和float型变量

? D.它们的运算对象可以是char型变量、int型变量和float型变量

(分数:1.00)

A.

B.

C.

D. √

解析:[解析] “++”和“--”运算符都是单目运算符,其运算对象可以是整型变量,也可以是实型变量,但不能是常量或表达式。当运算对象是字符型时,系统自动将其转换成该字符所对应的ASCII码值。

12.以下选项中,与k=n++完全等价的表达式是______。

? A.k=n, n=n+1

? B.n=n+1, k=n

? C.k=++n

? D.k+=n+1

(分数:1.00)

A. √

B.

C.

D.

解析:[解析] 题中的表达式是先让n参与赋值运算,然后再对本身进行自加,所以选A。

13.以下非法的赋值语句是______。

? A.n=(i=2, ++i)

? B.j++

? C.++(i+1)

? D.x=j>0

(分数:1.00)

A.

B.

C. √

D.

解析:[解析] 自加或自减运算的操作数不能是表达式。

14.以下程序的输出结果为______。

#include <stdio.h>

main()

{ int i=4, a;

a=i++;

printf("a=% d, i=% d", a, i);

}

? A.a=4, i=4

? B.a=5, i=4

? C.a=4, i=5

? D.a=5, i=5

(分数:1.00)

A.

B.

C. √

D.

解析:[解析] 本题考查的是自增运算符及赋值运算符的综合使用问题。自增运算符是一元运算符,其优先级比赋值运算符高,要先计算。把表达式i++的值赋予a,由于i++的结果为当前i的值(当前i的值为4),所以i++的值为4,得到a的值为4。同时,计算了i++后,i由4变为5。

15.若变量已正确定义并赋值,以下符合C语言语法的表达式是______。

? A.a:=b+1

? B.a=b=c+2

? C.int18.5%3

? D.a=a+7=c+b

(分数:1.00)

A.

B. √

C.

D.

解析:[解析] 选项A中包含一个不合法的运算符“:=”,选项C应改为(int)18.5%3;选项D可理解为两个表达式:a+7=c+b和a=a+7,其中第一个是错误的,因为C语言规定赋值号的左边只能是单个变量,不能是表达式或常量等。因此,正确答案是选项B,它实际上相当于a=(b=c+2),进而可分解为两个表达式:b=c+2和a=b。

16.若下列变量都已正确定义并赋值,则符合C语言语法的表达式是______。

? A.a=a+7

? B.a=7+b+c, a++

? C.int(12.3/4)

? D.a=a+7=c+b

(分数:1.00)

A.

B. √

C.

D.

解析:[解析] 选项A中“a=a+7;”赋值表达式的最后有一个分号“;”,C语言规定,语句用分号结束,所以“a=a+7;”是一条赋值语句,而不是表达式。

17.设有定义:int x=2;,以下表达式中,值不为6的是______。

? A.x*=x+1

? B.x++, 2*x

? C.x*=(1+x)

? D.2*x, x+=2

(分数:1.00)

A.

B.

C.

D. √

解析:[解析] 本题考查逗号运算符的运算方式,逗号运算符的作用是将若干表达式连接起来,它的优先级别在所有运算符中是最低的,结合方向为“自左向右”。A项和C项的结果是一样的,可展开为:

x=x*(x+1)=2*3=6;B项中先执行x++,因为++运算符有自加功能,逗号之前执行后x的值为3,逗号后的值就是整个表达式的值,即6;D项逗号之前并未给x赋值,所以表达式的值就是x+=2的值,即4。因此,本题答案为D。

18.执行以下程序后的输出结果是______。

main()

{ int a=65;

printf("%c", (char)a);

}

? A.A

? B.B

? C.C

? D.D

(分数:1.00)

A. √

B.

C.

D.

解析:[解析] A的ASCII码为65,int类型强制转换为char类型后输出A。

19.以下程序的运行结果是______。

main()

{ char ch='A';

int num1=ch;

float num2=num1;

printf("% f", num2);

}

? A.A

? B.65

? C.65.00000

? D.a

(分数:1.00)

A.

B.

C. √

D.

解析:[解析] A的ASCII码为65,赋值语句num1=ch把char类型的变量转换成int类型的变量num1;赋值语句num2=num1把类型为int的变量转换为类型为float的变量num2,最后printf打印出num2的值为65.00000。

20.若a为整型变量,则执行以下语句后的______。

a=-2L;

printf("%d/n", a);

? A.赋值不合法

? B.输出值为-2

? C.输出为不确定值

? D.输出值为2

(分数:1.00)

A.

B. √

C.

D.

解析:[解析] 本题的关键是要弄清楚C语言中常量的表示方法和有关的赋值规则。在一个整型常量后面加一个字母1或L,则认为是long int型常量。一个整型常量,如果其值在-32768~+32767范围内,可以赋给一个int型或long int型变量;但如果整型常量的值超出了上述范围,而在-2147483648~2147483647范围内,则应将其值赋给一个long int型变量。本例中-2L虽然为long int型变量,但是其值为-2,因此可以通过类型转换把长整型转换为短整型,然后赋给int型变量a,并按照%d格式输出该值。

21.已知字符A的ASCII码值是65,执行以下程序后的______。

#include <stdio.h>

main()

{ char a ='A';

int b=20;

printf("% d, %o", (a=a+1, a+b, b), a+'a'-'A', b);

}

? A.表达式非法,输出零或不确定值

? B.因输出项过多,无输出或输出不确定值

? C.输出结果为20,141

? D.输出结果为20,1541,20

(分数:1.00)

A.

B.

C. √

D.

解析:[解析] 首先应该注意到printf()函数有3个实参数:(a=a+1、a+b、b)、a+'a'-'A'和b,并没有问题,可见选项A错误。由于格式控制字符串“%d, %o”中有两个描述符项,而后面又有表达式,因此,必定会产生输出,选项B也是错误的。既然控制字符串中只有两个格式描述符,输出必然只有两个数据,故选项D错误。

22.变量a中的数据用二进制表示的形式是01011101,变量b中的数据用二进制表示的形式是11110000。若要求将a的高4位取反,低4位不变,所要执行的运算是______。

? A.a∧b

? B.a|b

? C.a&b

? D.a<<4

(分数:1.00)

A. √

B.

C.

D.

解析:[解析] 本题考查的是位运算的知识,对于任何二进制数,和1进行异或运算会让其取反,而和0进行异或运算不会发生任何变化,故本题答案选A。

23.设有定义char a, b;,若想通过a&b运算保留a的第3位和第6位的值,则b的二进制形式应是______。

? A.00100100

? B.11011011

? C.00010010

? D.01110010

(分数:1.00)

A. √

B.

C.

D.

解析:[解析] 由“按位与”运算的功能可知:两个对应的二进制数只要有一个为0,“按位与”的结果就为0,只有它们均为1时结果才为1。因此,若想保留a位上的数,就用1去“按位与”,其他位用0屏蔽掉。

24.以下叙述中,不正确的是______。

? A.在C程序中,%是只能用于整数运算的运算符

? B.在C程序中,无论是整数还是实数,都能准确无误地表示

? C.若a是实型变量,C程序中a=20是正确的,因此实型变量允许被整型数赋值

? D.表述不正确

(分数:1.00)

A.

B. √

C.

D.

解析:

25.若变量x、y、z均为double类型且已正确赋值,不能正确表示x/y×z的C语言表达式是______。

? A.x/y*z

? B.x*(1/(y*z))

? C.x/y*1/z

? D.x/y/z

(分数:1.00)

A. √

B.

C.

D.

解析:

26.设a、b、c、d、m、n均为int型变量,且a=5,b=6,c=7,d=8,m=2,n=2,则逻辑表达式(m=a>b)&&(n=c >d)运算后,n的值为______。

? A.0

? B.1

? C.2

? D.3

(分数:1.00)

A.

B.

C. √

D.

解析:

27.设w、x、y、z、m均为int型变量,有以下程序段:

w=1; x=2; y=3; z=4;

m=(w<x)?w:x; m=(m<y)?m:y; m=(m<z)?m:z;

则该程序运行后,m的值是______。

? A.4

? B.3

? C.2

? D.1

(分数:1.00)

A.

B.

C.

D. √

解析:

28.以下程序的输出结果是______。

#include <stdio.h>

main()

{ int a=5, b=4, c=6, d;

printf("% d/n", d=a>b? (a>c? a:c):(b));

}

? A.5

? B.4

? C.6

? D.不确定

(分数:1.00)

A.

B.

C. √

D.

解析:

29.在C语言中,如果下面的变量都是int类型,则输出的结果是______。sum=pad=5; pad=sum++, pad++, ++pad;

printf("%d/n", pad);

? A.7

? B.6

? C.5

? D.4

(分数:1.00)

A. √

B.

C.

D.

解析:

30.以下程序的输出结果是______。

#include <stdio.h>

main()

{ int i =010, j=10;

printf("% d, % d/n", ++i, j--);

}

? A.11,10

? B.9,10

? C.010,9

? D.10,9

(分数:1.00)

A.

B. √

C.

D.

解析:

31.已知int i; float f;,以下选项中正确的语句是______。

? A.(int f)%i;

? B.int(f)%i;

? C.int(f%i);

? D.(int)f%i;

(分数:1.00)

A.

B.

C.

D. √

解析:

32.若有定义:int x=3,y=2;float a=2.5,b=3.5;则下面表达式的值为______。(x+y)%2+(int)a/(int)b

? A.1.0

? B.1

? C.2.0

? D.2

(分数:1.00)

A.

B. √

C.

D.

解析:

33.假设所有变量均为整型,则表达式(a=2, b=5, a++, b++, a+b)的值为______。

? A.7

? B.8

? C.9

? D.10

(分数:1.00)

A.

B.

C. √

D.

解析:

34.若有定义"int x=1, y=1;",表达式(!x||y--)的值是______。

? A.0

? B.1

? C.2

? D.-1

(分数:1.00)

A.

B. √

C.

D.

解析:

35.有以下程序:

main()

{ unsigned char/a, b, c;

a=0x3;

b=a |0x8;

c=b <<1;

printf("%d%d/n", b, c);

}

程序运行后的输出结果是______。

? A.-11 12

? B.-6 -13

? C.12 24

? D.11 22

(分数:1.00)

A.

B.

C.

D. √

解析:

36.若已定义x和y为double类型,则表达式x=1,y=x+3/2的值是______。

? A.1

? B.2

? C.2.0

? D.2.5

(分数:1.00)

A.

B.

C. √

D.

解析:

37.执行以下程序段后,c3的值为______。

int c1=1, c2=2, c3;

c3=1.0/c2*c1;

? A.0

? B.0.5

? C.1

? D.2

(分数:1.00)

A. √

B.

C.

D.

解析:

38.以下程序的输出结果是______。

#include <stdio.h>

main()

{ int y=3, x=3, z=1;

printf("%d%d/n", (++x, y++), z+2);

}

? A.34

? B.42

? C.43

? D.33

(分数:1.00)

A.

B.

C.

D. √

解析:

二、{{B}}操作题{{/B}}(总题数:8,分数:22.00)

39.编写函数fun(),其功能是:根据以下公式求π的值(要求精度为0.0005,即某项小于0.0005时停止迭代)。

程序运行后,若输入精度为0.0005,则程序应输出为3.14…。

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

试题程序

#include <stdio.h>

#include <conio.h>

#include <math.h>

double fun(double eps)

{

}

void main()

{ double x;

printf("Input eps:");

scanf("% if", &x);

printf("/neps =% if, PI =% if/n", x, fun(x));

}

__________________________________________________________________________________________ 正确答案:(double fun(double eps) { double s=1.0, s1=1.0; int n=1; while(s1 > =eps)/ * 当某项大于精度要求时, 继续求下一项* / { s1=s1*n/(2*n+1); /*求多项式的每一项* / s=s+s1; /*求和* / n++; } return2*s; })

解析:[解析] 本题考查:迭代法求给定多项式的值,迭代算法是让计算机对一组指令(或一定步骤)重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。需要注意变量的数据类型及赋初值操作。首先应该定义double类型变量,并且赋初值,用来存放多项式的某一项和最后的总和。从第二项开始,以后的每一项都是其前面一项乘以n/(2×n+1),程序中用s1来表示每一项,s表示求和后的结果。要注意s1和s的初值都为1.0,因为循环从第二项开始累加。

40.下列给定程序中函数fun()的功能是:求两个非零正整数的最大公约数,并作为函数值返回。

例如,若num1和num2分别为49和21,则输出的最大公约数为7;若num1和num2分别为27和81,则输出的最大公约数为27。请改正程序中的错误,使它能得出正确结果。

注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。

试题程序

#include <stdio.h>

int fun(int a, int b)

{ int r, t;

if(a<b)

/* * * * *found* * * * * /

{t =a; b=a; a=t;}

r=a% b;

while(r!= 0)

{a=b; b=r; r=a% b;}

/* * * * *found* * * * * /

return (a);

}

void main()

{ int num1, num2, a;

printf("Input num1 num2: ");

scanf("% d% d", &num1, &num2);

printf("num1 =% d num2=% d/n/n", num1, num2);

a=fun(num1, num2);

printf("The maximun common divisor is% d/n/n", a);

}

__________________________________________________________________________________________ 正确答案:((1){t =a; a=b; b=t;} (2)return(b); 或return b;)

解析:[解析] 本题考查:return语句,功能是计算表达式的值,并将其返回给主调函数。求最大公约数算法一般采用辗转相除法。辗转相除法的算法为:首先将m除以n(m>n)得余数r,再用余数r去除原来的除数,得到新的余数,重复此过程直到余数为0时停止,此时的除数就是m和n的最大公约数。程序首先判断参数a和b的大小,如果a<b则进行交换,这里是一个数学逻辑错误,应先将a的值赋给中间变量t,再将b的值赋给a,最后将t的值赋给b。当余数r为0时,除数b即为所求的最大公约数,所以函数应返回b。

41.下列给定的程序中,函数fun()的功能是:计算并输出k以内最大的10个能被13或17整除的自然数之和。k的值由主函数传入,若k的值为500,则函数的值为4622。

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。

试题程序

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

int fun(int k)

{ int m=0, mc=0, j;

while((k>=2)&&(mc<10))

{ /* * * * *found* * * * * /

if((k% 13=0)||(k% 17=0))

{m=m+k; mc++;}

k--;

/* * * * *found* * * * * /

return m;

}

void main()

{ printf("% d/n", fun(500));

}

__________________________________________________________________________________________ 正确答案:((1)if((k%13==0)||(k%17==0)) (2)加})

解析:[解析] 本题考查:if语句条件表达式,区分逻辑表达式和算术表达式;同时注意C语言书写程序应遵守的规则。(1)C语言中“=”是赋值运算符,“==”才表示等于,x能被y整除的表示方法是x%y==0,

而并非像题目中所表示的x%y=0。所以,if((k%13=0)||(k%17=0))修改后的结果应该是答案所示信息。(2)程序中缺少“}”花括号,程序不完整。此类信息在做题时一定要注意,可以在做题前先运行一下程序,这样明显的错误一般都会有错误信息显示出来,比如丢失“}”的错误信息是“Compound statement missing } in fu nction fun”。

42.下列给定程序中函数fun()的功能是:将p所指字符串中的所有字符复制到b中,要求每复制3个字符之后插入一个空格。

例如,若给a输入字符串:ABCDEFGHIJK,调用函数后,字符数组b中的内容为:ABC DEF GHI JK。请改正程序中的错误,使它能得出正确结果。

注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。

试题程序

#include <stdio.h>

void fun(char *p, char *b)

{ int i, k=0; while(*p)

{ i=1;

while(i<=3 && *p) {

/* * * * *found* * * * * /

b[k]=p;

k++; p++; i++;

}

if(*p)

{ /* * * * *found* * * * * /

b[k++]=" ";

}

}

b[k]='/0';

}

main()

{ char a[80], b[80];

printf("Enter a string:");

gets(a);

printf("The original string:"); puts(a);

fun(a, b);

printf("/nThe string after insert space:");

puts(b); printf("/n/n");

}

__________________________________________________________________________________________

正确答案:((1)b[k]=*P; (2)b[k++]='';)

解析:[解析] 本题考查:指针类型变量作为函数的参数,函数的参数不仅可以是整型、实型、字符型等数据,还可以是指针类型。它的作用是将一个变量的地址传送到另一个函数中。 (1)题目中p是指针型变量作函数参数,因此给b[k]赋值时出现错误。(2)题目要求复制3个字符后加一个空格,所以应该是先给b[k]赋值空格,然后变量k再加1。

43.下列给定程序中函数fun()的功能是:计算并输出high以内最大的10个素数的和。high的值由主函数传给fun()函数。

例如,若high的值为100,则函数的值为732。

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。

试题程序

#include <conio.h>

#include <stdio.h>

#include <math.h >

int fun(int high)

{ int sum=0, n=0, j, yes;

/* * * * *found* * * * * /

while((high>=2) && (n<10)

{ yes=1;

for(j=2; j<=high/2; j++)

if(high% j==0)

{ /* * * * *found* * * * * /

yes=0; break

}

if(yes)

{ sum+=high;

n++;

}

high--;

return sum;

}

main()

{ printf("% d/n", fun(100));

}

__________________________________________________________________________________________ 正确答案:((1)while((high>=2) && (n<10)) (2)yes=0; break;)

解析:[解析] 本题考查:C语言程序的语法格式。一处是while循环条件丢掉一个括号;另一处是很简单的程序语法错误,没有加分号。

44.下列给定程序中函数fun()的功能是:将长整型数中各位上为奇数的数依次取出,构成一个新数放在t 中。高位仍在高位,低位仍在低位。

例如,当s中的数为87653142时,t中的数为7531。

请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。

注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。

试题程序

#include <stdlib.h>

#include <stdio.h>

#include <conio.h>

void fun(long s, long * t)

{ int d;

long s1=1;

*t=0;

while(s>0)

{ d=s% 10;

if(d% 2!=0)

{ *t=d*s1+*t;

s1______10;

}

s/ =10;

}

void main()

{ long s, t;

printf("/nPlease enter s:");

scanf("% ld", &s);

fun(s, &t);

printf("The result is:% ld/n", t);

}

(分数:8.00)

填空项1:__________________ (正确答案:: *=)

解析:[解析] 本题考查:复合的赋值运算符*=的使用。

45.给定程序的功能是:计算并输出下列级数的前n项之和S n,直到S n大于q为止,q的值通过形参传入。

例如,若q的值为50.0,则函数值为50.416687。

注意:部分源程序给出如下。

请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的标号处填入你编写的若干表达式或语句。

试题程序

#include <stdio.h>

double fun(double q)

{ int n;

double s;

n=2;

s=2.0;

while(s______q) {

s=s+______(n+1)/n;

______;

}

printf("n =% d/n", n);

return s;

}

main()

{ printf("% f/n", fun(50));

}

(分数:8.00)

填空项1:__________________ (正确答案:<= (double) n++或n+=1或n=n+1)

解析:[解析] 本题考查:关系运算符;强制类型转换运算符;自加、自减运算符。

填空(1):根据题意,相加直到S n大于q为止,因此为<=。

填空(2):强制转换成浮点型。

填空(3):变量n为增量,每循环一次,增加n的值。

46.下列给定程序中,函数fun()的功能是:将形参n中各位上为偶数的数取出,并按原来从高位到低位相反的顺序组成一个新数,作为函数值返回。

例如,输入一个整数27638496,函数返回值为64862。

请在标号处填入正确的内容,使程序得出正确的结果。

注意:部分源程序给出如下。

不得增行或删行,也不得更改程序的结构。

试题程序

#include <stdio.h>

unsigned long fun(unsigned long n)

{ unsigned long x=0; int t;

while(n) {

t=n% 10;

/* * * * *found* * * * * /

if(t% 2==______)

/* * * * *found* * * * * /

x=______+t;

/* * * * *found* * * * * /

n=______;

}

return x;

}

main()

{ unsigned long n=-1;

while(n>99999999||n<0) {

printf("Please input (0<n<100000000): ");

scanf("% ld", &n);

}

printf("/nThe result is: % ld/n", fun(n));

}

(分数:6.00)

填空项1:__________________ (正确答案:0 10*x n/10)解析:

C语言中的运算符总结解读

C语言中的运算符总结 C语言中的操作符:算术操作符、移位操作符、位操作符、赋值操作符、单目操作符、关系操作符、逻辑操作符、条件操作符、逗号表达式、下标引用、函数调用和结构成员。 1.算术操作符:+ - * / % 1除了% 操作符之外,其他的几个操作符均可以作用于整数和浮点数。 2对于/ 操作符,如果两个操作数都为整数,执行整数除法;而只要有浮点数执行的就是浮点数除法。 3% 操作符的两个操作数必须为整数,返回的是整除之后的余数。 2.移位操作符: << 左移操作符和 >> 右移操作符(针对二进制位、是对整数的操作 1左移操作符移位规则:左边丢弃、右边补0。 2右移操作符移位规则:(1算术移位:左边补符号位,右边丢弃。 (2逻辑移位:左边补0,右边丢弃。 注:对于移位运算符,不能移动负数位,这个是标准未定义的。 3.位操作符:& 按位与 | 按位或 ^ 按位异或(操作数都必须是整数,是针对二进制数的操作 4.赋值操作符:= 可以重新为变量赋值(赋值操作符是可以连续使用的,从右向左执行,不建议使用。 5.复合赋值符:+= = *= /= %= >>= <<= &= |= ^= 6.单目操作符:! 逻辑反操作(真---假

- 负值+ 正值 & 取地址从内存中取地址,不能从寄存器register 中取址。 sizeof 操作数的类型长度(以字节为单位 ~ 一个数的二进制按位取反 -- 前置、后置-- ++ 前置、后置++ (1前置++和--:先自增后使用,表达式的值是自增之后的值。 先自减后使用,表达式的值是自减之后的值。 (2后置++和--:先使用再自加。 先使用再自减。 * 间接访问操作符(解引用操作符 (类型强制类型转换 7.关系操作符:> >= < <= != 不相等 == 相等 注:== 相等 = 赋值,二者易混淆,需注意。 8.逻辑操作符:&& 逻辑与|| 逻辑或 注:逻辑与、逻辑或是判断真假的,按位与、按位或是对二进制数进行操作的。 对逻辑与操作,只要有一个为假,便不必再进行后边的计算;对逻辑或操作,只要有一个为真,便不必再进行后边的操作。 9.条件操作符(三目操作符:exp1 ? exp2 : exp3 先计算表达式1 的值,如果表达式1 为真,整个表达式的值就是表达式 2 的值,如果为假,整个表达式的值就是表达式 3 的值。

C语言运算符大全 (2)

C语言运算符大全C语言的内部运算符很丰富,运算符是告诉编译程序执行特定算术或逻辑操作的符号。C语言有三大运算符:算术、关系与逻辑、位操作。另外,C还有一些特殊的运算符,用于完成一些特殊的任务。 表2-5列出了C语言中允许的算术运算符。在C语言中,运算符“+”、“-”、“*”和“/”的用法与大多数计算机语言的相同,几乎可用于所有C语言内定义的数据类型。当“/”被用于整数或字符时,结果取整。例如,在整数除法中,10/3=3。 一元减法的实际效果等于用-1乘单个操作数,即任何数值前放置减号将改变其符号。模运算符“%”在C 语言中也同它在其它语言中的用法相同。切记,模运算取整数除法的余数,所以“%”不能用于float和double类型。 最后一行打印一个0和一个1,因为1/2整除时为0,余数为1,故1%2取余数1。 C语言中有两个很有用的运算符,通常在其它计算机语言中是找不到它们的—自增和自减运算符,++和--。运算符“++”是操作数加1,而“--”是操作数减1,换句话说:x=x+1;同++x;x=x-1;同--x; 自增和自减运算符可用在操作数之前,也可放在其后,例如:x=x+1;可写成++x;或x++;但在表达式中这两种用法是有区别的。自增或自减运算符在操作数之前,C语言在引用操作数之前就先执行加1或减1 操作;运算符在操作数之后,C语言就先引用操作数的值,而后再进行加1或减1操作。请看下例: x=10; ;y=++x;

此时,y=11。如果程序改为: x=10;y=x++; 则y=10。在这两种情况下,x都被置为11,但区别在于设置的时刻,这种对自增和自减发生时刻的控制是非常有用的。在大多数C编译程序中,为自增和自减操作生成的程序代码比等价的赋值语句生成的代码 要快得多,所以尽可能采用加1或减1运算符是一种好的选择。 。下面是算术运算符的优先级: :最高++、- -- -(一元减) *、/、%最低+、-编译程序对同级运算符按从左到右的顺序进行计算。当然,括号可改变计算顺序。C语言 处理括号的方法与几乎所有的计算机语言相同:强迫某个运算或某组运算的优先级升高。 关系运算符中的“关系”二字指的是一个值与另一个值之间的关系,逻辑运算符中的“逻辑”二字指的是连接关系的方式。因为关系和逻辑运算符常在一起使用,所以将它们放在一起讨论。关系和逻辑运算符概念中的关键是True(真)和Flase(假)。C语言中,非0为True,0为Flase。使用关系或逻辑运算符的表达式对Flase和Ture分别返回值0或1(见表2-6)。 表2-6给出于关系和逻辑运算符,下面用1和0给出逻辑真值表。关系和逻辑运算符的优先级比算术运算符低,即像表达式10>1+12的计算可以假定是对表达式10>(1+12)的计算,当然,该表达式的结果为Flase。在一个表达式中允许运算的组合。例如: 10>5&&!(10<9)||3<=4 这一表达式的结果为True。

C语言运算符大全

C语言运算符大全 C语言的内部运算符很丰富,运算符是告诉编译程序执行特定算术或逻辑操作的符号。C语言有三大运算符:算术、关系与逻辑、位操作。另外,C还有一些特殊的运算符,用于完成一些特殊的任务。 2.6.1算术运算符 表2-5列出了C语言中允许的算术运算符。在C语言中,运算符“+”、“-”、“*”和“/”的用法与大多数计算机语言的相同,几乎可用于所有C语言内定义的数据类型。当“/”被用于整数或字符时,结果取整。例如,在整数除法中,10/3=3。 一元减法的实际效果等于用-1乘单个操作数,即任何数值前放置减号将改变其符号。模运算符“%”在C语言中也同它在其它语言中的用法相同。切记,模运算取整数除法的余数,所以“%”不能用于float和double类型。 最后一行打印一个0和一个1,因为1/2整除时为0,余数为1,故1%2取余数1。 2.6.2自增和自减 C语言中有两个很有用的运算符,通常在其它计算机语言中是找不到它们的—自增和自减运算符,++和--。运算符“++”是操作数加1,而“--”是操作数减1,换句话说:x=x+1;同++x;x=x-1;同--x; 自增和自减运算符可用在操作数之前,也可放在其后,例如:x=x+1;可写成++x;或x++;但在表达式中这两种用法是有区别的。自增或自减运算符在操作数之前,C语言在引用操作数之前就先执行加1或减1操作;运算符在操作数之后,C语言就先引用操作数的值,而后再进行加1或减1操作。请看下例: x=10; ;y=++x; 此时,y=11。如果程序改为: x=10;y=x++; 则y=10。在这两种情况下,x都被置为11,但区别在于设置的时刻,这种对自增和自减发生时刻的控制是非常有用的。在大多数C编译程序中,为自增和自减操作生成的程序代码比等价的赋值语句生成的代码 要快得多,所以尽可能采用加1或减1运算符是一种好的选择。 。下面是算术运算符的优先级: :最高++、- -- -(一元减) *、/、%最低+、-编译程序对同级运算符按从左到右的顺序进行计算。当然,括号可改变计算顺序。C语言 处理括号的方法与几乎所有的计算机语言相同:强迫某个运算或某组运算的优先级升高。 2.6.3关系和逻辑运算符 关系运算符中的“关系”二字指的是一个值与另一个值之间的关系,逻辑运算符中的“逻辑”二字指的是连接关系的方式。因为关系和逻辑运算符常在一起使用,所以将它们放在一起讨论。关系和逻辑运算符概念中的关键是True(真)和Flase(假)。C语言中,非0为True,0为Flase。使用关系或逻辑运算符的表达式对Flase和Ture分别返回值0或1(见表2-6)。

二级C语言-运算符与表达式

二级C语言-运算符与表达式 (总分:60.00,做题时间:90分钟) 一、{{B}}选择题{{/B}}(总题数:38,分数:38.00) 1.设变量已正确定义并赋值,以下合法的C语言赋值语句是______。 ? A.x=y==5 ? B.x=n%2.5 ? C.x+n=i ? D.x=5=4+1 (分数:1.00) A. √ B. C. D. 解析:[解析] 赋值运算符左侧的操作数必须是一个变量,而不能是表达式或者常量,选项C和D错误。“%”运算符两侧都应当是整型数据,选项B错误。 2.在x值处于-2~2、4~8时值为“真”,否则为“假”的表达式是______。 ? A.(2>x>-2)||(4>x>8) ? B.!(((x<-2)||(x>2))&&((x<=4)||(x>8))) ? C.(x<2)&&(x>=-2)&&(x>4)&&(x<8) ? D.(x>-2)&&(x>4)||(x<8)&&(x<2) (分数:1.00) A. B. √ C. D. 解析:[解析] 本题是考查关系运算和逻辑运算的混合运算。要给出此题的正确答案,首先需要了解数学上的区间在C语言中的表示方法,如x在[a, b]区间,其含义是x既大于等于a又小于等于b,相应的C语言表达式是x>=a&&x<=b。本例中给出了两个区间,一个数只要属于其中一个区间即可,这是“逻辑或”的关系。在选项A中,区间的描述不正确。选项B把“!”去掉,剩下的表达式描述的是原题中给定的两个区间之外的部分,加上“!”否定正好是题中的两个区间的部分,是正确的。选项C是恒假的,因为它的含义是x同时处于两个不同的区间内。选项D所表达的也不是题中的区间。 3.sizeof(double)是______。 ? A.一种函数调用 ? B.一个整型表达式 ? C.一个双精度表达式 ? D.一个不合法的表达式 (分数:1.00)

(完整word版)C语言运算符与表达式的练习题答案

C语言运算符与表达式的练习题 单项选择题 (1)以下选项中,正确的 C 语言整型常量是(D)。 A. 32L B. 510000 C. -1.00 D. 567 (2)以下选项中,(D)是不正确的 C 语言字符型常量。 A. 'a' B. '\x41' C. '\101' D. "a" (3)字符串的结束标志是(C)。 A. 0 B. '0' C. '\0' D. "0" (4)算术运算符、赋值运算符和关系运算符的运算优先级按从高到低依次为(B)。 A. 算术运算、赋值运算、关系运算 B. 算术运算、关系运算、赋值运算 C. 关系运算、赋值运算、算术运算 D. 关系运算、算术运算、赋值运算 (5)逻辑运算符中,运算优先级按从高到低依次为(D)。 A. && ! || B. || && ! C. && || ! D. ! && || (6)表达式!x||a==b 等效于(D)。 A. !((x||a)==b) B. !(x||y)==b C. !(x||(a==b)) D. (!x)||(a==b) (7)设整型变量 m,n,a,b,c,d 均为1,执行 (m=a>b)&&(n=c>d)后, m,n 的值是(A)。 A. 0,0 B. 0,1 C. 1,0 D. 1,1 *(8)设有语句 int a=3;,则执行了语句 a+=a-=a*=a; 后,变量 a 的值是(B)。 A. 3 B. 0 C. 9 D. -12 (9)在以下一组运算符中,优先级最低的运算符是(D)。 A. * B. != C. + D. = (10)设整型变量 i 值为2,表达式(++i)+(++i)+(++i)的结果是(B,上机13)。 A. 6 B. 12 C. 15 D. 表达式出错 (11)若已定义 x 和 y为double 类型,则表达式的值是(D)。

c语言34种运算符

C语言运算符 算术运算符 TAG:运算符,数据类型 TEXT:算术运算符对数值进行算术运算,其中:加、减、乘、除、求余运算是双目运算。其结果可以是整数、单精度实数和双精度实数。自增、自减运算是单目运算,其操作对象只能使整型变量,不能是常量或表达式等其他形式。 REF:.TXT,+运算符.txt,-运算符.txt,*运算符.txt,/运算 符.txt,%运算符,++运算符,--运算符 加+ TAG:算术运算符,运算符,数据类型 TEXT:双目运算符,算数加法。单目运算符,表示正数。REF:.TXT,算数运算符.txt 减- TAG:算术运算符,运算符,数据类型 TEXT:双目运算符,算数减法。单目运算符,表示负数。REF:.TXT,算数运算符.txt 乘* TAG:算术运算符,运算符,数据类型 TEXT:*,双目运算符,算数乘法。 REF:.TXT,算数运算符.txt

除/ TAG:算术运算符,运算符,数据类型 TEXT:/,双目运算符,算数除法;如果两个参与运算的数是整数,表示整除,舍去小数部分。 如5.0/2等于2.5,而5/2等于2。 REF:.TXT,算数运算符.txt 取余% TAG:算术运算符,运算符,数据类型 TEXT:/,双目运算符,算数除法;如果两个参与运算的数是整数,表示整除,舍去小数部分。 如5.0/2等于2.5,而5/2等于2。 REF:.TXT,算数运算符.txt 自加++ TAG:算术运算符,运算符,数据类型 TEXT:单目运算符,针对整数运算,可以放在运算数的两侧,表示运算数增1。 REF:.TXT,算数运算符.txt 自减-- TAG:算术运算符,运算符,数据类型 TEXT:单目运算符,针对整数运算,可以放在运算数的两侧,表示运算数减1。

C语言中条件运算符的语法为

条件运算符的语法为: (条件表达式)?(条件为真时的表达式):(条件为假时的表达式) 例如: x=ay?"greater than":x==y?"equal to":"less than" 它等价于: (x>y)?"greater than":((x==y)?"equal to":"less than") 当x>y时,值为"greater than",x==y时,值为"equal to",否则,值为"less than"。条件运算符的嵌套可读性不够好。 在一个条件运算符的表达式中,如果后面两个表达式的值类型相同,均为左值,则该条件运算符表达式的值为左值表达式。例如: int x=5; long a,b; (x?a:b)=1;//ok:因为a和b都是左值 (x?x:a)=2;//error:x和a不同类型。编译器将其解释为(1ong)x和a (x==271:a)=3;//error:1非左值 "(x?a:b)=1"表示当x为0时,b=1,否则a=1。这里的括号是必须的,否则将被看作x?a:(b=1)。"(x?x:a)=2”中,尽管x是左值,a也是左值,但x与a不同类型,条件运算符要对其进行操作数的隐式转换,使之成为相同的类型。任何被转换的变量都不是左值。 ->在C中,条件运算符是不能作左值的,所以"(x?a:b)=1;"将通不过编译。 getchar 函数名: getchar 功能: 从stdio流中读字符 用法: int getchar(void); 注解:

C语言数据类型和运算符及表达式复习题

数据类型、运算符和表达式复习题.选择题 1. 以下不合法的用户标识符是: ( ) a) f2_G3 b) If c) 4d d) _8 2. 以下选项中合法的用户标识符是: ( ) a) long b) _2Test c) 3Dmax d) A.dat 3. 以下可用作用户标识符的是: ( ) a) 12_a b) signed c) t-o d) _if 4. 以下不是关键字的标识符是: ( ) a) continue b) char c) If d) default 5. C 语言提供的合法的关键字是: ( ) a) swicth b) cher c) Case d) void 6. 以下选项中不合法的int 整型常数是( ) a) 32768 b) -56 c) 03 d) 0xAF 7. 以下合法的长整型常量是( ) a) 2L b) 49627 c) d) 213& 8. 以下正确的实型常量是( ) a) 1.2E b) . c) 1.2e0.6 d) 8 9. 以下选项中合法的实型常数是( ) a) 5E2.0 b) E-3 c) .2E0 d) 1.3E 10. 以下合法的八进制数是( ) a) 0135 b) 068 c) 013.54 d) o7

11. 以下合法的十六进制数是( ) a) 0x b) 0x4de c) 0x1h d) ox77 12. 以下选项中非法的数值常量是( ) a) 019 b) 0L c) 0xff d) 1e1 13. 若变量已正确定 以下合法的赋值表达式是( ) 义, a) a=1/b=2 b) ++(a+b) c) a=a/(b=5) d) y=int(a)+b 14. 若变量已正确定 以下非法的表达式是( ) 义, a) a/=b+c b) a%(4.0) c) a=1/2*(x=y=20,x*3) d) a=b=c 15. 设x为int 类型,其值为11,则表达式( x++*1/3 )的值是: a) 3 b) 4 c) 11 d) 12 16.设a,b 均为double 型,且 a=5.5;b=2.5; 则表达式 (int)a+b/b 的值是( ) a) 6. b) 6 c) 5. d) 6. 17.若a为int型,且其值为3,则执行完表达式: a+=a-=a*a 后,a 的值是( ) a) -3 b) 9 c) -12 d) 6 18.设k 和x 均为int 型变量,且k=7 ;x=12;则能使值为 3 的表达式是( )

C语言中的逻辑运算符和位运算符总结

一、逻辑运算符: 包括:1。&&逻辑与 2。||逻辑或 3。!逻辑非 逻辑运算符用于对包含关系运算符的表达式进行合并或取非 对于使用逻辑运算符的表达式,返回0表示“假”,返回1表示“真”。关于逻辑运算符的解释 请注意:任何使用两个字符做符号的运算符,两字符之间不应有空格,即将==写成= =是错误的。 假设一个程序在同时满足条件a<10和b==7时,必须执行某些操作。应使用关系运算符和逻辑运算符“与”来写这个 条件的代码。用&&表示“与”运算符,该条件代码如下: (a<10) && (b==7); 类似地,“或”是用于检查两个条件中是否有一个为真的运算符。它由两个连续的管道符号(||)表示。如果上例 改为:如果任一语句为真,则程序需执行某些操作,则条件代码如下: (a<10) || (b==7); 第三个逻辑运算符“非”用一个感叹号(!)表示。这个运算符对表达式的真值取反。例如,如果变量s小于10,程序 程序需执行某些操作,则条件代码如下: (s<10) 或 (!(s>=10)) //s不大于等于10 关系运算符和逻辑运算符的优先级一般都低于算术运算符。例如,5>4+3的计算与5>(4+3)运算符是一样的,即 先计算4+3,再执行关系运算。此表达示的结果为“假”,即,将返回0。 下面的语句 printf("%d",5>4+3); 将输出 0 可以总结为:&&的结果是真真为真。||的结果是假假为假。 与A&&B 只有A B都为真才是真 或A||B 只有A B都为假才是假 非 ~A A为真时,此式为假 二、位运算符: 包括:1。&位与符 2。|位或符 3。^位异或符 4。~位取反符 以操作数12为例。位运算符将数字12视为1100。位运算符将操作数视为位而不是数值。数值 可以是任意进制的:十进制、八进制或十六进制。位运算符则将操作数转化为二进制,并相应地返回1或0。 位运算符将数字视为二进制值,并按位进行相应运算,运算完成后再重新转

C语言运算符与表达式的练习题

C语言运算符与表达式的练习题 (作业写到纸质作业本上,在规定时间内交给助教批阅,不要 再网上提交) 一、单项选择题 (1) 以下选项中,正确的C 语言整型常量是。 A. 32L B. 510000 C. -1.00 D. 567 (2) 以下选项中,是不正确的C 语言字符型常量。 A. 'a' B. '\x41' C. '\101' D. "a" (3) 在C 语言中,字符型数据在计算机内存中,以字符 的形式存储。 A. 原码 B. 反码 C. ASCII 码 D. BCD码 (4) 字符串的结束标志是。 A. 0 B. '0' C. '\0' D. "0" (5) 算术运算符、赋值运算符和关系运算符的运算优先级按 从高到低依次为。 A. 算术运算、赋值运算、关系运算 B. 算术运算、关系运 算、赋值运算

C. 关系运算、赋值运算、算术运算 D. 关系运算、算术运算、赋值运算 (6) 逻辑运算符中,运算优先级按从高到低依次为。 A. &&,!,|| B. ||,&&,! C. &&,||,! D. !,&&,|| (7) 表达式!x||a==b 等效于。 A. !((x||a)==b) B. !(x||y)==b C. !(x||(a==b)) D. (!x)||(a==b) (8) 设整型变量m,n,a,b,c,d 均为1,执行(m=a>b)&&(n=c>d)后, m,n 的值是。 A. 0,0 B. 0,1 C. 1,0 D. 1,1 (9) int b=0,x=1;执行语句if(x++) b=x+1; 后,x,b 的值依次为。 A. 2,3 B. 2,0 C. 3,0 D. 3,2 (10) 设有语句int a=3;,则执行了语句a+=a-=a*=a; 后,变量 a 的值是。 A. 3 B. 0 C. 9 D. -12 (11) 在以下一组运算符中,优先级最低的运算符是。 A. * B. != C. + D. =

逻辑运算符和表达式(c语言)

南京高等职业技术学校 课堂教学设计 授课时间:2014年11月6日第11周星期四教学目标教学准备 授课教师课时课程通过本节课的学习,学生能够: 1.清晰地说出各种逻辑运算符; 2.正确运算出逻辑表达式的值,并 通过程序验证结果; 重点教案□√ 马丽娟 1 C语言多媒体课件□√班级授课地点课题教学讲义□ 512212 机房4.2逻辑运算符与逻辑表达 式 1.逻辑表达式的求值运算; 2.逻辑表达式的求值优化。 学生工作页□ 课堂特殊要求(指教师、学生的课前准备活动等) 教师:安装Win-TC程序难点 教具□√ 逻辑表达式的求值优化授课形式 理论讲授课 教学环节时间分配教师活动学生活动教学方法媒体手段导入新课 5 提出问题,并举例说明听讲、思考、回答讲授法PPT 新课讲授20 讲授、分析听讲、讨论并记录讲授法PPT 巩固练习15 布置任务、巡视、答疑思考、编程并回答问题练习法Win-TC 课堂小结 3 归纳、总结听讲、回答问题讲授法PPT 布置作业 2 布置作业记录讲授法PPT 板书设计 §4.2 逻辑运算符与逻辑表达式 ?逻辑运算符:&&、||、! ?逻辑表达式的值:非0即1 ?逻辑运算的求值优化工作任务/教学情境设置 无课后作业 书面作业:P52 随堂练习 课后反思

教案纸 教学内容 4.2 逻辑运算符与逻辑表达式 一、复习导入(5min) 1. 复习:请学生说出关系运算符有哪些? 请学生回答关系运算表达式的值? 教师进行补充。 2.导入新课: 1、学生参加技能大赛培训的条件? ?扎实的专业知识与较高的实践能力 教师强调与的关系 2、参加技能大赛集训而停课的条件? ?移动互联或智能家居 教师强调或的关系 3、学生回答引入禁烟区的条件? ?没有吸烟非 教师强调非的关系 二、新课讲授(20min) 逻辑运算符 1.教师根据逻辑关系给出三种逻辑运算符的表示形式: &&、||、! 2.教师利用具体的表达式关系分析各种逻辑运算符的作用: 逻辑与相当于英语中的and; 逻辑或相当于英语中的or; 逻辑非相当于英语中的no; 3.教师根据具体的逻辑关系引出逻辑表达式的概念及表示形式: 表达式1&&表达式2 a&&b 表达式1||表达式2 a || b !表达式!a

c语言中逻辑运算符和逻辑表达式只是定总结

逻辑运算符和逻辑表达式 (一)逻辑运算符及其优先次序 1.&& (逻辑与) 相当于其他语言中的AND 2.|| (逻辑或) 相当于其他语言中的OR 3.! (逻辑非) 相当于其他语言中的NOT 例:a&&b 若a,b为真,则a&&b为真。 a||b 若a,b之一为真,则a||b为真。 !a 若a为真,则!a为假。 优先次序: ?逻辑运算符中的“&&”和“||”低于关系运算符,“!”高于算术运算符 ?逻辑非>算数运算符>关系运算符>&&和||>赋值运算符>逗号运算符(二)逻辑表达式 ?用逻辑运算符将关系表达式或逻辑量连接起来的式子就 是逻辑表达式 ?逻辑表达式的值应该是一个逻辑量“真”或“假”。 任何非零的数值都被认作“真” 例:设a=4,b=5: !a的值为0 a&&b的值为1 a||b的值为1 !a||b的值为1 4&&0||2的值为1 例:5>3&&8<4-!0 (从左向右运算)

表达式值为0 1)!0=1 2)4-1=3 3)5>3值为1 8<3值为0 4)1&&0值为0 (三)短路现象 在逻辑表达式的求解中,并不是所有的逻辑运算符都要被执行。 (1)a&&b&&c 只有a为真时,才需要判断b的值,只有a和b都为真时,才需要判断c的值。 (2)a||b||c 只要a为真,就不必判断b和c的值,只有a为假,才判断b。a和b都为假才判断c 例:int m=10,n=12,a=1,b=3,c=14,d=7,i,j; <1>i=(m=a>b)&&(n=c>d); printf(“%d,%d\n”,m,n); /*输出值:0,12 */ j=(m=a>b)||(n=c>d); printf(“%d,%d\n”,m,n); /*输出值:1,12 */ printf(“%d,%d\n”,i,j); 输出值:0,1 <2>i=(m=ad); printf(“%d,%d\n”,m,n); /*输出值:1,1 */ j=(m=ad); printf(“%d,%d\n”,m,n); /*输出值:1,1 (应该输出的为上一步的n为1,不等于12) */ printf(“%d,%d\n”,i,j); 输出值:1,1

C语言中的表达式及其知识要点

C语言中的表达式及其知识要点 绍兴文理学院沈红卫 C语言中数据类型、运算符等语法点最终归一到表达式(expression)。表达式是C语言的重点和难点。 何为表达式?表达式就是,由运算符、变量和常量组成的具有一个确定结果(值)的一个式子。由于C语言中运算符的广泛性和广义性,所以,C语言中的表达式也是广义的一个概念,与数学中的表达式既有相同之处,又有许多不同的地方。例如:y=x=3,这是一个赋值表达式;x+3,y*5,这也是一个表达式,是逗号表达式,因为“,”(逗号)在C里也是一个运算符。这些是数学所没有的。 说它是重点,是因为几乎所有语句都会涉及到表达式;说它是难点,是因为表达式的广义性,以及求解表达式的复杂性。 为了学好表达式,首先必须掌握C语言中的表达式的种类。C语言表达式的种类较多,主要有以下类型: 算术表达式:大家最熟悉的,例如:x+5*y,算术运算的表达式 关系表达式:x>=5,x<6,x==8,大小关系判断的表达式 逻辑表达式:ans==’y’||ans==’Y’,与、或、非三种逻辑运算的表达式 赋值表达式:x=6+y,进行变量赋值的表达式 条件表达式:x>y?1:0,如果x>y则取1,否则取0 逗号表达式:x+3,y*5,z-3,有逗号运算符组成的表达式 表达式结果求解是必须掌握的内容。求解一个表达式,必须使用三条规则:一是混合运算规则;二是优先级规则;三是结合性规则。 混合运算规则:当表达式涉及到不同的数据类型时,必须使用该规则,以确定表达式的结果的类型。该规则即教材P35中的“表达式中的自动类型转换规则”。 优先级规则:表达式涉及到多种运算符、优先级又各不相同时,必须使用该规则,就好像数学中的“先乘除后加减”。每种运算符的优先级参见教材P434“附录C”。例如:假设x=3,则算术表达式x+x*5,先乘后加,结果等于18。再如:假设x=3,则逻辑表达式x>5

c语言中的关系运算符和逻辑运算符

1.逻辑运算符 逻辑运算符是指用形式逻辑原则来建立数值间关系的符号。 Turbo C的逻辑运算符如下: ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 操作符作用 ───────────────────────────── && 逻辑与 || 逻辑或 ! 逻辑非 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.关系运算符 关系运算符是比较两个操作数大小的符号。 Turbo C的关系运算符如下: ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 操作符作用 ───────────────────────────── > 大于 >= 大于等于 < 小于 <= 小于等于 == 等于 != 不等于 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━关系运算符和逻辑运算符的关键是真(true)和假(false)的概念。Turbo C中 true可以是不为0的任何值, 而false则为0。使用关系运算符和逻辑运算符表达式时, 若表达式为真(即true)则返回1, 否则, 表达式为假(即false), 则返回0。 例如: 100>99 返回1 10>(2+10) 返回0 !1&&0 返加0 对上例中表达式!1&&0, 先求!1和先求1&&0将会等于出不同的结果, 那么何 者优先呢? 这在Turbo C中是有规定的。有关运算符的优先级本节后面将会讲到。 3.按位运算符

Turbo C和其它高级语言不同的是它完全支持按位运算符。这与汇编语言的位操作有些相似。 Turbo C中按位运算符有: ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 操作符作用 ──────────────────────────── & 位逻辑与 | 位逻辑或 ^ 位逻辑异或 - 位逻辑反 >> 右移 << 左移 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━按位运算是对字节或字中的实际位进行检测、设置或移位, 它只适用于字符 型和整数型变量以及它们的变体, 对其它数据类型不适用。 关系运算和逻辑运算表达式的结果只能是1或0。而按位运算的结果可以取0 或1以外的值。 要注意区别按位运算符和逻辑运算符的不同, 例如, 若x=7, 则x&&8 的值为真(两个非零值相与仍为非零), 而x&8的值为0。 移位运算符">>"和"<<"是指将变量中的每一位向右或向左移动, 其通常形式为: 右移: 变量名>>移位的位数 左移: 变量名<<移位的位数 经过移位后, 一端的位被"挤掉", 而另一端空出的位以0 填补, 所以, Turbo C中的移位不是循环移动的。 4.Turbo C的特殊运算符 一)"?"运算符 "?"运算符是一个三目运算符, 其一般形式是: <表达式1>?<表达式2>:<表达式3>; "?"运算符的含义是: 先求表达式1的值, 如果为真, 则求表达式2 的值并把它作为整个表达式的值; 如果表达式1 的值为假, 则求表达式3 的值并把它作为整个表达式的值。 例如: main()

C语言全部的运算符

整理自网络 C语言运算符 C语言的内部运算符很丰富,运算符是告诉编译程序执行特定算术或逻辑操作的符号。C语言有三大运算符:算术、关系与逻辑、位操作。另外,C还有一些特殊的运算符,用于完成一些特殊的任务。 2.6.1算术运算符 表2-5列出了C语言中允许的算术运算符。在C语言中,运算符“+”、“-”、“*”和“/”的用法与大多数计算机语言的相同,几乎可用于所有C语言内定义的数据类型。当“/”被用于整数或字符时,结果取整。例如,在整数除法中,10/3=3。 一元减法的实际效果等于用-1乘单个操作数,即任何数值前放置减号将改变其符号。模运算符“%”在C语言中也同它在其它语言中的用法相同。切记,模运算取整数除法的余数,所以“%”不能用于float和double类型。

最后一行打印一个0和一个1,因为1/2整除时为0,余数为1,故1%2取余数1。 2.6.2自增和自减 C语言中有两个很有用的运算符,通常在其它计算机语言中是找不到它们的—自增和自减运算符,++和--。运算符“++”是操作数加1,而“--”是操作数减1,换句话说:x=x+1;同++x;x=x-1;同--x; 自增和自减运算符可用在操作数之前,也可放在其后,例如:x=x+1;可写成++x;或x++;但在表达式中这两种用法是有区别的。自增或自减运算符在操作数之前,C语言在引用操作数之前就先执行加1或减1操作;运算符在操作数之后,C语言就先引用操作数的值,而后再进行加1或减1操作。请看下例: x=10; ;y=++x; 此时,y=11。如果程序改为: x=10;y=x++; 则y=10。在这两种情况下,x都被置为11,但区别在于设置的时刻,这种对自增和自减发生时刻的控制是非常有用的。在大多数C编译程序中,为自增和自减操作生成的程序代码比等价的赋值语句生成的代码 要快得多,所以尽可能采用加1或减1运算符是一种好的选择。 。下面是算术运算符的优先级: :最高++、- -- -(一元减) *、/、%最低+、-编译程序对同级运算符按从左到右的顺序进行计算。当然,括号可改变计

C语言位运算符:与、或、异或、取反

C语言位运算符:与、或、异或、取反、左移和右移语言位运算符:与、或、异或、取反、左移和右移 位运算是指按二进制进行的运算。在系统软件中,常常需要处理二进制位的问题。 C语言提供了6个位操作运算符。这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型。 C语言提供的位运算符列表: 运算符含义描述 &按位与如果两个相应的二进制位都为1,则该位的结果值为1,否则为0|按位或两个相应的二进制位中只要有一个为1,该位的结果值为1 ^按位异或若参加运算的两个二进制位值相同则为0,否则为1 ~取反~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0<<左移用来将一个数的各二进制位全部左移N位,右补0 >>右移将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补0 1、“按位与”运算符(&) 按位与是指:参加运算的两个数据,按二进制位进行“与”运算。如果两个相应的二进制位都为1,则该位的结果值为1;否则为0。这里的1可以理解为逻辑中的true,0可以理解为逻辑中的false。按位与其实与逻辑上“与”的运算规则一致。 逻辑上的“与”,要求运算数全真,结果才为真。若,A=true,B=true,则 A∩B=true例如:3&5 3的二进制编码是11(2)。(为了区分十进制和其他进制,本文规定,凡是非十进制的数据均在数据后面加上括号,括号中注明其进制,二进制则标记为2)内存储存数据的基本单位是字节(Byte),一个字节由8个位(bit)所组成。位是用以描述电脑数据量的最小单位。二进制系统中,每个0

或1就是一个位。将11(2)补足成一个字节,则是00000011(2)。5的二进制编码是101(2),将其补足成一个字节,则是00000101(2) 按位与运算: 00000011(2) &00000101(2) 00000001(2) 由此可知3&5=1 c语言代码: #include main() { int a=3; int b = 5; printf("%d",a&b); } 按位与的用途: (1)清零 若想对一个存储单元清零,即使其全部二进制位为0,只要找一个二进制数,其中各个位符合一下条件: 原来的数中为1的位,新数中相应位为0。然后使二者进行&运算,即可达到清零目的。

C语言运算符

C语言运算符 无论是加减乘除还是大于小于,都需要用到运算符,在C语言中的运算符和我们平时用的基本上都差不多。 运算符包括赋值运算符、算术运算符、逻辑运算符、位逻辑运算符、位移运算符、关系运算符、自增自减运算符。大多数运算符都是二目运算符,即运算符位于两个表达式之间。单目运算符的意思是运算符作用于单个表达式。 一、赋值运算符 赋值语句的作用是把某个常量或变量或表达式的值赋值给另一个变量。符号为‘=’。这里并不是等于的意思,只是赋值,等于用‘==’表示。 注意:赋值语句左边的变量在程序的其他地方必须要声明。 得已赋值的变量我们称为左值,因为它们出现在赋值语句的左边;产生值的表达式我们称为右值,因为她它们出现在赋值语句的右边。常数只能作为右值。 例如: count=5; total1=total2=0; 第一个赋值语句大家都能理解。 第二个赋值语句的意思是把0同时赋值给两个变量。这是因为赋值语句是从右向左运算的,也就是说从右端开始计算。这样它先total2=0;然后total1=total2;那么我们这样行不行呢? (total1=total2)=0; 这样是不可以的,因为先要算括号里面的,这时total1=total2是一个表达式,而赋值语句的左边是不允许表达式存在的。 二、算术运算符 在C语言中有两个单目和五个双目运算符。 符号功能 +单目正 -单目负 *乘法 /除法 %取模 +加法 -减法 下面是一些赋值语句的例子,在赋值运算符右侧的表达式中就使用了上面的算术运算符:Area=Height*Width; num=num1+num2/num3-num4; 运算符也有个运算顺序问题,先算乘除再算加减。单目正和单目负最先运算。 取模运算符(%)用于计算两个整数相除所得的余数。例如: a=7%4; 最终a的结果是3,因为7%4的余数是3。 那么有人要问了,我要想求它们的商怎么办呢?

掌握C语言中基本的运算符

第3讲 运算符运算符、、表达式&类型转换 【课前思考课前思考】】 1、回忆数学中的运算符回忆数学中的运算符、、表达式表达式,,C 语言中的运算符语言中的运算符、、表达式是什么样子表达式是什么样子?? 2、能否直接将一个浮点型数据赋值给整型变量能否直接将一个浮点型数据赋值给整型变量?? 【学习目标学习目标】】 掌握C 语言中基本的运算符、表达式,掌握C 语言中数据类型转换的方法 【学习指南学习指南】】 联想数学中的运算符及表达式,找出C 语言与其区别进行学习 【重 难 点】 重点: 算术运算符、关系运算符、逻辑运算符、赋值运算符、条件运算符及其优先级 “=”与“==”的区别 难点: 自增、自减运算,逻辑运算,逗号运算 【学时安排学时安排】】 学时:2学时 【知 识 点】 第3讲 运算符、表达式&类型转换 (1) 2.3 运算符与表达式 (2) 2.3.1 算术运算符与算术表达式....................................................................................2 1. 算术运算符.................................................................................................................2 2. 算术表达式.................................................................................................................3 2.3.2 自增与自减运算....................................................................................................4 1. 自增、自减运算符的使用形式.................................................................................4 2. 自增、自减运算符的优先级和结合性....................................................................5 2.3.3 关系运算符与关系表达式....................................................................................5 1. 关系运算符.................................................................................................................5 2. 关系表达式.................................................................................................................6 2.3.4 逻辑运算符与逻辑表达式....................................................................................6 1. 逻辑运算符.................................................................................................................6 2. 逻辑表达式.................................................................................................................7 2.3.5 赋值运算符与赋值表达式....................................................................................8 2.3.6 条件运算符与求字节运算符................................................................................9 1. 条件运算符.................................................................................................................9 2. 求字节运算符.. (10)

相关主题
文本预览
相关文档 最新文档