• 10.20复习



    前言


    一.选择题

    1.第一题

    1、如下程序的运行结果是( )

    char c[5]={'a', 'b', '\0', 'c', '\0'};
    printf("%s", c);
    
    • 1
    • 2

    A: ‘a’ ‘b’ B: ab\0c\0 C: ab c D: ab

    解析 c
    以字符串形式打印,\0结束

    2.第二题

    2、若有定义: int a[2][3]; ,以下选项中对 a 数组元素正确引用的是( )
    A: a[2][0] B: a[2][3] C: a[0][3] D: a[1>2][1]

    解析 D
    其他数组存在越界

    3.第三题

    3、在下面的字符数组定义中,哪一个有语法错误( )
    A: char a[20]=“abcdefg”; B: char a[]=“x+y=5.”; C: char a[15]; D: char a[10]=‘5’;

    解析 D
    D中的’5’是一个字符常量,不能给字符型数组a初始化

    4.第四题

    4、下列定义数组的语句中正确的是【多选】( )
    A:

    #define size 10
    char str1[size], str2[size+2];

    B: char str[]; C: int num[‘10’]; D: int n=5; int a[n][n+2];

    答案解析:
    正确答案:AC
    A选项:宏替换,没问题;B选项:非法定义,一维数组必须定义数组元素个数;C选项:字符’0’,转换成十进制为48,所以该选项最终为int num[48];D选项:错误,数组定义下角标不能为变量,注:C99标准中支持了使用变量,这里不做特殊考虑。

    5.第五题

    5.已知 i,j 都是整型变量,下列表达式中,与下标引用 X[i][j] 不等效的是【多选】( )
    在这里插入图片描述

    答案解析:
    正确答案:BC
    *(x+i)等价于下x[i];
    b c 问题都是一样的 等价于
    *(x+i+j)越界了

    6.第六题

    6.下列程序的输出是( )

    #include
    int  main()
    {
      int a [12]= {1,2,3,4,5,6,7,8,9,10,11,12}*p[4],i;
      for(i=0;i<4;i++)
        p[i]=&a [i*3];
      printf("%d\n",p[3][2]);
      return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    A: 上述程序有错误 B: 6 C: 8 D: 12

    答案解析:
    正确答案:D
    p是一个指针数组,p[i] = &a[i*3]相当于是把数组a每3个一组分开并把每组的首地址存在p数组,此时p类似一个4行3列的二维数组,p[3][2]就是4行第3个元素12

    7.第七题

    7、二维数组X按行顺序存储,其中每个元素占1个存储单元。若 X[4][4] 的存储地址为 Oxf8b82140 , X[9][9] 的存储地址为 Oxf8b8221c ,则 X[7][7] 的存储地址为( )
    A: Oxf8b821c4 B: Oxf8b821a6 C: Oxf8b82198 D: Oxf8b821c0

    答案解析:
    正确答案:A
    假设每行有n个元素:那x[9][9]元素的地址 - x[4][4]元素的地址 = 0x21c-0x140=5n+5(21c和140是地址末三位的十六进制数),这里n是43,假设x[7][7]的地址是z,x[7][7]元素的地址 - x[4][4]元素的地址 = z-0x140 = 3n+3,z= 3n+3+140 = 3*43+3+0x140 = 0x84+0x140 = 0x1c4,看地址的尾数,选择A

    8.第八题

    8、以下哪个选项可以正确描述 sizeof(double) ( )
    A: 一个整型表达式 B: 一个双精度型表达式 C: 一个不合法的表达式 D: 一种函数调用

    答案解析:
    正确答案:A
    sizeof是C语言中的一个操作符,不是函数调用,简单的说其作用就是返回一个对象或者类型所占的内存字节数,结果是无符号整数,因此可以把它看作是整型表达式。所以选择A

    9.第九题

    9、下列代码运行后的结果是什么( )

    int main()
    {
      char a = 'a',b;
      printf("%c,", ++a);
      printf("%c\n", b = a++);
      return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    A: b,b B: b,c C: a,b D: a,c

    答案解析:
    正确答案:A
    变量a里边存的是字符’a’,第一次输出先加加再输出,输出的是’b’;第二次输出的时候,a先赋值再加加,赋值给b的就是a原来的值,输出b的时候的还是’b’

    10.第十题

    10、以下逗号表达式的值为( )

    (x = 4 * 5 , x * 5) , x + 5;

    A: 25 B: 20 C: 100 D: 45

    解析 A
    逗号表达式,从前到后依次计算子表达式,而结果是最后一项的值,所以原式中括号可以去掉,x的值被赋值为20,x*5不改变x的值,因此输出25

    二.编程题

    1.第一题

    在这里插入图片描述

    #include 
    int main()
    {
        char a[500]={0};
        char b[128]={0};
        scanf("%s",a);
        int i=0;
        int sum=0;
       while(a[i])
       {
           b[a[i]]=1;//桶排序将值赋值为1,相加就是数量和
           i++;
       }
        for(i=0;i<128;i++)
        {
            sum+=b[i];
    
        }
        printf("%d",sum);
        return 0;
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    2.第二题

    在这里插入图片描述

    
    
    int majorityElement(int* nums, int numsSize)
    {
        int count=1;
        int i=0;
        int cmp=nums[0];
        for(i=1;i<numsSize;i++)
        {
            if(cmp==nums[i])
            {
                count++;
            }
            else
            count--;
            if(count==0)
            {
                cmp=nums[i+1];
            }
        }
        return cmp;
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    3.第三题

    在这里插入图片描述

    int* selfDividingNumbers(int left, int right, int* returnSize)
    {
       int  static arr[10000] ;
        int i=0;
        * returnSize=0;
        for(i=left;i<=right;i++)
        {
            int num=i;
            while(num)
            {
                int number=num%10;
                if(number==0||i%number!=0)
                {
                    break;
                }
                num/=10;
    
            }
            if (num == 0) 
            {
                arr[(*returnSize)++] = i;
            }
            
        }
       
        return arr;
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    4.第四题

    在这里插入图片描述

    int* productExceptSelf(int* nums, int numsSize, int* returnSize)
    {
        int *ret = (int *)malloc(numsSize *sizeof(int));
        int left=1,right=1;
        * returnSize=numsSize;
    
        int i=0;
        for(i=0;i<numsSize;i++)
        {
            ret[i]=left;
            left*=nums[i];
        }
        for(i=numsSize-1;i>=0;i--)
        {
            ret[i]*=right;
            right*=nums[i];
        }
        return ret;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在这里插入图片描述

  • 相关阅读:
    PHP代码审计DVWA[XSS (DOM)]
    使用grpcui测试ASP.NET core gRPC服务
    springboot基于Android的考试互助APP的设计与实现毕业设计源码250910
    二叉树—堆(C语言实现)
    Java - 根据输入的月份数字,转成开始时间和结束时间,比如输入12个月,得到2023-5和2024-5
    GitLab CI/CD的原理及应用详解(三)
    Rxjava3 全新详解及常用操作符
    java 处理树形结构数据
    hostname -f与uname -n的返回值可能不同
    拼多多不满“国内市场”,将于9月中旬在美国推出跨境电商平台
  • 原文地址:https://blog.csdn.net/weixin_69939913/article/details/127416105