【c++】-自学c++第四天

冒泡排序法-实现升序序列

#include<iostream>
using namespace std;
int main()
{
	int i = 0;
	int j = 0;
	int arr[] = { 4,2,8,0,5,7,1,3,9 };
	int temp = 0;
	cout << "排序前的元素顺序是" << endl;
	for (i = 0; i <= 9; i++)
	{
		cout << arr[i] << " "; //改写和插入,按ins健
	}
	cout << endl;
	for(i=0;i<9-1;i++)//9个元素总共需要排列这么多伦
	{
		for (int j = 0; j < 9 - i - 1; j++)//每轮当中对比=元素个数-当前轮数-1
		{
			if (arr[j + 1] < arr[j])//检测代码检测到基于堆栈的缓冲区溢出?
			{
				temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] =temp;
			}
		}
	}
	cout << "排序后的元素顺序是" << endl;
	for (i = 0; i <= 9; i++)
	{
		cout << arr[i] << " "; //改写和插入,按ins健
	}
	system("pause");
	return 0;
}
  1. 比较相邻元素,如果第一个比第二个大则将他们交换位置。
  2. 对每一位相邻元素进行比较得到最大值。
  3. 重复上面的步骤每次减一直到不需要比较。
  4. 在比较的次数中进行相邻元素的比较。

二维数组

利用嵌套循环进行打印。通过数组名查询首地址,统计占用内存空间的大小。行数除以一个元素得列数。

注:访问某一个元素的具体地址时应该:

cout<<"首个元素的地址是"<<(int)&arr[0][0];//必须加上个首地址符号。

二维数组应用案列-考试成绩的统计-三科之和

#include<iostream>//分别输出三名同学的总分
using namespace std;
int main()
{
	int arr1[] = { 100,100,100 };
	int arr2[] = { 90,50,100 };
	int arr3[] = { 60,70,80 };
	int sum2 = 0;
	int sum1 = 0;
	int sum3 = 0;
	for (int i = 0; i <= 3; i++)//在循环中定义数据类型在程序的其他地方使用许哟重新定义
	{
		
		sum1 += arr1[i];
		
		sum2 += arr2[i];
		
		sum3 += arr3[i];
	}
	cout << "张三同学的三科总成绩是:" << sum1 << endl;
	cout << "李四同学的三科总成绩是:" << sum2 << endl;
	cout << "王五同学的三科总成绩是:" <<  sum3 << endl;
	system("pause");//在输出的函数中不可以定义数据类型
	return 0;
}

注:为什么求不出他们的总成绩?

        答:因为下标超过数组下标范围导致数值出错。i<3

利用三维数组进行计算:

#include<iostream>
using namespace std;
int main()
{
	int arr[3][3] = { 100,100,100,90,50,90,60,70,80 };//命名规则当中为什么行和列的数组一定要命名列的下标而不是行的下标
	int i = 0;
	int j = 0;//利用嵌套循环打印多维数组的值
	int sum = 0;
	for (i = 0;i < 3; i++)
	{
		for (j = 0; j < 3; j++)
		{
			sum += arr[i];//无效,数组传的是地址吗?
			cout << "成绩和是:" <<sum<< endl;
		}
	}
	system("pause");
	return 0;
}//循环三次怎样打印他们不同人的不同成绩

注:运算结果错误,数组之间的传参问题,不可以直接进行相加。单位数组可以相加吗?

二维数组常见错误

  1. 数组定义时编译器不能确定数组的大小,遵循一个原则: 仅定义时(没有初始化)不能省略, 有初始化时可以省略高维。
  2. 在使用数组时,要防止数组下标超出边界。也就是说,必须确保下标是有效的值
  3. 数组传参无论是几维数组都不能全部传输,都是单一传输
#include<iostream>
using namespace std;
#include<string>//字符串头文件,可以输出中文英文
int main()
{
	int arr[3][3] = { 100,100,100,90,50,90,60,70,80 };//命名规则当中为什么行和列的数组一定要命名列的下标而不是行的下标
	int i = 0;
	int j = 0;//利用嵌套循环打印多维数组的值
	//string mane[] = {张三,李四,王五 };
	for (i = 0;i < 3; i++)//使用中文输入法时一定要注意标点符号,使用中文输入时会显示文本操作找不到运算符,文本后缀“澶”无效;未找到文文本运算符或文本运算符模板“operator “”""澶”
	{
		int sum = 0;
		for (j = 0; j < 3; j++)
		{
			sum += arr[i][j];//无效,数组传的是地址吗?
		}
		cout <<i<< "成绩和是:" << sum << endl;
	}
	system("pause");
	return 0;
}//循环三次怎样打印他们不同人的不同成绩-利用函数进行输出

//未找到文本运算符且输出不了string字符串数据类型

函数

作用:将一段经常用的函数封装起来,减少代码的重复量。较大的程序分为若干个模块。

函数的定义

  1. 返回值列表
  2. 函数名
  3. 参数列表
  4. 函数体语句
  5. return表达式

语法

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

{
        函数体语句

        return表达式

}

函数的调用

#include<iostream>
using namespace std;
int add(int num1, int num2)//形参-无真实数据
{
	int sum = num1 + num2;
	return sum;
}
int main()
{
	int a = 10;
	int b = 20;
	int c = add(a, b);//实参,当调用函数时实参传递给形参
	cout << "c=" << c << endl;
	system("pause");
	return 0;
}

函数-值传递

作用:调用时函数实参传递给形参,形参值改变时不会影响实参。

#include<iostream>
using namespace std;
void swap(int num1, int num2)
{
	cout << "交换前" << endl;
	cout << "num1=" << num1 << endl;
	cout << "num2=" << num2 << endl;

	int temp = num1;
	num1 = num2;
	num2 = temp;

	//return;//因为返回值是空,所以不用写0,或者这一行都不用写
	cout << "交换后" << endl;
	cout << "num1=" << num1 << endl;
	cout << "num2=" << num2 << endl;
}
int main()
{//当函数进行值传递时,函数的形参发生改变,并不会影响实参,实际参数不变
	int a = 10;
	int b = 20;
	cout << "a=" <<a<< endl;
	cout << "b=" << b << endl;
	swap(a, b);
	cout << "a=" << a << endl;
	cout << "b=" << b << endl;
	return 0;
}

如果函数不需要返回值时写void,return 后面不加数字

#include<iostream>
using namespace std;
void swap(int num1, int num2)
{
	cout << "交换前" << endl;
	cout << "num1=" << num1 << endl;
	cout << "num2=" << num2 << endl;

	int temp = num1;
	num1 = num2;
	num2 = temp;

	//return;//因为返回值是空,所以不用写0,或者这一行都不用写
	cout << "交换后" << endl;
	cout << "num1=" << num1 << endl;
	cout << "num2=" << num2 << endl;
}
int main()
{//当函数进行值传递时,函数的形参发生改变,并不会影响实参,实际参数不变
	int a = 10;
	int b = 20;
	cout << "a=" <<a<< endl;
	cout << "b=" << b << endl;
	swap(a, b);
	cout << "a=" << a << endl;
	cout << "b=" << b << endl;
	return 0;
}

函数常见形式

  1. 无参无反
void test1()
{
    cout<<"this is test01"<<endl;//形式参数的定义
}

int main()
{
    test1();//形式参数的调用
}

  1. 无参有反
int test03()//无参有反
{
    cout<<"this is test03"<<endl;
    return 100;
}

int main()
{
    int num1=test03()//利用一个参数接收返回值
cout<<"num1="<<num1<<endl;//所以返回值应该等于100
    return 0;
}
  1. 有参无反
void test2(int a)
{
    cout<<"this is test02 a="<<a<<endl;//形式参数的定义
}

int main()
{
    test2(100);//形式参数的调用
}
  1. 有参有反

函数的调用例子是有参有反。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值