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("\n最大:%d ", max );

    // printf("\n第二大:%d ", secondMax);

    // printf("\n最小:%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("\n最大:%d ", a[4]);

    // printf("\n第二大:%d ", a[3]);

    // printf("\n最小:%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("\n+");

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

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

    // }

    // printf("\n=");

    // 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("\n");

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

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

    // }

    // printf("\n");

    // 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("\n");

    // 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("\n");

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

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

    // }

    // 



    ///////////////////

    //字符数组

    //char str[4] = {'a', 'b', 'c', 'd'};

    //字符串, 结束标志: '\0' 对应的整数值是 0

    char str[10] = "hello";

    //输出字符串格式, %s,数组名; %s的工作原理: 从第一个字符开始, 一个字符一个字符的输出,直到遇到 '\0' 结束

    printf("%s", str);



    /////字符数组所占的内存空间////

    //1.指定元素个数.

    char str1[10] = "iPhone";



    //unsigned long(lu),

    //sizeof() 可以用来求变量, 数组, 数据类型, 所占存储空间大小

    printf(" %lu\n", sizeof(str1));

    //2.不指定元素个数, 字符串结束标志 '\0' 也是占存储空间

    char str2[] = "iPhone";

    printf(" %lu\n", 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\n", i, a[i]);

    // }

    // 2. (*)将第一题中的数组a反向输出。

    // for(i = SIZE-1;i>=0;i--)

    // {

    // printf("a[%d] = %d\n", 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("\n 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("\n");

    // 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("\n");

    //

    // 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\n最小值%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);

    }

}

你可能感兴趣的:(ios开发)