1、数组转置问题

思想:关键就是找2个指针变量,和第三个交换空间变量,一个指针指向头,一个指针指向尾,都向中间靠拢,进行数组的转置,数字的交换;

(1)、代码如下:

#include<stdio.h>voidarrayRev(int*a,intcount);voidprintT(int*a,intcount);voidprintT(int*a,intcount){inti;for(i=0;i<count;i++){printf("%d",a[i]);}}voidarrayRev(int*a,intcount){intlow=0;inthigh=count-1;inttmp;while(low<high){tmp=a[low];a[low]=a[high];a[high]=tmp;low++;high--;}}intmain(void){inta[]={1,4,2,6,8,9,11,43,12,55,};intlen;len=sizeof(a)/sizeof(a[0]);printf("转置前:\n");printT(a,len);arrayRev(a,len);printf("\n转置后:\n");printT(a,len);printf("\n");return0;}

(2)、运行结果:


2、寻找一个数组中的第二大数字

无序数组中的一堆数字,寻找第二个大的数字?

思想:一次for循环就可以搞定了,开始给出一个默认最大和第二大的数字,然后对其后的每个数字通过if比较就可以了;

(1)、代码如下:

#include<stdio.h>intsecondMax(int*a,intlen);voidprintT(int*a,intcount);voidprintT(int*a,intcount){inti;for(i=0;i<count;i++){printf("%d",a[i]);}printf("\n");}intsecondMax(int*a,intlen){intmax=a[0]>a[1]?a[0]:a[1];intsecond=a[0]>a[1]?a[1]:a[0];inti;for(i=2;i<len;i++){if(a[i]>max){second=max;max=a[i];}elseif(a[i]>second){second=a[i];}else{;}}returnsecond;}intmain(void){inta[]={44,4,66,6,8,33,22,2,55,1};intlen=sizeof(a)/sizeof(a[0]);intnum;num=secondMax(a,len);printT(a,len);printf("%d\n",num);return0;}

(2)、运行结果: