C++学习路线之C++基础(三)——数组和函数

在(二)中学习了基本的运算符和程序流程结构,知道了if,switch等常用关键字的用法,在这篇文章主要学习数组和函数声明相关的知识。

四、数组

数组就是存放相同类型数据元素的集合。

特点1:数组中每个数据元素都是相同的数据类型

特点2:数组是由连续的内存位置组成的。

4.1一维数组

4.1.1一维数组定义方式

1.数据类型 数组名[数组长度];

2.数据类型 数组名[数组长度]={值1,值2};

3.数据类型 数组名[] = {值1,值2};

数组名指向数组在内存中的起始地址,可以通过sizeof关键字可以统计数组在内存中的长度

通过下标访问数据元素,数组下标从0开始。

一维数组案例一:五只小猪称体重

案例描述:在一个数组中记录了五只小猪的体重,int arr[5]={300,250,200,400,250},找到并打印最重的小猪。

#include<iostream>

using namespace std;

int main()
{
	int arr[5] = { 300,250,200,400,250 };
	int max = 0;
	for (int i = 0; i < 5; i++)
	{
		if (arr[i] > max)
		{
			max = arr[i];
		}
	}
	cout << "最重小猪体重为" << max << endl;
	return 0;
}

一维数组案例二:数组元素原地逆置

案例描述:{1,3,2,5,4}逆置为{4,5,2,3,1}

#include<iostream>

using namespace std;

int main()
{
	int arr[5] = { 1,3,2,5,4 };
	int temp = 0;
	for (int i = 0; i < (sizeof(arr) / sizeof(arr[0]))/2; i++)
	{
		temp = arr[i];
		arr[i] = arr[sizeof(arr) / sizeof(arr[0]) - 1 - i];
		arr[sizeof(arr) / sizeof(arr[0]) - 1 - i] = temp;
	}
	for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
	{
		cout << arr[i];
	}
	cout << endl;
	return 0;
}

可以用while循环实现,互换过程更加清晰

#include<iostream>

using namespace std;

int main()
{
	int arr[5] = { 1,3,2,5,4 };
	int temp = 0;
	int start = 0;
	int end = sizeof(arr) / sizeof(arr[0]) - 1;
	while (start <= end)
	{
		temp = arr[start];
		arr[start] = arr[end];
		arr[end] = temp;
		start++;
		end--;
	}
	for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
	{
		cout << arr[i]<<" ";
	}
	cout << endl;
	return 0;
}

一维数组案例三:冒泡排序

作用: 最常用的排序算法,对数组内元素进行排序
1.比较相邻的元素。如果第 一个比第二个大,就交换他们两个。

2.对每一对相邻元素做同样的工作,执行完毕后,找到第一个最大值.

3.重复以1 的少骤,每次比较次数-1,直到不需要比较,若某一次冒泡中,没有发生元素交换,则说明此时数组已经有序。

#include<iostream>

using namespace std;

int main()
{
	int arr[] = { 8,2,4,0,5,7,1,3,9 };
	int temp;
	int flag=0;
	for (int i = sizeof(arr) / sizeof(arr[0])-1; i > 0; i--)
	{
		flag = 0;
		for (int j = 0; j < i; j++)
		{
			if (arr[j] > arr[j + 1])//需要交换
			{
				temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
				flag = 1;
			}
		}
		if (0 == flag)
		{
			break;
		}
	}
	for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
	{
		cout << arr[i] << " ";
	}
	cout << endl;
	return 0;
}

4.2、二维数组

定义方式:

1.数据类型 数组名[ 行 ][ 数 ];
2.数据类型 数组名[ 行数 ][ 列 ] ={{数据1,数据2},{数据1,数据2}}
3.数据类型 数组名[ 行数 ][ 列数 ]={数据1,数据2,数据,数据4}
4.数据类型 数组名[ ][ 列数]={数据1,数据2,数据,数据4}

上面第二种更加直观,使用更方便。

二维数组名称的作用:查看二维数组所占用内存空间,获取二维数组首地址

在C++中,二维数组默认按行优先存储

//二维数组行数和列数统计
 int arr[2][3];
cout << "二维数组行数为"<< sizeof(arr)/sizeof(arr[0])<<endl;
cout << "二维数组列数为"<< sizeof(arr[0])/sizeof(arr[0][0])<<endl;

二维数组应用案例:考试成绩统计

语文数学英语
张三100100100
李四9050100
王五607080

分别输出三名同学的总成绩

#include<iostream>

using namespace std;

int main()
{
	int scores[3][3] = {
		{100,100,100},
		{90,50,100},
		{60,70,80}
	};
	int sum = 0;
	for (int i = 0; i < 3; i++)
	{
		sum = 0;
		for (int j = 0; j < 3; j++)
		{
			sum += scores[i][j];
		}
		cout << "第" << i + 1 << "个人的成绩是:" << sum << endl;
	}
	return 0;
}

五、函数

5.1概述和定义

作用:将一段经常使用的代码封装起来,减少代码重复量。一个较大的程序,一般分为若干个程序块,每个模块实现特点的功能。

函数的定义一般主要有5个步藏:
1、返回值类型
2、函数名
3、参数列表
4、函数体语句
5、return 表达式

语法:

返回值类型 函数名(参数列表)

{

        函数体语句;

        return 表示;

}

函数定义举例:实现一个加法函数,传入两个整型,返回他们的和

int add(int num1,int num2)
{
    int sum = num1 + num2;
    return sum;
}

5.2、函数的调用

使用定义好的函数。

#include<iostream>

using namespace std;

int add(int num1, int num2)//num1和num2是形式参数
{
    int sum = num1 + num2;
    return sum;
}

int main()
{
    int a = 10;
    int b = 20;
    int c = add(a, b);//a和b为实际参数
    cout << "a + b = " << c << endl;
    return 0;
}

5.3值传递

值传递:函数调用时是将实参的值传递给形参

值传递时,如果形参发生改变,不会影响实参。

#include<iostream>

using namespace std;

//定义函数,进行两个数字交换
void swap(int num1, int num2)
{
	int temp;
	cout << "交换前: " << endl;
	cout << "num1=" << num1 << endl;
	cout << "num2=" << num2 << endl;
	temp = num1;
	num1 = num2;
	num2 = temp;
	cout << "交换后: " << endl;
	cout << "num1=" << num1 << endl;
	cout << "num2=" << num2 << endl;
	return;//返回值不需要时可以不写return
}

int main()
{
	int a = 10, b = 20;
	cout << "交换前: " << endl;
	cout << "a=" << a << endl;
	cout << "b=" << b << endl;
	swap(a, b);
	cout << "交换后: " << endl;
	cout << "a=" << a << endl;
	cout << "b=" << b << endl;
}

5.4、函数的常见样式:

无参数,无返回值

有参数,无返回值

无参数,有返回值

有参数,有返回值

 5.5、函数的声明

作用:告诉编译器函数的存在,以及如何使用函数

#include<iostream>

using namespace std;

int max(int a, int b);

int main()
{
	int a = 10;
	int b = 20;
	cout << "a和b较大值是:" << max(a, b) << endl;
}

int max(int a, int b)
{
	return a > b ? a : b;
}

通过函数声明,可以让函数的作用域作用于函数声明之后,而不是只能作用于函数定义之后

函数声明可以有多次,定义只能有一次。

 5.6、函数的分文件编写

1、创建.h后缀名的头文件

2、创建.cpp后缀名的源文件

3、在头文件中写函数的声明

4、在源文件中写函数的定义

 头文件:

#pragma once
#include<iostream>

using namespace std;

void swap(int a, int b);

swap函数源文件

#include"swap.h"

void swap(int a, int b)
{
	int temp = a;
	a = b;
	b = temp;
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	return;
}

main文件:

#include"swap.h"

int main()
{
	int a = 10, b = 20;
	swap(a, b);
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值