#O3367. LQ.蓝桥杯.STEMA.第一卷.选择题.6.解析

LQ.蓝桥杯.STEMA.第一卷.选择题.6.解析

22 年 10 月 30 日 C++ STEMA 中高级 第一卷(选择题)

  1. 执行 cout<<(5%3); 语句后,输出的结果是( )。{{ select(1) }}
  • 0
  • 1
  • 2
  • 3
  1. 以下选项中,哪一个是 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"); */
}
  1. 以下关于在 C++ 中,对形式参数描述不正确的是( )。{{ select(3) }}
  • 形式参数可以为空
  • 形式参数必须有类型说明
  • 多个形式参数之间以分号隔开
  • 函数有无形式参数,函数名后的小括号都不能省略

分号是用来分隔语句的

  1. 可以正确判断 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' 的字符才为真,这明显不对。

  1. 以下说法正确的是( )。{{ 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 函数的内存地址。
}