C++练习题
一、基础
1KB=1024字节
1字节=8bit (8位内存空间)
1.运算符
优先级:算术运算>关系运算>赋值运算
1.赋值运算符
符号常量和带运算符的表达式不能为左值
y*5=x+z就是错误的
赋值运算是右结合性的,从最右往左侧赋值
2.自增运算符
前置(++i)先加1,然后使用加1后的操作数
后置(i++)先使用操作数,然后将操作数加1
例:设a、b、c为整型数, 且a=2、b=3、c=4, 则执行完以下语句: a*=16+(b++)-(++c); 后,a的值是?
原式等价于
c=c+1;
a=a*(16+b-c);
b=b+1;
答案为28
3.取余运算符
a%b
a和b必须为整型数,结果的符号与被除数a相同
4.取非运算符
对于 !a
等价于a==0
只要a是非0数,结果就是0,无论正负和数据类型
a是0,则结果为1
5.逗号运算符
计算所有表达式的值,并将最后一次计算的结果作为逗号表达式的结果
例:假定int a,b,c; 则表达式 a=1, b=3, c=a+b, c++;的值是?
前三个表达式计算完后c=4,由于c++是后置的,所以先使用c作为逗号表达式的结果,再将c加1
答案为4
2.带转义字符的字符串字节数/长度
1.直接sizeof
2.存到字符数组再sizeof
strlen不受影响
sizeof可能会不一样
例:假设定义一个字符数组char str1[10]=”Hello”; 则sizeof(str1)的值是?
字符数组[ ]内的数是多少,字节数就是多少
如果字符数组[ ]内为空,则与直接sizeof字符串结果一样
答案为10
3.char string类型的加法
char a=‘A’,b=97;
string c=“hello”;
cout出a,显示的是字母A
cout出a+b,结果是ASCII码直接加和后的数字
cout出a+c,结果是Ahello,也就是把字符和字符串连接在一起了
4.数据类型转换
double x=3.5;
(int)x*0.5
只对x值进行取整,不对类型进行转换,取整后的数再与0.5相乘
结果为3.5
二、数组及自定义结构类型
1.结构数组
结构类型:自定义的数据类型,用于描述一个实体的不同属性
例:若有以下定义,则下列哪个语句是错误的( )
struct Staff {
char name[30];
double salary;
} staff[2]={ {“Zhang”,5000},{“wang”,8000} };
A.Staff staffa; staffa = staff[0];
B.Staff staffa; staffa.name = staff[1].name;
C.Staff staffa; staffa.salary = 9000;
D.staff[1] = staff[0];
解答:
A/D 相同结构类型里的变量可以直接相互赋值
B/C 希望给结构变量中的成员赋值
由于name是字符数组,定义完之后不能直接用赋值号给它赋值,只能用strcpy()
strcpy(staffa.name , staff[1].name);这样写是对的
答案为B
2.枚举类型
enum 类型名{变量值列表}
没有指定值的枚举元素,其值为前一元素加 1,第一个枚举元素的值默认为1
在定义完后,枚举元素被看作常量,不能赋值
枚举变量与整型变量赋值
枚举变量可直接赋值给整型变量
整型变量要进行强制类型转换才能赋值给枚举变量
例:定义一个枚举类型enum color {RED, YELLOW, GREEN=20,WHITE}; 定义一个枚举变量和整型变量color ec;int i=10; 下列语句及说明中正确的是( )
A.ec=WHITE; i=ec; 此时i的值是3;
B.ec=i,;i=YELLOW; 此时i的值是1;
C.i=ec.WHITE; 此时i的值是21;
D.i=ec=WHITE; 此时i的值是21;
解答:
A.WHITE的值为GREEN的值加1,即21
B.整型变量要赋值给枚举变量要进行强制类型转换
ec=(color)i;
C.枚举变量不能用圆点操作符
D.赋值运算是右结合性的,所以原式等价于ec=WHITE;i=ec;
答案为D
三、函数
1.形式参数
下列对函数(假定存在形式参数)的描述哪一个是错误的( )
A. 函数的形式参数在函数被调用时必需分配存储空间。
B. 函数的形式参数可以有默认值
C. 函数可以自己调用自己
D. 在函数体内部,可以调用多个函数。
解答:
A:若形参为地址变量(如数组名),则调用时不需为其分配内存空间(书P149)
B:带默认参数值的函数(书P141)
C:递归函数(书P136)
答案为A
2调用
传入实参
fun((a,b),(c,d,e));
实参个数为两个,它们分别是两个逗号表达式(a,b)和(c,d,e)。由于逗号表达式的值是逗号表达式中最后一个子表达式的值,所以只有两个实参
3.变量的存储类型
static型(书P144)
例:请看下列代码,程序运行的输出结果(输出的最后一行)是
#include<iostream>
using namespace std;
int fun(int a)
{ int b=0; static int c=3;
b++;
c++;
return (a+b+c); }
int main(){
int i, a=3;
for (i=0; i<3; i++)
cout <<i<<" "<<fun(a)<<endl;
return 0;
}
static int c=3; 表示把c定义为静态局部变量
c只会初始化一次,且调用结束后能够保留它的值
第一次循环结束后c为4,第二次循环结束后c为5,
第三次循环b自增后为1,c自增后为6,a+b+c为10
答案为2 10