#O3367. LQ.蓝桥杯.STEMA.第一卷.选择题.6.解析
LQ.蓝桥杯.STEMA.第一卷.选择题.6.解析
22 年 10 月 30 日 C++ STEMA 中高级 第一卷(选择题)
- 执行 cout<<(5%3); 语句后,输出的结果是( )。{{ select(1) }}
- 0
- 1
- 2
- 3
- 以下选项中,哪一个是 C++ 注释符号?( )。{{ select(2) }}
- *
- //
- ;
- #
C++ 的注释分成两种。一种是单行注释,另外一种是多行(段落)注释。
单行诸城市是在该行要注释的内容前面加上 //
int a;
for(int i=1;i<=100;i++){
// 这是单行的注释
printf("%d\n",i); // 单行注释还可以放在某一行代码的后面,不影响前面语句的执行
}
多行注释是把要注释的内容前面加上 /* , 后面加上 */
int a;
for(int i=1;i<=100;i++){
// 这是单行的注释
printf("%d\n",i);
/*for(int j=1;j<i;j++)
printf("%d ",j);
printf("\n"); */
}
- 以下关于在 C++ 中,对形式参数描述不正确的是( )。{{ select(3) }}
- 形式参数可以为空
- 形式参数必须有类型说明
- 多个形式参数之间以分号隔开
- 函数有无形式参数,函数名后的小括号都不能省略
分号是用来分隔语句的
- 可以正确判断 char 类型变量 c 是小写字母的是( )。{{ select(4) }}
- 'a'<=c<='z'
- ('a'>=c) && ('z'<=c)
- (c>='a') && (c<='z')
- ('a'>=c) || ('z'<=c)
A 的写法不符合语法。编译的时候,'a'<=c<='z' 这个表达式从左到右运算,先运算 'a'<=c 这一部分,这是逻辑判断表达式,这个表达式的运算结果是逻辑类型(true 或者 false),而接着就是 逻辑变量 <= 'z' 。逻辑变量不可能和 字符变量 比较大小的。所以语法错误。
B 的表达式 ('a'>=c) && ('z'<=c) 能为不可能为真。因为 && 两边的为真条件的交集为空。没有一个字符是既大于 'z' 又小于等于 'a' 的。类似,不存在一个 int 数,它既大于 100,又小于 10 。
C 也不对,只有小于等于 'a' 或者 大于等于 'z' 的字符才为真,这明显不对。
- 以下说法正确的是( )。{{ select(5) }}
- 可以通过 &p 来间接访问指针变量 p 所指向的数据内容
- 指针变量里面存放变量的地址,指针变量里面的值初始化之后不可改变
- 定义为指向 int 型变量的指针,可以指向 double 类型的变量
- C++ 中,通过函数名称可以获取到函数的地址
& 运算符是取内存地址的运算符。
int a =10;
int *p = &a; // 获取 变量 a 的内存地址,把这个地址赋给 指针变量 p 。换句话说,p 的值就是 a 的内存地址
指针变量也是变量,可以变化的。
int a[100];
int * p;
p = a; // 直接引用 a 没有下标,获得是数组 a 第一个元素的地址,就是 a[0] 的地址。把这个地址赋值给 指针变量 p
for(int i=0;i<100;i++){
*p = 2*i + 1; // 根据 p 的值去到对应的内存,给那个位置的内存数据赋值,
p++; // p 的地址不断往后多, p 是可以变化的
}
//上面的for语句相当于下面这句
for(int i=0;i<100;i++) a[i] = 2*i+1;
C 不对,指针的类型一旦定义了,就不能再修改了。
D 是对的。我们平常用sort函数给结构体排序,cmp 就是函数的地址。当引用一个函数的名字,不带括号的时候,就是获得它的地址。
struct Node
{
int a,b;
}x[1000];
bool cmp(Node i, Node j)
{
if(i.a==j.a) return i.b<j.b;
else return i.a<j.a;
}
int main()
{
sort(x+1,x+1000,cmp); // 这里 cmp 的引用就是表示 cmp 函数的内存地址。
}