• iOS开发之c语言基础Lesson-09 高级指针 上课笔记 与 试题练习


    main.m 文件

      1 //
      2 //  main.m
      3 //  Lesson09-PointerUpdate
      4 //
      5 //  Created by lanouhn on 15/3/27.
      6 //  Copyright (c) 2015年 Ashen. All rights reserved.
      7 //
      8 
      9 #import <Foundation/Foundation.h>
     10 #import "Student.h"
     11 
     12 
     13 void swap(int *p1, int *p2);
     14 void swap(int *p1, int *p2){
     15     int temp = *p1;
     16     *p1 = *p2;
     17     *p2 = temp;
     18 }
     19 
     20 //初始化数组
     21 void initArr(int *arr, int n);
     22 void initArr(int *arr, int n){
     23     for (int i  = 0; i < n ;i++) {
     24         *(arr+i)= arc4random() % (40 - 20 + 1) + 20;
     25     }
     26 }
     27 //输出数组
     28 void printArr(int *arr, int n);
     29 void printArr(int *arr, int n){
     30     for (int i = 0;i < n; i++) {
     31         printf("%d ",*(arr + i));
     32     }
     33     printf("
    ");
     34 }
     35 //数组降序排序
     36 void sortArrDesc(int *arr, int n);
     37 void sortArrDesc(int *arr, int n){
     38     for (int i = 0; i < n - 1; i++) {
     39         for (int j = 0; j < n - 1 - i; j++) {
     40             if (*(arr +j ) < *(arr + j + 1)) {
     41                 //临时变量:
     42                 //如果存储整形,用int 定义整形变量
     43                 //如果存储地址, 用int *  定义指着变量
     44                 int temp = *(arr + j);
     45                 *(arr + j) = *(arr + j + 1);
     46                 *(arr + j + 1) = temp;
     47             }
     48         }
     49     }
     50 }
     51 
     52 //第二大
     53 int getSecondMax(int *arr, int n);
     54 int getSecondMax(int *arr, int n){
     55     sortArrDesc(arr, n);//降序排序
     56     int secondMax = 0;
     57     for (int i = 0; i < n; i++) {
     58         if (*(arr + i) != *arr) {  //从第一个开始往后,找到与第一个不一样的 直接break,找到了secondMax
     59             secondMax = *(arr + i);
     60             break;
     61         }
     62     }
     63     return secondMax;
     64 }
     65 //求数组第三大值
     66 int getThirdMax(int *arr, int n);
     67 int getThirdMax(int *arr, int n){
     68     //    int max = 0;
     69     //    int secondMax = 0;
     70     //    int thirdMax = 0;
     71     //    //    for (int i = 0; i < n; i++) {
     72     //    //        if (*(arr + i) > max) {
     73     //    //            thirdMax = secondMax;
     74     //    //            secondMax = max;
     75     //    //            max = *(arr + i);
     76     //    //        }else if(secondMax < *(arr + i) && *(arr + i) < max){
     77     //    //            secondMax = *(arr + i);
     78     //    //        }else if(thirdMax < *(arr + i) && *(arr + i) < secondMax){
     79     //    //            thirdMax = *(arr + i);
     80     //    //        }
     81     //    //    }
     82     //
     83     
     84     int thirdMax = 0;
     85     sortArrDesc(arr, n);//降序排序
     86     for (int i = 0; i < n; i++) {
     87         if (*(arr + i) < getSecondMax(arr, n)) {
     88             thirdMax = *(arr + i);
     89             break;
     90         }
     91     }
     92     
     93     return thirdMax;
     94 }
     95 
     96 //第二小
     97 int getSecondMin(int *arr, int n);
     98 int getSecondMin(int *arr, int n){
     99     int secondMin = 0;
    100     //    for (int i = 1; i < n; i++) {
    101     //        if (*(arr + i) <min ) {
    102     //            secondMin = min;
    103     //            min = *(arr + i);
    104     //
    105     //        }else if(secondMin > *(arr + i) && *(arr + i) > min){
    106     //            secondMin = *(arr + i);
    107     //        }
    108     //    }
    109     
    110     sortArrDesc(arr, n);
    111     for (int i = n - 1; i >=0; i--) {
    112         if(*(arr + i) > *(arr + n - 1)){
    113             secondMin = *(arr + i);
    114             break;//找到即终止
    115         }
    116     }
    117     return secondMin;
    118 }
    119 int main(int argc, const char * argv[]) {
    120     
    121     ////////////////////Lessson09 高级指针 课堂笔记//////////
    122     
    123     //高级指针
    124     //指针使用必须具备的两点内容、
    125     //1.指针必须要有明确指向。
    126     //2.指针必须指向一块可控空间
    127     
    128     //    int a = 10; //只有当指针指向一个变量或者数组的首地址时,才可以修改空间上的内容。
    129     //    int *ptr = &a;
    130     //    *ptr = 5;
    131     //    printf("%d ", a);
    132     
    133     //    int num1 = 5, num2 = 10;
    134     //    swap(&num1, &num2); //如果想在函数内部操作变量a和b,应该传递地址
    135     //    //函数调用的传值方式:
    136     //    //1.值传递:直接传递变量中得数据。适用于函数内部只使用外界的数据,不想更改外界的值的场景
    137     //    //2.地址传递:直接传递变量地址。适用于函数内部操作想要更改外界的内容的场景
    138     //
    139     //
    140     //    printf("num1 = %d, num2 = %d", num1, num2);
    141     
    142     
    143     /////////////////
    144     //指针、数组和函数之间的关系
    145     //    int arr[10] = {0};
    146     //    initArr(arr, 10);
    147     //    printArr(arr, 10);
    148     //    sortArrDesc(arr, 10);
    149     //    printArr(arr, 10);
    150     //    printf("SecondMax = %d 
    ", getSecondMax(arr, 10));
    151     //    printf("ThirdMax = %d 
    ", getThirdMax(arr, 10));
    152     //    printf("SecondMin = %d 
    ", getSecondMin(arr, 10));
    153     
    154     /////////////////
    155     //    //指针 和 结构体关系
    156     //    typedef struct student{
    157     //        char name[20];
    158     //        int age;
    159     //        float score;
    160     //    }Stu;
    161     //
    162     //    //    Stu student1  = {"Ashen", 24, 98.9};
    163     //    //    //1. 结构体变量,访问结构体成员,通过 变量.成员
    164     //    //    printf("%s
    ", student1.name);
    165     //    //
    166     //    //    //结构体指针变量访问结构体成员   结构体指针变量->成员   (指向操作符)
    167     //    //    Stu *ptr = &student1; //结构体指针变量指向结构体变量的首地址。
    168     //    //    printf("%s
    ", ptr->name);
    169     //    //
    170     //    //    printf("%s
    ",(*ptr).name); //*ptr == student1
    171     //
    172     //
    173     //    //////////////////
    174     //    //结构体数组和指针的关系
    175     //    Stu  students[5] = {
    176     //        {"Tom", 32, 89},
    177     //        {"Jack", 22, 76},
    178     //        {"Rose", 20, 98},
    179     //        {"Jobs", 18, 65},
    180     //        {"Ashen", 24, 110}
    181     //    };
    182     //        Stu *ptrs = students;
    183     //    //
    184     //    //    printf("%s
    ", (ptrs + 2)->name);
    185     //    //    printf("%s
    ", (*(ptrs + 2)).name);
    186     //    //
    187     //    //    printf("%.2f
    ", (ptrs + 3)->score);
    188     //    //
    189     //    //    (ptrs + 4)->score = 60;
    190     //    //    (*(ptrs + 4)).score = 60;
    191     //    //
    192     //    //    printf("%.2f
    ", (ptrs + 4)->score);
    193     //    //    strcpy(ptrs->name, "Cat");
    194     //    //    printf("%s
    ", ptrs->name);
    195     //    //    strcpy((*ptrs).name, "Tom is a Cat");
    196     //    //    printf("%s
    ", ptrs->name);
    197     //
    198     //    for (int i = 0; i < 5 - 1; i++) {
    199     //        for ( int j = 0; j < 5 - 1 - i; j++) {
    200     //            if (strcmp((ptrs + j)->name, (ptrs + j + 1)->name) > 0) {
    201     //                Stu  temp = *(ptrs + j);
    202     //                *(ptrs + j) = *(ptrs + j + 1);
    203     //                *(ptrs + j + 1) = temp;
    204     //            }
    205     //        }
    206     //    }
    207     //    for (int i = 0; i < 5; i++) {
    208     //        printf("Name = %s, Age = %d, Score = %.2f
    ", (ptrs + i)->name, (ptrs + i)->age, (ptrs + i)->score);
    209     //    }
    210     //
    211     
    212     //分别编写函数,实现所有学生按成绩升序, 按年龄降序, 按学号升序, 按姓名降序, 输出所有学生信息, 输入所有学生信息。
    213     
    214     Stu students[5] = {0};
    215     
    216     initStudent(students, 5);
    217     printStudents(students, 5);
    218     
    219     
    220     sortScoreAsc(students, 5);
    221     
    222     sortAgeDesc(students, 5);
    223     
    224     sortNoAsc(students, 5);    
    225     
    226     sortNameDesc(students, 5);
    227     printStudents(students, 5);
    228     
    229     
    230     
    231     return 0;
    232 }

    Student.h文件

     1 //
     2 //  Student.h
     3 //  Lesson09-PointerUpdate
     4 //
     5 //  Created by lanouhn on 15/3/27.
     6 //  Copyright (c) 2015年 Ashen. All rights reserved.
     7 //
     8 
     9 #import <Foundation/Foundation.h>
    10 
    11 typedef struct student{
    12     char name[20];
    13     int age;
    14     int num;
    15     float score;
    16 }Stu;
    17 
    18 
    19 //分别编写函数,实现所有学生按成绩升序, 按年龄降序, 按学号升序, 按姓名降序, 输出所有学生信息, 输入所有学生信息。
    20 
    21 //初始化学生
    22 void initStudent(Stu *s, int n);
    23 
    24 //按学生成绩升序
    25 void sortScoreAsc(Stu *s, int n);
    26 
    27 //按年龄降序
    28 void sortAgeDesc(Stu *s, int n);
    29 
    30 //按学号升序
    31 void sortNoAsc(Stu *s, int n);
    32 
    33 //按姓名降序
    34 void sortNameDesc(Stu *s, int n);
    35 
    36 //输出学生
    37 void printStudents(Stu *s, int n);

    Student.m文件

     1 //
     2 //  Student.m
     3 //  Lesson09-PointerUpdate
     4 //
     5 //  Created by lanouhn on 15/3/27.
     6 //  Copyright (c) 2015年 Ashen. All rights reserved.
     7 //
     8 
     9 #import "Student.h"
    10 
    11 //初始化学生
    12 void initStudent(Stu *s, int n){
    13     
    14     char names[10][20] ={"Jack", "Tom", "Rose", "Jobs", "Cook"};
    15     int num[] = {1, 3, 2, 5, 4};
    16     for (int i = 0; i < n;i++) {
    17         strcpy((s + i)->name, names[i]);
    18         (s + i)->age = arc4random() % (30 - 10 + 1) + 10;
    19         (s + i)->num = num[i];
    20         (s + i)->score  = arc4random() % 101;
    21     }
    22     
    23 //    for (int i = 0; i< n; i++) {
    24 //        printf("添加 %d 位学生的信息(e.g. 001 Ashen 24 89):", i + 1);
    25 //        scanf("%d%s%d%f", &(s + i )->num, (s + i)->name, &(s + i)->age, &(s + i)->score);
    26 //    }
    27     
    28 }
    29 
    30 //按学生成绩升序
    31 void sortScoreAsc(Stu *s, int n){
    32     for (int i = 0; i < n - 1; i++) {
    33         for ( int j = 0; j < n - 1 - i; j++) {
    34             if ((s + j)->score > (s + j + 1)->score) {
    35                 Stu  temp = *(s + j);
    36                 *(s + j) = *(s + j + 1);
    37                 *(s + j + 1) = temp;
    38             }
    39         }
    40     }
    41 }
    42 
    43 //按年龄降序
    44 void sortAgeDesc(Stu *s, int n){
    45     for (int i = 0; i < n - 1; i++) {
    46         for ( int j = 0; j < n - 1 - i; j++) {
    47             if ((s + j)->age < (s + j + 1)->age) {
    48                 Stu  temp = *(s + j);
    49                 *(s + j) = *(s + j + 1);
    50                 *(s + j + 1) = temp;
    51             }
    52         }
    53     }
    54     
    55 }
    56 
    57 //按学号升序
    58 void sortNoAsc(Stu *s, int n){
    59     for (int i = 0; i < n - 1; i++) {
    60         for ( int j = 0; j < n - 1 - i; j++) {
    61             if ((s + j)->num > (s + j + 1)->num) {
    62                 Stu  temp = *(s + j);
    63                 *(s + j) = *(s + j + 1);
    64                 *(s + j + 1) = temp;
    65             }
    66         }
    67     }
    68     
    69 }
    70 
    71 //按姓名降序
    72 void sortNameDesc(Stu *s, int n){
    73     for (int i = 0; i < n - 1; i++) {
    74         for ( int j = 0; j < n - 1 - i; j++) {
    75             if (strcmp((s + j)->name, (s + j + 1)->name) < 0) {
    76                 Stu  temp = *(s + j);
    77                 *(s + j) = *(s + j + 1);
    78                 *(s + j + 1) = temp;
    79             }
    80         }
    81     }
    82     
    83 }
    84 
    85 //输出学生
    86 void printStudents(Stu *s, int n){
    87     for (int i = 0; i < n; i++) {
    88         printf("Num = %d, Name = %s, Age = %d, Score = %.2f
    ",(s + i)->num, (s + i)->name, (s + i)->age, (s + i)->score);
    89     }
    90     printf("
    ");
    91 }
  • 相关阅读:
    ActiveMQ的spring配置文件
    ActiveMQ consumer按顺序处理消息
    ActiveMQ异步分发消息
    2个线程顺序工作
    hadoop更换硬盘
    linux内存条排查
    gitlab迁移升级
    linux 监控网卡实时流量iftop
    gitlab7.2安装
    为首次部署MongoDB做好准备:容量计划和监控
  • 原文地址:https://www.cnblogs.com/zhaoashen/p/4377725.html
Copyright © 2020-2023  润新知