C语言练习 -- 10

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

//void menu()
//{
//    printf("****************************\n");
//    printf("*****    1.add  2.sub  *****\n");
//    printf("*****    3.mul  4.div  ****\n");
//    printf("*****    5.Xor  0.exit ****\n");
//    printf("****************************\n");
//}
//
//int Add(int x, int y)
//{
//    return x + y;
//}
//int Sub(int x, int y)
//{
//    return x - y;
//}
//int Mul(int x, int y)
//{
//    return x * y;
//}
//int Div(int x, int y)
//{
//    return x / y;
//}
//int Xor(int x, int y)
//{
//    return x ^ y;
//}

//int main()
//{
//    int input = 0;
//    int x = 0;
//    int y = 0;
//  pfArr是一个函数指针数组 - 转移表
//    int(*pfArr[])(int, int) = { 0,Add,Sub,Mul,Div,Xor};
//    do
//    {
//        menu();
//        printf("请选择:>");
//        scanf("%d", &input);
//        if (input >= 1 && input <= 5)
//        {
//            printf("请输入两个操作数:>");
//            scanf("%d%d", &x, &y);
//            int ret = pfArr[input](x, y);
//            printf("%d\n", ret);
//        }
//        else if (input == 0)
//        {
//            printf("退出\n");
//        }
//        else
//        {
//            printf("选择错误\n");
//        }
//    } while (input);
//    return 0;
//}

//void Calc(int(*pf)(int, int))
//{
//    int x = 0;
//    int y = 0;
//    printf("请输入两个操作数:>");
//    scanf("%d%d", &x, &y);
//    printf("%d\n", pf(x, y));
//}
//
//int main()
//{
//    int input = 0;
//
//    do
//    {
//        menu();
//        printf("请选择:>");
//        scanf("%d", &input);
//        switch (input)
//        {
//        case 1:
//            Calc(Add);
//            //printf("请输入两个操作数:>");
//            //scanf("%d%d", &x, &y);
//            //printf("%d\n", Add(x, y));
//            break;
//        case 2:
//            Calc(Sub);
//            //printf("请输入两个操作数:>");
//            //scanf("%d%d", &x, &y);
//            //printf("%d\n", Sub(x, y));
//            break;
//        case 3:
//            Calc(Mul);
//            //printf("请输入两个操作数:>");
//            //scanf("%d%d", &x, &y);
//            //printf("%d\n", Mul(x, y));
//            break;
//        case 4:
//            Calc(Div);
//            //printf("请输入两个操作数:>");
//            //scanf("%d%d", &x, &y);
//            //printf("%d\n", Div(x, y));
//            break;
//        case 0:
//            printf("退出\n");
//            break;
//        default:
//            printf("选择错误\n");
//            break;
//        }
//    } while (input);
//    return 0;
//}

//int Add(int x, int y)
//{
//    return x + y;
//}
//
//
//int main()
//{
//    int arr[10] = { 0 };
//    int (* p)[10] = &arr;//取出数组的地址
//
//    int (*pf)(int, int);//函数指针
//    int (*pfArr[4])(int int);//pfArr是一个数组 - 函数指针的数组
//    //pfArr是一个指向函数指针数组的指针
//    int (*( * ppfArr)[4])(int int) = &pfArr;
//    //ppfArr 是一个数组指针,指针指向的数组有4个元素
//    //指向的数组的每个元素的类型是一个函数指针 int(*)(int,int)
//
//    return 0;
//}


//回调函数
//print(char *str)
//{
//    printf("hehe:%s", str);
//}
//
//void test(void(*p)(char*))
//{
//    printf("test\n");
//    p("bit");
//}
//int main()
//{
//    test(print);
//    return 0;
//}


//void BubbleSort(int arr[], int sz)
//{
//    //...
//}
////qsort - 可以排序任意类型的数据
//
//int main()
//{
//    //冒泡排序函数
//    //冒泡排序函数只能排序整型数组
//    int arr[] = { 1,3,5,7,9,2,4,6,8,0 };
//    int sz = sizeof(arr) / sizeof(arr[0]);
//    BubbleSort(arr, sz);
//    return 0;
//}

//int Add(int x, int y)
//{
//    return x + y;
//}
//int main()
//{
    //指针数组
    //int* arr[10];
    //数组指针
    //int* (* pa)[10] = &arr;
    //函数指针
    //int(* pAdd)(int,int) = Add;//&Add
    //int sum = (* pAdd)(1, 2);
    //printf("sum = %d\n", sum);
    //pAdd(1, 2);
    //printf("sum = %d\n", sum);
    //函数指针的数组
    //int(*pArr[5])(int, int)
    //指向函数指针数组的指针
    //int(*( *ppArr)[5])(int, int) = &pArr;
//    return 0;
//}


//void bubble_sort(int arr[],int sz)
//{
//    int i = 0;
//    for (i = 0; i < sz - 1; i++)
//    {
//        //一趟冒泡排序
//        int j = 0;
//        for (j = 0; j < sz-1-i; j++)
//        {
//            if (arr[j] > arr[j + 1])
//            {
//                int tmp = arr[j];
//                arr[j] = arr[j + 1];
//                arr[j + 1] = tmp;
//            }
//        }
//    }
//}

struct Stu
{
    char name[20];
    int age;
};


//int cmp_int(const void* e1, const void* e2)
//{
//    //比较两个整型值的
//    return *(int*)e1 - *(int*)e2;
//}
//
//int cmp_float(const void* e1, const void* e2)
//{
//    return (int)( * (float*)e1 - *(float*)e2);
//}
//
//int cmp_stu_by_age(const void* e1, const void* e2)
//{
//    return ((struct Stu*)e1)->age - ((struct Stu*)e2)->age;
//}

int cmp_stu_by_name(const void* e1, const void* e2)
{
    //比较名字就是比较字符串
    //字符串比较不能直接用><=来比较,应该用strcmp函数
    return strcmp(((struct Stu*)e1)->name,((struct Stu*)e2)->name);
}
//
//int main()
//{
//    int arr[10] = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
//    int sz = sizeof(arr) / sizeof(arr[0]);
//    //struct Stu s[3] = {{"zhangsan",20},{"lisi",30},{"wangwu",10}};
//    //float f[] = { 9.0,8.0,7.0,6.0,5.0,4.0 };
//    qsort(arr,sz,sizeof(arr[0]),cmp_int);
//    
//
//
//    //bubble_sort(arr, sz);
//
//    //bubble_sort(f, sz);
//    int i = 0;
//    for (i = 0; i < sz; i++)
//    {
//        printf("%d ", arr[i]);
//    }
//    return 0;
//}


//void test1()
//{
//    int arr[10] = { 9,8,7,6,5,4,3,2,1,0 };
//    int sz = sizeof(arr) / sizeof(arr[0]);
//    qsort(arr, sz, sizeof(arr[0]), cmp_int);
//    int i = 0;
//    for (i = 0; i < sz; i++)
//    {
//        printf("%d ", arr[i]);
//    }
//}
//
//void test2()
//{
//    float f[] = { 9.0,8.0,7.0,6.0,5.0,4.0 };
//    int sz = sizeof(f) / sizeof(f[0]);
//    qsort(f, sz, sizeof(f[0]), cmp_float);
//    int j = 0;
//    for (j = 0; j < sz; j++)
//    {
//        printf("%f ", f[j]);
//    }
//}
//
//void test3()
//{
//    struct Stu s[3] = {{"zhangsan",20},{"lisi",30},{"wangwu",10}};
//    int sz = sizeof(s) / sizeof(s[0]);
//    qsort(s, sz, sizeof(s[0]),cmp_stu_by_age);
//}

void test4()
{
    struct Stu s[3] = { {"zhangsan",20},{"lisi",30},{"wangwu",10} };
    int sz = sizeof(s) / sizeof(s[0]);
    qsort(s, sz, sizeof(s[0]), cmp_stu_by_name);
}

int main()
{
    //test1();
    //test2();
    //test3();
    test4();
}



//int main()
//{
//    int a = 10;
//    int* pa = &a;
//    char* pc = &a;//char 和 int 不匹配
//    char ch = 'w';
//    void* p = &ch;
//    void* p = &a;
//    //void* 类型的指针 可以接收任意类型的地址
//    return 0;
//}

//int main()
//{
//    int a = 10;
//    void* p = &a;
//    p++;
//    //*p = 0;
//    //void* 类型的指针不能进行解引用操作
//    //void* 类型的指针不能进行+-整数的操作
//    return 0;
//}

 

posted @ 2022-05-23 09:17  JimJZY  阅读(75)  评论(0)    收藏  举报