C/C++中的一维数组和相关例题应用

一、数组的定义

1.数组是包含给定类型的一组数据,并将这些数据依次存储在连续的内存空间中。每个独立的数据被称为数组的元素(element)。元素的类型可以是任意类型。

2.数组本身也是一个结构,其类型由它的元素类型延伸而来。更具体地说,数组的类型由元素的类型和数量所决定

3.如果一个数组的元素是 T 类型,那么该数组就称为 “ T 数组 ”。例如,如果元素类型为 int ,那么该数组的类型就是 “ int 数组 ”。然而,int 数组类型是不完整的类型,除非指定了数组元素的数量。如果一个 int 数组有 16 个元素,那么它就是一个完整的对象类型,即 “ 16 个 int 元素数组 ”。

二、数组地址

1.数组在内存中的地址是连续的

2.C++将数组名解释为数组首个元素的地址

      数组名为常量,不能更改,例如 int类型数组a使用a++ ×

      但指针值可以改变,int *p = a 可以使用p++

3.数组第0个元素的地址等价于数组收割元素的地址

4.数组第n个元素的地址:地址首个元素 +n

5.C++编译器将 数组名[下标] 解释为 *(数组首个地址 +  下标)

        '地址[下标]'        解释为 '(地址 + 下标)'

三、数组表示法与指针表示法

1.数组表示法

形式为 ***数组名[下标]  ​***地址形式为 ***(类型)&数组名[下标]***

int a[5]={0,4,5,8,2};
for ( int i=0 ; i < 5 ; i++ ){
	std::cout << "a[i]=" << a[i] <<  "地址为" <<  (long long)&a[i] << std::endl;  //使用long long类型是方便计算
}
//运行结果(相差4是因为int类型为4个字节)
a[i]=0地址为880790205704
a[i]=4地址为880790205708
a[i]=5地址为880790205712
a[i]=8地址为880790205716
a[i]=2地址为880790205720

2.指针表示法

使用指针来表示数组地址,定义形式为 `*指针名 = 数组地址(例如a或者a[下标])`​ 


取值形式为 
*(指针名+下标)
​


*(指针名+下标)
地址形式为 
指针名+下标
​

指针名+下标
int a[5]={0,4,5,8,2};
int *p = a; //让指针指向数组首个元素的地址 
for ( int i=0 ; i < 5 ; i++ ){
	std::cout << "p=" << *(p+i) <<  "地址为" <<  (long long)(p+i) << std::endl;  //使用long long类型是方便计算
}
//运行结果(相差4是因为int类型为4个字节)
p=0地址为666805205224
p=4地址为666805205228
p=5地址为666805205232
p=8地址为666805205236
p=2地址为666805205240

四、例题

1.方程求解

#include<bits/stdc++.h>
using namespace std;
int main(){
    int a,b,c,x,y,count = 0;
    cin>>a>>b>>c;
    for(x=0;x<=1000;x++)
    {
        for(y=0;y<=1000;y++)
        {
            if(a*x+b*y == c)
            {
                count++;
            }
        }
    }
    cout<<count<<endl;
    return 0;
}

2.奇偶数分类输出

#include<iostream>
using namespace std;

int main()
{
    int n,a[40];
    cin>>n;
    for(int i=0; i<n ; i++)
    {
        cin>>a[i];
        if(a[i] % 2 != 0)cout<<" "<<a[i];
    }
    cout<<endl;
    for(int i=0; i<n ; i++)
    {
        cin>>a[i];
        if(a[i] % 2 == 0)cout<<" "<<a[i];
    }
    return 0;
}

3.求最值

#include <iostream>
using namespace std;
int  a[30];
int main(){
	int  n, min, max, i;
	cin>>n;
	for(i = 0; i < n; i++){
		cin >> a[i];
	}
	//通过打擂台的方式找到最小值
	max = min = a[0];
	for(i = 1; i < n ; i++){
		if(a[i] < min) min = a[i];
	}
	//通过打擂台的方式找到最大值
	for(i = 1; i < n; i++){
		if(a[i] > max) max = a[i];
	}
	cout << max << " " << min;
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值