实验10排序和二维数组的使用1.程序填空题,不要改变与输入输出有关的语句。60005排序输入一个正整数repeat(0repeat10),做repeat次下列运算:输入一个正整数n,再输入n个整数,将它们从大到小排序后输出。例:括号内是说明输入3(repeat=3)451763123554321输出765132154321importjava.util.Scanner;publicclassTest60005{publicstaticvoidmain(String[]args){intri,repeat;inti,index,k,n,temp,a[];Scannerin=newScanner(System.in);repeat=in.nextInt();for(ri=1;ri=repeat;ri++){n=in.nextInt();a=newint[n];for(i=0;in;i++)a[i]=in.nextInt();/*---------*/for(i=0;in-1;i++){//选择法递减排序index=i;for(k=i+1;kn;k++){if(a[k]a[index])index=k;//找最大值的下标}if(i!=index){temp=a[i];a[i]=a[index];a[index]=temp;}}for(i=0;in;i++)System.out.print(a[i]+);System.out.println();}}}或:for(i=0;ia.length-1;i++){//冒泡法递减排序for(k=0;ka.length-1-i;k++){if(a[k]a[k+1]){temp=a[k];a[k]=a[k+1];a[k+1]=temp;}}}60011矩阵运算输入一个正整数repeat(0repeat10),做repeat次下列运算:读入1个正整数n(1≤n≤6),再读入n阶方阵a,计算该矩阵除副对角线、最后一列和最后一行以外的所有元素之和.(副对角线为从矩阵的右上角至左下角的连线)例:括号内是说明输入:1(repeat=1)4(n=4)2341561171811111sum=35(2+3+4+5+6+7+8=35)importjava.util.Scanner;publicclassTest60011{publicstaticvoidmain(String[]args){intri,repeat;inta[][],i,j,n,sum;Scannerin=newScanner(System.in);repeat=in.nextInt();for(ri=1;ri=repeat;ri++){n=in.nextInt();a=newint[n][n];for(i=0;in;i++)for(j=0;jn;j++)a[i][j]=in.nextInt();/*---------*/sum=0;for(i=0;in-1;i++)//in-1排除最后一行for(j=0;jn-1;j++){//jn-1排除最后一列if((i+j)!=(n-1))sum+=a[i][j];//非副对角线元素才加入}System.out.println(sum=+sum);}}}60012加法口诀表输入一个正整数repeat(0repeat10),做repeat次下列运算:输入1个正整数n(1≤n≤10),输出一张20以内的加法口诀表.加数与被加数都不大于n,分列第一行和第一列.(将加数、被加数、和放入一个二维数组中,再输出该数组)例:括号内是说明输入:1(repeat=1)3(n=3)输出:+123122343456importjava.util.Scanner;publicclassTest60012{publicstaticvoidmain(String[]args){intri,repeat;inti,j,n,a[][]=newint[10][10];Scannerin=newScanner(System.in);repeat=in.nextInt();for(ri=1;ri=repeat;ri++){n=in.nextInt();/*---------*/for(i=1;i=n;i++){//给第0行和第0列所有元素赋值,a[0][0]不用赋值a[0][i]=i;//第0行为被加数,从第1列开始赋值1,2,...,na[i][0]=i;//第0列为加数,从第1行元素开始赋值1,2,...,n}for(i=1;i=n;i++)//计算和,从第1行第1列开始for(j=1;j=i;j++){a[i][j]=i+j;//或a[i][j]=a[i][0]+a[0][j];//所在行第0列元素+所在列第0行元素}for(i=0;i=n;i++){for(j=0;j=n;j++)if(i==0&&j==0)System.out.print(+);//在第0行第0列上输出+elseif(i==0||j=i)System.out.print(a[i][j]+);//输出第0行和下三角阵各元素System.out.println();}}}}60013判断上三角矩阵输入一个正整数repeat(0repeat10),做repeat次下列运算:输入1个正整数n(1≤n≤6)和n阶方阵a中的元素,如果a是上三角矩阵,输出YES,否则,输出NO。(上三角矩阵,即主对角线以下的元素都为0,主对角线为从矩阵的左上角至右下角的连线)例:括号内是说明输入:2(repeat=2)3123045006(n=3)210-82(n=2)输出:YESNOimportjava.util.Scanner;publicclassTest60013{publicstaticvoidmain(String[]args){intri,repeat;inta[][],i,j,n;booleanflag;Scannerin=newScanner(System.in);repeat=in.nextInt();for(ri=1;ri=repeat;ri++){n=in.nextInt();a=newint[n][n]for(i=0;in;i++)for(j=0;jn;j++)a[i][j]=in.nextInt();/*---------*/flag=true;for(i=1;in;i++)//上三角矩阵中值为0的元素位置:行1~n-1,列0~i-1for(j=0;ji;j++)if(a[i][j]!=0)flag=false;//若有一个元素非0,则不是上三角矩阵if(flag)System.out.println(YES);elseSystem.out.println(NO);}}}60014求矩阵每行元素之和输入一个正整数repeat(0repeat10),做repeat次下列运算:输入2个正整数m和n(1≤m,n),然后输入该m行n列矩阵a中的元素,分别求出各行元素之和,并存入一维数组row中,再输出row.例:括号内是说明输入:1(repeat=1)32(m=3,n=2)631-8312输出:sumofrow0is9sumofrow1is-7sumofrow2is15importjava.util.Scanner;publicclassTest60014{publicstaticvoidmain(String[]args){intri,repeat;inti,j,m,n,a[][],row[];Scannerin=newScanner(System.in);repeat=in.nextInt();for(ri=1;ri=repeat;ri++){m=in.nextInt();n=in.nextInt();a=newint[m][n];row=newint[m];for(i=0;im;i++)for(j=0;jn;j++)a[i][j]=in.nextInt();/*---------*/for(i=0;im;i++)//row[i]=0;//可以不写这句for(j=0;jn;j++)row[i]+=a[i][j];//计算数组a的第i+1行元素之和,存入数组row的第i+1个元素for(i=0;im;i++)System.out.println(sumofrow+i+is+row[i]);}}}60019找鞍点输入一个正整数repeat(0repeat10),做repeat次下列运算:输入1个正整数n和n阶方阵a中的元素,如果找到a的鞍点(鞍点的元素值在该行上最大,在该列上最小),就输出它的下标,否则,输出NO(设a最多有1个鞍点)。例:括号内是说明输入:2(repeat=2)41741483616120789(n=4)21741(n=2)输出:a[2][1]=6NOimportjava.util.Scanner;publicclassTest60019{publicstaticvoidmain(String[]args){intri,repeat;inti,j,k,row,col,n,a[][];booleanflag;Scannerin=newScanner(System.in);repeat=in.nextInt();for(ri=1;ri=repeat;ri++){n=in.nextInt();a=newint[n][n];for(i=0;in;i++)for(j=0;jn;j++)a[i][j]=in.nextInt();/*---------*/flag=true;row=0;col=0;//不写这些,就通不过编译for(i=0;in;i++){//先在第row行中找出该行的最大值a[row][col]row=i;//row保存最大值的行坐标col=0;//col保存最大值的列坐标,假设第i行第0列元素为最大for(j=1;jn;j++){if(a[row][j]a[row][col])col=j;}//再判断a[row][col]是否是第col列中的最小值flag=true;for(k=0;kn;k++){if(a[k][col]a[row][col]){flag=false;break;//若有比a[row][col]小的,可知它不是鞍点,可结束循环}}if(flag)break;//找到1个鞍点后就不用再找了}if(flag)System.out.println(a[+row+][+col+]=+a[row][col]);elseSystem.out.println(NO);}}}2.编程题60015编程:交换矩阵中的两行编程,输入一个正整数n(n0),做n次下列运算:输入1个3×3的整数矩阵,将它们存入数组a中,交换其第一行和最后一行后,再以矩阵格式输出。矩阵中每个元素的输出参数为:a[i][j]+\t说明:1)源程序中不得出现package关键字;2)程序中的第一个大括号“{”必须位于类名所在行。3)类名与变量名由编程者自取。4)指明为整数或整数的数据,不要用浮点类型。输入输出示例:括号内为说明输入:2(n=2,后面将分别输入2个矩阵)135(第一个矩阵)795890735(第二个矩阵)971229766输出:(每个数据后有一个制表符)890(第一个矩阵输出)7951359766(第二个矩阵输出)97122735importjava.util.Scanner;publicclassTest60015{publicstaticvoidmain(String[]args){intn,ri,i,j,a[][],temp;Scannerin=newScanner(System.in);n=in.nextInt();for(ri=1;ri=n;ri++){a=newint[3][3];for(i=0;i3;i++)for(j=0;j3