指针初级的应用

来源:互联网 发布:改字体的软件 编辑:程序博客网 时间:2024/06/05 18:45

// 1,随机产生20[10 , 50]的正整数存到数组中,并求数组中的所有元素最大值、最小值、平均值以及各元素之和。第二大值(不排序),指针实现.

//    int arr[NUM] = {0};

//    for (int i = 0; i < NUM; i++) {

//        *(arr + i) = arc4random() % 41 + 10;

//        printf("%d " , *(arr + i));

//    }

//    int max = 0 , min = 50 , max2 = 0;

//    float sum = 0;

//    for (int * i = arr , j = 0; j < NUM; i++ , j++) {

//        if (max < *i) {

//            max = *i;

//        }

//        if (min > *i) {

//            min = *i;

//        }

//        sum += *i;

//    }

//    for (int * i = arr , j = 0; j < NUM; i++ , j++) {

//        if (*i != max) {

//            if (max2 < *i) {

//                max2 = *i;

//            }

//        }

//    }

//    printf("\n");

//    printf("max = %d\nmin = %d\nsum = %.2f\naverage = %.2f\nmax2 = %d\n",max,min,sum,sum/NUM,max2);

    

    

// 2、输入10个整数,将其中最小的数与第一个数对换,把最大的数和最后一个数对换,指针实现

//    int array[10] = {};

//    printf("请输入10个整数:");

//    for (int i = 0; i < 10; i ++) {

//        scanf("%d",&*(array + 1));

//    }

//    int min = *array;

//    int max = *array;

//    for (int i = 0; i < 10; i ++) {

//        printf("%d ",array[i]);

//    }

//    for (int i = 0; i < 10; i++) {

//        if (min > *(array + i)) {

//            min = *(array + i);

//        }

//        if (max < *(array + i)) {

//            max = *(array + i);

//        }

//    }

//    *array = min;

//    *(array + 9) = max;

//    printf("min = %d,max = %d\n",min,max);

//    for (int i = 0; i < 10; i ++) {

//        printf("%d ",array[i]);

//    }


 

// 3,有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中,插入之后依然有序。指针实现

   int array[11] = {34,45,55,58,68,70,75,79,89,95};

   int value = 0;

    printf("请输入一个数字:");

   scanf("%d",&value);

   for (int i =9; i >= 0; i--) {

       if (value > *(array + i)) {

            *(array + i +1) = value;

           break;

        }else {

            *(array + i +1) = *(array + i);

        }

    }

   for (int i =0; i < 11; i++) {

       printf("%4d ", *(array+i));

    }

    

//  4.编程在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,用空格来分隔单词。指针实现

//    char str[100] = "my name is duan yang i love ios!";

//        int count = 0 , max = 0;

//        char * start = NULL;

//        for (char * i = str, j = 0; *i != '\0'; i++ , j++) {

//            if (*i != ' ') {

//                count++;

//            } else {

//                if (max < count) {

//                    max = count;

//                    start = str + j - count;

//                }

//                count = 0;

//            }

//        }

//        for (char * i = start; *i != ' ' ; i++) {

//            printf("%c", *i);

//        }

    

// 5,耶稣有13个门徒,其中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:13人围坐一圈,从第一个开始报号:123123...。凡是报到“3”就退出圈子,最后留在圈子内的人就是出卖耶稣的叛徒。请找出它原来的序号,指针实现

//    int peopleCount = 13; //13个人

//    int array[13] = {0};

//    int step = 1;

//    int pos = 0;

//    for (int i = 0; i < 13; i++)

//    {

//        *(array + i) = 1;

//        printf("%d ",*(array + i));

//    }

//    printf("\n");

//    while (peopleCount > 0) {

//        //如果还没出局,step++

//        if (*(array + pos) != 0) {

//            step++;

//            printf("step = %d",step);

//        }

//        

//        if (step == 3) {

//            *(array + pos) = 0; //置为0

//            peopleCount--;  //人数减1

//            step = 0;       //查号置0

//        }

//        pos++;             //索引+1

//        if (pos == 13) {   //索引超最大值了,置0

//            pos = 0;

//        }

//    }

//    printf("\n");

//    printf("pos = %d", pos);

   

//    int mentu[13] = {0} , n = 0 , s = 0;

//    for (int i = 0 , j = 0; j < 13; i++) {

//        n = (i % 13);

//        if (mentu[n] == 0) {

//            s++;

//            if (s == 3) {

//                mentu[n] = 1;

//                s = 0;

//                j++;

//            }

//        }

//    }

//    printf("%d", n + 1);

    

    

//    int mentu[13] = {0},n = 0,s = 0;

//    for (int i = 0, j = 0; j < 13; i++) {

//        n = (i % 13);

//        if (mentu[n] == 0) {

//            s ++;

//            if (s == 3) {

//                mentu[n] = 1;

//                s = 0;

//                j++;

//            }

//        }

//    }

//    printf("%d",n+1);


// 6,有一字符串,包含数字与字母,编程去除数字。1、要求在原字符串中操作2、使用指针处理。如原串:sdf32hfb32yr,处理完原串变为sdfhfbyr

//    char strings[20] = {"an34s3we21r"};

//    char *p = strings;

//    printf("去除数字后的字符串为:");

//    int i = 0;

//    char temp[100] = {0};

//    while (*(p+i) != '\0') {//判断条件

//        if (*(p+i)>='0' && *(p+i) <='9') {//如果是数字,则将其剔除掉

//            strcpy(temp , p + i +1);

//            strcpy( p + i, temp );

//        }else{

//            i++;

//        }

//    }

//    printf("%s",p);//输出字符

    

    

//    char str[100] = "wo1shidu2an yang";

//    char *j = NULL;

//    for (char * i = str; *i != '\0'; i++) {

//        if (*i <= '9' && *i > '0') {

//            for (j = i; *j != '\0'; j++) {

//                *j = *(j + 1);

//            }

//        }

//    }

//    printf("%s", str);



//    char str[100] = "que3st7ion";

//    char *j =NULL;

//    for (char *i = str; * i != '\0'; i++) {

//        if (*i <= '9'&& *i > '0') {

//            for (j = i; *j != '\0';j++ ) {

//                *j = *(j+1);

//            }

//        }

//    }

//    printf("%s",str);


0 0