温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

数组的2道简单问题

发布时间:2020-07-28 17:28:21 来源:网络 阅读:304 作者:汇天下豪杰 栏目:编程语言

1、数组转置问题

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

(1)、代码如下:

#include<stdio.h>

void arrayRev(int *a, int count);
void printT(int *a, int count);

void printT(int *a, int count){
    int i;

    for(i = 0; i < count; i++){
        printf("%d ", a[i]);
    }   
}
void arrayRev(int *a, int count){
    int low = 0;
    int high = count-1;
    int tmp;

    while(low < high){
        tmp = a[low];
        a[low] = a[high];
        a[high] = tmp;
        low++;
        high--;
    }   
}
int main(void){
    int a[] = {1, 4, 2, 6, 8, 9, 11, 43, 12, 55,};
    int len;

    len = sizeof(a)/sizeof(a[0]);

    printf("转置前:\n");
    printT(a, len);
    arrayRev(a, len);
    printf("\n转置后:\n");
    printT(a, len);
    printf("\n");


    return 0;
}

(2)、运行结果:

数组的2道简单问题


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

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

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

(1)、代码如下:

#include<stdio.h>

int secondMax(int *a, int len);
void printT(int *a, int count);

void printT(int *a, int count){
    int i;

    for(i = 0; i < count; i++){
        printf("%d ", a[i]);
    }
    printf("\n");
}
int secondMax(int *a, int len){
    int max = a[0] > a[1] ? a[0] : a[1];
    int second = a[0] > a[1] ? a[1] : a[0];
    int i;

    for(i = 2; i < len; i++){
        if(a[i] > max){
            second = max;
            max = a[i];
        }else if(a[i] > second){
            second = a[i];
        }else{
            ;   
        }   
    }
    return second;

}

int main(void){
    int a[] = {44, 4, 66, 6, 8, 33, 22, 2 ,55 ,1};
    int len = sizeof(a)/sizeof(a[0]);
    int num;

    num = secondMax(a, len);
    printT(a, len);
    printf("%d\n", num);

    return 0;
}

(2)、运行结果:

数组的2道简单问题


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI