C.a>10&&a<15 D.!(a<=10)&&!(a>=15)【答案】A【解析】
选项B表明a==11或a==12或a==13或a==14,符合题意。选项C表明a>10并且a<15,符合题意。选项D表明a不小于等于10并且a不大于等于15,符合题意。
8.已知a,b,c为int型变量,若从键盘输入:1,2,3<回车>,使a的值为1,b的值为2,c的值为3,以下选项中正确的输入语句是( )。
A.scanf("%2d,%2d,%2d",a,b,c); B.scanf("%d,%d,%d",&a,&b,&c);
C.scanf("%d%d%d",&a,&b,&c); D.scanf("i=%d,j=%d,k=%d",&a,&b,&c);【答案】B【解析】
格式化输入函数scanf()函数的一般形式为:scanf(格式控制字符串,地址表列)。A选项的格式控制字符串不能有限定宽度,且地址列表需加取地址符“&”;B选项符合题意要求;C选项的输入形式为:123<回车>,各数之间用空格隔开;D选项的输入格式为:i=1,j=2,k=3<回车>。
9.设整型变量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【答案】A【解析】
运算符“>”的优先级比“=”高,所以m=a>b等价于m=(a>b),n=c>d等价于n=(c>d)。表达式a>b和表达式c>d均为“假”,即值均为0。所以执行(m=a>b)&&(n=c>d)等价于执行(m=0)&&(n=0),即m和n的值都为0,故选A。
10.设有语句int a=3;,则执行了语句a+=a-=a*=a;后,变量a的值是( )。
A.3 B.0 C.9 D.-12【答案】B【解析】
从后往前算,a*=a即a=a*a,a=9;然后a-=a=9,a=a-9,a=0;a+=0,a=a+a=0,故选B。
11.以下程序的功能是进行位运算:
程序运行后的输出结果是( )。
A.4 3 B.7 3 C.7 0 D.4 12【答案】A【解析】
a=7^3计算的式子如下:
按位非的运算优先级比按位与高,所以先计算~4。~4对应的二进制计算:~(00000100) =>(11111011) 接着进行按位与22运算,计算的式子如下:
所以,a的值为4,b的值为3。
12.设有定义语句:char c1=92,c2=92;,则以下表达式中值为零的是( )。
A.c1^c2 B.c1&c2 C.~c2 D.c1|c2【答案】A【解析】
从定义出发,按位异或运算符“^”的功能是将参与运算的两数对应的两个二进制位进行相异或操作。只要对应的两个二进位同号为0,异号为1,故选A。
二、改错题
1.输出一串字符BOY,代码段如下:
char a="B",b="O",c="Y";
printf("%c%c%c\n",a,b,c);
错误语句为:____________
改正后的语句为:____________【答案】 char a="B",b="O",c="Y";
char a='B',b='O',c='Y';【解析】
对字符变量进行赋值有两种方式:第一,将常量字符直接赋值给字符变量时,必须用单引号将常量字符包含起来,如a='a';第二种,直接将常量字符的ASCII码值赋给字符变量,如a=97(常量字符'a'对应的ASCII编码值为97)。
2.输出3+4的值,程序片断如下:
错误语句为:____________
改正后的语句为:____________【答案】 printf("c=%d");
printf("c=%d",c);【解析】
具体参见printf()函数的用法。
3.有三个变量a,b,c,把它们的值相加并存放在变量sum当中,假设所用变量都是int类型且a,b,c的初值都是2,部分代码段如下:
错误语句为:____________
改正后的语句为:____________【答案】 int a=b=c=2;
int a=2,b=2,c=2;【解析】
一行定义多个变量时,用逗号将它们隔开。
三、填空题
1.已有定义:int x=3;,则表达式:x=x+1.78的值是____________。【答案】4【解析】
x+1.78的值为4.78,因为x是整型数,所以将4赋值给x,小数部分自动去掉。
2.已有定义:int x=10,y=3,z;,则表达式:z=(x%y,x/y)的值是____________。【答案】3【解析】
先算括号里的逗号表达式的值,x%y的值为1,x/y的值为3,所以逗号表达式的值为3,再将逗号表达式的值赋给z,则z的最终结果为3。
3.已有定义语句:int k=3,j=4;,运行表达式(k+=j,j/=4.0,++j,j+2)后,表达式的值是____________,变量k的值是____________,变量j的值是____________。【答案】4 7 2【解析】
K+=j表达式的值为7,k的值为7;j/=4.0表达式的值为1,j的值为1;++j表达式的值为2,j的值为2;表达式j+2的值为4,j的值还是2,所以逗号表达式的最终值为4,k的值为7,j的值为2。
4.C语言中的逻辑值“真”是用____________表示的,逻辑值“假”是用____________表示的。【答案】1 0【解析】
在C语言中规定,逻辑“真”用数值1表示,逻辑“假”用数值“0”来表示。所有非0的数值都表示逻辑“真”,0表示逻辑“假”。
5.求解逗号表达式x=a=3,6*a后,表达式、x、a的值依次为____________。【答案】 18、3、3【解析】
逗号运算符是优先级别最低的运算符,先算表达式x=a=3,则x和a的值都被赋值为3,该表达式的值为3;表达式6*a的值18,所以逗号表达式的最终值为18。
6.写出以下程序运行的结果:____________。【答案】 a b 97 98【解析】
x和y都是字符型变量,x被赋值为字符a,字符a的ASCII值为97,执行y=x+1则y被赋值为字符b,字符b的ASCII值为98。执行printf("%c%c\n",x,y)时,由于%c是以字符串的形式输出,所以输出的是x和y对应的字符;执行printf("%d%d\n",x,y)时,由于%d是以整型数的形式输出,所以输出的是x和y对应字符的ASCII值。
7.写出程序运行的结果:____________。【答案】 9,11,9,10【解析】
执行m=++i时,i的值先自增1变成9在赋值给m,所以此时m和i的值都为9;执行n=j++时,先把j的值赋值给n,此时n的值为10,之后,j的值再自增1为变成11。
8.写出程序运行的结果:____________。【答案】 2,5,3,25【解析】
表达式k++的值为2,k的值也变为2;表达式i=i+j的值为5,i的值为5;表达式i*5的值为25,i的值保持不变。
9.已知int a,b,c;若从键盘输入三个数分别作为变量a、b、c的值,从键盘输入格式要求如下:a=3,b=4,c=5将程序补充完整。【答案】 scanf("a=%d,b=%d,c=%d",&a,&b,&c);【解析】
格式化输入函数scanf()函数的一般形式为:scanf(格式控制字符串,地址表列)。应题目要求输入格式为:a=3,b=4,c=5<回车>,即答案为scanf("a=%d,b=%d,c=%d",&a,&b,&c)
10.输入秒数,显示对应是多少小时、多少分、多少秒。【答案】 minute=seconds%3600/60;
second=seconds%60;【解析】
执行hour=seconds/3600是取出对应的小时数,取出分钟数的表达式为:minute=seconds%3600/60,首先seconds%3600得到的是取完小时数剩余的秒数,接着再除以60就可以得到分钟数;要得到秒数只要进行求余就可以了。
四、编程题
1.从键盘输入两个整数,计算它们的和、差、商和积。【程序分析】 本题主要练习使用printf函数和scanf函数。【源程序】
2.从键盘输入一个字符,输出该字符前后相邻的两个字符。【程序分析】 字符在内存中以ASCII编码值存储,相邻字符之间的ASCII编码值相差1,并且字符数据可以当作整型数据来进行加减运算。【源程序】
3.要将“China”翻译成密码。密码规律是:用原来字母的后面第4个字母代替原来的字母。请编写一程序实现,并输出结果。(Glmre)【程序分析】 字符在内存中以ASCII编码值存储,并且字符数据可以当作整型数据来进行加减运算,所以求一个字符后面的第4个字符即只要在该字符的基础上加上4即可。【源程序】
4.求长方形的周长和面积,长方形的长和宽要求从键盘输入。输入之前,应当给予适当的提示。【程序分析】 可将长方形的长、宽、周长、面积定义为浮点型数据,设长为x,宽为y,周长为l,面积为s。【源程序】
5.有甲、乙两件商品,甲商品的利润率为5%,乙商品的利润率为4%,共可获利46元。价格调整后,甲商品的利润率为4%,乙商品的利润率为5%,共可获利44元,则两件商品的进价分别是多少元?【程序分析】
假设甲商品的进价为:x,乙商品的进价为:y,价格调整之前获利:m ,价格调整之后获利:m 。则可列方程:12【源程序】2.2习题
一、选择题
1.以下可用作用户标识符的是( )。
A.12_a B.signed C.t-o D._if
2.以下正确的实型常量是( )。
A.1.2E B.0.579899 C.1.2e0.6 D.8
3.有定义语句:int a=5,b;,不能给b赋2的赋值语句是( )。
A.b=a/2; B.b=b+2; C.b=2%a; D.b=5;b=2;
4.若有定义:int a=8,b=5,c;,执行语句:c=a/b+0.4;后,c的值是( )。
A.1.4 B.1 C.2.0 D.2
5.若a为int型,且其值为3,则执行完表达式:a+=a-=a*a后,a的值是( )。
A.-3 B.9 C.-12 D.6
6.若变量已正确定义,以下非法的表达式是( )。
A.a/=b+c B.a%(4.0) C.a=1/2*(x=y=20,x*3) D.a=b=c
7.若有说明语句:char c='\x41';则变量c在内存占用的字节数是( )。
A.1 B.2 C.3 D.4
8.表达式!x||a==b等效于( )。
A.!((x||a)==b) B.!(x||y)==b C.!(x||(a==b)) D.(!x)||(a==b)
9.要判断char型变量m是否数字字符,可以使用下列表达式( )。
A.0<=m&&m<=9 B."0"<=m&&m<="9"
C.'0'<=m&&m<='9' D.以上选项都错
10.已知
int a,b,c;
scanf("a=%d,b=%d,c=%d",&a,&b,&c);
若从键盘输入3、4、5三个数分别作为变量a、b、c的值,则正确的输入形式是( )。
A.3,4,5 B.3 4 5
C.a=3,b=4,c=5 D.3↙4↙5(↙代表回车)
11.有以下程序:
执行后输出结果是( )。
A.x=7,y=0 B.x=0,y=7
C.x=1,y=1 D.x=43,y=0
12.整型变量x和y的值相等,且为非0值,则以下选项中,结果为零的表达式是( )。
A.x||y B.x|y C.x&y D.x^y
二、改错题
1.从键盘输入一个正方形的边长,然后求出该正方形的面积,代码段如下:
错误语句为:____________
改正后的语句为:____________
2.取出123的十位数字,进行输出,部分代码如下:
错误语句为:____________
改正后的语句为:____________
3.求一个圆的周长,部分代码段如下:
错误语句为:____________
改正后的语句为:____________
三、填空题
1.若x和n都是int型变量,且x的初值为12,n的初值为5,则计算表达式x%=(n%=2)后x的值为____________。
2.判断变量a、b的值均不为0的逻辑表达式为____________。
3.已有定义:int x=0,y=0;,则计算表达式:(x+=2,y=x+3/2,y+5)后,表达式的值是____________,变量x的值是____________,变量y的值是____________。
4.已知int a=5,b=2;则表达式a/b的值是____________。
5.设c='w',a=1,b=2,d=-5,则表达式'x'+1>c,'y'!=c+2,-a-5*b<=d+1,b=a=2的值分别为____________、____________、____________、____________。
6.仔细分析下面程序,该程序的输出结果是:____________。
7.写出以下程序运行的结果:____________。
8.写出以下程序运行的结果:____________。
9.请将程序补充完整,使得程序的输出结果为:Hello。
10.以下程序的功能是将大写字母A转换为小写字母a,将程序补充完整。
四、编程题
1.从键盘分别输入两个复数,计算它们的和、差。
2.将字符'A'变成'a',并输出字符'a'的ASCII编码值。
3.根据圆柱体的底面半径和高,计算它的表面积和体积。底面半径和高从键盘输入,输入时,应当给予适当的提示。