一、转移表实现(计算器的一般实现):
#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排序也叫快速排序,可以排序任意类型的数据,而我们熟知的冒泡排序,只能用来排序整型数据。