热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C++语言入门:数组的基本知识和应用领域

本文介绍了C++语言的基本知识和应用领域,包括C++语言与Python语言的区别、C++语言的结构化特点、关键字和控制语句的使用、运算符的种类和表达式的灵活性、各种数据类型的运算以及指针概念的引入。同时,还探讨了C++语言在代码效率方面的优势和与汇编语言的比较。对于想要学习C++语言的初学者来说,本文提供了一个简洁而全面的入门指南。

无论是C++还是Python都只是一门编程语言,是语言最起码要能看懂,不需要精通,就如你会说话,却不一定是演讲家一样~


01

Python和C ++有着根本的区别,最大的区别是C ++是静态类型的,而Python是动态类型的。Python是原生支持面向对象范式的语言,C不是。它们有各自的应用领域,没有孰强孰弱,两者结合一下看能是极好的,

C++有它的特点,结构化语言的显著特点是代码及数据的分隔化,程序的各个部分除了必要的信息交流外彼此独立,这种结构化方式可使程序层次清晰,便于使用、维护以及调试。

C++语言一共只有32个关键字和9种控制语句,程序书写自由。它把高级语言的基本结构和语句与低级语言的实用性结合起来,既具有高级语言的功能,又具有低级语言的很多特性,C++语言可以像汇编语言一样对位、字节和地址进行操作,C++语言在代码效率方面可以和汇编语言相媲美,一般只比汇编程序生成的目标代码效率低10-20% 。

C++语言的运算符包含的范围很广泛,共有种 34 个运算符。运用这些运算符可构成简洁而功能强大的表达式,表达式的类型灵活多样,可以实现在其它高级语言中难以实现的运算。

C++语言的数据类型有:整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等,能用来实现各种复杂的数据类型的运算。并引入了指针概念,使程序效率更高。 

看完K12的信息技术课本你会觉得学编程,C基础还是应该普及一下。大多数人印象中小学、初中没学过编程,是因为不是没有是没学。


02

每次都说些废话,只是想更多了解它。

计算机运算速度很快,一瞬间就可以处理成千上万的数据。前面例子基本都是读取一个数据后立刻对这些数据进行处理,然后再也用不到这些数据了。但有些时候我们需要将这些数据保存下来,便于再次使用。

比如比较几个数的大小,找出最大值和最小值,如果少了可以设立几个变量存储,但是如果要比较的是成千上万个数,你定义成千上万个变量是不是感觉有点傻?

还有在生活中,我们常常会用一个数字对应一个数字(也有可能是其他类型)来统计数据,比如学号对应成绩,日期对应事件等等,在C++中,就需要用到一个叫数组的数据容器。

数组不仅可以存储输入的数据,还能存下运算过程中的“半成品”甚至答案,是 C++ 中非常重要的一部分。

所谓数组,是有序的元素序列。

若将有限个类型相同的变量的集合命名,那么这个名称为数组名。

组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。

数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按无序的形式组织起来的一种形式。这些无序排列的同类数据元素的集合称为数组。

1、数组的声明
数组的声明与变量的声明类似,其格式用中文表示如下

数据类型 数组名字[数组大小];

例如想要声明一个"一个数字对应一个整数,共100个数"的数组a的代码如下:

int(数据类型) a[100](数组名字[数组大小]);

一个整数:数据类型-int

共100个数:数组大小-100,数组大小不能为变量

数组a:数组名字-a

比如下面代码,定义了一个整型数组nums,在C++11版本后对于数组的赋值"="可以省略。

int nums[] {1,2,3,4};


也可以这样:

int nums[4] = {1,2,3,4};


要注意的是大括号 { } 之间的值的数目不能大于我们在数组声明时在方括号 [ ] 中指定的元素数目。如果您省略掉了数组的大小,数组的大小则为初始化时元素的个数。

了解以下定义的含义:

int a[10];//未赋给初值的数组,每个元素的初值可能为随机数
int a[10]={1,2,3,4,5,6,7,8,9,10}
int a[10]={1,2,3,4,5}//仅对前五个元素赋予初值,从第六个元素开始,后面的元素均为0
int a[10]={}//仅写一个括号,这样所有的元素的初值都为0
double b[10];
char str[10];

2、再了解一个词:数组下标

如同变量一样,数组的运算只不过是在很多个大同小异的变量中挑出一些来运算而已,比如,我想要让a数组里的第3个元素的值变为1,就可以写成这样:

a[2]=1;

第3个元素为什么编号是2呢?是因为数组的编号(学名下标)是从0开始的,一直到(数组大小-1),在X数组里的第y个元素的代码表达式如下:

X‍‍[y-1];‍‍br

让a数组中的第i个元素赋值为a数组中的第i-1个元素与第i-2个元素之和的代码如下:

a[i-1]=a[i-2]+a[i-3];

一定要注意:a[i]代表的是第i+1个元素,不是第i个元素,下标不能大于等于数组大小,不能小于0,否则会导致数组越界,导致程序崩溃。比如下面的代码:

#include
using namespace std;
int main(){
  int a[3];
  a[-1]=0;//导致数组越界,其下标小于0
  a[1]=1;
  a[2]=2;
  a[3]=3;//导致数组越界,其下标大于等于数组大小
  return 0;
}

3、然后再了解一个词:遍历

所谓遍历,是指沿着某条搜索路线。这个很好理解。数组的遍历就是过一遍数组。熟悉下面代码的意思:

#include
using namespace std;
int main(){
  int a[5];
  for(int i=0;i<5;i++) cin>>a[i];//依次输入a[0],a[1]……a[4]
  for(int i=0;i<5;i++) cout<
  return 0;
}


03


了解了基本概念后来看本次的目标:遍历数据,记录最大最小值,打印输出最大最小值。

首先设置一数组,定义一组固定数据:

int nums[]{ 107, 117, 106, 105, 97, 111 };       
//int nums[] = { 107, 117, 106, 105, 97, 111  };   //两种方式均可   

然后遍历数组,记录最大值和最小值:

for(int i = 0; i <5; i++)
{
if(nums[i] > max)
{
max = nums[i]; //记录最大值
maxIndex = i ; //记录最大值的下标
}
if(nums[i]
{
min = nums[i]; //记录最小值
minIndex = i; //记录最小值的下标
}
}


下面是完整代码,利用利用了求数组的方式,

sizeof是一个操作符(operator),其作用是返回一个对象或类型所占的内存字节数,就是说它是用来描述一个对象占多少内存字节数的,所以它的数组大小应该是sizeof(arrayint)/sizeof(arrayint[0]),这样做的好处是可以让代码更人性化。

#include 
using namespace std;
int main()
{
    int nums[]={ 107, 117, 106, 105, 97, 111 };        //数组
int max = nums[0]; //最大值
int min = nums[0]; //最小值
int maxIndex = 0; //最大值的下标
    int minIndex = 0;                  //最小值的下标
int numsLen = sizeof(nums)/sizeof(int);
      //计算数组长度 
for(int i = 0; i
{
if(nums[i] > max)
{
max = nums[i]; //记录最大值
maxIndex = i ; //记录最大值的下标
}
if(nums[i]
{
min = nums[i]; //记录最小值
minIndex = i; //记录最小值的下标
      } 
    }
cout <<"最大值是" <
    cout << "最小值是" << min << "\t" <<"下标是"<< minIndex << endl ;
return 0;
}

运行结果:

04

最后简单提一下c++中的字符数组和字符串string。

C++中字符数组用char str[]可以用来表示一个字符串。数组的大小一定要大于字符串的长度,因为系统会自动补上一个’\0’作为字符串的结束标志,对于未初始化的也补’\0’。

关于字符串和字符数组后面还会提起,因为在应用中可能会多次的出现。要想今天说明白,估计~没有估计,不说了!!

#include
using namespace std;
int main()
{
char str[10] = "I am cool"; // 系统会自动补上'\0'空字符作为结束标志,,未有初始化的也补'\0'
//char str[9] = "I am cool"; // 出错 系统自动补上'\0' 此时字符数组长度不够
//char str[12] = "I am cool"; // 后面未有初始化的也补上'\0' 为 I am cool\0\0\0
if(str[9] == '\0')
{
cout <<"hello world!!" <<endl;
}
return 0;
}

    「您的每一个  对我们都是鼓励」



推荐阅读
  • 题面:P3178[HAOI2015]树上操作好像其他人都嫌这道题太容易了懒得讲,好吧那我讲。题解:第一个操作和第二个操作本质上是一样的&# ... [详细]
  • HDU 2537 键盘输入处理
    题目描述了一个名叫Pirates的男孩想要开发一款键盘输入软件,遇到了大小写字母判断的问题。本文提供了该问题的解决方案及实现方法。 ... [详细]
  • 深入解析 C++ 中的 String 和 Vector
    本文详细介绍了 C++ 编程语言中 String 和 Vector 的使用方法及特性,旨在帮助开发者更好地理解和应用这两个重要的容器。 ... [详细]
  • 想把一组chara[4096]的数组拷贝到shortb[6][256]中,尝试过用循环移位的方式,还用中间变量shortc[2048]的方式。得出的结论:1.移位方式效率最低2. ... [详细]
  • java datarow_DataSet  DataTable DataRow 深入浅出
    本篇文章适合有一定的基础的人去查看,最好学习过一定net编程基础在来查看此文章。1.概念DataSet是ADO.NET的中心概念。可以把DataSet当成内存中的数据 ... [详细]
  • Day4今天继续复习搞基础课,加油!树形DP每一个节点都分为选和不选两种状态,选为f[i,1],不选为f[i,0]&# ... [详细]
  • 个人博客:打开链接依赖倒置原则定义依赖倒置原则(DependenceInversionPrinciple,DIP)定义如下:Highlevelmo ... [详细]
  • 本文详细探讨了select和epoll两种I/O多路复用技术的内部实现原理,分析了它们在处理大量文件描述符时的性能差异,并通过具体示例代码展示了select的工作流程。 ... [详细]
  • Java连接MySQL数据库的方法及测试示例
    本文详细介绍了如何安装MySQL数据库,并通过Java编程语言实现与MySQL数据库的连接,包括环境搭建、数据库创建以及简单的查询操作。 ... [详细]
  • 设计一个算法,用于计算给定字符串中出现的不同ASCII字符数量。该任务将重点考察字符串处理、集合操作以及基础的输入输出技术。 ... [详细]
  • 编程解析:CF989C 花朵之雾 (构造算法)
    本文深入探讨了CF989C '花朵之雾'问题的构造算法,提供了详细的解题思路和代码实现。 ... [详细]
  • 本文回顾了作者在求职阿里和腾讯实习生过程中,从最初的迷茫到最后成功获得Offer的心路历程。文中不仅分享了个人的面试经历,还提供了宝贵的面试准备建议和技巧。 ... [详细]
  • 使用Matlab创建动态GIF动画
    动态GIF图可以有效增强数据表达的直观性和吸引力。本文将详细介绍如何利用Matlab软件生成动态GIF图,涵盖基本代码实现与高级应用技巧。 ... [详细]
  • 本文深入探讨了动态赋值的概念及其在编程实践中的应用,特别是通过Java代码示例来展示如何利用循环结构动态地为数组分配值。 ... [详细]
  • hlg_oj_1116_选美大赛这题是最长子序列,然后再求出路径就可以了。开始写的比较乱,用数组什么的,后来用了指针就好办了。现在把代码贴 ... [详细]
author-avatar
阵风阿斯顿
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有