• C语言--每日五道选择题--Day2


    第一题:

    1、有如下代码,则 *(p[0]+1) 所代表的数组元素是( )

    1. int a[3][2] = {1, 2, 3, 4, 5, 6}, *p[3];
    2. p[0] = a[1];

    A: a[0][1]

    B: a[1][0] 

    C: a[1][1] 

    D: a[1][2]

    答案及解析:C

    首先要明确p是一个指针数组

    p[0] = a[1];

    此处a[1]是二维数组的第二行的数组名数组名表示首元素的地址,a[1]是a[1][0]的地址

    所以p[0]中存储的是第2行第1个元素的地址,p[0]+1就是第二行第2个元素的地址

    *(p[0]+1)就是第二行第二个元素了。

    第二题:

    2、关于指针下列说法正确的是( )【多选】

    A: 任何指针都可以转化为void * 

    B: void *可以转化为任何指针

    C: 指针的大小为8个字节 

    D: 指针虽然高效、灵活但可能不安全

    答案及解析:ABD

    A和B:因为指针都是4个/8个字节,指针直接可以任意转换,只是在解引用和对指针做加法的时候有区别。

    C:指针占几个字节要看平台,64位环境下8个字节,32位环境下4个字节

    D:指针高效但是不安全,因为可能会成为野指针

    第三题:

    3、以下 scanf 函数调用选项中, 错误的是( )

    1. struct T
    2. {
    3. char name[20];
    4. int age;
    5. int sex;
    6. } a[5], *pa=a;

    A: scanf("%s",a[0].name); 

    B: scanf("%d", &pa[0].age);

    C: scanf("%d",&(pa->age)); 

    D: scanf("%d", pa->age);

    答案及解析:D

    该题考察的是通过scanf函数的调用对结构体数据类型进行初始化。

    scanf("输入控制符", 输入参数);

    功能:将从键盘输入的字符转化为“输入控制符”所规定格式的数据,然后存入以输入参数的值为地址的变量中

    scanf输入时要通过地址找空间

    A:name属于字符数组的数组名,相当于数组的首地址,A正确。

    B、C用了&是正确的。

    D:单独的pa->age可用于输出语句获取值的形式,用在scanf中的时候需要&操作符,D错误

    第四题:

    4、如下函数 fun 计算 prod=1*2*3*…*n ,并返回计算结果值。但当 n>12 时,返回值不正确。要找出该程序的错误,正确的调试方法是( )

    1. int fun(int n)
    2. {
    3. int prod = 1 , i = 0;
    4. for(i = 1;i <= n;i++)
    5. {
    6. prod *= i;
    7. }
    8. return prod;
    9. }

    A: 监视变量prod的值,在prod *= i;行处设置断点,然后单步运行,直到发现错误原因

    B: 监视变量prod的值,在return prod;行处设置断点,程序中断后,即可发现错误原因

    C: 在prod=1;处设置断点,然后在函数调用堆栈中即可发现错误原因

    D: 监视变量i的值,在for (i=1; i<=n; i++)行处设置断点,然后单步运行,直到发现错误原因

    答案及解析:B

    依题目已知情况,当n<=12时结果是正确的

    说明是随着参数的变大计算过程中哪里出了问题

    故而要在prod *= i;处设断点,查看原因。

    错误原因是数据过大时整型溢出

    第五题

    5、下列给定程序中,函数 fun 的功能是:把形参a所指数组中的奇数按原顺序依次存放到 a[0]、a[1]、a[2]… 中,把偶数从数组中删除,奇数个数通过函数值返回。

    例如,若a所指数组中的数据最初排列为: [9,1,4,2,3,6,5,8,7]

    删除偶数后,a所指数组中的数据为: [9,1,3,5,7] ,返回值为5。

    请在程序的下画线处填入正确的内容,使程序得出正确的结果( )

    1. int fun(int a[], int n)
    2. {
    3. int i, j;
    4. j=0;
    5. for (i=0; i
    6. {
    7. if (a[i]%2== _________ )
    8. {
    9. a[j]=a[i];
    10. _________;
    11. }
    12. }
    13. return _________;
    14. }

    A: 0  j++  j  

    B: 1  j++  j+1 

    C: 0  j++  j+1 

    D: 1  j++  j

    答案及解析:D

    代码实现的思路应该是arr[i]是奇数的时候要存储起来

    所以第一个空是1

    最开始j是0,每次找到一个奇数就存储到arr[j]的位置,那接下里j需要+1

    所以得第二个空是j++

    当循环停止的时候,j其实就是奇数的个数

    所以最后返回j,第三个空是j

    所以选D。

  • 相关阅读:
    极限学习机
    软考高级系统架构设计师系列之:可靠性设计
    Python--循环中的两大关键词 break 与 continue
    电子元器件销售ERP管理系统哪个比较好?
    MNIST数据集手写数字识别(CNN)
    剑指 Offer II 027. 回文链表
    Skywalking流程分析_5(字节码增强)
    IEEE 802.11ax High-Efficiency WLANs
    A. United We Stand
    Java基础-----StringBuffer和StringBuilder
  • 原文地址:https://blog.csdn.net/2302_76941579/article/details/134274206