【C/C++学院】(2)函数/Lua/数组/恶搞程序(修改桌面背景,播放音乐)

简介: <h1><span style="font-family:'Microsoft YaHei UI','Microsoft YaHei',SimSun,'Segoe UI',Tahoma,Helvetica,sans-serif,'Microsoft YaHei',Georgia,Helvetica,Arial,sans-serif,宋体,PMingLiU,serif; font-size:

1.函数                                                                                                                                                                                                                      

主要是为了代码重用。

函数就是对某一特定功能的抽象。
    模拟键盘输入: keybd_event();不断花费广告人在百度中的广告费。
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>


void OpenBaidu()
{
	ShellExecuteA(0, "open", "http://www.baidu.com", 0, 0, 3);
}

void CloseBaidu()
{
	system("taskkill /f /im 360se.exe");
}

void Input()//模拟键盘输入xianhua
{
	keybd_event('X', 0, 0, 0);//按下
	keybd_event('X', 0, 2, 0);//抬起
	Sleep(300);
	keybd_event('I', 0, 0, 0);
	keybd_event('I', 0, 2, 0);
	Sleep(300);
	keybd_event('A', 0, 0, 0);//按下
	keybd_event('A', 0, 2, 0);//抬起
	Sleep(300);
	keybd_event('N', 0, 0, 0);//按下
	keybd_event('N', 0, 2, 0);//抬起
	Sleep(300);
	keybd_event('H', 0, 0, 0);//按下
	keybd_event('H', 0, 2, 0);//抬起
	Sleep(300);
	keybd_event('U', 0, 0, 0);//按下
	keybd_event('U', 0, 2, 0);//抬起
	Sleep(300);
	keybd_event('A', 0, 0, 0);//按下
	keybd_event('A', 0, 2, 0);//抬起
	Sleep(300);
	keybd_event(0x0D, 0, 0, 0);//按下回车
	keybd_event(0x0D, 0, 2, 0);//抬起
}

void Click()//鼠标单击
{
	//移动到屏幕位置
	//mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, 200 * 65535 / 1440, 400 * 65535 / 900, 0, 0);
	SetCursorPos(200, 400);
	Sleep(2000);
	mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
	mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
}

void main()
{
	for (;;)
	{
		OpenBaidu();
		Sleep(5000);
		Input();
		Sleep(3000);
		Click();
		Sleep(5000);
		CloseBaidu();
	}	
}
参数传递是单向传递;

副本机制;
函数声明可以有多个,  但是函数实体只能有一个。
函数名的本质是内存地址。

接口: 高内聚,低耦合
360杀毒软件的架构例子:
服务器端更新脚本,客户端软件更加脚本进行相应的杀毒处理。


2.Lua 是一个小巧的脚本语言                                                                                                                                                                                  

其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。 Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译,运行。Lua并没有提供强大的库,这是由它的定位决定的。所以Lua不适合作为开发独立应用程序的语言。
Lua脚本可以很容易的被 C/C++  代码调用,也可以反过来调用C/C++的 函数 Lua由标准C编写而成, 代码 简洁优美,几乎在所有 操作系统 平台 上都可以 编译 ,运行。 一个完整的 Lua 解释器不过200k,在目前所有 脚本引擎 中,Lua的速度是最快的。这一切都决定了Lua是作为 嵌入式 脚本的最佳选择。

3.数组                                                                                                                                                                                                                         

数组访问的两种形式;

num[i]  <--> *(num+i);
&num[i] <-->num+i;
#include <stdio.h>
#include <stdlib.h>
void main()
{
    int a[10] = { 0 };
    time_t ts;
    srand((unsigned int )time(&ts));
    for (int i = 0; i < 10; i++)
    {
        a[i] = rand()%100;
        printf("%d, ", a[i]);
    }
    printf("\n");    
    for (int i = 0; i < 10; i++)
    {
        
        printf("%d, %d ,%x, %x\n",a[i],*(a+i), &a[i], (a+i));
    }
    system("pause");
}




选择法排序;

#include <stdio.h>
#include <stdlib.h>
void SelectSort(int a[], int n)
{
    int i, j, min, temp;
    for (i = 0; i < n; i++)
    {
        min = i;//min为最小值的数组下标
        for (j = i + 1; j < n; j++)
        {
            if (a[j] < a[min])
            {
                min = j;
            }
        }
        if (min != i)
        {
            temp = a[min];
            a[min] = a[i];
            a[i] = temp;
        }
    }
}
void main()
{
    int a[10] = { 0 };
    time_t ts;
    srand((unsigned int )time(&ts));
    for (int i = 0; i < 10; i++)
    {
        a[i] = rand()%100;
        printf("%d, ", a[i]);
    }
    printf("\n");
    SelectSort(a, 10);
    for (int i = 0; i < 10; i++)
    {
        
        printf("%d, ", a[i]);
    }
    system("pause");
}

冒泡法排序;

#include <stdio.h>
#include <stdlib.h>
void BubbleSort(int a[], int n)
{
    int i, j, temp;
    for (int i = 0; i < n - 1; i++)
    {
        for (int j = 0; j < n - 1 - i; j++)
        {
            if (a[j]>a[j + 1])
            {
                temp = a[j];
                a[j] = a[j + 1];
                a[j + 1] = temp;
            }
        }
    }
}
void main()
{
    int a[10] = { 0 };
    time_t ts;
    srand((unsigned int )time(&ts));
    for (int i = 0; i < 10; i++)
    {
        a[i] = rand()%100;
        printf("%d, ", a[i]);
    }
    printf("\n");
    BubbleSort(a, 10);
    for (int i = 0; i < 10; i++)
    {
        printf("%d, ", a[i]);
    }
    system("pause");
}

4.恶搞程序(修改桌面背景,播放音乐)

#include <Windows.h>

void main()
{
	char buf[100] = { 0 };
	int i = 3;
	sprintf(buf, "E:\\bj\\%d.jpg", i);

	SystemParametersInfoA(20, 0, buf, 3);//20--桌面背景, 3--立即执行
	//SystemParametersInfoA(20, 0, "E:\\bj\\0.jpg", 3);//20--桌面背景, 3--立即执行
	ShellExecuteA(0, "open", "E:\\bj\\0.mp3", 0, 0, SW_NORMAL);//播放音乐
}




目录
相关文章
|
1月前
|
存储 程序员 编译器
简述 C、C++程序编译的内存分配情况
在C和C++程序编译过程中,内存被划分为几个区域进行分配:代码区存储常量和执行指令;全局/静态变量区存放全局变量及静态变量;栈区管理函数参数、局部变量等;堆区则用于动态分配内存,由程序员控制释放,共同支撑着程序运行时的数据存储与处理需求。
101 21
|
26天前
|
程序员 C++ 容器
在 C++中,realloc 函数返回 NULL 时,需要手动释放原来的内存吗?
在 C++ 中,当 realloc 函数返回 NULL 时,表示内存重新分配失败,但原内存块仍然有效,因此需要手动释放原来的内存,以避免内存泄漏。
|
1月前
|
存储 前端开发 C++
C++ 多线程之带返回值的线程处理函数
这篇文章介绍了在C++中使用`async`函数、`packaged_task`和`promise`三种方法来创建带返回值的线程处理函数。
45 6
|
1月前
|
C++
C++ 多线程之线程管理函数
这篇文章介绍了C++中多线程编程的几个关键函数,包括获取线程ID的`get_id()`,延时函数`sleep_for()`,线程让步函数`yield()`,以及阻塞线程直到指定时间的`sleep_until()`。
23 0
C++ 多线程之线程管理函数
|
1月前
|
编译器 C语言 C++
C++入门3——类与对象2-2(类的6个默认成员函数)
C++入门3——类与对象2-2(类的6个默认成员函数)
23 3
|
1月前
|
编译器 C语言 C++
详解C/C++动态内存函数(malloc、free、calloc、realloc)
详解C/C++动态内存函数(malloc、free、calloc、realloc)
154 1
|
1月前
|
编译器 C语言 C++
C++入门6——模板(泛型编程、函数模板、类模板)
C++入门6——模板(泛型编程、函数模板、类模板)
41 0
C++入门6——模板(泛型编程、函数模板、类模板)
|
6天前
|
存储 编译器 C++
【c++】类和对象(中)(构造函数、析构函数、拷贝构造、赋值重载)
本文深入探讨了C++类的默认成员函数,包括构造函数、析构函数、拷贝构造函数和赋值重载。构造函数用于对象的初始化,析构函数用于对象销毁时的资源清理,拷贝构造函数用于对象的拷贝,赋值重载用于已存在对象的赋值。文章详细介绍了每个函数的特点、使用方法及注意事项,并提供了代码示例。这些默认成员函数确保了资源的正确管理和对象状态的维护。
29 4
|
7天前
|
存储 编译器 Linux
【c++】类和对象(上)(类的定义格式、访问限定符、类域、类的实例化、对象的内存大小、this指针)
本文介绍了C++中的类和对象,包括类的概念、定义格式、访问限定符、类域、对象的创建及内存大小、以及this指针。通过示例代码详细解释了类的定义、成员函数和成员变量的作用,以及如何使用访问限定符控制成员的访问权限。此外,还讨论了对象的内存分配规则和this指针的使用场景,帮助读者深入理解面向对象编程的核心概念。
23 4
|
30天前
|
存储 编译器 对象存储
【C++打怪之路Lv5】-- 类和对象(下)
【C++打怪之路Lv5】-- 类和对象(下)
27 4