热门标签 | 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;
}

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



推荐阅读
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 本文介绍了多因子选股模型在实际中的构建步骤,包括风险源分析、因子筛选和体系构建,并进行了模拟实证回测。在风险源分析中,从宏观、行业、公司和特殊因素四个角度分析了影响资产价格的因素。具体包括宏观经济运行和宏经济政策对证券市场的影响,以及行业类型、行业生命周期和行业政策对股票价格的影响。 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
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社区 版权所有