如何把for循环的值放到string数组里_编程中常见的数组应用操作

9f8b0a16878a66cc61c818185faaecce.png

d3f7c5dcaaea038643f75dc468a817e3.png

数组的常见操作

尹成课程资料及演示AAAjiaoyuwang

在程序开发中,数组的应用非常广泛,灵活地使用数组对实际开发很重要。接下来,本节将针对数组的常见操作,如数组的遍历、最值的获取、数组的排序等,进行详细地讲解。

1.数组遍历

在操作数组时,经常需要依次访问数组中的每个元素,这种操作称作数组的遍历。接下来通过一个案例来学习一下如何使用for循环来遍历数组,如文件1所示。

文件1 Example22.java

1 public class Example22 {
2 public static void main(String[] args) {
3 int[] arr = { 1, 2, 3, 4, 5 }; // 定义数组
4 // 使用for循环遍历数组的元素
5 for (int i = 0; i < arr.length; i++) {
6 System.out.println(arr[i]); // 通过索引访问元素
7 }
8 }
9 }

运行结果如图1所示。

cc3e8dc610aa45ae09dff5e9b856c49e.png

图1 运行结果

文件1中,定义了一个长度为5的数组arr,数组角标的取值范围为0~4。由于for循环中定义的变量i的值在循环过程中为0~4,因此可以作为索引,依次去访问数组中的元素,并将元素的值打印出来。

2.数组最值

在操作数组时,经常需要获取数组中元素的最值。接下来通过一个示例来演示如何获取数组中元素的最大值,如文件2所示。

文件2 Example23.java

1 public class Example23 {
2 public static void main(String[] args) {
3 // 1、定义一个int[]数组
4 int[] arr = { 4, 1, 6, 3, 9, 8 };
5 // 2、定义变量max用于记住最大数,首先假设第一个元素为最大值
6 int max = arr[0];
7 // 3、遍历数组,查找最大值
8 for (int i = 1; i < arr.length; i++) {
9 // 比较 arr[i]的值是否大于max
10 if (arr[i] > max) {
11 // 条件成立,将arr[i]的值赋给max
12 max = arr[i];
13 }
14 }
15 System.out.println("数组arr中的最大值为:" + max); // 打印最大值
16 }
17 }

运行结果如图2所示。

b966f2d13646e06c5deb973c0109600c.png

图2 运行结果

文件2中,定义了一个临时变量max,用于记住数组的最大值。首先假设数组中第一个元素arr[0]为最大值,然后使用for循环对数组进行遍历,在遍历的过程中只要遇到比max值还大的元素,就将该元素赋值给max,这样一来,变量max就能够在循环结束时记住数组中的最大值。

3.数组排序

在操作数组时,经常需要对数组中元素进行排序。接下来讲解一种比较常见的数组排序算法——冒泡排序。所谓冒泡排序,就是不断地比较数组中相邻的两个元素,较小者向上浮,较大者往下沉,整个过程和水中气泡上升的原理相似。

接下来通过几个步骤来具体分析一下冒泡排序的整个过程,具体如下:

第1步,从第一个元素开始,将相邻的两个元素依次进行比较,直到最后两个元素完成比较。如果前一个元素比后一个元素大,则交换它们的位置。整个过程完成后,数组中最后一个元素自然就是最大值,这样也就完成了第一轮比较。

第2步,除了最后一个元素,将剩余的元素继续进行两两比较,过程与第一步相似,这样就可以将数组中第二大的数放在了倒数第二个位置。

第3步,以此类推,持续对越来越少的元素重复上面的步骤,直到没有任何一对元素需要比较为止。

了解了冒泡排序的原理之后,接下来通过一个案例来实现冒泡排序,如文件3所示。

文件3 Example24.java

1 public class Example24 {
2 public static void main(String[] args) {
3 int[] arr = { 9, 8, 3, 5, 2 };
4 // 1、冒泡排序前,先循环打印数组元素
5 for (int i = 0; i < arr.length; i++) {
6 System.out.print(arr[i] + " ");
7 }
8 System.out.println(); // 用于换行
9 // 2、进行冒泡排序
10 // 2.1、外层循环定义需要比较的轮数(两数对比,要比较n-1轮)
11 for (int i= 1; i < arr.length; i++) {
12 // 2.2、内层循环定义第i轮需要比较的两个数
13 for (int j = 0; j < arr.length -i; j++) {
14 if (arr[j] > arr[j + 1]) { // 比较相邻元素
15 // 下面的三行代码用于相邻两个元素交换
16 int temp = arr[j];
17 arr[j] = arr[j + 1];
18 arr[j + 1] = temp;
19 }
20 }
21 }
22 // 3、完成冒泡排序后,再次循环打印数组元素
23 for (int i = 0; i < arr.length; i++) {
24 System.out.print(arr[i] + " ");
25 }
26 }
27 }

运行结果如图3所示。

47bceeccbfd5a86dd4dafe867d8a7c4f.png

图3 运行结果

文件3中,第2步通过一个嵌套for循环实现了冒泡排序。其中,外层循环用来控制进行多少轮比较,每一轮比较都可以确定一个元素的位置,由于最后一个元素不需要进行比较,因此外层循环的次数为arr.length-1;内层循环的循环变量用于控制每轮进行比较的相邻的两个数,它被作为角标去比较数组的元素,由于变量在循环过程中是自增的,这样就可以实现相邻元素依次进行比较,在每次比较时,如果前者小于后者,就交换两个元素的位置,具体执行过程如图4所示。

31bca72c22d64a371e4b9eabfe3aff07.png

图4 冒泡排序

从图4可以看出,在第一轮比较中,第一个元素“9”为最大值,因此它在每次比较时都就会发生位置的交换,最终被放到最后一个位置;第二轮比较与第一轮过程类似,元素“8”被放到倒数第二个位置;第三轮比较中,第一次比较没有发生位置的交换,在第二次比较时才发生位置交换,元素“5”被放到倒数第三个位置;第四轮比较只针对最后两个元素,它们比较后发生了位置的交换,元素“3”被放到第二个位置。通过四轮比较,很明显,数组中的元素已经完成了排序。

值得一提的是,文件3中第16~18行代码实现数组中两个元素交换的过程。首先定义了一个临时变量temp用于记住数组元素arr[j]的值,然后将arr[j+1]的值赋给arr[j],最后再将temp的值赋给arr[j+1],这样便完成了两个元素的交换。整个交换过程如图5所示。

74149d0424f36b35523bda4c794f5418.png
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
〖程序设计基础〗练习题1一、选择题(每题1分,共30分)下列各题A)、B)、C)、D)四个选项,只有一个选项是正确的,请将正确选项的标记写在题干后的括号内。1.以下的选项能正确表示Java语言一个整型常量的是( )。A) 12. B) -20 C) 1,000 D) 4 5 62.以下选项,合法的赋语句是( )。A) a = = 1; B) ++ i; C) a=a + 1= 5; D) y = int ( i );3.若所用变量都已正确定义,以下选项,非法的表达式是( )。A) a != 4||b==1 B) 'a' % 3 C) 'a' = 1/2 D) 'A' + 324.若有定义int a = 2;则执行完语句a += a -= a * a; 后,a的是( )。A) 0 B) 4 C) 8 D) -45.设有定义语句int a[]={66,88,99}; 则以下对此语句的叙述错误的是( )。A) 定义了一个名为a的一维数组 B) a数组有3个元素C) a数组的下标为1~3 D)数组的每个元素是整型6.若a和b均是整型变量并已正确赋,正确的switch语句是( )。A) switch(a+b); B) switch( a+b*3.0 ){ ...... } { ...... }C) switch a D) switch ( a%b ){ ...... } { ...... }7.下列语句序列执行后,x 的是( )。int a=3, b=4, x=5;if( ++aA) 5 B) 3 C) 4 D) 68.下列语句序列执行后,k 的是( )。int i=6, j=8, k=10, n=5, m=7;if( iA) 9 B) 10 C) 11 D) 129.下列语句序列执行后,r 的是( )。char ch='8'; int r=10;switch( ch+1 ){ case '7': r=r+3;case '8': r=r+5;case '9': r=r+6; break;default: ;}A) 13 B) 15 C) 16 D) 1010.下列语句序列执行后,j 的是( )。int j=0;for( int i=3; i>0; i-- ) j+=i;A) 3 B) 4 C) 5 D) 611.下列语句序列执行后,j 的是( )。int j=9, i=6;while( i-- >3 ) --j;A) 5 B) 6 C) 7 D) 812.下列语句序列执行后,i的是( )。int i=10;do { i-=2; } while( i>6 );A) 10 B) 8 C) 6 D) 413.为了区分重载多态同名的不同方法,要求( )。A) 采用不同的形式参数列表 B) 返回类型不同 C) 调用时用类名或对象名做前缀 D) 参数名不同14.定义主类的类头时可以使用的访问控制符是( )。A) private B) protected C) public D) private protected15.下列整型的最终属性 i 的定义,正确的是( )。A) static final int i=100; B) final i;C) static int i; D) final float i=1.2f; 16.设 x,y 均为已定义的类名,下列声明对象x1的语句正确的是( )。A) public x x1= new y( ); B) x x1=x( ); C) x x1=new x( ); D) int x x1;17.下列方法定义,正确的是( )。A) int x( int a,b ) B) double x( int a,int b){ return (a-b); } { int w; w=a-b; }C) double x( a,b ) D) int x( int a,int b){ return b; } { return a-b; }18.能构成多分支的语句是( )。A) for 语句 B) while 语句 C) switch 语句 D) do -
根据您的描述,您需要编写一个程序,让用户输入学号、姓名、成绩和排名,将学生的记录存储在数据结构,并按照班级人数和学生成绩进行排名,最后输出完整的学生记录。下面是一个C语言示例代码: ``` #include <stdio.h> #include <string.h> #define MAX_NUM_STUDENTS 100 struct student { int id; char name[20]; int score; int rank; }; void calculate_ranks(struct student students[], int num_students) { int i, j; for (i = 0; i < num_students; i++) { students[i].rank = 1; for (j = 0; j < num_students; j++) { if (students[j].score > students[i].score) { students[i].rank++; } } } } int main() { struct student students[MAX_NUM_STUDENTS]; int num_students, i; printf("请输入班级人数:"); scanf("%d", &num_students); printf("请输入每个学生的信息:\n"); for (i = 0; i < num_students; i++) { printf("请输入第%d个学生的学号、姓名、成绩:", i + 1); scanf("%d%s%d", &students[i].id, students[i].name, &students[i].score); } calculate_ranks(students, num_students); printf("学号\t姓名\t成绩\t排名\n"); for (i = 0; i < num_students; i++) { printf("%d\t%s\t%d\t%d\n", students[i].id, students[i].name, students[i].score, students[i].rank); } return 0; } ``` 在这个示例代码,我们使用了一个结构体数组来存储学生的记录,每个学生的记录包括学号、姓名、成绩和排名。我们定义了一个`calculate_ranks`函数来计算每个学生的排名,该函数使用了两个嵌套循环来比较每个学生的成绩,并根据成绩的高低计算排名。最后,我们在主函数先读入班级人数,再读入每个学生的信息,计算排名,并输出每个学生的完整记录。 请注意,这个示例代码只是一个基本的框架,您可能需要根据您的具体需求进行修改和扩展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值