1.有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。
//void find_k(int* arr, int a, int k)
//{
// int v = a - 1;
// int x = 0;
// while (v>=x)
// {
// if (arr[x] < k)
// {
// x++;
// }
// else if (arr[v] > k)
// {
// v--;
// }
// else
// {
// printf("存在");
// break;
// }
// }
//}
//int main()
//{
// int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
// int a = sizeof(arr) / sizeof(arr[0]);
// int k = 0;
// scanf("%d", &k);
// find_k(arr,a,k);
// return 0;
//}
2.判断凶手,A,B,C,D
//int main()
//{
// int A = 0, B = 0, C = 0, D = 0;
// int FD;//因为c和d的供词刚好对立 表示对立的
// int i;
// for (i = 1; i <= 4; i++)
// {
//
// if (i == 1)//A说的假
// {
// A = 1; C = 1; FD = 1; D = 0;
// }
// if (i == 2)//B说的假
// {
// A = 0; C = 0; FD = 1; D = 0;
// }
// if (i == 3)//C说的假
// {
// A = 0; C = 1; FD = 0; D = 0;
// }
// if (i == 4)//D的说的假
// {
// A = 0; C = 1; FD = 1; D = 0;
// }
// if (A + B + C + D + FD == 1 && FD == D)//只有一个人是凶手 当和为1时一个凶手出现 因为CD供词推出的都是D是不是 与上FD==D是为了排除D是D不是的情况
// printf("A=%d B=%d C=%d D=%d\n", A, B, C, D);
// }
// return 0;
//}
3.杨辉三角
//#define N 14
//int main()
//{
// int i, j, k, n = 0, a[N][N];
// scanf("%d", &n);
// for (i = 1; i <= n + 1; i++)
// a[i][1] = a[i][i] = 1;
// for (i = 3; i <= n + 1; i++)
// for (j = 2; j <= i - 1; j++)
// a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
// for (i = 1; i <= n + 1; i++)
// {
// for (k = 1; k <= n + 1 - i; k++)
// printf(" ");
// for (j = 1; j <= i; j++)
// printf("%4d", a[i][j]);
//
// printf("\n");
// }
//}
4.实现计算器
//Cul(int (*pf)(int x,int y))
//{
// int x = 0;
// int y = 0;
// int ret = 0;
// printf("请输入两个操作数:_ _\n");
// scanf("%d %d", &x, &y);
// ret = pf(x, y);
// printf("结果为%d\n", ret);
//}
//int Add(int x, int y)
//{
// return x + y;
//}
//int jian(int x, int y)
//{
// return x - y;
//}
//int cheng(int x, int y)
//{
// return x * y;
//}
//int chu(int x, int y)
//{
// return x / y;
//}
//void meue()
//{
// printf("*************************************************\n");
// printf("*******1.Add 2.jian 3.cheng************\n");
// printf("*******4.chu 0.退出计算器 ************\n");
// printf("*************************************************\n");
// printf("请选择选择:");
//}
//int main()
//{
// int input = 0;
// meue();
// scanf("%d", &input);
// switch (input)
// {
// case 1:
// Cul(Add);
// case 2:
// Cul(jian);
// case 3:
// Cul(cheng);
// case 4:
// Cul(chu);
// case 0:
// printf("已成功退出计算器\n");
// }
// return 0;
//}
5.练习使用库函数,qsort排序各种类型的数据
//#include<stdlib.h>
//int compare(const void*p1,const void*p2)
//{
// return *(int*)p1 - *(int*)p2;
//}
//void Printf(int lenth,int*arr)
//{
// for (int i = 0; i < lenth; i++)
// {
// printf("%d", arr[i]);
// }
// printf("\n");
//}
//int main()
//{
//
// int arr[10] = { 5,8,9,4,6,7,10,2,1,3 };
// int lenth = sizeof(arr) / sizeof(arr[0]);
// int net = sizeof(arr[0]);
// Printf(lenth, arr);
// qsort(arr, lenth, net, compare);
// Printf(lenth, arr);
// return 0;
//}
6.字符的排序
//#include<stdlib.h>
//#include<string.h>
//void Printf(int lenth,char*arr)
//{
// for (int i = 0; i < lenth; i++)
// {
// printf("%c ", arr[i]);
// }
// printf("\n");
//}
//int compare(const void* p1, const void* p2)
//{
// return strcmp((char*)p1, (char*)p2);
//}
//int main()
//{
// char arr [] = {'g','h','c','e','a','f','b','d'};
// int lenth = sizeof(arr) / sizeof(arr[0]);
// int net = sizeof(arr[0]);
// Printf(lenth, arr);
// qsort(arr, lenth, net, compare);
// Printf(lenth, arr);
// return 0;
//}
7.结构体的排序
//#include<stdlib.h>
//#include<string.h>
//struct stu
//{
// char name[100];
// int age;
//};
//void Printf(int lenth, struct stu* arr)
//{
// for (int i = 0; i < lenth; i++)
// {
// printf("%s %d\n", arr[i].name,arr[i].age);
// }
//}
//int compare(const void* p1, const void* p2)
//{
// return ((struct stu*)p1)->age - ((struct stu*)p2)->age;
//}
//int main()
//{
// struct stu arr[] = { {"zhangsan",28},{"suyu",18},{"chengtaiji",14} };
// int lenth = sizeof(arr) / sizeof(arr[0]);
// int net = sizeof(arr[0]);
// Printf(lenth, arr);
// qsort(arr, lenth, net, compare);
// Printf(lenth, arr);
// return 0;
//}
8.一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。
编写一个函数找出这两个只出现一次的数字。
例如:
有数组的元素是:1,2,3,4,5,1,2,3,4,6
只有5和6只出现1次,要找出5和6.
//int main()
//{
// int arr[] = { 1,2,3,4,5,1,2,3,4,6 };
// int lenth = sizeof(arr) / sizeof(arr[0]);
// int i = 0;
// while (i < lenth)
/
/ {
// int cout = 0;
// for (int j = 0; j < lenth; j++)
// {
// if (arr[i] == arr[j])
// cout++;
// }
// if (cout == 1)
// {
// printf("%d ", arr[i]);
// }
// i++;
// }
// return 0;
9.模仿qsort的功能实现一个通用的冒泡排序
#include<string.h>
void My_qsort(void* arr, size_t lenth, size_t size, int (*compare_int)(const void* p1, const void* p2))
{
int j = 0;
for (int j = 0; j < lenth; j++)
{
int i = 0;
for (i = 0; i < lenth- 1; i++)
{
if (compare_int((char*)arr + size * i, (char*)arr + (i + 1) * size) > 0)
{
swap((char*)arr + size * i, (char*)arr + (i + 1) * size, size);
}
}
}
}
swap(char*buf1, char*buf2,size_t size)
{
char*buf = 0;
for (int j = 0; j < size; j++)
{
char tmp = *buf1;
*buf1 = *buf2;
*buf2 = tmp;
buf1++;
buf2++;
}
}
int compare_int(const void* p1, const void* p2)
{
return *(int*)p1 - *(int*)p2;
}
int compare_char(const void* p1, const void* p2)
{
return strcmp(*(char*)p1, *(char*)p2);
}
Printf(int* arr, int lenth)
{
for (int i = 0; i < lenth; i++)
{
printf("%d ", *(arr + i));
}
}
int main()
{
int arr[10] = { 9,5,3,7,4,6,2,1,0,8 };
int lenth = sizeof(arr) / sizeof(arr[0]);
int size = sizeof(arr[0]);
My_qsort(arr, lenth, size, compare_int);
Printf(arr, lenth);
return 0;
}