巩固C语言(四)-----冒泡排序 & 二分查找 & 单次循环对二维数组赋初值

来源:互联网 发布:数据库日常维护 编辑:程序博客网 时间:2024/06/05 23:07

一 数组初始化

怎样用一次for或while循环对二维数组进行初始化和打印二维数组?

#include<stdio.h>#include<stdlib.h>void main(){int a[3][4] = { 0 };//赋初值for (int i = 0; i < 12; i++)a[i / 4][i % 4] = i;//输出for (int i = 0; i < 12; i++){printf("%-4d", a[i / 4][i % 4]);if ((i+1) % 4 == 0)printf("\n");}system("pause"); }

运行结果:

0   1   2   34   5   6   78   9   10  11请按任意键继续. . .

二 冒泡排序方法和二分查找算法

#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<time.h>#define SIZE 48#define MAX_NUM 48;#define TRUE 1#define FALSE 0//冒泡排序算法void BubbleSort(int a[], int sz){for (int i = 0; i < sz - 1; i++){for (int j = 0; j < sz - 1 - i; j++){if (a[j]>a[j + 1]){int temp = a[j];a[j] = a[j + 1];a[j + 1] = temp;}}}}//二分查找算法int BinarySearch(int arr[], int sz, int num){int beg = 0, end = sz - 1, mid = (beg + end) / 2;while (beg <= end){printf("要查找的头%2d, 尾%2d, 中间变量%2d\n", beg, end, mid);if (arr[mid] == num)return mid;else if (arr[mid] < num){beg = mid + 1;mid = (beg + end) / 2;}else{end = mid - 1;mid = (end + mid) / 2;}}return -1;}//二分查找,中间用for循环int BinarySearch2(int arr[], int sz, int num){for (int beg = 0, end = sz - 1, mid = (beg + end) / 2; beg <= end; mid = (beg + end) / 2){if (arr[mid] == num)return mid;else if (arr[mid > num])end = mid - 1;elsebeg = mid + 1;}return -1}void main(){int arr[SIZE] = { 0 };time_t time;int pos;//返回的位置int num;//要查找的数据srand((unsigned int)(&time));for (int i = 0; i < SIZE; i++)arr[i] = rand() % MAX_NUM;printf("排序之前:\n");for (int i = 0; i < SIZE; i++){printf("%-6d", arr[i]);if ((i + 1) % 8 == 0)printf("\n");}printf("\n排序之后:\n");//冒泡排序BubbleSort(arr, SIZE);for (int i = 0; i < SIZE; i++){printf("%-6d", arr[i]);if ((i + 1) % 8 == 0)printf("\n");}//输入要查找的数据printf("\n请输入要查找的数据:");scanf("%d", &num);//二分查找方法pos = BinarySearch(arr, SIZE, num);if (pos != -1)printf("位置下标为:%d\n", pos);elseprintf("没有找到!\n");system("pause");}

运行结果:

排序之前:28    12    10    5     3     11    11    538    8     46    41    33    16    15    1222    11    4     14    17    36    12    2845    41    27    2     24    21    37    144     44    40    39    0     39    16    147     17    21    35    23    32    39    27排序之后:0     2     3     4     4     5     5     78     10    11    11    11    12    12    1214    14    14    15    16    16    17    1721    21    22    23    24    27    27    2828    32    33    35    36    37    38    3939    39    40    41    41    44    45    46请输入要查找的数据:36要查找的头 0, 尾47, 中间变量23要查找的头24, 尾47, 中间变量35要查找的头36, 尾47, 中间变量41要查找的头36, 尾40, 中间变量40要查找的头36, 尾39, 中间变量39要查找的头36, 尾38, 中间变量38要查找的头36, 尾37, 中间变量37没有找到!请按任意键继续. . .

三 针对目标程序写外挂以改变其内存值

源程序:

#include<stdio.h>#include<stdlib.h>#include<windows.h>void msg(){while (1){MessageBoxA(0, "Good good study, day day up!", "C++", 0);Sleep(2000);}}void main(){int num = 108;printf("%x, %x\n", &num, msg);while (1){printf("Good Good Study! %d\n", num);Sleep(2000);}}

运行结果:



针对该程序的外挂:

_declspec(dllexport) void go(){int * my_num = (int *)0x23ff0c;//针对int类型*my_num = -1080;void(* my_msg) () = (void (*)())0xf11118;//针对函数my_msg();}

注意:别忘了在属性里将配置类型修改为动态库.dll,用注射软件将该dll文件注射到上一个程序中。

0 0