栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++数组(简单练习)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++数组(简单练习)

目录

一、一维数组

1、五只小猪称体重

2、元素逆置

3、冒泡排序

二、二维数组

考试成绩统计


一、一维数组

1、五只小猪称体重

要求:

        现有五只小猪,体重分别为764,942,613,476,940。定义一个一维数组,存放五只小猪的体重,找出其中最重的小猪,并打印输出。

分析:

        1、首先按照题目的要求,我们需要定义一个一维数组,有三种方法可以定义一维数组,按照自己的习惯用哪一种都可以。

        2、两两比较小猪的体重,保留较大的值。

        在完成这一步骤时,我们可以认定一个最大值max,让max与数组中的值进行比较,并用较大值更新max。

        3、打印输出最大值。

代码:if语句实现比较

#include 
using namespace std;
int main()
{
    int arr[5] = {764,942,613,476,940};//定义体重数组
    int max = arr[0];//暂认定arr[0]为最大值
    for(int i = 1; i < 5; i++)//for语句实现循环比较
    {
        if(max < arr[i])//如果当前最大值比arr[i]小,则更新最大值
        {
            max = arr[i];
        }//如果当前最大值依然为较大值,则直接进行下一次比较
    }
    cout << "最重的小猪体重为:" << max << "KG" << endl;//打印输出
    system("pause");
    return 0;
}

运行结果:

代码:三目运算符实现比较

#include 
using namespace std;
int main()
{
    int arr[5] = {764,942,613,476,940};//定义体重数组
    int max = arr[0];//暂认定arr[0]为最大值
    for(int i = 1; i < 5; i++)//for语句实现循环比较
    {
        //三目运算符实现比较大小
        //当前最大值max > arr[i],则输出max的值;反之输出arr[i]的值
        max = max > arr[i] ? max : arr[i];
    }
    cout << "最重的小猪体重为:" << max << "KG" << endl;//打印输出
    system("pause");
    return 0;
}

运行结果:

 

2、元素逆置

理解:元素逆置,顾名思义就是将最后一个数与第一个数交换位置,倒数第二个数与正数第二个数交换位置······那么什么时候停止交换呢?我们将这组数据定义为arr[ ],第一个数为arr[0],第二个数为arr[1]······最后一个数为arr[i],如果这组数据为奇数个,那么到中间那个数时停止交换;如果一组数据为偶数个,那么当交换位置的两个数,第一个数的下标大于第二个数的下标时停止。例如:一个数组有6个元素,将这个数组逆置,当执行完arr[3]与arr[4]交换位置后停止,因为再往后执行arr[4]与arr[3]又将交换位置,此时会还原。

要求:有一个一维数组,arr[10] = {62,8,46,21,37,64,97,30,10,40};将其中的元素进行逆置,并打印输出。

分析:

        1、创建这个一维数组

        2、定义一个变量,用于中间过渡。

        3、分别定义两个变量start、end下标,用于表达要交换的元素,交换完成后变量start++,变量end--。直到start >= end时停止交换。

        4、打印输出逆置后的数组。

代码:

#include 
using namespace std;
int main()
{
    //1、创建一维数组
    int arr[10] = { 62,8,46,21,37,64,97,30,10,40 };
    cout << "逆置前为:";
    for (int i = 0; i < 10; i++)
    {
        cout << arr[i] << " ";
    }
    cout << endl;

    //2、定义变量temp,用于交换中过渡
    int temp = 0;

    //3、定义起始下标start,结束下标end
    int start = 0;
    int end = sizeof(arr) / sizeof(arr[0]) - 1;//用整个数组占用的内存空间 / 某个元素占用的内存空间,得到这个数组的元素个数。
                                               //最后要-1是因为,起始元素1的起始下标为0,中间是有差值在的,不能直接用个数代表下标。
                                               //这种方式定义结束下标,就算不知道元素个数也可以完成元素的逆置
                                        
    while (start < end)//起始下标 < 结束下标执行循环,否则退出。此时不需要考虑奇偶。
    {
        //4、元素逆置
        temp = arr[start];
        arr[start] = arr[end];
        arr[end] = temp;
        //5、下标更新
        start++;
        end--;
    }

    //6、打印输出
    cout << "逆置后为:";
    for (int i = 0; i < 10; i++)
    {
        cout << arr[i] << " ";
    }
    cout << endl;
    system("pause");
    return 0;
}

虽然用多一个变量来过渡的方式,代码比较长,但是重要的是要学习这种思想。

因为如果我们不用中间变量过渡,直接将arr[end]的值赋给arr[start],我们就没办法再把原始的arr[start]的值赋给arr[end]了,直接被覆盖了。

运行结果:

还有一种简单的方法实现元素逆置:直接倒序输出

#include 
using namespace std;
int main()
{
    int arr[] = { 45,78,23,49,10,69,72,67,91,83,64,76,26 };
    cout << "逆置前为:";

    //i < (sizeof(arr) / sizeof(arr[0])) 依然通过内存空间来确定循环的次数
    for (int i = 0; i < (sizeof(arr) / sizeof(arr[0])); i++)
    {
        cout << arr[i] << " " ;
    }
    cout << endl;

    cout << "逆置后为:";
    for (int i = 0; i < (sizeof(arr) / sizeof(arr[0])); i++)
    {
        //-1的意义与上面那个方法的-1意义一样
        //-i:直接实现倒序输出
        cout << arr[sizeof(arr) / sizeof(arr[0]) - 1 - i] << " ";
    }
    cout << endl;
    system("pause");
    return 0;
}

运行结果:

3、冒泡排序

用法:对一组数据进行排序。

例子:将数组{4,2,8,0,5,7,1,3,6,9}进行升序排序。

分析:

        1、比较相邻的元素。

        如果第一个比第二个大,就交换它们,一共比较8次。第一轮比较完成之后就会得到最大值9。

        2、重复步骤1,直到排序完成。

        第二轮比较时,因为已经找出最大数,此时不需要再将9加入比较,所以比较的元素-1,相应的比较次数也会-1;

        第三轮比较时,8、9已被找出,比较元素再-1,比较次数再-1。

        依此类推,直到按升序找出所有数,停止比较。

注意:

        排序总轮数 = 元素个数 - 1

        每轮对比次数 = 剩余元素个数 - 1

        剩余元素个数 = 元素个数 - 排序轮数

代码:

#include 
using namespace std;
int main()
{
    int arr[] = { 4,2,8,0,5,7,1,3,6,9,13,12,15,10,14,11 };
    cout << "排序前为:" ;
    for(int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
    {
        cout << arr[i] << " ";
    }
    cout << endl;

    
    for(int i = 0; i < sizeof(arr) / sizeof(arr[0]) - 1; i++)//排序轮数
    {
        for(int j = 0; j < sizeof(arr) / sizeof(arr[0]) - i - 1; j++)//每轮比较次数
        {
            if(arr[j] > arr[j+1])//如果是降序排列,> 改为 <
            {
                int temp = arr[j+1];//交换
                arr[j+1] = arr[j];
                arr[j] = temp;
            }
        }   
    }
    cout << "排序后为:" ;
    for(int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
    {
        cout << arr[i] << " ";
    }
    system("pause");
    return 0;
}

运行结果:

二、二维数组

考试成绩统计

有3名同学张三、李四、王五,在一次考试中的成绩如下,请分别输出三名同学的总成绩。

代码:

#include 
using namespace std;
int main()
{
    string name[3] = {"张三","李四","王五"};
	int arr[3][3] = { 100,100,100,90,50,100,60,70,80 };
	for (int i = 0; i < 3; i++)
	{
		int sum = 0;
		for (int j = 0; j < 3; j++)
		{
			cout << arr[i][j] << 't';
			sum += arr[i][j];
		}
		cout << name[i] <<"的总成绩为:" << sum << endl;
	}
	system("pause");
	return 0;
}

运行结果:

 

暑期编程PK赛 得CSDN机械键盘等精美礼品!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1015145.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号