首页 > 编程语言 >C++基础资料二

C++基础资料二

时间:2024-08-16 14:18:30浏览次数:7  
标签:arr int 元素 基础 C++ 资料 排序 部分 小数

C++等级考试资料二

考试内容:

  1. 选择题:进制转换、冒泡与选择排序、二分思想、链表与顺序表、二维数组初始化、函数阅读
  2. 编程题:字符串操作、质数判断、排序、最小公倍数、最大公约数、百钱百鸡问题

 

考试资料:

进制转换公式

1. 十进制转二进制

整数部分

  • 不断将十进制数除以2,记录余数,直到商为0,然后将余数逆序排列。

小数部分

  • 不断将小数部分乘以2,记录整数部分,直到小数部分为0或达到所需精度,然后将记录的整数部分顺序排列。

示例

  • 十进制数 10.625 转换为二进制:
  • 整数部分:10 -> 1010
  • 小数部分:0.625 -> 0.101
  • 结果:10.625 -> 1010.101

2. 二进制转十进制

整数部分

  • 将二进制数按位展开,每位乘以2的幂次方,然后求和。

小数部分

  • 将二进制小数按位展开,每位乘以2的负幂次方,然后求和。

示例

  • 二进制数 1010.101 转换为十进制:
  • 整数部分:1010 -> 1*2^3 + 0*2^2 + 1*2^1 + 0*2^0 -> 8 + 0 + 2 + 0 -> 10
  • 小数部分:0.101 -> 1*2^-1 + 0*2^-2 + 1*2^-3 -> 0.5 + 0 + 0.125 -> 0.625
  • 结果:1010.101 -> 10.625

3. 十进制转十六进制

整数部分

  • 不断将十进制数除以16,记录余数,直到商为0,然后将余数逆序排列。

小数部分

  • 不断将小数部分乘以16,记录整数部分,直到小数部分为0或达到所需精度,然后将记录的整数部分顺序排列。

示例

  • 十进制数 255.6875 转换为十六进制:
  • 整数部分:255 -> FF
  • 小数部分:0.6875 -> 0.B
  • 结果:255.6875 -> FF.B

4. 十六进制转十进制

整数部分

  • 将十六进制数按位展开,每位乘以16的幂次方,然后求和。

小数部分

  • 将十六进制小数按位展开,每位乘以16的负幂次方,然后求和。

示例

  • 十六进制数 FF.B 转换为十进制:
  • 整数部分:FF -> 15*16^1 + 15*16^0 -> 240 + 15 -> 255
  • 小数部分:0.B -> 11*16^-1 -> 0.6875
  • 结果:FF.B -> 255.6875
  • 整数部分:不断除以2,记录余数,逆序排列。
  • 小数部分:不断乘以2,记录整数部分,顺序排列。
  • 整数部分:按位展开,每位乘以2的幂次方求和。
  • 小数部分:按位展开,每位乘以2的负幂次方求和。
  • 整数部分:不断除以16,记录余数,逆序排列。
  • 小数部分:不断乘以16,记录整数部分,顺序排列。
  • 整数部分:按位展开,每位乘以16的幂次方求和。
  • 小数部分:按位展开,每位乘以16的负幂次方求和。

公式总结

十进制转二进制

二进制转十进制

十进制转十六进制

十六进制转十进制

 

冒泡排序和选择排序

冒泡排序

介绍:冒泡排序是一种简单的排序算法。它重复地遍历要排序的列表,比较相邻的元素并交换它们的位置,如果它们的顺序错误。这个过程会重复进行,直到没有需要交换的元素为止。排序方式:1. 从列表的第一个元素开始,依次比较相邻的两个元素。

  • 如果前一个元素大于后一个元素,则交换它们的位置。

3. 对每一对相邻元素重复上述步骤,直到列表末尾。

  • 重复步骤1-3,直到整个列表有序。

程序

 

 

 

#include <iostream>

using namespace std;

 

void bubbleSort(int arr[], int n) {

    for (int i = 0; i < n - 1; ++i) {

        for (int j = 0; j < n - i - 1; ++j) {

            if (arr[j] > arr[j + 1]) {

                // 交换 arr[j] 和 arr[j + 1]

                int temp = arr[j];

                arr[j] = arr[j + 1];

                arr[j + 1] = temp;

            }

        }

    }

}

 

int main() {

    int arr[] = {64, 34, 25, 12, 22, 11, 90};

    int n = sizeof(arr) / sizeof(arr[0]);

    bubbleSort(arr, n);

    cout << "Sorted array: \n";

    for (int i = 0; i < n; ++i) {

        cout << arr[i] << " ";

    }

    cout << endl;

    return 0;

}

 

选择排序

介绍:选择排序是一种简单直观的排序算法。它的工作原理是每次从未排序部分中选出最小(或最大)的元素,放到已排序部分的末尾。

排序方式

  1. 从列表中找到最小的元素,将其与列表的第一个元素交换位置
  2. 在剩下的未排序元素中继续寻找最小的元素,将其与列表的第二个元素交换位置。
  3. 重复上述步骤,直到整个列表有序。

 

 

 

 

 

 

 

 

程序

#include <iostream>

using namespace std;

 

void selectionSort(int arr[], int n) {

    for (int i = 0; i < n - 1; ++i) {

        // 找到未排序部分的最小元素

        int minIndex = i;

        for (int j = i + 1; j < n; ++j) {

            if (arr[j] < arr[minIndex]) {

                minIndex = j;

            }

        }

        // 交换最小元素和第i个元素

        int temp = arr[minIndex];

        arr[minIndex] = arr[i];

        arr[i] = temp;

    }

}

 

int main() {

    int arr[] = {64, 25, 12, 22, 11};

    int n = sizeof(arr) / sizeof(arr[0]);

    selectionSort(arr, n);

    cout << "Sorted array: \n";

    for (int i = 0; i < n; ++i) {

        cout << arr[i] << " ";

    }

    cout << endl;

    return 0;

}

总结

  • 冒泡排序:通过重复地比较和交换相邻元素来排序。每一轮比较后,最大的元素会“冒泡”到数组的末尾。
  • 选择排序:通过反复选择未排序部分中的最小元素并将其放在已排序部分的末尾来排序。

 

链表和顺序表

链表

介绍:链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。链表可以是单向链表、双向链表或循环链表。

特点

  • 动态大小:链表的大小可以动态调整,不需要预先分配固定大小的内存。
  • 插入和删除操作高效:在链表中插入和删除元素只需要修改指针,不需要移动其他元素。
  • 顺序访问:链表中的元素只能按顺序访问,不能通过索引直接访问。

 

顺序表

介绍:顺序表是一种线性数据结构,使用连续的内存空间存储数据。顺序表的元素可以通过索引直接访问。

特点

  • 固定大小:顺序表的大小在创建时确定,不能动态调整(除非使用动态数组)。
  • 插入和删除操作低效:在顺序表中插入和删除元素需要移动其他元素。
  • 随机访问:顺序表中的元素可以通过索引直接访问,访问速度快。

 

区别:

特性

链表

顺序表

内存分配

动态分配

连续内存分配

大小调整

动态调整

固定大小(除非使用动态数组)

插入和删除操作

高效(只需修改指针)

低效(需要移动其他元素)

访问方式

顺序访问(不能通过索引访问)

随机访问(可以通过索引访问)

内存利用率

可能有额外的指针开销

内存利用率高

适用场景

 频繁插入和删除操作

频繁访问和修改操作

总结

  • 链表:适用于需要频繁插入和删除操作的场景,具有动态大小和高效的插入删除操作,但访问速度较慢。
  • 顺序表:适用于需要频繁访问和修改操作的场景,具有快速的随机访问能力,但插入和删除操作较低效。

 

二维数组

介绍

二维数组是数组的数组,可以用来表示矩阵或表格数据。它是一个具有行和列的矩形数据结构,每个元素可以通过两个索引(行索引和列索引)来访问。

定义和初始化方式

1. 静态初始化

定义:在声明数组时直接赋值。

 

 

 

 

 

 

 

 

 

示例

#include <iostream>

using namespace std;

 

int main() {

    // 定义并初始化一个3x4的二维数组

    int arr[3][4] = {

        {1, 2, 3, 4},

        {5, 6, 7, 8},

        {9, 10, 11, 12}

    };

 

    // 打印二维数组

    for (int i = 0; i < 3; ++i) {

        for (int j = 0; j < 4; ++j) {

            cout << arr[i][j] << " ";

        }

        cout << endl;

    }

 

    return 0;

}

 
2. 部分初始化

定义:只初始化部分元素,未初始化的元素会被默认初始化为0。

示例

#include <iostream>

using namespace std;

 

int main() {

    // 定义并部分初始化一个3x4的二维数组

    int arr[3][4] = {

        {1, 2},

        {5, 6, 7}

    };

 

    // 打印二维数组

    for (int i = 0; i < 3; ++i) {

        for (int j = 0; j < 4; ++j) {

            cout << arr[i][j] << " ";

        }

        cout << endl;

    }

 

    return 0;

}

标签:arr,int,元素,基础,C++,资料,排序,部分,小数
From: https://www.cnblogs.com/jyssh/p/18362739

相关文章

  • 黑客入门教程(非常详细)从零基础入门到精通,看完这一篇就够了
    前言这篇文章没有什么套路。就是一套自学理论和方向,具体的需要配合网络黑白去学习。毕竟是有网络才会有黑白!有自学也有培训!1.打死也不要相信什么分分钟钟教你成为大黑阔的,各种包教包会的教程,就算打不死也不要去购买那些所谓的盗号软件之类的东西。2,我之前让你们在没有......
  • 【Three.JS零基础入门教程】第六篇:物体详解
     前期回顾:【Three.JS零基础入门教程】第一篇:搭建开发环境【Three.JS零基础入门教程】第二篇:起步案例【Three.JS零基础入门教程】第三篇:开发辅助【Three.JS零基础入门教程】第四篇:基础变换【Three.JS零基础入门教程】第五篇:项目规划下面将进一步详解介绍Threejs中的常用......
  • 【Three.JS零基础入门教程】第五篇:项目规划
     前期回顾:【Three.JS零基础入门教程】第一篇:搭建开发环境【Three.JS零基础入门教程】第二篇:起步案例【Three.JS零基础入门教程】第三篇:开发辅助【Three.JS零基础入门教程】第四篇:基础变换一个three.js的项目由这么几个部分组成场景物体灯光相机渲染器工具这里我们可以......
  • C++中的IO流
    目录1.C语言的输入与输出2.流是什么3.C++IO流标准IO流IO流的四个标志C++文件IO流4.stringstream的简单介绍1.C语言的输入与输出C语言中我们用到的最频繁的输入输出方式就是scanf()与printf()。scanf():从标准输入设备(键盘)读取数据,并将值存放在变量中。printf(......
  • C++之内存四区
    目录一、内存四区二、程序运行前三、程序运行后四、new操作符一、内存四区在计算机科学中,特别是在c或c++语言编程时,内存通常大致分为四个区域,而不同的区域存放的数据赋予不同的生命周期,给我们更大的灵活编程:代码区:存储程序的可执行代码(二进制代码),也就是程序编译后的......
  • SSM-国外鞋服代购平台-97782(免费领源码+开发文档)可做计算机毕业设计JAVA、PHP、爬虫、
    SSM国外鞋服代购平台摘 要随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,鞋服代购平台当然也不例外。代购平台是以实际运用为开发背景,运用软件工程原理和开发方法,采用Java技术构建的一个管理系统。整个开发过......
  • C++ string类型常用操作
    string类型操作字符串切割str.substr(索引,切割的个数) -> 返回字符串注意:第二个参数为切割的个数stringbuf="abcdefg";buf.substr(0,2);//结果为"ab"buf.substr(1,3);//结果为"bcd"字符串输入使用getline读入字符串可以保留字符串中的空格 getline(cin......
  • 【网络架构系列】区域医疗中心安全防护思路:从基础防护体系到专项需求应对
    一、区域医疗中心的定位二、区域医疗中心网络安全防护现状解析2.1中心建设政策解读2.1.1安全管理制度需严格执行2.1.2明确安全责任归属2.1.3体系化建设方案需覆盖安全生命全周期2.2中心建设痛点分析2.2.1区域中心整体防护......
  • 小学生教你微积分,用编程理解高数(python,C,C++)
    一、代码实现微分(实际上是导数,微分不用除dx):python代码:x=0dx=0.00001deff(x):y=2*xreturnyprint((f(x+dx)-f(x))/dx)C语言代码:#include<stdio.h>doublex=1;doubledx=0.00001;doublef(doublearg){doubley=2*arg;returny;}......
  • 计算机导论与程序设计基础限时测试二和作业二
    A : 最大子数组和题目描述给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。输入格式共2行数。第一行为数组长度n。对于测试点1-12:0<n≤1000对于测试点13-14:10000<n≤20000对于......