二级C复习计划2.docx
- 文档编号:29732463
- 上传时间:2023-07-26
- 格式:DOCX
- 页数:21
- 大小:26.54KB
二级C复习计划2.docx
《二级C复习计划2.docx》由会员分享,可在线阅读,更多相关《二级C复习计划2.docx(21页珍藏版)》请在冰豆网上搜索。
二级C复习计划2
二级C复习计划2
第二章 顺序结构
一、选择题
1.设变量均已正确定义,若要通过scanf("%d%c%d%c",&a1,&c1,&a2,&c2);语句为变量a1和a2赋数值10和20,为变量c1和c2赋字符X和Y。
以下所示的输入形式中正确的是(注:
□代表空格字符)( )
A)10□X□20□Y〈回车〉 B)10□X20□Y〈回车〉 C)10□X〈回车〉 D)10X〈回车〉
20□Y〈回车〉 20Y〈回车〉
【答案】D
【解析】本题考查的知识点是:
数据输入。
scanf函数是C语言提供的标准输入函数,作用是在终端设备(或系统隐含指定的输入设备)上输入数据。
scanf()函数的一般形式为:
scanf(格式控制,输入项表);
本题中的格式控制字符串是“%d%c%d%c”,其中%d表示要输入的是整数;%c则表示输入的是字符,凡各控制符之间无任何分割字符,故要求输入的数据之间也不能分开(若要求连续输入的都是数据类型,则必须以空格等空白字符分隔每个数据,因为系统不知道应该如何去分割这一系列数据)。
而选项A)B)C在10和x之间均插入了空格,这会使系统输入时将空格符赋给cl,从而导致后面输入全部错位,故本题应该选择D。
2.设有定义:
intk=0;,以下选项的四个表达式中与其他三个表达式的值不相同的是( )
A)k++ B)k+=1 C)++k D)k+1
【答案】A
【解析】本题考查的知识点是:
++运算符。
++运算符有前缀和后缀两种形式,本题中的选项c就是前缀形式,选项A是后缀形式。
它们的区别在于其表达式的值不同,前缀形式表达式的值为增1后的值,而后缀形式表达式的值为增1之前的值。
又因为选项B和D的表达式值都是k加1之后的值,故本题应该选择A。
3.以下叙述中正确的是
A)调用printf函数时,必须要有输出项
B)使用putchar函数时,必须在之前包含头文件stdio.h
C)在C语言中,整数可以以十二进制、八进制或十六进制的形式输出
D)调用getchar函数读入字符时,可以从键盘上输入字符所对应的ASCII码
【答案】B
【解析】本题考查了C语言的一些基本概念。
printf()函数可以只有控制项而没有输出项,例如:
printf(“Hello!
”);,所以选项A不正确。
C语言中不支持整数以十二进制输出,因此选项C不正确。
getchar()函数从键盘读入一个字符,而不管该字符为数字还是字母,因此输入ASCII码的话,只能读到第1个数字字符,所以选项D不正确。
故应该选择B,putchar是C语言中的库函数,使用时必须包含stdio.h。
4.以下程序的功能是:
给r输入数据后计算半径为r的圆面积s。
程序在编译时出错。
main()
/*Beginning*/
{intr;floats;
scanf("%d",&r);
s=*p*r*r;printf("s=%f\n",s);
}
出错的原因是
A)注释语句书写位置错误 B)存放圆半径的变量r不应该定义为整型
C)输出语句中格式描述符非法D)计算圆面积的赋值语句中使用了非法变量
【答案】D
【解析】本题考查的是c语言的组成。
在c语言源程序中除了注释部分、字符串常量部分可以使用任意字符外,其余部分只能由52个大小写字母、10个阿拉伯数字以及+-*/=,.一:
;?
\“’~|!
#%&()[]{}^<>和“空格”30个特殊符号组成。
所以在计算圆面积的赋值语句中出现的π是非法字符,将引起编译出错。
应该选择D
5.有以下程序
main()
{
intx=102,y=012;
printf(“%2d,%2d\n”,x,y);
}执行后输出结果是()
A)10,01B)02,12C)102,10D)02,10
【答案】C
【解析】本题考核的知识点是输出函数printf()的应用。
本题中,printf(“%2d,%2d\n”,x,y)表示输出形式是十进制整数,域宽是2,而在C语言中规定:
当域宽小于实际宽度时域宽不起作用,按实际宽度输出,因此最后的输出值为102和10,所以,4个选项中选项C符合题意。
6.有以下程序
main()
{intm=0256,n=256;
printf("%o%o\n",mn,n);
}
程序运行后的输出结果是
A)02560400B)0256256C)256400D)400400
【答案】C
【解析】本题考核的知识点是输出函数printf()的应用。
程序中定义了两个整形变量,一个用八进制表示,一个用十进制表示,输出语句中要求m,n都为八进制输出,显然m原样输出为256,n的值转换为八进制输出(256的八进制为400),故输出400。
所以,4个选项中选项C符合题意。
7.有以下程序
main()
{inta=666,b=888;
printf("%d\n",a,b);
}
程序运行后的输出结果是
A)错误信息B)666C)888D)666,888
【答案】B
【解析】本题考核的知识点是printf()函数的简单应用。
程序中的printf()函数的输出格式部分只说明了一个%d,而输出成员列表却有两个成员a和b,在这里将只输出第一个成员a值为666,所以,4个选项中选项B符合题意。
8.有以下程序
main()
{ intx,y,z;
x=y=1;
z=x++,y++,++y;
printf(“%d,%d,%d\n”,x,y,z);
}
程序运行后的输出结果是
A)2,3,3 B)2,3,2 C)2,3,1 D)2,2,1
【答案】C
【解析】本题主要考查的知识点是运算符的优先级和结合性。
解本题的关键在于表达式z=x++,y++,++y的计算,其中有三种运算符“=”、“,”和“++”,它们的优先级从高到低依次是“++”、“=”和“,”,所以原表达式就相当十(z=x++)),(y++),(++y)。
自增运算符“++”足单目运算符,即它只对一个运算分量起作用,根据其在运算分量的前面或后面分为前缀和后缀两种形式。
两种形式的作用效果是一样的,都是使运算分量的值加l,但是它们的表达式的值不一样,前缀形式表达式的值为运算分量加l之后的值.而后缀形式表达式的值为运算分量加l之前的值。
因此,表达式x++虽然使x的值加l,但该表达式的值仍为x加l之前的值l。
所以计算完表达式z=x++,y++,++y之后,z的值为l,x被自增1次值为2,y被自增2次值为3。
所以输出结果是2,3,l,故应该选择c。
9.设有定义:
int a;float b;执行scanf(“%2d%f”,&a,&b);语句时,若从键盘输入876543.0<回车>,a和b的值分别是
A)876和543.000000 B)87和6,00000 C)87和543.000000 D)76和543.000000
【答案】B
【解析】本题考查了格式输入函数scanf()的运用。
Scanf()函数的一般形式为:
scanf(格式控制,地址表列)
其中,“格式控制”是用双引号括起来的字符串,也称“转换控制字符串”,它包括两种信息:
①格式说明,由“%”和格式字符组成;
②普通字符,即需要原样输入的字符。
“地址表列”是需要接收输入数据的一系列变量的地址。
本题中的“格式控制”是“%2d%f”,其中%2d的意思是要输入一个整数。
但该整数最宽只占2个字符,而%f是要输入一个浮点数。
而题目要求输入的是876543.0,所以scanf()函数将87这两个字符当作第1个整数读入到变量a中,而剩下的6543.O因为中间有空格隔断,所以只将6这一个字符当作浮点数读入到变量b中。
因此,选项B正确。
10.有以下程序
main()
{ inta=0,b=0;
a=10; /*给a赋值
b=20; 给b赋值*/
printf(“a+b=%d\n”,a+b); /*输出计算结果*/
}
程序运行后的输出结果是
A)a+b=10 B)a+b=30 C)30 D)出错
【答案】A
【解析】本题是一道陷阱题,主要考查的是注释的格式。
在C程序中,使用/*……*/表示注释,注释只是给人看的,对编译和运行不起作用。
在本题程序中,从第3行右边的/*开始到第4行末尾的*/结束都属于注释部分,故b=20;语句不起作用。
所以程序运行后的输出结果是a+b=10,应该选择A。
11.有以下程序
main()
{intm,n,p;
scanf("m=%dn=%dp=%d",&m,&n,&p);
printf("%d%d%d\n",m,n,p);
}
若想从键盘上输入数据,使变量m中的值为123,n中的值为456,p中的值为789,则正确的输入是______。
A)m=123n=456p=789 B)m=123 n=456 p=789 C)m=123,n=456,p=789 D)123 456 789
【答案】A
【解析】本题考查的是标准输入函数scanf()的运用。
scanf函数的第一个参数是格式控制串,若在格式控制串中插入了格式控制符以外的其他字符,则在输入数据时要在对应的位置原样输入这些字符才能正确输入。
所以本题若想使变量m的值为123、n为456、P为789,则应该输入的字符串为:
用这三个数据按m、n、P出现在scanf()函数中的位置顺序替换掉scanf()函数格式控制串中的格式控制符后所得到的格式控制串。
即“m=123n=456p=789”。
所以,4个选项中选项A符合题意。
12.以下程序段的输出结果是
inta=1234;
printf("-2d\n",a);
A)12 B)34 C)1234 D)提示出错、无结果
【答案】C
【解析】printf()函数的输出格式,当整数的值超过格式要求输出范围时,原样输出。
本题中要求输出两个有效数字,而实际上a有4个有效数字,故原样输出,输出1234。
13.以下选项中不属于C语言的类型的是
A)signedshortint B)unsignedlongint C)unsignedint D)longshort
【答案】D
【解析】在选项中很明显选项A为无符号短整型,选项B为无符号长整型,选项C为无符号整型,而选项D的类型在C语言中不存在。
14.若有说明语句:
inta,b,c,*d=&;c;则能正确从键盘读入三个整数分别赋给变量A)B)c的语句是
A)scanf("%d%d%d",&;a,&;b,d); B)scanf("%d%d%d",&;a,&;b,&;d);
C)scanf("%d%d%d",a,b,d); D)scanf("%d%d%d",a,b,*d);
【答案】A
【解析】scanf()函数有两个参数,第一个参数是输入格式字符串,第二个参数是输入变量地址列表。
输入格式字符串主要由“%”符号和格式字符组成。
地址列表是由多个地址组成的。
选项B中d已经为地址,不应在加上求地址符号“&;”;选项C中,a和b都为变量不是地址,应该在a和b之前加上求地址符号“&;”;选项D中指针d所指向的存储空间的位置为变量c的值,不为地址。
15.有以下程序段
intm=0,n=0;charc='a';
scanf("%d%c%d",&m,&c,&n);
printf("%d,%c,%d\n",m,c,n);
若从键盘上输入:
10A10↙,则输出结果是______。
A)10,A,10 B)10,a,10 C)10,a,0 D)10,A,0
【答案】A。
【解析】本题主要考查格式输入输出函数scanf()和printf()。
格式控制字符%d用来输入/输出十进制整数,%c用来输入/输出单个字符,在给出的程序中,整型变量m和n初始化为0,字符变量c初值为字符a,系统按照m、C)n所在的内存地址将输入的m、C)n的值存进去,即把10赋给m,字符变量c重新赋值为A,10赋给n,所以打印结果是10,A,10。
16.请读程序:
#include
main()
{
inta=5,b=7,c=9;
printf("%d,%d,",a,b,c);
printf("%d,%d,%d",a,b);
}
上面程序的输出结果是______。
A)5,7,9,5,7 B)5,7,5,7 C)5,7,不定,7,9 D)5,7,5,7,不定
【答案】D
【解析】printf函数按格式控制符的个数输出表列中对应的数据,若输出表列的个数大于格式控制符个数,则输出与格式控制符对应的输出表列的数据,输出表列中多的则省略;若格式控制符个数大于输出表列的个数,则输出与格式控制符对应的输出表列的数据,格式控制符多的部分输出的数据是随机的。
17.有定义语句:
intx,y;。
若要通过scanf("%d,%d",&x,&y);语句使变量x得到数值11,变量y得到数值12,下面四组输入形式中,错误的是______。
A)1112↙ B)11,12↙ C)11,12↙ D)11,↙12↙
【答案】A。
【解析】本题的考查点是格式输入函数。
格式输入函数的一般形式:
scanf(格式控制,地址表列)
需要注意的是:
如果在“格式控制”字符串中除了格式说明以外还有其它字符,则在输入数据时应输入与这些字符相同的字符。
所以输入的两个数字之间的逗号是不可少的。
18.有以下程序
main()
{inta=666,b=888;
printf("%d\n",a,b);
}
程序运行后的输出结果是______。
A)错误信息
B)666
C)888
D)666,888
【答案】B。
【解析】本题考查的是输出格式。
printf()函数中,当格式转换说明符个数少于输出项个数时,多余的输出项不予输出。
19.有以下程序
main()
{chara,b,c,d;
scanf("%c,%c,%d,%d",&a,&b,&c,&d);
printf("c,%c,%c,%c\n",a,b,c,d);
}
若运行时从键盘上输入:
6,5,65,66↙。
则输出结果是______。
A)6,5,A,B
B)6,5,65,66
C)6,5,6,5
D)6,5,6,6
【答案】A。
【解析】本题考查的是格式字符的输入和输出。
将一个字符常量放到一个字符变量中,实际上并不是把该字符本身放到内存单元中去,而是将该字符的相应的ASCII代码放到存储单元中,所以它的存储形式与整数的存储形式类似。
C语言使字符型数据和整型数据之间可以通用。
一个字符数据既可以以字符形式输出,也可以以整数形式输出。
以字符形式输出时,需要先将存储单元中的ASCII码转换成相应字符,然后输出;以整数形式输出时,直接将ASCII码作为整数输出。
此题变量a,b是以字符型常量输入的,在内存中存储的是字符常量6和5相对应的ASCII码;变量c,d是以整型常量输入的,在内存中存储的就是直接的整型常量65和66;在输出时,因为a,b,c,d都要求以字符形式输出,所以,将字符常量6和5所对应的内存的ASCII码翻译成字符常量为6和5输出,将内存中的整型数65和66对应的字符常量即A和B输出。
20.请读程序:
#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
【答案】C。
【解析】本题的考查点是格式输入、输出函数。
scanf()把用户从键盘录入的数字的第1、2位存储入整型变量a,把第3、4、5位存储入单精度实型变量b,把第6、7、8、9位存储入单精度实型变量c,用户录入的第10位被scanf()遗弃,这时变量A)B)c的值分别为:
98、765.000000、4321.000000。
21.以下程序的输出结果是______。
#include
main()
{
inta=2,c=5;
printf("a=%%d,b=%%d\n",a,c);
}
A)a=%2,b=%5 B)a=2,b=5 C)a=%%d,b=%%d D)a=%d,b=%d
【答案】D。
【解析】本题的考查点是格式控制字符的应用。
printf()函数:
当"格式控制"字符串中连续使用两个"%"符号时,表示要输出字符"%",所以,a,c两个变量的值并不带入输出字符串,最后的打印结果应当是a=%d,b=%d。
22.下面程序的输出是______。
main()
{intk=11;
printf("k=%d,k=%o,k=%x\n",k,k,k);
}
A)k=11,k=12,k=11 B)k=11,k=13,k=13 C)k=11,k=013,k=0xb D)k=11,k=13,k=b
【答案】D。
【解析】本题的考查点是格式字符。
在C语言格式字符的输出中,"%d"是以带符号的十进制形式输出整数,即k=11;"%o"是以8进制无符号形式输出整数(不输出前导符0),即k=13;"%x"是以16进制无符号形式输出整数(不输出前导符0x),即k=b。
23.X、Y、Z被定义为int型变量,若从键盘给X、Y、Z输入数据,正确的输入语句是______。
A)INPUTX,Y,Z; B)scanf("%d%d%d",&X,&Y,&Z);
C)scanf("%d%d%d",X,Y,Z); D)read("%d%d%d",&X,&Y,&Z);
【答案】B。
【解析】本题考查C语言的格式化输入语句。
C语言中没有INPUT与read语句,scanf()函数的格式为:
scanf("格式字符串",变量地址1,变量地址2,...);
24.已知i、j、k为int型变量,若从键盘输入:
1,2,3↙,使i的值为1、j的值为2、k的值为3,以下选项中正确的输入语句是______。
A)scanf("%2d%2d%2d",&i,&j,&k);
B)scanf(""%d %d %d",&i,&j,&k);
C)scanf("%d,%d,%d",&i,&j,&k);
D)scanf("i=%d,j=%d,k=%d",&i,&j,&k);
【答案】C。
【解析】本题的考查点是格式输入函数。
如果在"格式控制"字符串中除了格式说明以外还有其它字符,则在输入数据时应输入与这些字符相同的字符。
25.设有定义:
longx=-123456L;,则以下能够正确输出变量x值的语句是______。
A)printf("x=%d\n",x); B)printf("x=%ld\n",x);
C)printf("x=%8dL\n",x); D)printf("x=%LD\n",x);
【答案】B。
【解析】本题的考查点是printf格式字符。
用printf函数输出时,应注意数据类型应与上述格式说明匹配,否则会出现错误。
因为x为长整型数据,所以输出也应该为长整型,其表示方式为"%ld"。
26.若有以下程序:
main()
{intk=2,i=2,m;
m=(k+=i*=k); printf("%d,%d\n",m,i);
}
执行后的输出结果是______。
A)8,6 B)8,3 C)6,4 D)7,4
【答案】C。
【解析】本题的考查点是复合的赋值运算符。
在赋值符"="之前加上其它运算符,可以构成复合的运算符。
此运算为右结合性,即从右往左计算。
i*=k即i=i*k=2*2=4,k=k+i=2+4=6,然后将k的值赋给m。
27.若有以下程序段(n所赋的是八进制数)。
int m=32767,n=032767;
printf("%d,%o\n",m,n);
执行后输出结果是______。
A)32767,32767 B)32767,032767 C)32767,77777 D)32767,077777
【答案】A。
【解析】本题的考查点是不同类型数据的输入输出。
printf()函数的一般格式如下所示:
printf("格式控制字符串",输出项清单)
格式控制字符串中包括:
1)格式转换说明符:
以"%"开头后跟一个格式字符,它用于输出数据格式的转换与控制;
2)转义字符:
以"\"开头,后跟一个字符,用于输出某些特殊意义的字符和不可显示字符;
3)其他字符:
用于照原样显示的字符。
printf()格式转换说明符:
"%d"按实际位数输出十进制整数;
"%o"按实际位数输出八进制整数。
本题中,因为m定义为整数,即默认的十进制数,n定义为八进制数,所以照原样输出。
二、填空题
1.以下程序运行时,若从键盘输入:
102030<回车>,输出的结果是_____。
#include
main()
{ inti=0,j=0,k=0;
scanf("%d%*d%d",&i,&j,&k);
printf("%d%d%d\n",i,j,k);
}
【答案】10300
【解析】本题考查了标准输入函数scanf()。
Scanf()函数的第一个参数为控制字串,由它决定应该接受多少个什么类型的输入数据,其中以字符‘%’开头的是控制字符。
“%d”表示接收一个十进制整数,而“%*d”表示跳过一个输入的十进制整数。
因此,本题的scanf()函数要求用户输入三个十进制整数,但只接受第一和第三个到函数的第二和第三个参数所指的内存地址中。
所以本题的输出为:
10300。
2.以下程序运行后的输出结果是______。
main(){intx=0210;printf("%X\n",x);}
【答案】88
【解析】本题考
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二级 复习计划