IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 暑假第十二天之每天一些题系列 -> 正文阅读

[C++知识库]暑假第十二天之每天一些题系列

暑假第十二天之每天一些题系列

一、选择题

  • 定义了一维 int 型数组 a[10] 后,下面错误的引用是
    A. a[0] = 1 B. a[0] = 5*2 C. a[10] = 2 D. a[1] = a[2] * a[0]

答案解析:

a[10]越界访问了,10个元素下标是0-9。

  • 在C/C++语言中,下面关于数组的描述错误的是
    A. 数组的名字就是指向该数组第一个元素的指针
    B. 长度为n的数组,下标的范围是 0-n-1
    C. 数组的大小必须在编译时确定
    D. 数组可通过值参数、地址指针、引用参数三种方式传递给函数

答案解析:

动态开辟的数组在运行时确定大小

  • 若已定义: int a[] = [0,1,2,3,4,5,6,7,8,9]; int *p = a; int i; 其中 0≤i≤9 ,则对a数组错误的引用是
    A. a[p-a] B. *(&a[i]) C. p[i] D. a[10]

答案解析:

数组的下标为0-9,a[10]已经越界访问了

  • 在C语言中,若有定义: int a[4][10](其中0<=i<4,0<=j<10); 则下列选项中不能表示数组元素 a[i][j] 值的是
    A.*(a+i)+j B. *(&a[0][0]+10*i+j) C. *(a[i]+j) D. *(*(a+i)+j)

答案解析:

*(a+i)+j表示的是a[i][j]的地址,需要对它再解引用才是a[i][j]

  • 关于数组定义 double d[10] 以下叙述不正确的是

    A. 数组 d 有10个元素
    B. 数组 d 的最后一个元素是 d[10]
    C. 数组 d 的第一个元素 *d
    D.数组 d 的字节数是 sizeof(double)*10

答案解析:

数组d有10个元素,正确;数组d的最后一个元素是d[9];d是数组名,数组名是首元素的地址,对他解引用就是首元素;字节数等于,数组元素类型的大小乘以元素个数

二、填空题

  • 如下代码输出结果是什么
int f(int x,int y)
{
	return (x&y)+((x^y)>>1);
}
int main()
{
    int result = f(2,4);
    printf("%d\n", result);
    return 0;
}

答案解析:

2的二进制为:00000010

4的二进制为:00000100

按位与得:00000000

按位异或得:00000110

将它右移一位得:00000011

然后将它和按位与得的结果相加得结果为3,故最后打印为3

  • 循环语句 for(i=0; i<=n; i++) S; 中循环体S被执行的次数为

答案解析:

循环体S被执行得次数为n+1。

  • 下面的程序运行结果是
void fun ( int x,int y,int *c,int *d )
{
    *c = x+y;
    *d = x-y;
}
int main ()
{
    int a = 4,b = 3,c = 0,d = 0;
    fun(a,b,&c,&d);
    printf( "%d %d\n",c,d);
}

答案解析:

可以看到c、d为值传递,在函数里面将c改为7,d改为1,故打印为7,1。

三、算法题

题目描述:

一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。例如数组为{1,3,5,7,1,3,5,9},找出7和9。

思路:

将所有数字先异或得到两个只出现一次的数字异或后的结果num,然后进行分组,特别的需要将两个只出现一次的数字分在不同组,这样我们这两个组内数字再分别异或就得到了这两个数字。

那么我们怎么分组呢?

我们想一想异或是相同为0,不同为1,这两个不一样的数字异或结果不可能为0,我们找num的二进制中为1的位数,以这一位为0还是1来分组,为0的在一组,为1的在一组,最后将两组数字分别再异或就得到了这两个数字

代码如下:

void FindTwoNum(int* nums,int len)
{

    int i = 0;
    int num = 0;
    for (i = 0; i < len; i++)
    {
        num ^= nums[i];
    }
    //分组
    int pos = 0;
    for (i = 0; i < 32; i++)
    {
        if (((num << i) & 1) == 1)
        {
            pos = i;//找出二进制为1的那一位的位置
        }
    }
    int num1 = 0;
    int num2 = 0;
    for (i = 0; i < len; i++)
    {
        if (((nums[i] << pos) & 1) == 1)
        {
            num1 ^= nums[i];
        }
        else
        {
            num2 ^= nums[i];
        }
    }
    printf("%d %d\n", num1, num2);
}

int main()
{
    int arr[] = { 1,2,3,4,5,1,2,3 };
    int sz = sizeof(arr) / sizeof(arr[0]);
    FindTwoNum(arr,sz);
    return 0;
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-24 15:22:34  更:2021-08-24 15:22:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/27 6:29:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计