C复印练习答案解析阶段测试一和二的答案分析Word格式.docx
- 文档编号:7170233
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:47
- 大小:33.41KB
C复印练习答案解析阶段测试一和二的答案分析Word格式.docx
《C复印练习答案解析阶段测试一和二的答案分析Word格式.docx》由会员分享,可在线阅读,更多相关《C复印练习答案解析阶段测试一和二的答案分析Word格式.docx(47页珍藏版)》请在冰点文库上搜索。
10的5次方,用C语言表示
就是1.23e5或1.23E5,注意e或E前面必须要有数字,而且e或E后
面的数字一定要是整数。
三.字符型常量
字符型常量都是用'
括起来的,其表现形式可以有两种:
1.一般形式。
一个字符用'
括起来,注意只能有一个字符。
2.特殊形式。
特殊形式都是以\开头,它们在屏幕上不会直接显示出来,而
是根据其特定的功能来显示的,这些特殊字符常量有:
\n换行,相当于敲一下回车。
\t跳到下一个tab位置,相当于按一下键盘上的tab键。
\b退格,相当于按一下backspace。
\r使光标回到本行开头。
\f换页,光标移到到下页开头。
\\输出\字符,也就是在屏幕上显示一个\字符。
\'
输出'
字符,也就是在屏幕上显示一个'
字符。
\"
输出"
字符,也就是在屏幕上显示一个"
\ddd1位到3位八进制数表示的字符。
例如:
使用'
\376'
,则在屏幕上显示一个黑色的方块。
\xhh1位到2位十六进制数表示的字符。
注意x不能丢了。
四.字符串常量
字符串常量与字符常量不同的地方是,字符串常量是用"
"
把字符串括起来,所
以'
a'
和"
a"
是不一样的,而且系统会在字符串常量的末尾自动加一个字符串结
束标志('
\0'
)。
2、选D
VAR不是c语言中的关键字,A错
cher不是c语言中的关键字,注区别于char,char是字符型,是c语
言中的关键字,B错
integer是一个类(类后边会讲),不是c语言中的关键字,C错
是c语言中的关键字,多出现于switch语句中,表示缺省、默认的意
思
拓展总结:
C语言中的关键字总共有32个:
auto:
声明自动变量
short:
声明短整型变量或函数
int:
声明整型变量或函数
long:
声明长整型变量或函数
float:
声明浮点型变量或函数
double:
声明双精度变量或函数
char:
声明字符型变量或函数
struct:
声明结构体变量或函数
union:
声明共用数据类型
enum:
声明枚举类型
typedef:
用以给数据类型取别名
const:
声明只读变量
unsigned:
声明无符号类型变量或函数
signed:
声明有符号类型变量或函数
extern:
声明变量是在其他文件正声明
register:
声明寄存器变量
static:
声明静态变量
volatile:
说明变量在程序执行中可被隐含地改变
void:
声明函数无返回值或无参数,声明无类型指针
if:
条件语句
else:
条件语句否定分支(与if连用)
switch:
用于开关语句 case:
开关语句分支
for:
一种循环语句
do:
循环语句的循环体
while:
循环语句的循环条件
goto:
无条件跳转语句
continue:
结束当前循环,开始下一轮循环
break:
跳出当前循环
default:
开关语句中的“其他”分支
sizeof:
计算数据类型长度
return:
子程序返回语句(可以带参数,也可不带参数)循
环条件
3、选A对于这道题,首先要明白*(乘)/(除)的优先级一样,并且自左而右结合
x/y*z等价于(x/y)*z与题目不符
可以表示
x/y/z等价于(x/y)/z可以表示
注意:
要求对各个运算符的优先级以及结合方向熟悉
4、选C本题表达式a+=a-=a*a是进行两次对a赋值,表达式等价于:
a+=(a-=(a*a))
也等价于以下分句:
inta=3;
a-=a*a;
(等价于a=a-(a*a))
a+=a(等价于a=a+a)
即先算a-a*a即3-3*3=(-6),再将最终结果赋给a,因此此时a等于-6。
再在a等于-6的基础上再算a=a+a即最终a=(-6)+(-6)得-12
因此选C
5、选C本题要注意的是c语言中规定运算最少的法则,即不做没有用的运算
也就是说对于逻辑或和逻辑与运算来讲,需要看左边表达式的真假再来判
断右边表达式是否执行
对于逻辑或(||)运算来说,当||左边的表达式为真时,||右边的表达式就不再
执行,否则一定执行右边的表达式
对于逻辑与(&
&
)运算来说,当&
左边的表达式为假时,||右边的表达式就不再
执行,否则一定执行右边的表达式
本题中
x=y=3;
t=++x||++y;
首先系统先执行x=y=3;
语句,接着自左往右执行t=++x||++y;
系统发现
++x值为4,是真(非零即真),并且
是逻辑或的判断运算,所以||右边的++y就不再执行,直接跳过,因此y
的值并没有改变,依然是3
因此选C
6、选B
自增分成两种:
前缀自增和后缀自增
前缀自增:
类似++n这种将符号放在变量名的前边,这时候运行的是先对n自
加,再执行表达式
例如:
intn=9;
if(++n<
10);
是先给n加上1,此时n
等于10;
再执行表达式做判断,也就是n=10<
10不成
立
后缀自增:
类似n++这种将符号放在变量名的后边,这时候先运行表达式,整
个表达式运行完之后n再自加1
也就是说在这整个语句没有运行完之前,n还是原来的值,并没有
自增加1
(本题就是这种情况)
if(n++<
是先判断n=9<
10;
等整个表达式执行完
之后n再自加1,也就是说在if语句下边只有出现n,那么
n的值就是10
7、选D
A选项:
第一行switch(a+b);
中的分号错误,此处不能有分号,A错
含有两个case3:
错,B错
switcha中a没有用括号括起来,C错
正确,default语句可以放在花括号中的任何位置
8、选A
while循环语句中的判断表达式为真,就执行循环体,否则退出循环
本题的
while(k=1);
语句中的判断表达式k=1是将1赋给k,k的值为1,判断表达式永远为真,循
环就会一直执行,因此程序会陷入死循环
如果将本题的程序中的k=1改成k==1,那么程序还是会陷入死循环,
因为程序中的循环体是k++,没有能够改变判断表达式的条件
如果将本题的程序中的k=1改成k==1,并且将k++改成k--,那么程序就会
执行一次之后终止
9、选B
本题程序的功能是求-1到5的和,结果是-1+1+2+3+4+5=14
注意sum的初始值是-1而不是0
10、选C分析见以下注释部分
#include<
iostream>
usingnamespacestd;
voidmain()
{
intx=3;
do
cout<
<
(x=-2)<
endl;
while(!
(--x));
//当执行到该语句时,x的值先自减等于-3,再判
断while中的表达式,根据非零即真,
//是零为假来判断是否执行循环体,-3不是零,
所以(--x)为真,!
(--x)为假,
//即判断表达式为假循环终止
//如果将!
号去掉,将陷入死循环
}
11、2,1
本题属于简单的赋值运算题,注意的请看注释
inta=1,b=2;
a=a+b;
//执行完该语句后a的值为3
b=a-b;
//该语句中a的值为3,b的值为2,执行完该语句后b
的值为1
a=a-b;
//该语句中=号右边的a的值为3,b的值为1,执行
完该语句后a的值为2
cout<
a<
'
'
<
b<
//该语句中'
也可以写成"
"
另
外输出a和b时按照最后a和b的值
输出的
12、6.6
#include<
usingnamespacestd;
voidmain()
{
inta=9,b=2;
//定义两个整型变量a和b,并且初始化
floatx=,y=1.1,z;
//定义三个浮点型变量x,y,z,并且将x和
y初始化
z=a/2+b*x/y+1/2;
/*
1、整型变量做除法,如果商的实际值含有小数点,也只能保存商的整数部分,而将小数部分去掉
a是整型变量,那么a/2的值是4,而不是4.5,同理1/2的值是0;
而不是0.5
2、b*x/y等价于(b*x)/y如果运算中含有混合运算,那么低级的将自动
转向高级的类型,例如
b*x/y中b是整型,x和y是浮点型,那么b*x结果
是浮点型,同理b*x/y的结果也是浮点型,所以
b*x/y的值为(2x)/1.1
3、综合以上,z=a/2+b*x/y+1/2=4+(2x)/1.1
+0=16算得x=6.6
*/
cout<
z<
}
13、选A
因为c3是整型变量,尽管c3=1.0/c2*c1中1.0/c2*c1的最终结果是浮点型的数
值(其数值为0.5),但是将浮点型数据存放在整型变量中,整型变量只能保存该数值的整数部分,而将小数部分去掉。
本题是将1.0/c2*c1的最终结果0.5保存在整型变量c3中,所以最终c3等于0
因此选A
14、选D
1、逗号表达式:
C语言中提供一种特殊的运算符,逗号运算符,形如本题中(++x,++y)中间是
逗号,而不是分号
逗号表达式的运算过程;
从左往右逐个计算表达式,并且逗号表达式作为一个整体,其值为最后
一个表达式的值
逗号表达式的优先级:
在所有运算符中的优先级别最低
举例:
1>
(3+5,6+8)的值为14
2>
(a=3*5,a*4)的值为60
3>
#include<
iostream.h>
intmain(void)
{
intx,y,z;
x=y=1;
z=x++,y++,++y;
cout<
x<
endl<
y<
return0;
}
以上程序输出的结果为;
2
3
1
2、本题程序中的cout<
(++x,y++)<
z+2;
其中逗号表达式的值与x无关,只与
y有关,y++是后自增,因此逗号表达式
的值为3,z+2的值为3;
因此输出33
故选D
15、选D
在C语言表达式中用||表示逻辑或
用&
表示逻辑与
用!
表示非
16、选A解析见注释
intmain(void)
intx=1,a=0,b=0;
switch(x)//第7行执行完这一条语句之后直接跳到第11行执行case1
语句,并从case1开始一直执行到
//return0;
结束程序
case0:
b++;
//该语句不会被执行
case1:
a++;
//第11行
case2:
a++;
b++;
"
a="
b="
return0;
}
最终a++被执行两次,一次在case1中执行,另一次在case2中执行
b++被执行1次,在case2中执行
因此最后的结果是:
a=2,b=1
故选A
17、选C解析见注释
floatx=2.0,y;
//定义浮点型变量
if(x<
0.0)//x==2.0不小0.0因此不执行该if语句的y=0.0;
语句
y=0.0;
elseif(x<
10)//x==2.0<
10,成立,执行,并且下边的else语句不
再执行
y=1.0/x;
//因此y=1.0/2.0y为浮点型变量,y的值为0.5
else
y=1.0;
18、选C
ifelse嵌套有一个原则,称作就近原则,就是在没有使用花括号的情况下,如果多
个ifelse出现,那么if和
else的匹配问题就要遵循就近原则,就是else和离它最近的if相匹配
因此本题的代码等价于这样写:
#include<
usingnamespacestd;
voidmain()
{
inta=2,b=-1,c=2;
if(a<
b)
{
if(b<
0)
c=0;
else
c++;
}
cout<
c<
}
认为本题的程序等价于一下的程序是错误的:
else
如果认为是这样,那么就很容易误选成D而导致错误
19、选C
本题中执行第一次循环之后,i的值为1,但是循环体中没有让i的值改变的语句,
也就是说i的值从执行循环之后就一直是1,i<
3也就永远成立,改变的值只是sum的值,所以一直循环,即陷入死循环
故选C
20、选B见注释
intx=23;
do
x--<
//x的后自减
while(!
x);
//当x等于0时判断表达式为真,执行循环体,当x非零时判
断表达死为假,
//终止循环,如果去掉!
那么将陷入死循环
21、选B循环执行流程如下:
1>
当n=9,9>
6成立,执行循环体,
n--
n=8
输出8
2>
n=8,8>
n=7
输出7
3>
n=7,7>
n=6
输出6
4>
n=6,6>
6不成立,退出循环,
因此输出的结果是:
876
故选B
22、第一个空;
i<
=9或i<
10
第二个空:
j%3或j%3!
=0
注意:
第一个空不能习惯性地填i<
100或i<
=99,因为for循环体当中,有j=i*10
+6;
将会超出100的范围,显然是错误的
第二个空的功能是将不能被3整除的数直接跳过,直接进行下一趟循环,直到
循环终止
23、填b=i+1
首先对于b来说,只进行过定义,没有初始化,因此,所填的空一定是关于b的初始
化,否则下边c+=b语句就会出错,再结合输出流中的奇数之和时c减去11,这11恰好是循环次数,也就是说循环一次,奇数的和多1,因此所要填的空一定和i相关,因此推出要填b=i+1
24、选C
默认情况下,if语句,for语句,while语句都只能控制一个循环语句,若想要控制
多个循环语句,必须用花括号将循环体括起来,形成复合语句。
本题中第二个for语句属于第一个for的循环体,if语句有属于第二个for语句的
真语句,m=1;
也属于if条件语句的真语句,也就是说从第二个for语句到m=1语句都是第一个for的循环体,但是n++不是任何一个for语句或if条件语句的真语句,即n++是第一个for语句的下一个语句,因此不管第一个for语句、第二个for语句、if语句怎么样执行,都与n++无关,最终n++语句必然执行,因此输出的n一定是1
故选C
阶段测试2
对于本题中的func((expl,exp2),(expl,exp2))中,(expl,exp2)和(expl,exp2)
都是逗号表达式,逗号表达式的
最终值是一个,也就是说(expl,exp2)和(expl,exp2)的最终结果是两个值,因此实
参是两个!
2、选C
要读懂本题,要了解一下几个内容:
1)、本函数执行的顺序(简称程序流程):
大致地讲,本程序先从main函数入口开始执行程序,就是从voidmain()
进入程序,再执行intx=6,y=7,z=8,r;
这一句,接下来当然是执行r=func((x--,y++,x+y),z--);
这一句,当执行完这一句后,程序不再在主函数中继续往下执行,而是直接跳到被调函数去执行,也就是直接跳去intfunc(inta,intb)中去执行,等执行完被调函数后,程序再回到主函数中接着执行,也就是说主函数既是函数的入口,也是函数的出口。
2)、自增自减在函数调用中作实参:
自增自减在函数中作实参,如果是前自增,那么在执行完整句表达式之前就已经将自增的值发送到相对应的形参了
#include<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 复印练习答案解析阶段测试一和二的答案分析 复印 练习 答案 解析 阶段 测试 分析