C语言—每日选择题—Day49

第一题

3. 假定有语句“ int b[10], *pb; ”,则不正确的赋值为 ( )

A:pb=b

B:pb=b[5]

C:pb=b+2

D:pb=&b[0]

答案及解析 B

本题考查的是指针类型对数组的引用;

A:b是数组名,是首元素地址,数据类型是int *,数据类型匹配,赋值正确;

B:b[5]是数组的一个元素,数据类型是int,数据类型不匹配,赋值错误;

C:b是数组名,首元素的地址,b + 2;就是往后移动2个int类型的大小,也就是8字节,到达的是第三个元素的地址,相当于&b[3],所以数据类型是int*,正确;

D:&b[0],数据类型是int*,数据类型匹配,正确;

第二题

2. 运行时的C程序,下列哪些变量在内存中的stack(栈)区域的有()

int a = 0;
char *p1;
int main() 
{
    int b;
    char s[] = "abc";
    char *p2;
    char *p3 = "123456";
    static int c =0;
    p1 = (char *)malloc(10);
    free(p1);
    return 0;
}

A:a

B:b

C:c

D:s

E:p1

F:p2

答案及解析 BDF

stack是栈空间的意思,我们学习数据结构就知道了;而这里考察的是内存中栈中存放的是哪些数据?栈中存放的是局部变量的空间;

a 和p1 :这是一个全局变量,存放在静态区;

b,s,p2,p3:这些都是局部定义的变量,存放的就是栈区

static的变量:是静态变量,存在静态区;

由malloc开辟的空间:存放的是堆区;

第三题

3. 以下程序的运行结果是()

#include <stdio.h>
int main() 
{ 
    int m = 12,n = 34;    
    printf("%d %d ", m++, ++n);    
    printf("%d %d\n", n++, ++m);  
} 

A:12 35 35 14

B:12 35 35 13

C:12 34 35 14

D:12 34 35 13

答案及解析 A

本题依旧考察的是前置++和后置++;

记住前置++的表达式,表达式的值是++之后的值;

后置++的表达式,表达式的值是++之前的值;

--也是一个道理

第四题

4. 若有以下程序

#include <stdio.h>
int main() 
{
    int s = 0, n;
    for (n = 0; n < 4; n++) 
    {
        switch (n) 
        {
            default:
                s += 4;
            case 1:
                s += 1;
            case 2:
                s += 2;
            case 3:
                s += 3;
        }
    }
    printf("%d\n", s);
    return 0;
}

则程序的输出结果是?

A:6

B:18

C:10

D:24

答案及解析 D

本题考查的是switch语句,只要case和default语句后面没有break,就会依次执行下面每一个case或default的语句;

比如第一次循环,n=0,只满足default,而他们都没有break,所以依次执行下面的语句

s += 4,s += 1,s += 2,s += 3;

剩下的循环以此类推;

第五题

5. 下面函数输出结果是()

#include <stdio.h>
int main() 
{
    int k = 12345;
    printf("%2d\n", k);
    return 0;
}

A:12

B:45

C:12345

D:无法通过编译

答案及解析 C

本题考查的是格式化打印

直接看这篇博客:%md在printf语句和scanf语句中的区别-CSDN博客

猜你喜欢

转载自blog.csdn.net/2302_76941579/article/details/135007947
今日推荐