第五天上手VS2017 利用数组处理批量数据

用数组处理批量数据

含义:数组是一组有序数据的集合,数组中数据的排列是有一定规律的

关于一维数组

定义一维数组
类型符 数组名【常量表达式】
说明:
1)int a[10]定义了一个整型数组,数组名为a,数组中有10个元素,注意下角标从0开始,即这个数组中不存在数组元素a【10】;
2)注意C语言中不允许对数组的大小做动态定义,int a[n] 是非法的

引用一维数组
注意只能引用数组元素而不能一次性调用整个数组全部元素的值
引用方法:数组名【下标】

#include<stdio.h>
int main()
{
	int i, a[10];
	for (i = 0; i <= 9; i++)
		a[i] = i;
	for (i = 9; i >= 0; i--)
		printf("%d ", a[i]);
	putchar('\n');
	system("pause");
	return 0;
}

在这里插入图片描述
一维数组的初始化
(1)在定义数组时对全部数组元素赋予初值
int a[10]={0,1,2,3,4,5,6,7,8,9};
(2) 也可以只给数组中的一部分的元素赋值:
int a[10]={0,1,2,3,4}
数组中有10个元素,花括号里却只有5个初值,表示只给前面五个元素赋初值,系统会自动给后五个元素赋初值为0;
(3)在对全部数组元素赋初值时,由于数据的个数已经确定,可以不指定数组长度
a[5]={1,2,3,4,5}等价于a[]={1,2,3,4,5}

重要应用:起泡排序法
思想:大数沉底,小数起泡;每次将相邻的两个数比较,小数调到前头,看上去好像是小数浮起
过程分析:若有6个数:9,8,5,4,2,0易得一共需要比较六轮,第一轮需要排第一个数9的位置,9与8比,大数9下沉,小数8浮起,接着9和5比,以此类推,确定9的定位需要比较5次,确定完5的位置后就对剩下的五个数字排位,一次确定8,5,4,2,0的位置
注意:如果有n个数,则需要进行n-1轮比较,又因为在第一轮中要进行n-1次比较,则在进行第j轮时要进行n-j次比较

示例:对任意输入的10个数字按从小到大的顺序排列

#include<stdio.h>
int main()
{
	int a[10];
	int i, j, t;
	printf("please input 10 numbers:\n");
	for (i = 0; i < 10; i++)
		scanf_s("%d", &a[i]);
	printf("\n");
	for (j = 0; j < 9; j++)//进行9次循环,实现9次比较
	{
		for (i = 0; i < 9 - j; i++)//在每一次都要n-j次比较
		{
			if (a[i] > a[i + 1])//将相邻的两个数进行比较
			{
				t = a[i];
				a[i] = a[i + 1];
				a[i + 1] = t;
			}
		}
	}
	printf("the sorted numbers numbers are as follows:\n");
	for (i = 0; i < 10; i++)
		printf("%d ", a[i]);
	putchar('\n');
	system("pause");
	return 0;
}

在这里插入图片描述

二维数组

定义二维数组
类型说明符 数组名【常量表达式1】【常量表达式2】
常量表达式1表示的是第一维下标的长度;
常量表达式2表示的是第二维下标的长度
例 :int a[3] [4]声明了一个3行4列的数组
,可以视为三个一维数组a[0][];a[1][];a[2][];也可以视为4个一维数组a[][0];a[][1];a[]][2];a[]][3];
实际上与一维数组是触类旁通的;
引用二维数组的元素

二维数组的初始化
1)分行给二维数组赋初值:
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
这种赋值的方法很直观,把第一个花括号中的内容赋值给第一行元素,以此类推;
2)也可以将所有数据都写在一个大括号里
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12,}系统会默认按数组元素在内存中的排列顺序对各种元素赋初值
3)也可以仅仅对二维数组中的部分元素赋值,其他元素像一维数组一样会默认为0

示例:将一个二维数组行和列的元素互换,存到另一个二维数组中
a[2][3]={{1,2,3},{4,5,6}} 变到b[3][2]={{1,4},{2,5},{3,6}}

#include<stdio.h>
int main()
{
	int b[3][2], i, j;
	int a[2][3] = { {1,2,3},{4,5,6} };
	printf("the array a is:\n ");//输出a数组的元素
	for (i = 0; i <= 1; i++)//处理a数组中一行的各元素
	{
		for (j = 0; j <= 2; j++)//处理a数组中一列的各元素
		{
			printf("%5d ", a[i][j]);
			b[j][i] = a[i][j];//将a数组中各元素的值赋给b数组的相应元素
		}
		printf("\n");//这个很关键,保证这一行只有三个元素,也是很巧妙的
	}
	printf("the array b is :\n");//输出b数组的元素·
	for (i = 0; i <= 2; i++)
	{
		for (j = 0; j <= 1; j++)
			printf("%5d ", b[i][j]);//这个地方for语句中只有一行,我们就不需要加大括号了
			printf("\n");//这个设定很关键,保证输出的是一个矩阵而非数组,这个换行就能保证每一行仅有两个元素
	}
	putchar('\n');
	system("pause");
	return 0;
}

在这里插入图片描述
重要应用引入:打擂算法
打擂思路:先找出任意一个人在台上,第二个人上去与他比武,胜者留在台上,以后,每一个人都是与当时留在台上的那个人比武,知道所有人都上台比过为止

示例:有一个3*4的矩阵,要求编程求出其中最大的元素的值以及其所在的行号与列号

#include<stdio.h>
int main()
{
	int i, j, row = 0, colum = 0, max;
	int a[3][4] = { {1,2,3,4},{9,8,7,6},{-10,10,-5,2} };
	max = a[0][0];//先暂时认为a[0][0]是最大值;
	for (i = 0; i <= 2; i++)
	{
		for (j = 0; j <= 3; j++)
		{
			if (a[i][j] > max)//如果某元素大于max,就让该元素取代max的原值
			{
				max = a[i][j];
				row = i;//记下此元素的行号和列号;
				colum = j;
			}
		}
	}
	printf("max=%d\nrow=%d\ncolum=%d\n", max, row, colum);
	putchar('\n');
	system("pause");
	return 0;
}

在这里插入图片描述

应用举例:班级竞选班长,共有三个候选人,输入参加选举的人数以及每个人选举的内容,输出三个候选人最终得票数以及无效选票数

#include<stdio.h>
int main()
{
	int i, v1 = 0, v2 = 0, v3 = 0,v0=0, n,a[50];
	printf("please input the number of electorate:\n");//输入参加选举的人数
	scanf_s("%d", &n);
	printf("please input the number you vote:\n");//输入每个人所选的人
	for (i = 0; i < n; i++)
		scanf_s("%d", &a[i]);
		for (i = 0; i < n; i++)
		{
			if (a[i] == 1)//统计一号候选人的票数
				v1++;
			else if (a[i] == 2)//统计二号候选人的票数
				v2++;
			else if (a[i] == 3)//统计三号候选人的票数
				v3++;
			else
				v0++;//统计无效票数
		}
	printf("the result are as follows:\n");
	printf("candidate1:%d\ncandidate2:%d\ncandidate3;%d\nnouser:%d\n", v1, v2, v3, v0);//将统计结果输出
	putchar('\n');
	system("pause");
	return 0;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值