初始指针4

一、转移表实现(计算器的一般实现):

#include<stdio.h>
int add(int a, int b)
{
	return a + b;
}
int sub(int a, int b)
{
	return a - b;
}
int mul(int a, int b)
{
	return a * b;
}
int div(int a, int b)
{
	return a / b;
}
void meau()
{
	printf("*************************\n");
	printf("*******1.add 2.sub*******\n");
	printf("*******3.mul 4.div*******\n");
	printf("*******0.exit     *******\n");
	printf("*************************\n");
}
int main()
{
	int input;
	int x, y;
	int (*p[5])(int x, int y) = { 0,add,sub,mul,div };
	int ret=0;
	do {
		meau();
		printf("请选择:");
		scanf("%d", &input);
		if (input >= 1 && input <= 4)
		{
			printf("请输入两个操作数:");
			scanf("%d %d", &x, &y);
			ret = (*p[input])(x, y);
			printf("%d\n", ret);
		}
		else if (input == 0)
		{
			printf("退出计算器。\n");
		}
		else {
			printf("请重新输入\n");
		}

	} while (input);
	return 0;
}

二、qsort的使用

qsort是用来排序任意类型数据的库函数。它所对应的头文件是stdlib.h,下面是在cpluspius网站搜索到的qsort函数参数类型以及使用说明。

void*base:是指向要排序的数组的第一个对象的指针,转换为空*。

size_t num:排序数组中元素的个数。

size _t size:每个元素的大小(以字节为单位)。

int(*compar)(const void*,const void*):对元素进行比较。

下面我们通过代码来进行理解qsort使用:

#include<stdio.h>
void int_cmp(const void* p1, const void* p2)
{
	return (*(int*)p1 - *(int*)p2);
}
int main()
{
	int arr[10] = { 1,4,7,8,9,6,3,2,5,0 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	qsort(arr, sz, sizeof(int), int_cmp);
	for (int i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

运行结果如下:

那我们现在换成其他类型数据进行排序试试看。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct stu//学生
{
	char name[20];//名字
	int age;//年龄
};
int cmp_stu_by_age(const void* p1, const void* p2)//通过年龄排序
{
	return ((struct stu*)p1)->age-((struct stu*)p2)->age;
}
int cmp_stu_by_name(const void* p1, const void* p2)//通过名字排序
{
	return strcmp(((struct stu*)p1)->name, ((struct stu*)p2)->name);//strcmp是库函数,用来比较两个字符串大小,应用头文件string.h。
}
void test1()
{
	struct stu s[] = { {"zhang san",18},{"li si",24},{"wang wu",15}};
	int sz = sizeof(s) / sizeof(s[0]);
	qsort(s, sz, sizeof(s[0]), cmp_stu_by_age);
}
void test2()
{
	struct stu s[] = { {"zhang san",18},{"li si",24},{"wang wu",15}};
	int sz = sizeof(s) / sizeof(s[0]);
	qsort(s, sz, sizeof(s[0]), cmp_stu_by_name);
}
int main()
{
	test1();
	test2();
	return 0;
}

以上是排序结构体的数据。

qsort排序也叫快速排序,可以排序任意类型的数据,而我们熟知的冒泡排序,只能用来排序整型数据。

  • 19
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值