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);
        }
    }
  • 相关阅读:
    day 05 讲解java三大特性
    day 02 运算符
    石大 6-9 待提交
    poj分类
    NLog使用总结
    VS 2010下单元测试
    MQTT----物联网常用的消息队列协议
    使用jfreechart生成柱状图、折线图、和饼状图
    JavaBean持久化
    使用maven搭建springMVC开发环境
  • 原文地址:https://www.cnblogs.com/zhaoashen/p/4370512.html
Copyright © 2011-2022 走看看