当前位置: 首页 > java >正文

L1 第9次课 数组进阶

课堂回顾

数组

数组就是一组数据,是由一组具有相同数据类型的变量组成的。
数组中元素的本质是变量。

数组的定义和初始化

数组元素下标 

数组中的元素是有顺序的,每个元素都有对应的下标。
数组下标是一个整数,范围是[0,长度-1]
语法格式:数组名[下标];

下标也可以是变量或者表达式

数组易错点

设置数组长度:
建议使用大于0的整数,不建议使用变量或变量表达式。

数组下标越界:
访问数组时,下标的取值要在已定义好的数组下标范围内。

遍历数组元素

练一练

 数组中插入元素

现有长度为7的数组,数组中已存储6个数据。编写程序:在下标为3的位置插入数据105,输出插入后数组中的元素。

数组指定位置插入元素的步骤

实现数组指定位置插入元素 

从最后一个元素开始移动的原因 

实现数组指定位置插入元素

#include <iostream>
using namespace std;int main(){//定义数组a进行初始化int a[7]={100,80,120,93,134,99};//使用for循环,将下标5~3的数组元素依次向后移动一位for(int i=5;i>=3;i--){a[i+1]=a[i];}//将要插入的数据保存到指定位置a[3]=105;//输出查看数组中所有元素for(int i=0;i<=6;i++){cout<<a[i]<<" ";}return 0;
}
#include <iostream>
using namespace std;int main(){//创建长度为10的数组a,进行初始化int a[10]={100,80,120,93,134,99,65,105,124};//使用for循环,将下标8~2的数组元素依次向后移动一位for(int i=8;i>=2;i--){a[i+1]=a[i];}//将要插入的数据保存到指定位置a[2]=90;//输出查看数组中所有元素for(int i=0;i<=9;i++){cout<<a[i]<<" ";}return 0;
}

删除数组中的元素

删除数组指定位置元素的步骤

#include <iostream>
using namespace std;
int main(){//定义数组a进行初始化int a[7]={100,80,120,105,93,134,99};//使用for循环将下标从3~6的元素依次前移一位for(int i=3;i<=6;i++){a[i-1]=a[i];}//输出数组中的元素for(int i=0;i<=5;i++){cout<<a[i]<<" ";}return 0;
}

const关键字

 

定义常量的同时需要进行赋值!

常量表示数组长度

 常量的好处

课堂训练

3509 中间同学的身高

描述

根据学生学号顺序(学号从1开始),输入 n 名学生的身高(身高无重复),找出其中最高和最矮的同学。按照键盘输入顺序,输出最高与最矮同学之间的所有学生的学号与身高。
【说明】
1)身高最高和最矮的同学不相邻
2)身高最高同学排在最矮同学的前面

输入描述

一行一个正整数 n,代表学生人数。
一行 n 个正整数,代表学生身高,数字之间使用空格分隔。

输出描述

多行,每行两个正整数,分别代表学生学号和其对应的身高,数值之间使用空格分隔。

样例输入 1 

8
112 116 160 154 144 111 159 137

样例输出 1 

4 154
5 144

提示

数据范围与提示

5≤n≤100,110≤身高≤200

中间同学的身高
//#include<bits/stdc++.h>//万能头文件
//using namespace std;
//int main(){
//	int n,a[105]={};//创建数组,尽可能放大一点,避免数组越界
//	
//	cin>>n;
//	for(int i=1;i<=n;i++){//输入数组数据
//		cin>>a[i];
//		
//	}
//	int maxi=1,mini=1;//定义最大值、最小值的下标
//	for(int i=1;i<=n;i++){
//		if(a[maxi]<a[i]){//找最大值
//			maxi=i;
//		}
//	}
//	for(int i=1;i<=n;i++){
//		if(a[mini]>a[i]){//找最小值
//			mini=i;
//		}
//		
//	}
//	for(int i=maxi+1;i<mini;i++){//输出最大和最小值之间的所有元素
//		cout<<i<<" "<<a[i]<<endl;
//		
//	}
//
//		return 0;
//}
//中间同学的身高
#include<bits/stdc++.h>//万能头文件
using namespace std;
int main(){int n,a[105]={};//创建数组,尽可能放大一点,避免数组越界cin>>n;int maxi=1,mini=1;//定义最大值、最小值的下标for(int i=1;i<=n;i++){cin>>a[i];//输入元素if(a[maxi]<a[i]){//找最大值maxi=i;}if(a[mini]>a[i]){//找最小值mini=i;}}for(int i=maxi+1;i<mini;i++){//输出最大和最小值之间的所有元素cout<<i<<" "<<a[i]<<endl;}return 0;
}

3510 找出谁是第二高

描述

根据学生学号顺序(学号从1开始),输入n名学生的身高(身高无重复),找出其中身高第二高的同学。输出身高第二高的学生身高以及他的学号。

输入描述

一行一个正整数 n,代表学生人数。
一行 n 个正整数,代表学生身高h,数字之间使用空格分隔。

输出描述

一行两个正整数,代表第二高同学的学号,以及他的身高。内容之间使用空格间隔。

样例输入 1 

8
110 116 144 134 160 105 159 137 

样例输出 1 

7 159

提示

数据范围与提示

5≤n≤100,110≤h≤200

//找第二大的数
#include<bits/stdc++.h>//万能头文件
using namespace std;
int main(){int n,a[105]={};//创建数组,尽可能放大一点,避免数组越界cin>>n;int maxi=1,mini=1;//定义最大值、最小值的下标for(int i=1;i<=n;i++){cin>>a[i];//输入元素if(a[maxi]<a[i]){//找最大值maxi=i;}}a[maxi]=1;for(int i=1;i<=n;i++){cin>>a[i];//输入元素if(a[maxi]<a[i]){//找最大值maxi=i;}}
cout<<maxi<<" "<<a[maxi];return 0;
}
#include <iostream>
using namespace std;int main(){//接收输入的学生人数int n;cin>>n;//第一轮找出身高最高的同学,他的身高及学号int h[101]={};int maxi=1;for(int i=1;i<=n;i++){cin>>h[i];if(h[maxi]<h[i])maxi=i;}//第二轮找到第二高的同学,他的身高及学号int twoi=1;for(int i=1;i<=n;i++){if(i==maxi) continue;if(h[twoi]<h[i])twoi=i;}//输出cout<<twoi<<" "<<h[twoi];return 0;
}

3511 分数查询程序

描述

某次考试成绩出来以后,考生想知道自己成绩排名情况,同分数采用并列排名占用名次的规则。
请编写一个分数查询程序,考生输入分数,即可知道自己的排名及同分数的人有多少。

输入描述

第一行,一个正整数 n,表示考生人数。
第二行,n 个正整数,表示每位考生分数,分数之间使用空格分隔。
第三行,一个正整数 x,表示考生要查询的分数。

输出描述

两个正整数,分别代表他的排名、与他同分的人数,中间用空格隔开。

样例输入 1 

10
88 99 98 97 92 100 82 99 78 99 
99 

样例输出 1 

2 3

提示

数据范围与提示

1≤n≤100,1≤分数≤100,1≤x≤100

#include <iostream>
using namespace std;
int main(){//接收考生人数int n;cin>>n;//保存每名考生的分数int s[100]={};for(int i=0;i<n;i++)cin>>s[i];//接收输入的要查询的分数int x;cin>>x;int h=1;//假设x是第一名int cnt=0;//保存同分数人数for(int i=0;i<n;i++){if(s[i]>x)h++;if(s[i]==x)cnt++;}//输出名次和同分数的人cout<<h<<" "<<cnt;return 0;
}

3512 最大的字符

描述

编写程序:输入 n 个大小写字母(输入字母无重复),找出其中ASCII码最大的字母,在该字母前插入字符’0’作为标志。输出插入操作后数组中所有的字符。

输入描述

一行一个正整数 n,代表大小写字母的个数。
一行 n 个大小写字母,字母之间使用一个空格分隔。

输出描述

一行 n+1 个字符,插入操作后数组中所有的字符,字符之间使用空格分隔。

样例输入 1 

10
d b S C n e Q L a R

样例输出 1 

d b S C 0 n e Q L a R

提示

数据范围与提示

1≤n≤52

#include <iostream>
using namespace std;
int main(){//输入字符数量int n;cin>>n;//循环输入大小写字母,并找出其中最大的字符char c[53]={0};int maxi=0;for(int i=0;i<n;i++){cin>>c[i];if(c[maxi]<c[i])maxi=i;}//在最大字符前插入字符0for(int i=n-1;i>=maxi;i--){c[i+1]=c[i];}c[maxi]='0';//输出插入操作后数组中所有的字符for(int i=0;i<=n;i++){cout<<c[i]<<" ";}return 0;
}

3513 淘汰赛

描述

业余滑冰社团举办滑冰比赛,有 n 名选手参赛,编号为 1∼n。比赛中需要淘汰得分最低的选手。请编写程序:输入 n 名选手的得分(每个人得分不同),找出其中的最低分,将其删除。按照输入顺序,输出其余选手分数。

输入描述

一行一个正整数 n,代表参赛选手人数。
一行 n 个整数,代表每名选手得分,分数之间使用空格分隔。

输出描述

一行 n−1 个整数,代表剩余选手的分数,分数之间使用空格分隔。

样例输入 1 

10
99 80 44 78 86 82 96 60 73 58

样例输出 1 

99 80 78 86 82 96 60 73 58

提示

数据范围与提示

5≤n≤50,0≤分数≤100

#include <iostream>
using namespace std;
int main(){//输入选手人数int n;cin>>n;//循环输入每名选手分数,并寻找最低分和它的下标int a[51]={0};int mini=1;for(int i=1;i<=n;i++){cin>>a[i];if(a[mini]>a[i])mini=i;}//删除最低分for(int i=mini+1;i<=n;i++)a[i-1]=a[i];//输出剩余选手分数for(int i=1;i<=n-1;i++)cout<<a[i]<<" ";return 0;
}

3129 邮件分类

描述

我国的邮政编码采用四级六位数编码结构。前两位数字表示省/直辖市/自治区;第三位数字表示邮区,第四位数字表示县(市),最后两位数字表示投递局。例如北京的邮政编码的前两位数字为10,上海为20,天津为30。 童童有来自北京、上海、天津三个城市的朋友写来的n封信件,现将这些信件按北京、上海、天津的顺序分类输出,相同城市的信件按原序输出。

输入描述

共两行,第一行有一个整数n(0≤n≤10000),表示信件的数量;第二行是n封信件的邮政编码,数与数之间以空格隔开。

输出描述

Beijing
北京地区的信件邮政编码,以空格隔开,如果没有则空着;
Shanghai
上海地区的信件邮政编码,以空格隔开,如果没有则空着;
Tianjin
天津地区的信件邮政编码,以空格隔开,如果没有则空着;

样例输入 1 

4
101400 200030 102100 101300

样例输出 1 

Beijing
101400 102100 101300
Shanghai
200030
Tianjin

样例输入 2 

6
300017 201100 201200 101404 100031 100034

样例输出 2 

Beijing
101404 100031 100034
Shanghai
201100 201200
Tianjin
300017
#include <iostream>
using namespace std;int main(){// 创建三个数组用于存储北京,上海,天津的邮件const int N = 10000;int a[N] = {};int b[N] = {};int c[N] = {};int n;cin>>n;// 邮政编码,六位数int x;int a_cnt=0,b_cnt=0,c_cnt=0;//循环接收,并判断是哪个城市的邮件for(int i=0;i<n;i++){cin>>x;switch (x/10000) {case 10:a[a_cnt]=x;a_cnt++;break;case 20:b[b_cnt]=x;b_cnt++;break;case 30:c[c_cnt]=x;c_cnt++;break;}}//输出cout<<"Beijing"<<endl;for(int i=0;i<a_cnt;i++){cout<<a[i]<<" ";}cout<<endl<<"Shanghai"<<endl;for(int i=0;i<b_cnt;i++){cout<<b[i]<<" ";}cout<<endl<<"Tianjin"<<endl;for(int i=0;i<c_cnt;i++){cout<<c[i]<<" ";}return 0;
}

课后作业

 3130 童程好声音

描述

童程学院举办"好声音选拔赛",有n名学生报名参赛,编号为1~n。已知每名学生的最终得分(每名学生最终得分不同)。请编写程序:输入n名学生的最终得分,输出最高分与最低分,以及获得最高分和最低分同学的编号。

输入描述

一行一个正整数n,代表学生人数 (5≤n≤100);
一行n个整数,代表每名学生的最终得分,分数之间使用一个空格分隔(0≤分数≤100)。

输出描述

一行两个整数,代表最高分数,以及该同学对应的编号;
一行两个整数,代表最低分数,以及该同学对应的编号。

样例输入 1 

10
98 90 88 87 79 92 91 83 77 68

样例输出 1 

98 1
68 10
#include <iostream>
using namespace std;
int main() {//童程好声音int n;cin >> n;int s[101] = {0};for (int i = 1; i <= n; i++) {cin >> s[i];}int max = s[1], maxi = 1;int min = s[1], mini = 1;for (int i = 2; i <= n; i++) {if (s[i] > max) {max = s[i];maxi = i;}if (s[i] < min) {min = s[i];mini = i;}}cout << max << ' ' << maxi << endl;cout << min << ' ' << mini;return 0;
}

http://www.xdnf.cn/news/5468.html

相关文章:

  • 大数据从专家到小白
  • MCP 通信机制:stdio vs SSE
  • 项目过程中使用vant组件使用踩坑记录
  • 【Bootstrap V4系列】学习入门教程之 组件-媒体对象(Media object)
  • Nginx的增强与可视化!OpenResty Manager - 现代化UI+高性能反向代理+安全防护
  • 无人甘蔗小车履带式底盘行走系统的研究
  • 语音合成之十三 中文文本归一化在现代语音合成系统中的应用与实践
  • 【Java学习笔记】instanceof操作符
  • 隐式/显式类型转换?编程语言的类型转换?其它类型转换成数值类型?其它类型转换成字符串?类型转换?
  • 【和春笋一起学C++】数组名作为函数参数实例
  • STM32f103 标准库 零基础学习之按键点灯(不涉及中断)
  • vim配置代码文档格式化
  • Http2多路复用的静态表和动态表
  • CSS专题之自定义属性
  • 记录学习《手动学习深度学习》这本书的笔记(十一)
  • Docker:安装配置教程(最新版本)
  • 元组类型的特性与应用场景:深入理解元组在 TypeScript 中的使用
  • Python训练营打卡DAY22
  • LVGL(lv_label实战)
  • 《设计模式之禅》笔记
  • 使用PHP对接印度股票市场API
  • AARRR用户增长模型(海盗指标)详解
  • C/C++跳动的爱心
  • 云计算-容器云-KubeVirt 运维
  • 【Tools】Visual Studio使用经验介绍(包括基本功能、远程调试、引入第三方库等等)
  • 深入理解 Pinia:状态管理的利器
  • [思维模式-29]:《本质思考力》-9- 两种相反的构建与解构系统的思维模式:①自顶向下的规划、分解、牵引;②自底向上的堆叠、聚合。
  • 【stata代码】地方政府驱动企业参与乡村振兴的机制——乡村振兴注意力视角的分析
  • 数据可视化大屏——智慧社区内网比对平台
  • 基于SpringBoot的抽奖系统测试报告