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

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值