C语言练习题及答案.docx
- 文档编号:9289633
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:146
- 大小:89.28KB
C语言练习题及答案.docx
《C语言练习题及答案.docx》由会员分享,可在线阅读,更多相关《C语言练习题及答案.docx(146页珍藏版)》请在冰豆网上搜索。
C语言练习题及答案
C语言练习题及答案
选择题
第一章
(1)以下叙述中正确的是_______。
A)c语言比其他语言高级
B)C语言可以不用编译就能被计算机识别执行
c)c语言以接近英语国家的自然语言和数学语言作为语言的表达形式
D)C语言出现的最晚,具有其他语言的一切优点
(1)C
知识点:
c语言风格
评析:
计算机语言分为低级语言、汇编语言和高级语言,c语言属于高级语言,但并不是说c语言比其他语言高级,所以选项A错误;除了低级语言外,其他各种语言都必须编译成能被计算机识别的二进制数才能执行,选项B错误;c语言出现于1972年到1973年问,并不是出现最晚的语言,所以选项D也是错误的。
(2)下列叙述中正确的是______。
A)C语言编译时不检查语法
B)C语言的子程序有过程和函数两种
C)C语言的函数可以嵌套定义
D)C语言中,根据函数能否被其他源文件调用,被区分为内部函数和外部函数
(2)D
知识点:
c语言基本概念
评析:
选项A的错误在于编译过程中是检查语法的,若发现源程序有语法错误,则系统会提示出错信息:
选项B的错误在于C语言中.子程序的作用是dj函数来完成的。
无过程的概念:
选项c的错误在于函数不可以嵌套定义,但可以嵌套调用。
第二章
(1)下面描述中,不符合结构化程序设计风格的是________。
A)使用顺序、选择和重复(循环)三种基本控制结构表示程序的控制逻辑
B)自顶向下
C)注重提高程序的执行效率
D)限制使用goto语句
(1)C
知识点:
结构化程序设计
评析:
结构化程序设计方法的四条原则是:
1.自顶向下:
2.逐步求精;3.模块化;4.限制使用goto语句。
“自顶向下”是说,程序设计时,应先考虑总体,后考虑细节,先考虑全局目标,后考虑局部目标;“逐步求精’’是说,对复杂问题,应设计一些子目标作过渡,逐步细节化;“模块化”是说,一个复杂问题肯定是由若干稍简单的问题构成,解决这个复杂问题的程序,也应对应若干稍简单的问题,分解成若干稍小的部分。
(2)算法一般都可以用_______控制结构组合而成。
A)循环、分支、递归B)顺序、循环、嵌套
c)循环、递归、选择D)顺序、选择、循环
(2)D
知识点:
算法的基本概念
评析:
算法的控制结构给出了算法的基本框架,它不仅决定了算法中各操作的执行顺序,而且也直接反映了算法的设计是否符合结构化原则。
一个算法一般都可以用顺序、选择、循环三种基本控制结构组合而成。
(3)在计算机中,算法是指_______。
A)查询方法B)加工方法
C)解题方案的准确而完整的描述D)排序方法
(3)C
知识点:
算法的基本概念
评析:
计算机算法是指解题方案的准确而完整的描述,它有以下几个基本特征:
可行性、确定性、有穷性和拥有足够的情报。
第三章
(1)以下选项中属于C语言的数据类型是_______。
A)复数型B)逻辑型C)双精度型D)集合型
(1)C
知识点:
c语言的数据类型
评析:
c语言的数据类型分为基本类型、构造类型、指针类型、空类型四大类。
其中,基本类型分为整型、字符型、实型三类。
实型又称浮点型,包括单精度型和双精度型两种类型。
(2)在C语言中,不正确的int类型的常数是_______。
A)32768B)0C)037D)0xAF
(2)A
知识点:
int类型的范围
评析:
c语言中int类型的常数的范围是:
-32768~32767。
c整常数可用三种形式表示:
十进制整数,八进制整数,十六进制整数。
选项A超出范围,不正确。
(3)请读程序:
#include
main()
{
inta;
floatb,c;
scanf("%2d%3f%4f",&a,&b,&c);
printf("\na=%d,b=%f,c=%f\n",a,b,c);
}
若运行时从键盘上输入9876543210↙,则上面程序的输出结果是_______。
A)a=98,b=765,c=4321
B)a=10,b=432,c=8765
C)a=98,b=765.000000,c=4321.000000
D)a=98,b=765.0,c=4321.0
(3)C
知识点:
格式输入、输出函数
评析:
scanf()把刚户从键盘录入的数字的第1、2位存入整型变量a;把第3、4、5位存入单精度实型变量b,由于“f”是以小数形式输出单、双精度数。
隐含输出6位小数,所以b=4321.000000;把第6、7、8、9位存入单精度实型变量c,用户录入的第10位被scanf()遗弃。
这时变量fd、b、c的值分别为:
98、765.000000、4321.000000。
4)若x是整型变量,pb是基类型为整型的指针变量,则正确的赋值表达式是_______。
A)pb=&x;B)pb=x;C)*pb=&x;D)*pb=*x
(4)A
知识点:
赋值表达式
评析:
选项A是将变量x的地址赋给指钳‘变量pb,使pb指向x,故为正确的赋值表达式。
选项B是将x的值当作地址赋给指针pb,pb指¨一个地址等于x值的内存单元。
选项C足将x的地址赋给指针pb指向的那个地址等于x值的内存单元。
选项D是不正确的语句。
(5)若要用下面的程序片段使指针变量p指向一个存储整型变量的动态存储单元
int*p;
p=_______malloc(sizeof(int));
则应填入_______。
A)intB)ira*C)(*int)D)(int*)
(5)D
知识点:
强制类型转换
评析:
不论p是指向什么类型的指针变量,都可以通过强制类型转换的方法使之类型一致,强制类型转换的格式为(数据类型*)。
(6)字符(char)型数据在微机内存中的存储形式是________。
A)反码B)补码
C)EBCDIC码D)ASCII码
(6)D
知识点:
字符数据在内存中的存储形式
评析:
将一个字符常量放到一个字符变量中,实际上并不是把该字符本身放到内存单元中去,而是将该字符的ASCII码值放到存储单元中。
(7)下面程序的输出是________。
main()
{
intx=3,y=6,a=0;
while(x++!
=(y-=1))
{
a+=1;
if(y break; } printf("x: %d,y: %d,a=%d\n",x,y,a); } A)x=4.v=4,a=1B)x=5,y=5,a=1 C)x=5,y=4,a=3D)x=5,y=4,a=l (7)D 知识点: 运算符 评析: 注意在x++中x值的引用时,这里应当是先引用,后自加,具体执行过程如下: 第一次while循环: x=3与y=5比较,条件为真,执行a=a+1=1;此时,x的值己为4,判断y 第二次while循环: x=4与y=4比较,条件为假,此时x的值已为5,退出while循环,执行printf。 (8)下列语句中符合C语言语法的赋值语句是_______。 A)a=7+b+c=a+7B)a=a+7 C)a=7+b,b++,a+7;D)a=7+b,c。 a+7; (8)D 知识点: C表达式类型 评析: 本题的考查点是赋值语句。 c语言中,赋值语句具有其他高级语言的赋值语句的一切特点和功能。 但也有不同: ①c语言中的赋值号“=”是一个运算符,在其他大多数语言中赋值号不是运算符。 ②关于“赋值表达式”这一概念,其他大多数高级语言并没有,但在c语言中必须区分: 例如: i=i+l是一个表达式,而不是语句;i=i+l: 是一个语句。 可以看到,一个表达式的最后加一个分号就成了一个语句。 由于赋值语句是由赋值表达式加分号构成,而赋值表达式是赋值运算符“=”将一个变量和一个表达式连接起来的式子,所以选项A、B均不是合法的赋值语句;选项c中,存在两种运算符: 逗号运算符和赋值运算符,其中赋值运算符的优先级高,逗号表达式“a=7+b,b++,a+7”的值就是表达式“a+7”的值,即选项C也就可以表示为: a+7;。 由此可见,选项C也不是一个合法的赋值语句。 选项D是用逗号运算符连接的两个赋值语句。 因此符合题目要求的应该是选项D。 (9)C语言提供的合法的数据类型关键字是________。 A)DoubleB)floatC)integerD)Char (9)B 知识点: c的数据类型 评析: 本题的考查点是c语言中的关键字。 选项A和D中第一个字母大写,不正确; 选项c是PASCAL中的整型关键字,不是c语言中的关键字。 (10)在c语言中,要求运算数必须是整型的运算符是________。 A)%B)/C) (10)A 知识点: 位运算符的含义及使用 评析: 本题的考查点是运算符。 题目的四个选项中,(B)(C)(D)都不要求运算数必须为整数,参与模运算(%)的运算数必须是整型数据。 (11)若变量已正确定义并赋值,下面符合c语言的表达式是______。 A)a: : b+1B)a=b=c+2C)int18.5%3D)a=a+7=c+b (11)B 知识点: 表达式类型和求值规则 评析: 选项A和c一望而知其错;对于表达式a=a+7=c+b(答案D),是先执行赋值表达式a+7=c+b,再把这个表达式的值赋给a,显然,表达式a+7=c+b非法,因为赋值表达式的左侧不能为常量或表达式。 (12)若变量a、i已正确定义,且i已正确赋值,合法的语句是______。 A)a==1B)++i;C)a=a++=5;D)a=int(i); (12)B 知识点: 基本语句中的表达式语句 评析: 选项D显然是错的,而选项A没有分号结束,不是c语句;a++=5(答案c)违反了赋值表达式左侧必须为一个变量(不能是常量或表达式)的规定。 (13)C语言运算对象必须是整型的运算符是______。 A)%B)/C)=D)<。 (13)A 知识点: 运算符及其运算对象 评析: 在c语言中,模运算(即取余运算%)的运算对象必须是整型数据(常量、变量或表达式)。 (14)以下变量x、y、z均为double类型且已正确赋值,不能正确表示数学式子x/(y*z)的c语言表达式是______。 A)x/y*zB)x*(1/(y*z))C)x/y*1/zD)x/y/z (14)A 知识点: 运算符的优先级 评析: 按照自左向右的运算逻辑,选项A是先做x/y,然后再乘以x,显然与题意不符。 (15)若a为int类型,且其值为3,则执行完表达式a+=a--=a*a后,a的值是______。 A)-3B)9C)-12D)6 (15)C 知识点: 运算符的优先级 评析: c语言中对赋值运算的运算顺序是自右向左。 本题中,计算a*a之后,a的值依然为3,表达式a*a的值为9;a-=9.a=3-9=-6;a+=-6.a=-6+-6=-12. (16)若变量c为char类型,能正确判断出c为小写字母的表达式是_______。 A)‘a’<=c<=‘z’B)(c>=‘a')||(c<=‘z’) C)(‘a’<=c)and(‘z’>=c)D)(c>=‘a’)&&(C<=‘z’) (16)D 知识点: 变量的灵活应用 评析: (c>=‘a’)和(c<=‘z’)的关系应该是“与”的关系。 (17)以下合法的赋值语句是______。 A)X=Y=100B)D--;C)X+Y;D)C=int(A+B) (17)B 知识点: c语言的赋值语句 评析: 本题中的答案A与D都缺少“;”,而答案c中,表达式是不能独立成为语句的,答案B使用了C语言的自减运算符就相当于D=D-1,所以答案B为赋值语句。 18)设x,y均为.int型变量,且x=10,y=3,则printf("%d,%d\n",x--,--y);语句的输出结果是______。 A)10,3B)9,3C)9,2D)10,2 (18)D 知识点: c语言的自减运算符 评析: c语言的自减运算符有前置与后置两种形式。 当自减运算符前置时,变量先自减1后再参与表达式运算: 而后置时,变量先参与表达式运算后再自减1。 (19)以下程序的输出结果是_________。 main() {inta=3; printf("%d\n",(a+=a-=a*a)); } A)-6B)1C)2D)-12 (19)D 知识点: c语言的赋值运算符 评析: 首先a+=b相当于a=a+b;a-=b相当于a=a-b,且赋值运算符的结合方向是自右至左,所以表达式a+=a-=a*a。 a先运算最右边的a*a得9,再运算a=a-9,即a=3-9,所以此时a的值由3变成了-6,最后运算a=a+(6),即a=(-6)+(-6)-12。 (20)以下选项中,非法的字符常量是_______。 A)‘\t’B)‘\17’C)“\n”D)‘\xaa’ (20)C 知识点: c语言的字符常量与转义字符 评析: c语言中字符常量足以单引号括起来的单个字符,或为以“\”与三位八进制数值或两位十六进制数值代替单个字符。 (21)若变量a是int类型,并执行了语句: a=‘A’+1.6;,则正确叙述是______。 A)a的值是字符CB)a的值是浮点型 c)不允许字符型和浮点型相加D)a的值是字符"A"的ASCII值加上l (21)D 知识点: C表达式类型(赋值表达式,算术表达式,关系表达式,逻辑表达式,条件表达式,逗号表达式)和求值规则 评析: 在赋值表达式中,赋值符右边的值的类型会自动转换成赋值符左边的变量的类型。 在本题中,先用”A”的ASCII码值加上1.46得到66.46,然后将它强制转换成int型,转换后,实数的小数部分全部舍去。 (22)以下选项中不属于C语言的类型的是______。 A)signedshortintB)unsignedchar C)signedlongD)longshort (22)D 知识点: c的数据类型(基本类型、构造类型、指针类型、空类型)及其定义方法 评析: c语言中归纳起来,基本类型数据有以下几种: [signed]char; unsignedchar; [signed]short[int]; unsignedshort[int]; [signed]long[int]; unsignedlong[int]; float; double. (23)以下程序的输出结果是______。 main() {inta=5,b=4,c=6,d; printf("%d\n",d=a>c? (a>c? a: c): (b)); } A)5B)4C)6D)不确定 (23)B 知识点: C运算符的种类、运算优先级和结合性 评析: 本题最重要的分析d=a>c? (a>c? a: c): (b)),首先运算括号内的式子a>c? a: c,它的值是c的值6,即式子化成d=a>c? 6: 4。 显然a=c,所以将4赋给d。 (24)以下选项中合法的实型常数是_______。 A)5E2.0B)E-3C).2E0D)1.3E (24)C 知识点: 实型数据的指数表示方式 评析: 以指数形式表示实数时,字母e(或E)之前必须有数字,且e后面的指数必须为整数。 (25)已知大写字母A的ASCII码是65,小写字母a的ASCII码是97,则用八进制表示的字符常量‘\101’是_______。 A)字符AB)字符aC)字符eD)非法的常量 (25)A 知识点: 字符与ASCII码的转换, 评析: 八进制101转换为lO进制即为65,而字母A的ASCII码是65,所以用八进制表示的字符常量‘\101’是A。 (26)设a和b均为double型常量,且a=5.5、b=2.5,则表达式(int)a+b/b的值是______。 A)6.500000B)6C)5.500000D)6.000000 (26)D 知识点: 各类数值型数据的混合运算 评析: 各类数值型数据在进行混合运算时,不同类型的数据要先转换成同一类型,然后进行运算。 转换的规则为: 总是转换为精度更大的数据类型,字符数据转换为整数,short型转为int型,float型数据在运算时转换成双精度型,以提高运算精度 (27)若有以下程序: main() {intk=2,i=2,m; m=(k+=i*=k); printf("%d,%d\n",m,i); } 执行后的输出结果是_______。 A)8,6B)8,3C)6,4D)7,4 (27)C 知识点: 复合的赋值运算符 评析: 在赋值符“=”之前加上其他运算符,可以构成复合的运算符。 此运算为右结合性。 即从右往左计算。 i*=k即i=i*k=2*2=4,k=k+i=2+4=6,然后将k的值赋给m。 (28)已有定义: intx=3,y=4,z=5;,则表达式! (x+y)+z-l&&y+z/2的值是_______。 A)6B)0C)2D)l (28)D 知识点: 运算符的优先级 评析: 在本题中,运算符的优先级分别为: ! >/>+,->&&,即: ! (3+4)+5-1&&4+5/2=O+5-1&&4+2=4&&6=1。 (29)以下选项中,与k=n++完全等价的表达式是_______。 A)k=n,n=n+1B)n=n+1,k=nC)k=++nD)k+=n+1 (29)A 知识点: 自增及赋值运算 评析: n++是自增运算,是先使用,然后再使n加l,分开来写即为: k=n,n=n+l。 (30)若已定义x和y为double类型,则表达式x=l,y--x+3/2的值是______。 A)1B)2C)2.0D)2.5 (30)C 知识点: 表达式的运算 评析: 这是一个逗号表达式,它的值应为表达式y-~x+3/2的值,而前一个表达式已给x赋值l,在没有进行类型转换的情况下,3/2的值为1,所以x+3/2的值应为2.0。 (31)以下有4组用户标识符,其中合法的一组是______。 A)FORB)4dC)f2_G3D)WORD -subDOIFvoid CaseSizeabcdefine (31)C 知识点: c语言标识符 评析: c语言的标识符的定义为: 以字母或下划线开头的由字母、数字字符、下划线组成的字符串,而且标识符不能与关键字相同。 (32)请选出可用作C语言用户标识符的一组标识符_______。 A)VoidB)a3_b3C)ForD)2a define_123_abcDO WORDIFcasesizeof (32)B 知识点: C语言的标识符 评析: c语言规定标识符只能由字母、数字和下划线三种符号组成,而且第一个字符必须是字母或下划线。 选项A中的void和define都和c语言的关键字重名,不合法; 选项C中的case和c语言的关键字重名,不合法; 选项D中的2a是数字打头而且sizeof和c语言的关键字重名,不合法。 (33)下列可用于c语言用户标识符的一组是_______。 A)voiddefineWORDB)a3_b3_123Car C)For-abcIFCaseD)2aD0sizeof (33)B 知识点: c语言的标识符 评析: c语言规定标识符只能由字母、数字和下划线3种字符组成,且第一个字符必须为字母或下划线,所以排除c和D。 c语言还规定标识符不能为c语言的关键字,从而选项A是错误的,因为void为关键字。 (34)以下各选项企图说明一种新的类型名,其中正确的是______。 A)typedefvlint;B)typedefv2=int; C)typedefintv3;D)typedefv4: int (34)C 知识点: c语言的类型定义 评析: c语言中可以使用typedef来重新定义已有的数据类型,相当于为数据类型取个别名。 第四章 (1)有以下程序: #include main(){ charc[6]; inti=0: for(;i<6;c[i]=getchar(),i++); for(i=0;i<6;i++)putchar(c[i]); printf("\n"); } 如果从键盘上输入: ab<回车> c<回车> def<回车> 则输出结果为________。 A)aB)aC)abD)abcdef bbc ccd dd e f (1)C 知识点: 字符数据的输入、输出 评析: 1.getchar() 此函数的作用是从终端(或系统隐含指定的输入设备)输入一个字符。 请注意: getchar()只能接受一个字符(回车符也算是一个字符)。 getchar函数得到的字符可以赋给一个字符变量或整型变量,也可不赋给任何变量,作为表达式的一部分。 2.putchar() 此函数的作用是向终端输出一个字符,也可以输出控制字符,如回车符·使输出的当前位置移到下一行的开头。 本题在输入字符时,ab和c后面的回车符分别赋给了c[2]和c[4],所以,正确答案为C。 (2)以下程序段给数组所有的元素输入数据,请选择正确答案填入: #include main() { inta[10],i=0; while(i : : } A)a+(i++)B)&a[i+l]C]a+iD]&a[++i] (2)A 知识点: 格式输入函数scanf() 评析: 因为a实际上就是数组a的首地址,而a+x则是数组中第x个元素的地址,所以在四个选项中,选项B和C只能输入一个数据,选项D不能给a[0]输入数据,只有选项A可以完成给数组所有的元素输入数据的任务。 (3)下面程序的输出是_______。 main() {intk=ll; printf("k=%d,k=%o,k=%x\n",k,k,k); } A)k=11.k=12,k=llB)k=ll,k=13,k=13 C)k=ll,k=013,k=0xbD)k=ll,k=13,k=B (3)D 知识点: 格式字符 评析: 在c语言格式字符的输出中,“%d”是以带符号的十进制形式输出整数,即k=ll: “%o”是以8进制无符号形式输出整数(不输出前导符0),即k=13: “%x”是以16进制无符号形式输出整数(不输出前导符0x),即k=B。 (4)已知字母A的ASCII码为十进制的65,下面程序 main() {charchl,ch2; ch1=‘A’+‘5’-‘3’: ch2=‘A’+‘6’-‘3’: printf(“%d,%c\n”,ch1,ch2); } 的输出是_______。 A)67,DB)B,CC)C,DD)不确定的值 (4)A 知识点: 数据的输入与输出,输入输出函数的调用。 评析: 本题的考查点是格式输出函数printf的格式字符。 由于字符“5”和“3”的ASCII码相差为2。 所以ch1经过运算后的值应为65+2=67;同理,ch2经过运算后的值应为65+3=68,即是字符“D”。 (5)下面程序的输出是________。 main() { intm=0xa,n=2; m+=a; printf("%X\n",m); } A)CB)cC)99D)2 (5)A 知识点: 格式字符 评析: 格式控制符x表示数据按十六进制形式输出(不输出前导符0x)。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 练习题 答案