一维数组练习

来源:互联网 发布:heroku 域名 编辑:程序博客网 时间:2024/06/09 22:02

//

//  main.m

//  homeworkC4

//

//  Created by dllo on 15/7/3.

//  Copyright (c) 2015 Clare. All rights reserved.

//


#import <Foundation/Foundation.h>


int main(int argc,const char * argv[]) {

//    //1.随机产生2010~50的正整数存放到数组中,并求数组中的元素最大值、最小值、平均值及各元素之和

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

//    int max = 0, min = 50 ;

//    float sum = 0, average = 0;// min 为什么为50??

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

//        arr[i] = arc4random() % ( 50 - 10 + 1) + 10;

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

//    }

//    printf("\n");

//    for (int j = 0; j < 20 ; j++) {

//        if (max < arr[j]) {

//            max = arr[j];

//        }

//        

//    }

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

//    for (int k = 0; k < 20 ; k++) {

//        if (min > arr[k]) {

//            min = arr[k];

//        }

//    }

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

//    

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

//        sum += arr[i];

//    }

//    printf("%g\n",sum);

//    

//    average = sum / 20;

//    printf("%g\n",average);

    

    

//     //2.编写一个程序,输入两个包含5个元素的数组,先将两个数组升序排序,然后将这两个数组合并成一个升序数组。

//    int arr[5] = {0}, b[5] = {0},c[10] = {0};

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

//        scanf("%d", &arr[i]);

//    }

//    for (int j = 0 ; j < 5 - 1; j++) {

//        for (int k = 0 ; k < 5 - 1 - j; k++) {

//            if (arr[k] > arr[k + 1]) {

//                int temp = 0;

//                temp = arr[k];

//                arr[k] = arr[k + 1];

//                arr[k + 1] = temp;

//            }

//        }

//    }

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

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

//    }

//    printf("\n");

//    

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

//        scanf("%d", &b[i]);

//    }

//    for (int j = 0 ; j < 5 - 1; j++) {

//        for (int k = 0 ; k < 5 - 1 - j; k++) {

//            if (b[k] > b[k + 1]) {

//                int temp = 0;

//                temp = b[k];

//                b[k] = b[k + 1];

//                b[k + 1] = temp;

//            }

//        }

//    }

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

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

//    }

//    printf("\n");

//    

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

//        c[i] = arr[i];

//    }

//    for (int j = 5; j < 10; j++) {

//        c[j] = b[j - 5];

//    }

//    

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

//        for (int k = 0 ; k < 10 - 1; k++) {

//            if (c[k] > c[k + 1]) {

//                int temp = 0;

//                temp = c[k];

//                c[k] = c[k + 1];

//                c[k + 1] = temp;

//            }

//        }

//    }

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

//        printf("%d ",c[k]);

//    }

//    printf("\n");

//

//    // 3.编写整型值数组排序程序(冒泡排序降序);int a[] = {3-9327763-241402145}

//    int a[] = {3, -9, 32, 77, 63, -24, 14, 0, 21, 45};

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

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

//        if (a[j] < a[j + 1]) {

//            int temp = 0;

//            temp = a[j];

//            a[j] = a[j + 1];

//            a[j + 1] = temp;

//        }

//        }

//    }

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

//        printf("%d ",a[k]);

//    }

//    printf("\n");

    

//    //4.找出下列整型数组中最大值和最小值及其所在位置i

//    int a[] = {5,-9,32,77,64,-24,14,0,21,45};

//    int max = 0, min = 0;

//    int maxIndex = 0, minIndex = 0;

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

//        if (max < a[i]) {

//            max = a[i];

//            maxIndex = i;

//        }

//        if (min > a[i]) {

//            min = a[i];

//            minIndex = i;

//        }

//    }

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

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

    

    // 5.编程在一个已知的字符串中找最长单词,假定字符串中只含字母和空格,空格用来分隔不同单词。比如:"ni hao world”,最长单词是world 

    char str[] ="ni hao world nihao ";

   int maxCount = 0;// 最长单词的长度

    int len =0;//中间变量即每个单词的长度

    int max=0;//最长单词开始的位置

   for (int i =0; i < strlen(str); i++) { // i不能大于字符串的长度

       if (str[i] != ' '&& str[i] !='\0') { // 如果我的第i个字符不为空也不是结束的时候执行此处

            len++;// 让中间变量自增1

           if (maxCount <= len) { // 如果我的最长单词的长度小于我的中间变量执行此处

                maxCount = len;// 将中间变量的值赋给最长单词的值

                max = i - maxCount +1;// 最长单词的起始地址就是当前的单词地址减去最长单词地址后再加1,注意此处的max会出现值相同的时候,是因为没一个单词的起始位置都一样

            }

        }else{// 如果我的第i个字符为空格或者结束执行此处

            len =0; // 让中间变量清零

        } //中间变量清零后再执行此循环让len重新计数

    }

    printf("%d\n",max);// 输出最长单词的起始地址

   for (int i = max; i < maxCount + max; i++) {// i等于最长单词的起始位置,并且小于最长单词的结束位置

        printf("%c",str[i]);// 输出第i个位置上的字符,程序到次结束.但是要注意如果有两个相同长度的最长单词是只能输出第一个最长的单词,第二个还未输出,此处有待改进,但是如果将 maxCount < len 处改为 maxCount <= len 输出的就为第二个最长的单词

    }

    printf("\n");

//    char str[] = "ni hao world";

//    for (int i = 0; i < strlen(str) + 1; i++) {

//        if ((str[i] == ' ')|| (str[i] == '\0') ){

//            printf("%d ",i);

//            

//        }

//    }

//    printf("\n");

    

    

    

    

//    char str[] = "ni hao world";

//            int maxCount = 0; // 记录最大长度

//            int index = 0;    // 记录单词尾字符下标

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

//                int count = 0; // 记录新单词长度

//                while (str[i] != ' ' && str[i] != '\0') { // 字符不是空格也不是\0

//                    i++;

//                    count++;

//                }

//                if (count > maxCount) {

//                    maxCount = count;

//                    index = i - 1;

//                }

//            }

//            printf("最长单词是:");

//        for (int i = index - maxCount + 1; i <= index; i++){

//                printf("%c", str[i]);

//        }

//            printf("\n");

//    

    

//    // 方法2

//    char str[] = "ni haoxsfsfsf world52 has5f4s86d7dfs435f4s87fs45f45 heerrssfs44444 ff te ff5555555555555555";

//        int n1 = 0, n2 = -1, n3 = 0, max = 0;

//        for (int i = 0; i < strlen(str)+1; i++) {

//            if (str[i] == ' '|| str[i] == '\0') {

//                n1 = i - n2;

//                n2 = i;

//                if (max < n1) {

//                    max = n1 ;

//                    n3 = n2 - n1 + 1;

//                }

//            }

//        }

//        for (int i = n3; i< n3 + max; i++) {

//            printf("%c", str[i]);

//        }

//

    //    // 第五题(3)

    //    char str[] = "fssssssssj slg tjdRRRs sffffffa fafaf sa33333333rfa";

    //    int count = 0, maxLen = 0, number = 0;

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

    //        if (str[i] == ' ') {

    //            count = -1;

    //        }

    //        count++;

    //        if (maxLen < count) {

    //            maxLen = count;

    //            number = i;

    //        }

    //    }

    //    for (int i = number - maxLen + 1; i <= number; i++) {

    //        printf("%c", str[i]);

    //    }

    //    printf("/n");

    

   return 0;

}


0 0