一、选择题
1、求“abc\ \12\n”字符串的长度( C )
(A) 5 (B) 6 (C) 7 (D) 8
知识点分析:
转义字符是C语言中表示字符的一种特殊形式。通常使用转义字符表示ASCII码字符集中不可打印的控制字符和特定功能的字符。
![]()
注意事项:转义字符中只能使用小写字母,每个转义字符只能看作一个字符。
所以,“abc\ \12\n”字符串的长度是7。
拓展练习1:字符串常量 ”\tMyNane\103” 的长度是:( B )
(A) 6 (B) 8 (C) 12 (D) 14
拓展练习2:字符串常量 "\t\"\062\xff\n" 的长度是___5___。
知识点分析: '\103'是一个转义字符,表示八进制数103所对应的ASCII码值所对应的字符。
由于八进制103等于67,而ASCII值为67的字符为 'C' ,所以'\103'代表字符'C'。转义字符要注意八进制和十六进制:
分析:\t ,\" ,\062 ,\xff ,\n 。一共是5个转义字符,在C中,转义字符的长度都是1,字符串结束符'\0'不计长度。
'\063'表示的是字符'3',因为'3'的ASCII码是30(十六进制)48(十进制)63(八进制)。
'\x41'表示的是字符'A',因为'A'的ASCII码是41(十六进制)65(十进制)101(八进制)。
2、C++语言规定:在一个源程序中,main函数的位置( C )。
A.必须在最开始 B.必须在系统调用的库函数的后面
C.可以任意 D.必须在最后
知识点分析:
在C++中,main函数的位置可以任意,但是程序执行的时候,总是从main函数开始。
3、在每个C++程序中都必须包含有这样一个函数,该函数的函数名为( A )。
A.main B.MAIN C.name D.function
知识点分析:
C++主函数main,C++函数名和变量名严格区分大小写,A和a是两个不同的变量名称。
4、当需要对标准输入/输出设备进行输入/输出操作时,应在文件开始使用#include预处理命令,使之包含( A )头文件。
A.iostream.h B.stdlib.h C.fstream.h D.strstream.h
知识点分析:
iostream.h是input output stream的简写,意思为标准的输入输出流头文件。
5、若a=-14,b=3,则条件表达式a<b?a:b+1的值为( A )。
A.-14 B.-13 C.3 D.4
知识点分析:
a<b?a:b+1是三元表达式,a<b成立返回a,不成立返回b+1的值。
三元表达式格式:条件表达式?表达式1:表达式2;
其中,条件表达式的值会被判断,如果为真,则整个表达式的值为表达式1的值;如果为假,则整个表达式的值为表达式2的值。
6、设x=7,执行语句y=++x,则y等于( D )
(A) 6 (B) 7 (C)9 (D) 8
知识点分析:
考察对自增运算符的掌握,i++和++i,在赋值表达式中是不一样的。有先后顺序区别
y=x++;表示y=x;x=x+1;
y=++x;表示x=x+1;y=x;
x++; ++x; 单独作为表示式时,两者相同。
7、下列字符列中,合法的长整型常量是:(C、D)
(A) 4.18e3 (B) 0.46793 (C)4L (D) 956738
知识点分析:
整型变量用于存储整数值。整型变量有以下几个子类型:
short
:短整型,通常占2个字节,取值范围为-32,768到32,767。2^15=32,768
int
:整型,通常占4个字节,取值范围为-2,147,483,648到2,147,483,647。2^31
long
:长整型,通常占4或8个字节,取值范围为-2,147,483,648到2,147,483,647(32位系统)或-9,223,372,036,854,775,808到9,223,372,036,854,775,807(64位系统)。
long long
:超长整型,通常占8个字节,取值范围为-9,223,372,036,854,775,808到9,223,372,036,854,775,807。2^63A选项4.18e3,e=2.718281828459,是科学计数法,只能用于实型,因为可能有小数;
B选项0.46793,所以B值是小数,不属于整型;
C D选项用编辑器测试,都正确
后缀:l或L表示将long常量,u或U表示unsigned int常量。U、L可以任意组合。
默认为double常量。后缀:l或L表示long double常量,f或F表示float常量。
8、在C++中,char类型数据在内存的存储形式是:( D )
(A) 原码 (B) 反码 (C)补码 (D) ASCII码
知识点分析:
在C++中:int型数据(正数和负数)都是以补码形式存放的,字符型数据是以ASC码形式存放的。
9、若a是int类型变量,则表达式a=25/3%3的值是:( B )。
A) 3 B) 2 C) 1 D) 0
知识点分析:
在C++中,/表示整除,%表示取余数,也就是模预算,a=25/3%3,a=(25/3)等于8,8在对3取余数,等于2
10、设有变量定义 int i, j; 与表达式 i==0 && j==0 等价的表达式是:( B )
(A) i||j (B) !i&&!j (C) !i==!j (D) i==j
知识点分析:
原表达式中 i==0 和 j==0 都必须为真才成立。!是C++的逻辑运算符,意思是“非”。B中 !i 和 !j 都必须为真,而 i==0 在i为零时为真,!i也是i为零是为真。这就是许多人喜欢把if( a == 0 )写成if( !a )的原因。a == 0 和 !a 是等价的。
11、设变量int a = 5; 下列哪个表达式计算后,使得变量b的值等于2 ?( A )
(A) b=a/2 (B) b=6-(a--) (C) b=a%2 D) b=a>3?3:2
知识点分析:
A.b=5/2=2; B.b= 6-5=1; C.b=a%2=1(模运算); D.b=3(三元表达式)
12、if…else中为避免嵌套出现二义性,C++规定else子句总与( B )
(A)其之前最近的if语句
(B)其之前最近且尚未配对的if语句
(C)缩排位置相同的if语句
(D)其之后最近的if语句
知识点分析:注意if与else的配对关系。原则是if总是与它上面最近的、未配对的else配对
13、逻辑运算符两侧运算对象的数据( D )
(A)只能是逻辑型数据 (B)只能是整型数据
(C)只能是整型或字符型数据 (D)可以是任何类型的数据
知识点分析:
逻辑运算符两侧运算对象的数据类型:可以是任何合法的类型数据;因为逻辑运算符两边的运算对象,最终都被转换成bool值(逻辑值)操作。0、null转换为false,而所有非零、非false、非null值转换为true;然后进行运算。
14、设变量x,y,a,b,c,d的值为1,计算表达式(x=a!=b)&&(y=c!=d)后,变量x,y的值分别是:( B )
(A) 0,0 (B) 0,1 (C) 1,0 (D) 1,1
知识点分析:
!=的优先级比赋值“=”的优先级大,所以上边表达式可以写成这样:
(x=(a!=b))&&(y=(c!=d))同时&&、||逻辑运算有个特点:
&&当左边为假时,就不会运算右边的表达式
||当左边为真时,就不运行右边的表达式了
所以,表示式(x=(a!=b))&&(y=(c!=d))只执行左边运算,x=0,y值不变,y=1
15、若a是int类型变量,则计算表达式a=1000%999的值是( B )。
A) 0 B) 1 C) 2 D) 3
知识点分析:
%模运算,取余数操作,1000%999=1
16、已知 int x=1, y=0; 执行下面程序段后,y的值为( C )。
if(x) { if (x>0) y=1; } else y = -1 ;
(A)-1 (B)0 (C) 1 (D)不确定
知识点分析:
这段代码的意思是:当x!=0时,如果x>0,y=1;否则y=-1
已知x=1,y=0,执行代码后,y=1;
17、 已知 int x=1, y=0, w ; 执行下面程序段后,w的值为( A )。
if(x) if(y) w=x&&y; else w=y;
(A)0 (B)-1 (C) 1 (D)不确定
知识点分析:
这段代码的意思是:当x!=0时,如果y!=0,w=x&&y(与运算),否则w=y
已知x=1,y=0,执行代码后,w=0
18、语句while(w) … 中的表达式w的等价表示是:( C )
(A) w==0 (B) w==1 (C) w!=0 (D) w!=1
知识点分析:
while(x),就是当x有值,也就是x!=0,和if(x)用法类似
19、语句while(a>b) a--; 等价于( D )。
(A)if(a>b)a--; (B)do{a--}while(a>b);
(C) for(a>b)a--; (D) for(;a>b; a--);
知识点分析:
while(a>b),循环语句,当a>b成立情况下,重复执行a--命令;
A.if语句条件判断,只执行一次;B.do……while语句循环,至少执行一次命令,a>b不成立时,和while语句结果不同;C.for循环格式错误;D.for循环语句使用正确,结果和while相同
20、已知int i=0,x=0; 下面while语句执行时循环次数为( D )。
while( x || i ) { x ++ ; i ++ ; }
(A) 3 (B) 2 (C)1 (D) 0
知识点分析:
||条件或,i=0,x=0,x||i=0,while判断条件不成立,执行次数为0
21、执行语句 x=1; while(++x<7)cout<<’*’; 后输出结果是:( A )
(A) ***** (B) ****** (C) ******* (D) ********
知识点分析:
while(++x<7),每次对x加1后在进行条件判断,判断是否小于7,小于则打印*,循环次数5次
22、C++中循环语句while和do …while的主要区别是( A )
(A)do…while的循环体至少无条件执行一次
(B)while的循环控制条件和do…while的循环控制条件的控制条件的控制方式是相反的
(C)do …while允许从外部转到循环体内,while不允许
(D)while的循环体不能复合语句
知识点分析:
while(执行条件①){
循环体②
}while语句的执行顺序是,先判断①是否为true,如果为true则执行②,执行完后回到①,若为true则重复执行②,直到有一次判断①为false,或者循环用break;中断时结束。
do
{
循环体②
}while(循环条件①)do...while循环是,首先不管青红皂白,先执行循环体②,执行完后判断循环条件①,如果为true则跳回到循环体②重复执行,然后再判断①,直到①为false.
23、若有以下程序段:
for(m=1;m<=100;m++)
{
cin>>y;
if(y<0)
continue;
cout<<m;
}
则下面正确的说法是( D )
(A)当y<0时整个循环结束 (B)当y>=0时什么也不输出
(C)cout语句永远也不执行 (D)最多输出100个非负整数
知识点分析:
C++ 的循环结构有三种,分别是 while、do while 和 for 循环。执行循环结构的时候,一旦遇到 continue 语句,则直接跳过循环中continue 后续的所有代码,开始下一次循环。
continue 语句只能用在循环结构中,它的功能是终止本次循环,立即开始下一次循环。
在嵌套的循环结构中,continue 语句仅影响包裹它的最内层循环。顺便复习一下break,
break;是一种控制流语句,用于终止包含它的最内层的循环(例如 for、while、do-while 循环)或 switch 语句。当程序执行到 break; 时,它会立即跳出当前循环或 switch 语句,继续执行紧接着循环或 switch 后面的代码。(也就是终止该循环)
24、假定a为一个字符型(char)数组,则元素a[8]的地址比该数组的首地址大( B ) 个字节。
A.4 B.8 C.16 D.32
知识点分析: 在C++中,一个char类型占据1个字节,所以元素a[8]的地址比数组首地址大8个字节。
25、语句“while(!x)…”等价于( A )
(A)while(x==0)… (B) while(x!=1)… (C) while(x!=0)… (D) while(x==1)…
知识点分析: a == 0 和 !a 是等价的。
26、一维数组a正确定义是( D )。
(A)char a(10) (B) int a[]
(C) int k=5,a[k] (D)char a[]={‘a’,’b’,’c’}
知识点分析:
数组的大小是固定的,一旦定义后无法改变。另外,数组的索引从 0 开始,最大索引为数组大小减 1。
选项C,目前在大部分编译器中支持这种写法,但是在最早的C语言中,是不支持以变量来定义数组的,所以考试中还是不支持这种写法。
27、char x[5]={‘a’,’b’,’\0’,’c’,’\0’} ; cout<<x;输出的结果是( B )
(A)’a’’b’ (B)ab (C) ab c (D)abc
知识点分析:‘\0’是 C++ 中的空字符结尾,表示字符串的结束。空字符是一个特殊字符,其 ASCII 码值为 0,当 C++ 编译器遇到 '\0' 时,它知道字符串已经结束并停止读取字符。因为是以字符串方式输出,遇到'\0'停止。
28、在"int a[ ][3]={{1},{3,2},{4,5,6},{0}};"中,a[2][2]的值是( C)。
A.1 B.0 C.6 D.2
知识点分析:
这个赋值语句,二维数组a:
1 0 0
3 2 0
4 5 6
0 0 0
a[2][2]=6,要注意数组下标是从0开始的
29、设有下面和程序段
char a[3],b[]=“China”
a=b;
cout<<a;
则( A )
(A)编译出错 (B)运行后将输出Ch
(C) 运行后将输出Chi (D)运行后将输出Chian
知识点分析:
数组之间拷贝不能直接使用a=b,而是可以使用字符串拷贝函数strcpy。而且数组a的长度只有3,而数组b有5个字符,还不包括结尾字符。
字符串拷贝函数strcpy格式:strcpy (字符数组名1,字符数组名2) 的功能:把字符数组2中的字符串拷贝到字符数组1中。串结束标志“”也一同拷贝。字符数组名2, 也可以是一个字符串常量。这时相当于把一个字符串赋予一个字符数组。
本函数要求字符数组1应有足够的长度,否则不能全部装入所拷贝的字符串
30、判断字符串s1是否大于字符s2的是( A )
(A)if(strcmp(s1,s2)>0) (B)if(strcmp(s1,s2))
(C)if(strcmp(s2,s1)>0) (D)if(s1>s2)
知识点分析:
strcmp函数是string compare(字符串比较)的缩写,用于比较两个字符串并根据比较结果返回整数。基本形式为strcmp(str1,str2),若str1=str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数。
知识加油站——字符串函数:
- 应用于查找的find()函数
cout<<"ab在str中的位置:"<<str.find("ab")
- 字串(substr()函数)
cout<<"返回str[3]以后的子串:"<<str.substr(3)
- 替换
cout<<"返回把 [2]到[2+(4-1)] 的内容替换为'lk'后的新字符串:"<<str.replace(2,4,"lk")
- 插入:insert()函数
cout<<"从 [2] 位置开始添加字符串'kjh'并返回形成的新字符串:"<<str.insert(2,"kjh")
- 追加字符:pushback()函数和append()函数
cout<<"在输入字符串的尾部添加字符串avs:"<<str.append("avs")
- 交换字符:swap()函数
str1.swap(str2);
- 字符串大小 size()函数和length()函数
cout<<"size()函数获取大小:"<<str.size()
cout<<"length()函数获取大小:"<<str.length();
- 字符串比较函数:compare()
cout<<"字符串比较结果:"<<str1.compare(str2)
- 另外基本的操作函数
strcpy(s1,s2) :复制字符串s2到s1
strcat(s1,s2) :连接s2到s1的末尾
strlen(s1) :返回字符串s1的长度
strcmp(s1,s2) :若s1和s2是相同的,则返回0,s1< s2,返回值小于0,若s1>s2,返回值大于0
二、程序填空题
1、以下程序的功能是:用选择法对5个实数排序(按从小到大顺序)。请填空
#include <iostream>
using namespace std;
void main( )
{ double x[5], t; int i,j,k;
for(i=0; i<5; i++) cin>>x[i];for(i=0; i<4; i++)
{ k=i ;
for(【1】; j<5; j++)
if(x[j]<x[k]) k=j;
【2】//将选择好的下标元素和下标为i 的元素交换
【1】j=i+1;
【2】t=x[i];x[i]=x[k] ;x[k]=t ;
知识点分析:选择排序法是一种不稳定的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。
本题目中,是用选择排序算法从小到大排序,第一轮找到最小的排在第一位,第二轮,从数组第二个开始往后比较找第二小的数……【1】处每一轮比较的数组下标和i变量有关系,j=i+1;【2】处,如果每次比较靠后的数据x[j]小于前面的x[i],那么交换两者数据,利用临时变量t,t=x[i];x[i]=x[k] ;x[k]=t ;交换数据。
[2、以下函数的功能是:用递归法将一个整数m 转换成字符串。例如:输入整数1472,应输出字符串 "1472”。m的位数不确定,可以是任意位数的整数。请填空
void print( int m )
{ if(m<10) 【3】//递归出口
else
{
【4】//递归体
putchar(m%10+48);
【3】putchar(m+48);
【4】print(m/10);
知识点分析:
分析:应该将输入的数中的每个数进行剥离,然后从头到尾将每个数字转化为对应的字符。递归函数print需要完成的工作是,当n不是个位数(putchar(m+48)!=0)的时候,将n/10作为参数进行递归调用函数print,然后将数字n的最后一位数字转化为字符串。因为每次的递归调用print函数,是发生在将n的最后一个数字转化为字符串的操作之前的,所以会依次将数字n的每个数字转化为字符。
在C/C++语言中我们都知道整数转换为字符串是不能直接转换的。一位整数转换为字符也只能将其转换为整数的ASCII码。
我们知道 0-9的数字的ASCII码对应于48~57。因此一位整数转换为字符串直接将整数+48后就可以强制转换。
所以大致思路就是,将整数n 进行模10 ,即n%10得到n的个位,然后将其转换为字符加到字符串中,再将n/10进行迭代。
putchar是c语言函数之一,作用是向终端输出一个字符。其格式为putchar(c),其中c可以是被单引号(英文状态下)引起来的一个字符,可以是介于0~127之间的一个十进制整型数(包含0和127),也可以是事先用char定义好的一个字符型变量。
3、下面是显示如下图案的程序。
1111111111
2222222
33333
444
5
#include<iostream.h>
void main(
{ int i, j, k ;
for( i= 1; i<= 5; i++)
for( k = 1;_(5)_; k++)
cout<<ends ;
for(j-1 ;___(6)_; j++)
cout <<_(7)_;
cout<<endl;
}
}
k<-i-1
( 2*(5-i)+1)
i
三、阅读程序写结果
1.//循环
#include<iostsam h>
void main()
{ int i=0,s=0:
while (i++<=10)
{ if(i%2) continue;
s=s+i;
cout<<s<<’\t’;
}
}
输出:
2 6 12 20 30
2.//数组,指针
#include<iostream. h>
void main()
{ int num[5];
int *p=num,i :
for(i=1;i<=5;i++) num[i-1]=i;
for(i=0; i<5;i++)
cout<<num[i]+(*p++)<<'\t';
cout<<endl:
}
输出:
2 4 6 8 10
3.//递归
#include<iostream.h>
void print(char ch)
{int i=0;
if(ch==’D')
return;
else
{print(ch+1);
while(i++<=ch-'A')
cout<<ch;
cout<<endl;
}
}
void main{
print(‘A’);
}
输出:
CCC
BB
A