zoukankan      html  css  js  c++  java
  • iOS开发之c语言基础Lesson-04 数组(Arrary) 上课笔记与习题作业

    //数组, 可以快速创建多个变量, 数组本质上就是一个大容器
    //数组的缺点:数组中定义的所有的变量数据类型都是相同的
    //注意:1.定义数组时,数组元素个数必须是常量或者常量表达式
    //2.数组所占的存储空间 = 数组元素个数 * 每个元素所在的空间大小
    //3.定义数组时, 数组的元素个数是可以省略的.

    //系统不会检测数组下标越界  0-(数组元素个数-1)
    
    //
    
     //    //求最大,第二大, 最小
        //    int max = 0;
        //    int min = 40;
        //    int secondMax = 0;
        //    int a[7] = {0};
        //    for (int i = 0; i < 7; i++) {
        //        a[i] = arc4random() % (40-20+1)+20;
        //        printf("%d ", a[i]);
        //        if (min > a[i]) {
        //            min = a[i];
        //        }
        //        if(a[i] > max)
        //        {
        //            secondMax = max; //先把max的值给secondMax
        //            max = a[i];     //在存储当前最大值
        //        }else if (a[i] != max && a[i] > secondMax){
        //            secondMax = a[i];
        //            //第二大值存储当前值需要满足的条件:
        //            //1 当前值不能和最大值相等,
        //            //2 当前值必须大于第二大值.
        //        }
        //
        //    }
        //    printf("
    最大:%d ", max );
        //    printf("
    第二大:%d ", secondMax);
        //    printf("
    最小:%d", min);
        //    for (int i = 0; i < 4; i++) {
        //        for (int j = i + 1; j < 5; j++) {
        //            if(a[i] > a[j])
        //            {
        //                int temp = a[i];
        //                a[i] = a[j];
        //                a[j] = temp;
        //            }
        //        }
        //    }
        //    printf("
    最大:%d ", a[4]);
        //    printf("
    第二大:%d ", a[3]);
        //    printf("
    最小:%d", a[0]);
    
        ////////////////////////////////
        ///2个数组的和,放到第三个数组中
        //    int a[10] = {0};
        //    int b[10] = {0};
        //    int c[10] = {0};
        //    for (int i = 0; i < 10; i++) {
        //        a[i] = arc4random() % (40-20+1) + 20;
        //        b[i] = arc4random() % (40-20+1) + 20;
        //        c[i] =a[i] + b[i];
        //        printf("%d ", a[i]);
        //    }
        //    printf("
    +");
        //    for (int i = 0; i < 10; i++) {
        //        printf("%d ", b[i]);
        //    }
        //    printf("
    =");
        //    for (int i = 0; i < 10; i++) {
        //        printf("%d ", c[i]);
        //    }
    
        //冒泡排序思想:每趟排序都将最大的数放到右边, 右边是有序区, 左边是无序区;
    
    
        //数组a排成升序序列,  冒泡采用双层for循环
    
        //**外层 -1 可以不减, 减 1 的目的是为了缩短排序的趟数, 提高程序的执行效率,最后一个数的时候,就没有必要在比较了
        //**内层 -i 可以不减, 减 i 的目的是为了缩小无序的范围, 提高程序的执行效率
        //**内层 -1 必须要减, 减 1 的目的是防止比较越界,和一个不属于数组范围内的数进行比较,, 即,最后一个数与不在数组内的数比较
    
        //
        //    int  a[10] = {23, 24, 11, 15, 16, 25, 17, 26, 18, 10};
        //    for (int i = 0; i < 10; i++) {
        //        a[i] = arc4random() % (30 - 10 + 1) + 10;
        //        printf("%d, ", a[i]);
        //    }
        //    int num = 0, num1 = 0;
        //        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 = a[j];
        //                    a[j] = a[j+1];
        //                    a[j+1] = temp;
        //                    num++;
        //                }
        //
        //            }
        //        }
        //
        //
        //        for (int i = 0; i < 10 - 1; i++) {
        //            for (int j = i + 1; j < 10; j++) {
        //                if(a[i] > a[j] ) {
        //                    int temp = a[i];
        //                    a[i] = a[j];
        //                    a[j] = temp;
        //                    num1++;
        //                }
        //
        //            }
        //        }
        //
        //        printf("
    ");
        //        for (int i = 0; i < 10; i++) {
        //            printf("%d ", a[i]);
        //        }
        //        printf("
    ");
        //        printf("num = %d, num1 = %d", num, num1);
    
    
    
        //随机产出20个数, 从小到大排序
        //    int b[20] = {0};
        //    for (int i = 0; i < 20; i++) {
        //        b[i] = arc4random() % (40 - 20 + 1) + 20;
        //        printf("%d, ", b[i]);
        //    }
        //
        //
        //    for (int i = 0; i < 20 - 1; i++) {
        //        for (int j = 0; j < 20 - 1 - i; j++) {
        //            if(b[j] > b[j + 1])
        //            {
        //                int temp = b[j];
        //                b[j] = b[j + 1];
        //                b[j + 1] = temp;
        //
        //            }
        //        }
        //    }
        //
        //    //    for (int i = 0; i < 20 - 1; i++) {
        //    //        for (int j = i + 1; j < 20; j++) {
        //    //            if (b[i] > b[j]) {
        //    //                int temp = b[i];
        //    //                b[i] = b[j];
        //    //                b[j] = temp;
        //    //            }
        //    //        }
        //    //    }
        //
        //    printf("
    ");
        //    for (int i = 0; i < 20; i++) {
        //        printf("%d ", b[i]);
        //    }
    
    
        //随机产生5个数, 从大到小排序.
        //    int a[5] = {0};
        //    for (int i = 0; i < 5; i++) {
        //        a[i] = arc4random() % (40 - 20 + 1 ) + 20;
        //        printf("%d ", a[i]);
        //    }
        //    for (int i = 0; i < 5 - 1;  i++) {
        //        for (int j = 0; j < 5 - 1 -i; j++) {
        //            if (a[j] < a[j + 1]) {
        //                int temp = a[j];
        //                a[j] = a[j + 1];
        //                a[j + 1] = temp;
        //            }
        //        }
        //    }
        //    printf("
    ");
        //    for (int i =0 ; i < 5; i++) {
        //        printf("%d ", a[i]);
        //    }
        //    
    
        ///////////////////
        //字符数组
        //char str[4] = {'a', 'b', 'c', 'd'};
        //字符串, 结束标志: '' 对应的整数值是 0
        char str[10] = "hello";
        //输出字符串格式, %s,数组名; %s的工作原理: 从第一个字符开始, 一个字符一个字符的输出,直到遇到 '' 结束
        printf("%s", str);
    
        /////字符数组所占的内存空间////
        //1.指定元素个数.
        char str1[10] = "iPhone";
    
        //unsigned long(lu),
        //sizeof() 可以用来求变量, 数组, 数据类型, 所占存储空间大小
        printf(" %lu
    ", sizeof(str1));
        //2.不指定元素个数, 字符串结束标志 '' 也是占存储空间
        char str2[] = "iPhone";
        printf(" %lu
    ", sizeof(str2));

    //
    //*************Lesson-04 作业*****************
    //

       //1.打印数组
        //    int a[SIZE] = {0},i = 0;
        //    for(i = 0; i < SIZE; i++)
        //    {
        //        a[i] = i+10;
        //        printf("a[%d] = %d
    ", i, a[i]);
        //    }
        //    2. (*)将第一题中的数组a反向输出。
        //            for(i = SIZE-1;i>=0;i--)
        //            {
        //                printf("a[%d] = %d
    ", i, a[i]);
        //            }
        //   3. (*)对第一题中的数组进行求和操作,打印计算结果。
        //    int sum = 0;
        //    for(i = 0; i < SIZE; i++)
        //    {
        //        a[i] = i+10;
        //        sum = sum + a[i];
        //    }
        //    printf("sum = %d", sum);
        //
        ////    4. (**)计算第一题数组连减,打印计算结果。
        //
        //    int sub = 0;
        //    for(i = 0; i < 2; i++)
        //    {
        //        a[i] = i+10;
        //        sub = sub - a[i];
        //    }
        //    printf("sub = %d", sub + 2 * a[0]);
    
        //    5. (**)随机产生 20 个 10~50 的正整数存放到数组中,并求数组中的多有 元素最大值、最小值、平均值及各元素之和。
        //    int i = 0, max = 0, min = 50, avg = 0, sum = 0;
        //    int num[20] = {0};
        //    for(i = 0; i < 20; i++)
        //    {
        //        num[i] = arc4random()%(50-10+1)+10;
        //        printf("%d ", num[i]);
        //        sum = sum + num[i];
        //        if(num[i] > max)
        //            max = num[i];
        //
        //        if(num[i] < min)
        //            min = num[i];
        //    }
        //    avg = sum/20;
        //    printf("
     max = %d",max);
        //    printf(" min = %d", min);
        //    printf(" avg = %d", avg);
        //    printf(" sum = %d", sum);
    
        //    6. 编写一个程序,输入两个包含 5 个元素的数组,先将两个数组升序排序,然 后将这两个数组合并成一个升序数组。
        //
        //    int a[5] = {0}, b[5] = {0};
        //    int i = 0, j = 0, temp;
        //    printf("Input a 数组的5个元素:");
        //    for(i = 0;i < 5;i++)
        //    {
        //        scanf("%d", &a[i]);
        //    }
        //    printf("Input b 数组的5个元素:");
        //    for(i = 0;i < 5;i++)
        //    {
        //        scanf("%d", &b[i]);
        //    }
        //
        //    //利用冒泡排序,将a数组升序排序
        //    for (i = 0; i < 4; i++) {
        //        for(j = i + 1; j < 5; j++)
        //        {
        //            if(a[i] > a[j])
        //            {
        //                temp = a[i];
        //                a[i] = a[j];
        //                a[j] = temp;
        //            }
        //        }
        //    }
        //    //冒泡排序,将b数组升序排序
        //    for (i = 0; i < 4; i++) {
        //        for(j = i + 1; j < 5; j++)
        //        {
        //            if(b[i] > b[j])
        //            {
        //                temp = b[i];
        //                b[i] = b[j];
        //                b[j] = temp;
        //            }
        //        }
        //    }
        //    for (i = 0; i < 5; i++) {
        //        printf("%d ",a[i]);
        //    }
        //    printf("
    ");
        //    for (i = 0; i < 5; i++) {
        //        printf("%d ",b[i]);
        //    }
        //    int c[10] = {0};
        //    int k = 0;
        //    //组合新数组
        //    for(i = 0; i < 10; i++)
        //    {
        //        if(i < 5)
        //        {
        //            c[k++] = a[i];
        //        }
        //        else
        //        {
        //            c[k++]=b[i-5];
        //        }
        //    }
        //
        //    //冒泡排序,将c数组升序排序
        //    for (i = 0; i < 9; i++) {
        //        for(j = i + 1; j < 10; j++)
        //        {
        //            if(c[i] > c[j])
        //            {
        //                temp = c[i];
        //                c[i] = c[j];
        //                c[j] = temp;
        //            }
        //        }
        //    }
        //    printf("
    ");
        //
        //    for(k = 0; k < 10; k++)
        //    {
        //        printf("%d ", c[k]);
        //    }
    
        //    7. (***)给定某年某月某日,输出其为这一年的第几天。
        //    闰年:能被 4 整除, 且不能被 100 整除 或者 能被 400 整除
        //    int year = 0, mon = 0, day = 0;
        //    printf("Enter  year-mon-day:");
        //    scanf("%d-%d-%d", &year, &mon, &day);
        //
        //   //1,3,5,7,8,10,12是31天,  4,6,9,11是30天,  2月闰年29,平年28
        //    int isNonleap = 28;
        //
        //    isNonleap = ((year%4==0 && year%100!=0)||(year%400==0)) ? 29 : isNonleap;
        //
        //    int monDays[12] = {31, isNonleap, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        //
        //    int count = day;
        //    for (int i = 0; i < mon - 1;i++) {
        //        count += monDays[i];
        //
        //    }
        //printf("给定的日期是这一年的第 %d 天",count);
    
        // 8. (**)编写整型值数组排序程序(冒泡排序、选择排序、快速排序--升序)
        //int a[] = {3,-9,32,77,63,-24,14,0,21,45};
    
        //冒泡排序法
        //    for( int i = 0; i < 9; i++)
        //    {
        //        for( int j = i + 1; j < 10; j++)
        //        {
        //            if(a[i] > a[j])
        //            {
        //                int temp = a[i];
        //                a[i] = a[j];
        //                a[j] = temp;
        //            }
        //        }
        //    }
        //    for (int i = 0; i < 10; i++) {
        //        printf("%d ",a[i]);
        //    }
    
        //选择排序
        //    int min = 0;
        //    for(int i = 0;i < 9; i++)
        //    {
        //        min = i;//查找最小值
        //        for(int j = i + 1;j < 10;j++){
        //            if(a[min] > a[j])
        //                min = j;//交换
        //        }
        //        if(min != i)
        //        {
        //            int t = a[min];
        //            a[min] = a[i];
        //            a[i] = t;
        //        }
        //    }
        //    for (int i = 0; i < 10; i++) {
        //        printf("%d ",a[i]);
        //    }
    
        //快速排序
        //quicksort(a, 0, 9);
        //for (int i = 0; i < 10; i++) {
        //    printf("%d ",a[i]);
        //}
    
        //    9、(***)找出下列整型数组中最大和最小值及其所在位置 i。
    
        //            int a[] = {5,-9,32,77,64,-24,84,0,21,45};
        //            int i = 0, max = 0, min = 100, maxaddress = 0, minaddress = 0;
        //            for(i = 0; i < 10; i++)
        //            {
        //                if(a[i] > max)
        //                {
        //                    max = a[i];
        //
        //                    maxaddress = i;
        //                }
        //                if(a[i] < min)
        //                {
        //                    min = a[i];
        //                    minaddress = i;
        //                }
        //
        //            }
        //            printf("最大值%d,位置%d
    最小值%d,位置%d", max, maxaddress+1, min, minaddress + 1 );
    
    
        //   10、(*)把 str1, str2, str3 合并到 result 数组中。结果:“Lanou 23_class is niu best!”
        //    char result[50] = {0};
        //    char str1[] = "Lanou ";
        //    char str2[] = "23_class ";
        //    char str3[] = " is niu best!";
        //    strcat(result, str1);
        //    strcat(result, str2);
        //    strcat(result, str3);
        //    printf("%s",result);
    
    
        return 0;
    }
    
    
    //快速排序  函数
    void quicksort(int a[],int low,int high)
    {
        int i = low;
        int j = high;
        int temp = a[i];
    
        if( low < high)
        {
            while(i < j)
            {
                while((a[j] >= temp) && (i < j))
                {
                    j--;
                }
                a[i] = a[j];
                while((a[i] <= temp) && (i < j))
                {
                    i++;
                }
                a[j]= a[i];
            }
            a[i] = temp;
            quicksort(a,low,i-1);
            quicksort(a,j+1,high);
        }
    }
  • 相关阅读:
    什么是webview
    juqery.fn.extend和jquery.extend
    LeetCode
    5. Longest Palindromic Substring
    42. Trapping Rain Water
    11. Container With Most Water
    621. Task Scheduler
    49. Group Anagrams
    739. Daily Temperatures
    3. Longest Substring Without Repeating Characters
  • 原文地址:https://www.cnblogs.com/zhaoashen/p/4370512.html
Copyright © 2011-2022 走看看