第02章 配套习题集.docx
- 文档编号:10198847
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:26
- 大小:37.76KB
第02章 配套习题集.docx
《第02章 配套习题集.docx》由会员分享,可在线阅读,更多相关《第02章 配套习题集.docx(26页珍藏版)》请在冰豆网上搜索。
第02章配套习题集
第二章数据类型、运算符和表达式
2.1本章知识重点
1.数与字符在计算机内存中的表示方法
计算机无论处理什么数据都要先将其存放在内存中。
不同类型的数据在内存中存放的格式也不相同。
整数按补码形式,实数按浮点数形式,字符按ASCII码形式。
2.整型数据类型整型常量分:
基本型、长整型、无符号型;整型变量分:
有符号基本整型、无符号基本整型、有符号短整型、无符号短整型、有符号长整型、无符号长整型。
3.实型数据类型实型常量两种表示方法:
十进制小数形式、指数形式;实型常量分:
单精度实数、双精度实型数;实型变量分float型(单精度实型)、double型(双精度实型、longdouble(长双精度实型)。
4.字符数据类型字符常量、字符串常量、字符型变量。
5.算术运算符与算术表达式基本算术运算符包括:
+、-、*、/、%,两个类型相同的操作数进行运算,其结果类型与操作数类型相同。
求余运算要求运算符%的两边的操作数必须为整数,余数的符号与被除数符号相同。
用算术运算符和括号将运算对象连接起来的式子称为算术表达式,运算对象包括常量、变量、函数等等。
C语言规定了算术运算符的优先级。
在将复杂的数学算式写成C语言表达式时,常常要使用到一些标准数学函数。
6.赋值运算符和赋值表达式赋值运算符的作用是将一个表达式的值赋给一个变量,由赋值运算符组成的表达式为赋值表达式,赋值表达式的值就是被赋值的变量的值,在赋值表达式中赋值号的左边只能是变量。
7.强制类型转换运算符可以利用强制类型转换运算符将一个表达式转换成所需要的类型。
8.加一、减一运算符用于使其运算分量加1、减1,常常用于for循环语句和指针变量。
9.逗号运算符和逗号表达式用逗号将表达式连接起来的式子。
在实际使用中,使用逗号表达式只是希望分别得到各个表达式的值,而不是刻意要得到整个逗号表达式的值。
10.位运算对一个数的二进制位的运算。
C语言提供了六个用于位操作的运算符,这些运算符只能作用于整型数据或字符型数据。
11.有格式的输入scanf函数
scanf函数是有格式的输入函数,可以按照格式字符串指定的格式读入若干个数据,并把它们存入参数地址表指定的地址单元。
格式控制字符串包括两种成分:
格式转换符和分隔符。
参数地址表指定地址单元。
12.有格式的输出printf函数
printf函数是有格式的输出函数,它能够对任意类型的内部数值、按照指定格式的字符形式显示。
格式控制字符串包括两种成分:
按照原样不动输出的普通字符和用于控制printf中形参转换的转换规格说明,转换规格说明由一个”%”开头到一个格式字符结尾。
2.2教材配套习题解析
2.1选择题
1.C语言中基本的数据类型包括:
。
A.整型、实型、字符型和逻辑型B.整型、实型、字符型和结构体
C.整型、实型、字符型和枚举型D.整型、实型、字符型和指针型
【分析】C语言具有非常丰富的数据类型,包括基本类型、构造类型、指针类型和空类型。
其中构造类型是有基本类型数据按一定规则组成的,例如将同一种数据类型的数据有序组合成一个有机体构成数组,而将同不同数据类型的数据有序组合成一个有机体构成结构体。
在C语言中没有逻辑型数据。
【答案】A
2.下列算术运算符中,只能用于整型数据的是:
。
A.-B.+
C./D.%
【分析】C语言中基本算术运算符包括:
+(加法运算符,或正值运算符)
-(减法运算符,或负值运算符)
*(乘法运算符)
/(除法运算符)
%(求余运算符或模运算符)。
其中求余运算要求运算符%的两边的操作数必须为整数,余数的符号与被除数符号相同。
其它运算则是:
两个类型相同的操作数进行运算,其结果类型与操作数类型相同。
不同类型的数据要先按转换的规则转换成同一类型,然后进行运算。
【答案】D
3.设x,y,z和k都是int型变量,则执行表达式:
x=(y=52,z=26,k=32)后,x的值为:
。
A4B26
C32D52
【分析】C语言中逗号表达式的值的求解过程是先求解表达式1,再求解表达式2,。
。
。
,整个逗号表达式的值为表达式有n的值。
注意,实际使用逗号表达式只是希望分别得到各个表达式的值,而不是刻意要得到整个逗号表达式的值。
【答案】c
4.设有如下的变量定义:
inti=8,k,a,b;
unsignedlongw=5;
doublex=1,y=5.2;
则以下符合C语言语法的表达式是:
。
Aa+=a-=(b=4)*(a=3)Bx%(-3)
Ca=a*3=2Dy=int(i)
【分析】B选择:
B选择中求余运算要求运算符%的两边的操作数必须为整数,x是实型数,C选择:
在赋值表达式中赋值号的左边只能是变量,C选择中出现a*3=2。
A选择:
赋值表达式中的表达式又可以是一个赋值表达式,赋值运算符按照“自右而左”的结合顺序,因此a+=a-=(b=4)*(a=3)的求解步骤如下:
先计算(a=3)、(b=4),
再计算a-=(b=4)*(a=3),a的值为3-12=-9,
最后计算a+=a,相当与a=a+a,计算结果是a的值为-18,D选择:
int是一个关键字,不能够作为它用。
如果作为强制类型转换,应写成y=(int)(i);
【答案】A
5.假定有以下变量定义:
intk=7,x=12;
则能使值为3的表达式是:
。
Ax%=(k%=5)Bx%=(x-k%5)
Cx%=k+k%5D(x%=k)+(k%=5)
【分析】A选择的求解步骤如下:
先计算(k%=5)即k=k%5,K的值为2,
再计算x%=2,X的值为0,赋值表达式的值就是被赋值变量的值,所以该表达式的值为0;B选择的求解相当于x=x%(x-k%5),X的值为2,表达式的值亦为2;因为+的优先级高于=的优先级,所以C选择的求解相当于x=x%(k+k%5),X的值为3,表达式的值亦为3;D选择的求解步骤如下:
先计算(x%=k),X的值为5,表达式的值亦为5,
再计算(k%=5),表达式的值为2,
最后计算5+2,所以表达式的值为7.
【答案】C
6.以下叙述中正确的是:
。
A输入项可以是一个实型常量,如:
scanf("%f",3.5);
B只有格式控制,没有输入项,也能正确输入数据到内存,例如:
scanf("a=%d,b=%d");
C当输入一个实型数据时,格式控制部分可以规定小数点后的位数,例如:
scanf("%4.2f",&d);
D当输入数据时,必须指明变量地址,例如:
scanf("%f",&f);
【分析】scanf函数是有格式的输入函数,可以按照格式字符串指定的格式读入若干个数据,并把它们存入参数地址表指定的地址单元。
scanf函数的参数只能是格式控制字符串和参数地址表,所以A、B显然错误;格式控制字符串包括格式转换符和分隔符,格式转换符不能规定精度.n,所以C也是错误的。
【答案】D
7.以下程序的输出结果是:
。
main()
{inta=12,b=12;
printf("%d%d\n",--a,++b);
}
A1011B1113
C1110D1112
【分析】由程序可知,整型变量a中已存放了12,整型变量b中也存放了12,printf函数要输出两个表达式--a、++b的值,先取出a和b,然后作了自减和自加以后再输出。
注意如果是printf("%d%d\n",a--,b++)则要输出以后再自减和自加。
【答案】B
8.若已定义x和y为double类型,则表达式x=1,y=x+3/2的值是:
。
A1.0B1.5
C2.0D2.5
【分析】根据C语言算术运算类型处理的规则,两个类型相同的操作数进行运算,其结果类型与操作数类型相同。
所以3/2的结果值为整型数1,又因为x是double型,所以根据不同类型的数据要先转换成同一类型,然后进行运算。
转换的规则为:
floatchar,short
doublelongunsignedint
【答案】c
9.若变量a、i已正确定义,且i已正确赋值,合法的语句是:
。
Aa==1B++i;
Ca=a++=5;Da=int(i);
【分析】
A选择不认为是一条语句,因为其后没有逗号,如果一条表达式的最后加了一个逗号就成了一条语句;
C语言中,凡是二元(二目)运算符,可以与赋值符一起组成复合赋值符,C选择中的a++=5是非法的;
int是一个关键字,不能够作为它用。
如果作为强制类型转换,应写成y=(int)(i);
【答案】B
10.若有以下程序段,
intc1=2,c2=3,c3;
c3=1.0/c2*c1;
则执行后,c3中的值是:
。
A0B3
C1D2
【分析】c1,c2,c3是整型数,/和*的运算优先级相同,所以先计算1.0/c2,结果是0,接下来作*运算,结果也是0。
【答案】A
11.有如下程序:
main0
{inty=6,x=3,z=1;
printf(“%d%d\n”,(++x,y++),z+2);
}
运行该程序的输出结果是:
。
A34B63
C43D33
【分析】逗号表达式的值是表达式n的值,所以(++x,y++)的值是y++,而y++是y的值被使用之后再加1。
【答案】B
12.在C语言中,合法的字符常量是:
。
A'\084'B'\x48'
C'ab'D"\0"
【分析】字符常量是一个整数,写成用单引号括住单个字符的的形式,所以C和D显然不可;A和B要考虑转义字符的用法,但是A表示的八进制数不可出现8。
【答案】B
13.若有以下定义和语句:
intu=070,v=0x10,w=10;
printf("%d,%d,%d\n”,u,v,w);
则输出结果是:
。
A8,16,10B56,16,10
C8,8,10D8,10,10
【分析】整型常量可以用下面三种形式表示,十进制整数:
如2001,w是十进制整数;八进制整数:
在八进制整数的前面加一个0。
如02001表示(2001)8,u是八进制整数;十六进制整数:
在十六进制整数的前面加一个0x.如0x2001表示(2001)16,v是十六进制整数。
【答案】B
14.若有以下定义和语句:
charc1='a',c2='f';
printf("%d,%c\n",c2-c1,c2-‘a’+’B’);
则输出结果是:
。
A2,MB5,G
C2,ED5,E
【分析】字符常量的值就是该字符的ASCII码值,a的ASCII码值是97,f的ASCII码值是102,所以c2-c1是5,B的ASCII码值是66,66+5=71是G的ASCII码值。
【答案】B
15.若有定义:
intx,y;chara,b,c;并有以下输入数据(此处↙代表换行符,u代表空格):
1u2↙↙
AuBuC↙↙
则能给x赋整数1,给y赋整数2,给a赋字符A,给b赋字符B,给c赋字符C的正确程序段是:
。
Ascanf("x=%dy=%d",&x,&y);a=getchar();b=getchar();c=getchar();
Bscanf("%d%d",&x,&y);a=getchar();b=getchar();c=getchar();
Cscanf("%d%d%c%c%c”,&x,&y,&a,&b,&c);
Dscanf("%d%d%c%c%c%c%c%c”,&x,&y,&a,&a,&b,&b,&c,&c);
【分析】
A中scanf在输入时要输入与分隔符相同的字符,scanf("x=%dy=%d",&x,&y);中x=与y=是分隔符,应该要输入。
B中getchar()函数在被调用时从输入设备即键盘读入一个输入字符。
所以正确的输入是:
12abc↙。
C中scanf("%d%d%c%c%c”,&x,&y,&a,&b,&c);x、y需要分割开,正确输入:
12abc↙。
或1↙2abc。
D中scanf("%d%d%c%c%c%c%c%c”,&x,&y,&a,&a,&b,&b,&c,&c);的双a,b,c的输入刚好对应输入的↙AuBuC
【答案】D
16.下列不正确的转义字符是:
。
A'\\'B'\"
C'074'D'\0'
【分析】转义字符是以“\”开头的字符序列。
【答案】C
17.语句:
printf("%d",(a=3)&&(b=-3));的输出结果是:
。
A无输出B结果不确定
C-1D1
【分析】C语言中,非零为“真”,“真”用1表示;零为假,假用0表示。
用&&表示逻辑与,||表示逻辑或.本题中,a、b都为真,相与以后也为真。
【答案】D
18.当c的值不为0时,在下列选项中能正确将c的值赋给变量a、b的是:
。
Ac=b=a;B(a=c)‖(b=c);
C(a=c)&&(b=c);Da=c=b;
【分析】
A和D明显不符合要求;B选中表达式(a=c)的值由题目c的值不为0时的条件可知为真,逻辑或只要有一个真,结果就是真,所以不再对(b=c)求值。
【答案】C
19.下列变量定义中合法的是:
。
Ashort_a=1-.le-1;Bdoubleb=1+5e2.5;
Clongao=0xfdaL;Dfloat2_and=1-e-3;
【分析】
C语言规定,标识符以字母或下划线开头,后跟若干个字母、下划线或数字,所以D是不合法的;
指数形式的实型常量中指数应该是整数,所以B是不合法的;
指数形式的实型常量中e前面必须有数字,A选择e前面出现字符l。
【答案】C
20.设intx=2,y=1;表达式(!
x||y--)的值是:
。
A-2B1
C2D-1
【分析】从运算符的优先次序上分析,表达式!
x||y—的!
和–处在同一优先级别,高与||运算符,而y—是用了y后自减,y的初值为1,即真,||运算只要有一个是真,结果就是真。
【答案】B
2.2填空题
1.若想通过格式输入语句使x中存放字符串1234,y中存放整数5,则键盘输入数据是。
【分析】scanf函数是有格式的输入函数,可以按照格式字符串指定的格式读入若干个数据,并把它们存入参数地址表指定的地址单元。
scanf(格式控制字符串,参数地址表);格式控制字符串包括两种成分:
格式转换符和分隔符,在输入数据时要输入与分隔符相同的字符。
【答案】scanf(“%d,%d”,&x,&y);
1234,5↙
2.以下程序的输出结果是。
main()
{unsignedshorta=655;
intb;
printf(“%d\n”,b=a);
}
【分析】本题主要是要考虑short型数据的长度,C标准没有具体规定short型数据的长度,只要求short型不长与int型,TurboCshort型与int型一样,都是16位。
其次表达式b=a的值就是b的值。
【答案】655
3.若有定义:
inta=7,b=8,c=9;接着顺序执行下列语句后,变量c中的值是。
c=(a-=(b-5));
c=(a%11)+(b=3);
【分析】按运算次序,
(b-5)为3;
则a-=(b-5)为a=a-3为4;
c=4;
(a%11)即4%11为4。
(b=3)为3。
【答案】7
4.请写出以下数学式的C语言表达式。
COS60О+8ey
【分析】COS60О需要使用常用的标准函数cos(x),ey需要使用常用的标准函数exp(x)。
【答案】COS(3.14159*60/180)+8*exp(y)
5.下面程序的输出是。
main()
{unsigneda=32769;
printf("a=%d\n",a);
}
【分析】因为是unsigneda,所以a小于最大的数65535。
【答案】32769
6.若有以下定义:
chara;
unsignedintb;
floatc;
doubled;
则表达式a*b+d-c值的类型为。
【分析】C语言中各类数值型数据可以混合运算,因为字符型数据可以和整型数据通用,所以本题的表达式是正确的。
但在运算时,不同类型的数要先转换成同一类型,然后运算。
先执行a*b的运算,将字符型数a转换成无符号整型数,运算结果是无符号整型数;
d是双精读实型数,将a*b的结果转换成双精读实型数,相加的结果是双精读实型数;
将c转换成双精读实型数,运算结果是双精读实型。
【答案】双精读实型。
7.有以下程序
#include
main()
{inta,b,c=298;
a=c/100%9;
b=(-1)&&
(1);
printf("%d,%d\n",a,b);
}
输出结果是。
【分析】
根据运算符的优先次序和结合方向,298/100%9=2%9=2,所以a是2;
在C语言中非零表示争,而真是1。
【答案】2,1
8.设有如下定义:
intx=1,y=-1;,则语句:
printf("%d\n",(x--&++y));的输出结果是。
【分析】考虑(x--&++y)的运算符的优先次序,--、++一切高于&,而x—结果是0,所以与任何数作按位与后均为0。
【答案】0。
9.以下程序的输出结果是。
main()
{intx=10,y=10,;
printf("%d,%d",x--,++y);
}
【分析】x—是用了在自减,而++y是自加了以后在用。
【答案】11,10。
10.下列程序执行后的输出结果是。
main()
{intx='F';
printf("%c\n",'a'+(x-'a'+1));
}
【分析】字符常量的值就是该字符的ASCII码值,F的ASCII码值是70,a的ASCII码值是97,'a'+(x-'a'+1)即97+(70-97+1)=71,G的ASCII码值是71。
【答案】G.
11.设intb=24;表达式(b>>1)/(b>>2)的值是。
【分析】b右移一位相当与除以2,右移二位相当与除以4。
【答案】2.
12.下列程序执行后的输出结果是。
main()
{charx=0xFFFF;
printf("%d\n",x--);
}
【分析】x—是用了再自减,所以与printf("%d\n",x);的结果一样。
而x的值是0xff,即–1的补码.
【答案】-1.
13.执行下列程序时输入:
123456789↙,输出结果是。
main()
{chars[100];
intc,i;
scanf("%c",&c);
scanf("%d",&i);
scanf("%s",s);
printf("%c,%d,%s\n",c,i,s);
}
【分析】scanf语句在输入时,遇空格认为输入数据结束。
【答案】1,2,3456789。
2.3简答题
1.由下面的输入语句:
floatx;
doubley;
scanf(“%f,%le”,&x,&y);
使x的值为78.98,y的值为98765X1012,写出正确的键盘输入数据形式。
【分析】注意分隔符是’,’。
【答案】78.98,9.8765e16
2.分析下列程序,写出运行结果,不能上机运行程序。
#include
main()
{doubled;
floatf;
longl;
inti;
l=f=i=d=80/7;
printf("%d%ld%f%f\n",i,l,f,d);
}
【分析】80/7=11,赋值运算符自右而左结合,I是整型数据,l是长整型数据,f是单精度实型数据,d是双精度实型数据。
【答案】111111.00000011.000000
3.分析下列程序,写出运行结果,不能上机运行程序。
#include
main()
{intx=6,y,z;
x*=18+1;
printf("%d\n",x--);
x+=y=z=11;
printf("%d\n",x);
x=y==z;
printf("%d\n",-x++);
}
【分析】+运算符优先级高于*=,所以x*=18+1的结果是6*(18+1)=114,printf执行以后x自减结果x=113;+=和+同优先级,结合次序自右而左结合次序,所以z=11,y=11,x=113+11=124;==运算符优先级高于=而y==z为真,其值是1,-和++同优先级,结合次序自右而左。
【答案】114
124
-1
4.将下列各数用十六进制数(补码、字长十六位)表示。
⑴100⑵-100
⑶-255⑷255
【分析】
正数与原码相同100的十六进制数(补码、字长十六位)为0x0064;255的十六进制数(补码、字长十六位)为0x00ff;
对于负数,数符位为1,其数值部分就是X的绝对值取反后最低位加1,-100的十六进制数(补码、字长十六位)为0xff9c,-255的十六进制数(补码、字长十六位)为0xff01。
2.4程序设计题
1.已知圆的周长为L,编写C程序,计算出它的面积。
要求从键盘输入周长值,在屏幕上显示出相应的面积值。
【答案】:
#include
main()
{floatl,aera;
printf("l=");
scanf("%f",&l);
aera=l*l/(4*3.14);
printf("aera=%f",aera);
}
2.编写C程序,从键盘输入一个字符,在屏幕上显示出其前后相连的三个字符。
【
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第02章 配套习题集 02 配套 习题集
![提示](https://static.bdocx.com/images/bang_tan.gif)