admin管理员组文章数量:1578573
创建一个项目不能包含特殊字符,最好用英文加上数字
空项目没有什么可以生成,不会失败
#include<>表示包含系统的文件,而#include””表示包含自己写的文件
Main函数有且只能有一个
预处理指令可以不加分号
C语言的输入输出靠的是标准库stdio,其中std表示标准库,io表示输入输出,i是input输入,o是output输出
命令提示符编程
Cmd打开命令提示
要运行写的程序,首先找到程序所在的目录,进入程序的exe文件的目录后,输入程序的名称即可执行程序。
System函数需要先包含“stdlib.h”头文件,暂停的命令是“pause”
任何c程序都可以以main为入口点来执行。
Void main(){ } 解析:void表示main函数的返回值为空,main执行完成可以什么都不返回,()里面表示的是执行main函数所需的参数,此处表示无参数,{ }表示函数体,指main函数执行需要做的工作。
Printf(“字符串”) 解析:调用printf输出函数输出字符串,printf函数在<stdio.h>中,要使用printf需要包含头文件<stdio.h>
一个最简单的helloworld程序:
#include<stdio.h>
void main(){
printf("Helloword");
getchar();//等待输入一个字符
}
解析:#include表示包含头文件,<stdio.h>表示的是输入输出的头文件,getchar()可以让程序处于等待状态,等待输入一个字符后程序执行结束
//代表注释一行,/* */ 中间的内容不管多少行都会被注释
编译器会自动忽略注释以及空格、换行等,被忽略的内容不影响程序的长度,也不影响程序的正常运行
重点:断点调试
插入断点:在要插入断点的地方,右键→断点→插入断点
左侧变成一个红色的点说明断点插入成功
在断点模式下点击:调试→窗口,可以选择GPU、反汇编、线程等的查看
断点调试结束停止调试,然后删除断点即可
#include解析
如果是包含源文件(系统文件)则用<>,如果是包含自己写的内容,则用””
#include可以在任意的位置使用
#include类似调用,而被其包含的头文件类似函数,即整个过程类似函数的调用
被包含的头文件名字以及后缀可以随便取,例如:#include”123.txt”
#include”lojh.abc”等
#和include之间可以有0个空格也可以有n个空格
#include的作用:在程序运行之前把一些东西加载进来
#include预处理语句可以不加上分号结束,但是其他语句需要加上分号结束
Main函数有且只有一个
Stdio.h是输入输出库,c语言没有输入输出语句,完全靠的是输入输出标准库
Cpp兼容c
C语言的命令行程序
Win+r输入cmd进入命令行模式
Ipconfig查看本机ip
Ping ip 查看网络是否畅通
Cd 进入目录, D:切换至d盘
System函数在stdlib.h头文件里面,要使用system需要包含stdlib.h文件
System(“pause”)表示暂停
System(“c:\\cmd.exe”)表示执行cmd.exe程序
C语言打开一个exe程序
弹出对话框:首先要包含windows.h这个头文件(#include<windows.h>);然后需要调用MessageBox(0,””,“”,0);这个函数。解析:第一个参数表示依赖窗口参数,设置为0表示windows系统弹出,第二个参数表示对话框的内容,第三个是对话框的标题,第四个是对话框类型,设置为0即可。
重点:
#include<stdio.h>
#include<Windows.h>//windows.h头文件,用来调用弹窗等,MessageBox(0,"","",0);需要此头文件支持
void main(){
printf("helloworld");
MessageBox(0, "你的电脑中毒了", "Windows提示!", 0);//第一个参数代表的是依赖窗口编号,设置为0表示的是打开系统窗口,第二个代表的弹窗的内容,第三个代表的是弹窗的标题,第四个代表的是窗口的类型,设置为0即可
ShellExecute(0,"open","F:\\Program Files (x86)\\Tencent\\WeChat\\WeChat.exe",0,0,1);//ShellExecute是windows里面进行一系列操作的函数
/*
ShellExecute(0,"open","程序路径、cmd命令、文档路径、网址等",0,0,1);共有6个参数,第一个参数代表的是谁执行的,0代表是系统执行的,第二个参数指执行的操作,一般只有open和print,
第三个参数指需要执行的东西,可以是程序、网站、命令等,第四个和第五个表示的是系统保留的参数,一般不做修改,第六个是控制打开的窗口隐藏、最大化、最小化
参数6代表最小化、1是最大化
open代表打开的类型,如果换成print则是打印
*/
ShellExecute(0, "open", "https://www.baidu/",0,0,6);//ShellExecute依赖于windows.h文件
ShellExecute(0, "open", "mailto:1334058176@qq",0,0,1);//发送邮件给1334058用户
getchar();
}
- printf(“%d”,c)//把c按十进制打印出来
- printf(“\n”); \n表示换行,\t表示制表符
MFC程序
- MFC设置:
- 找到视图→工具箱→把Button拖到窗口内
- 点击Button会在右下角有一个属性
- 进行属性的设置
这是按钮的名字,根据需要设置
- 双击按钮进入代码,在此书写需要执行的代码
1.转义字符:
\n 表示换行 ,\t表示制表符(空格),\a 表示发声,\b实现光标退格,\f在编辑器里面是换页,在dos命令是垃圾字符,\r 把光标移动到当前行的开头,\v表示垂直制表符(类似换行),在dos命令里面是垃圾字符,\0表示什么都不操作,有没有都一样,\\表示\,\”表示”,
Putchar(‘a’)表示输出一个字符,单引号完成字符,双引号完成字符串
2.常量与变量
Int num=10;
Printf(%d,num,%x,&num)//解析:%d表示以十进制打印num的值,%x,&num,按照16进制打印出num的内存地址
- 常量的定义
使用关键字const来定义一个常量
常量是不能被修改的,是固定的值
常量定义:const int a=10;
常量可读不可写
另一种定义常量的方式:#define x 10
使用#define的方式更容易修改数据,只需要改一次即可,另外define还有代替的意思
例如:#define a 1000 即1000用a来代替
#define后面不能加上分号,define可以替换任何字符和字符串,例如
#define 我很帅 main
表示用我很帅替换掉main,写程序时如下
Void 我很帅(){
}
以上无任何语法错误能够执行起来
常量不上左值,不可修改
全局变量和函数一样声明可以有多个,定义仅有一个,例如:
Int a;
Int a;
Int a;
Int a;
若都是定义在全局则不会报错
全局变量如果只有声明没有定义,会自动初始化一个为0
按照一个字符一个字符输出hello
#include <stdio.h>
void main(){
printf("%3c%c%c%c%3c", 'h', 'e', 'l', 'l', 'o');
getchar();
}
C%表示的是按照字符的方式输出
3c%表示字符的宽度,即3c代表一个字符的宽度为3,例如
#include <stdio.h>
void main(){
printf("%3c%c%c%c%3c", 'h', 'e', 'l', 'l', 'o');
getchar();
}
结果如图
利用%s输出hello,%s表示的是输出一个字符串
%15s表示限定字符的宽度为15,右对齐,如果限定的宽度小于实际字符串宽度,则按照实际字符串长度输出;若是宽度为负数,则实际上为左对齐;若只输出字符串中的前几个,则可以用小数表示,如:helloworld只需要输出hello,则代码这样写:
Printf(”%15.5s”,” helloworld”)
结果如图:
可以使用%s输出字符数组
#include <stdio.h>
void main(){
char str[] = "hello world";
printf("%s", str);
getchar();
}
结果也是输出了hello world
%f表示输出实数类型,默认的f%精确到小数点后6位,其余的就自动四舍五入,如:
#include <stdio.h>
void main(){
float a = 1.234567;
double b = 9.5468787;
printf("%f\n%f",a,b);
getchar();
}
结果:
需要注意的是若是实际的数据位数小于要保留的数据位数,则后面会出现误差
其实%e就是按照指数的方式输出实数,可以表示很大或很小的数。%m.ne表示宽度为m,小数点位数为n的指数表示法。如:%15.7e
%g就是墙头草,基本上输出最主要的数据。
Printf原理是抓取二进制数据,然后按照指定的格式进行显示,不管以前是什么格式。
Printf从左到右进行解析,然后%%d的解析过程:%%解析成%,然后d解析成d,所以,最后输出是%d,一个%什么都不会输出
*可以表示任意的一个变量,如:
#include <stdio.h>
void main(){
char d = '*';
for (int i = 1; i < 10;i++){
printf("\n%*c",i,d);
}
getchar();
}
如果格式控制需要动态变化,可以使用*占位,然后将变量映射进去即可。
如下图所示
%d中间加上空格,若是正数则会在前面加上一个前缀,若是负数则无影响,如下:
#include <stdio.h>
void main(){
int i = 10;
printf("%d\n% d",i,i);
getchar();
}
#的作用是用什么格式输出,则会保留什么格式。若是%#.0f则一定保留小数
切记:实数按照整数解析会出错,整数按照实数解析也会出错。
Printf第一个类型不匹配,那么就算第二个类型匹配也会导致发生错误,两个都错误。
Limits.h 包含所有类型的极限,如:
若要输出正负数,则要在%d加上+,如:
Putchar和puts
#include <stdio.h>
void main(){
puts("hello");
getchar();
}
输出了字符串hello,且puts会在字符串末尾自动加上换行
#include <stdio.h>
void main(){
putchar('h');
putchar('e');
putchar('l');
putchar('l');
putchar('o');
getchar();
}
输出的结果也是hello,只能一次输出一个字符,且没换行
Scanf输入语法
#define _CRT_SECURE_NO_WARNINGS//关闭安全检查,或者使用scanf_s
#include <stdio.h>
#include <stdlib.h>
void main(){
int a;
scanf("%d", &a);//按照正数来解析,并传入a的地址,根据地址对a初始化(赋值)
printf("%d",a+60);
system("pause");
}
Scanf多值输入:
#define _CRT_SECURE_NO_WARNINGS//关闭安全检查
#include <stdio.h>
#include <stdlib.h>
void main(){
int a,b,c;
scanf("%d%d%d", &a,&b,&c);
printf("a的值为:%d\nb的值为:%d\nc的值为:%d",a,b,c);
system("pause");
}
输入多个数据可以使用空格,tab键以及回车来区分。
注意,如果是双精度的数据,则一定要加上L,否则不会生效
如果scanf参数之间有非空格的字符,则需要一并输入,否则变量不会初始化
空白符号在%前面会被忽略,在后面会被要求多输入数据,但是不影响结果。
Getchar
Getchar会把回车空格tab键当作一个字符。
输入一串字符串:
#define _CRT_SECURE_NO_WARNINGS//关闭安全检查
#include <stdio.h>
#include <stdlib.h>
void main(){
char str[50];
gets_s(str);//把输入的字符串传给str
system(str);//执行系统命令
system("pause");
}
规范用户输入
转换大小写(大写变小写先判断是大于91还是小于等于91,然后大写字母加上32变成小写,小写字母减去32变成大写字母)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
void main(){
char a = 'a';
printf("请输入一个字母:\n");
scanf("%c", &a);
if (a<=91){
a = a + 32;
printf("\n其小写字母为:%c", a);
}
else{
a = a - 32;
printf("\n其大写字母为:%c", a);
}
system("pause");
}
判断输出了几个字符:(vs2013的printf已禁用%n)
判断输入了几个字符
十进制整数的输入输出:%i
十六进制浮点数的指数计数法:%a、%A
语句的类型
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
void main(){
int a, b, c;//数据说明
scanf("%d%d%d",&a,&b,&c);//扫描数据
printf("\n%d", a + b + c);//计算数据并打印
system("pause");
//程序就是一些有序指令的集合,以上程序即从上至下执行
}
数据说明和语句就构成了程序,数据说明是描述数据,语句即对数据进行的一系列操作
不在同一个会语句中的变量可以同名,且编译器会把他编译成不同的内存块。
结构化程序设计
每一个结构有各自的功能,各个功能相互协调
算法的表现:第一种是伪代码
第二种方式:流程图
三种控制结构
循环、分支、顺序
下面实现每五秒钟打开一次百度,并进行点击广告,无限打开
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
void openbaidu(){
ShellExecuteA(0, "open", "https://www.baidu/s?wd=%E7%BD%91%E7%BB%9C%E5%9F%B9%E8%AE%AD&rsv_spt=1&rsv_iqid=0xe14fbcc2000555ce&issp=1&f=3&rsv_bp=1&rsv_idx=2&ie=utf-8&rqlang=&tn=baiduhome_pg&ch=&rsv_enter=0&prefixsug=%25E7%25BD%2591%25E7%25BB%259C%25E5%259F%25B9%25E8%25AE%25AD&rsp=2&inputT=5478", 0, 0, 0);//最后的0表示默默打开,若是3则表示公开打开
};
void closebaidu(){
system("taskkill /f /im iexplore.exe");
};
void click(){
SetCursorPos(224,253);//设置鼠标位置
Sleep(100);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);//鼠标点击事件,鼠标左键按下
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);//鼠标点击事件,鼠标左键弹起
//SetWindowPos();//设置窗口位置
};
void main(){
while (1)//无限循环
{
openbaidu();//打开百度并进行搜索
Sleep(15000);//暂停15秒
click();//点击鼠标所在位置
Sleep(10000);//暂停10s
closebaidu();//关闭浏览器进程
Sleep(3000);//暂停3秒
}
}
顺序结构:
使用顺序结构实现打开我的电脑
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
void main(){
SetCursorPos(50,50);//设置鼠标的位置
Sleep(500);
//以下类似双击鼠标
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);//鼠标左键按下
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);//鼠标左键弹起
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);//鼠标左键按下
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);//鼠标左键弹起
Sleep(5000);
system("pause");
}
给数值排序
超简单代码实现排序
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
void main(){
//完成给数值排序
float a, b, c, t;
printf("请输入要排序的数:");
scanf("%f%f%f", &a, &b, &c);
if (a>b){
t = a;
a = b;
b = t;
}
if (b>c){
t = b;
b = c;
c = t;
}
printf("\n从小到大排序为:%5.2f,%5.2f,%5.2f",a,b,c);
system("pause");
}
If分支结构
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
void main4(){
if (true)
{
system("netstat -na");//查看开启了哪些端口和链接
getchar();
}
else{
system("net user");
getchar();
}
}
void main(){
#define 技术面试得分 88
#define 综合面试得分 74
#define 技术面试分数线 80
#define 综合面试分数线 75
if (技术面试得分<技术面试分数线)
{
printf("\n滚!你被淘汰了");
}
else if (综合面试得分<综合面试分数线)
{
printf("\n很遗憾,你未通过面试,你不善言辞!");
}
else{
printf("\n恭喜您,你真是个人才,您已被录取");
}
getchar();
}
创建一个自己的浏览器
随机运行
Switch语句
Switch(){
Case a:
语句1;
Break;
Case b
语句2;
Break;
Default :
语句3;
Break
}
程序如下:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
void main(){
printf("请输入你的选择:");
int num;
scanf("%d",&num);
switch (num)
{
case 1:
printf("团长");
break;
case 2:
printf("局长");
break;
case 3:
printf("师长");
break;
case 4:
printf("美国大兵");
break;
default:
printf("输入错误,请重新输入!");
break;
}
system("pause");
}
有break则多个分支选择一个分支,无break则多分支选择多分支。
循环语句
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
void main2(){
int num = 0;
scanf("%d",&num);
while (num){
system("start notepad");//异步操作,不等待
num--;
}
}
//从1加到100
void main3(){
int i = 0;
int resut = 0;
while (i<=100){
resut += i;
i++;
}
printf("%d", resut);
system("pause");
}
//求2的n次方
void main(){
int re = 1;
int i;
scanf("%d", &i);
while (i){
re *= 2;
i--;
printf("\n%d,%d",i,re);
}
printf("\n\n%d", re);
system("pause");
}
调戏qq项目(实现qq沿对角线运动并且运动过程中若隐若现)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
void openqq(){
ShellExecuteA(0, "open", "\"D:\\QQ\\Bin\\QQScLauncher.exe\"", 0, 0, 1);//打开qq
}
void moveqq(){
HWND win = FindWindowA("TXGuiFoundation","QQ");//根据类名和标题查找qq的窗口编号
if (win==NULL){
printf("qq在玩失踪!");
}
int i = 0;//i代表纵坐标
while (i<1080){
SetWindowPos(win, NULL, i*16/9, i, 500, 400, 0);//设置窗口大小以及窗口位置
Sleep(200);
i += 10;
if (i / 10 % 2 == 1){
ShowWindow(win, SW_HIDE);//把qq窗口隐藏
}
else
{
ShowWindow(win, SW_SHOW);//把qq窗口显示
}
}
}
void main(){
openqq();
Sleep(3000);
moveqq();
Sleep(2000);
system("taskkill /f /im QQ.exe");
}
实现变色龙和计时器
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
//实现变色龙
void main(){
int j = 0;
char str[40];
char tr[20];
while(1){
for (int i = 0; i < 16; i++)
{
sprintf(tr, "color %x%x", i, 15 - i);//把i和15-i按照十六进制格式化后传递给tr,即此时的tr为color 0F
system(tr);//执行命令,即执行了color 1E
printf("\n%s",tr);
sprintf(str, "title 程序启动了%d秒",j);//记录标题
j++;
system(str);//改变标题
Sleep(1000);
}
}
}
Do while循环
先执行一次再判断是否进行循环
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
void main(){
do {
printf("\n认真的男人最帅");
} while (1);
}
死循环吃内存卡死电脑
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
void main(){
do {
malloc(1024*1024*10);//分配10m内存
Sleep(1000);//每一秒分配10m内存
} while (1);
}
注意:getchar会把回车当作输入的字符
此时我们需要多加一个getchar来抵消
Start calc 异步打开计算器
下面实现百度网盘长方形旋转:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
void openbaidu(){
ShellExecuteA(0, "open", "\"D:\\BaiduNetdisk\\BaiduNetdisk.exe\"", 0, 0, 1);//打开百度网盘
}
void movebaidu(){
HWND win = FindWindowA("DuiHostWnd", "欢迎使用百度网盘");//根据类名和标题查找百度网盘的窗口编号
if (win == NULL){
printf("百度网盘有点皮!");
}
for (;;){
SetWindowPos(win, NULL, 0, 0, 500, 400, 0);//设置起始窗口大小以及窗口位置
//第一个win代表获取的窗口,null默认,0,0代表窗口原先位置,500,400代表窗口大小,0代表默认
for (int i = 0; i < 1000; i++){
SetWindowPos(win, NULL, i, 0, 500, 400, 0);//设置窗口大小以及窗口位置
}//向右移动
SetWindowPos(win, NULL, 1000, 0, 500, 400, 0);//设置起始窗口大小以及窗口位置
for (int i = 0; i < 500; i++){
SetWindowPos(win, NULL, 1000, i, 500, 400, 0);//设置窗口大小以及窗口位置
}//向下移动
SetWindowPos(win, NULL, 1000, 500, 500, 400, 0);//设置起始窗口大小以及窗口位置
for (int i = 1000; i >0; i--){
SetWindowPos(win, NULL, i, 500, 500, 400, 0);//设置窗口大小以及窗口位置
}//向左移动
SetWindowPos(win, NULL, 0, 500, 500, 400, 0);//设置起始窗口大小以及窗口位置
for (int i = 500; i >0; i--){
SetWindowPos(win, NULL, 0, i, 500, 400, 0);//设置窗口大小以及窗口位置
}//向上移动
}
}
void main(){
openbaidu();
Sleep(8000);//等待8秒
movebaidu();
//Sleep(6000);
//system("taskkill /f /im baidunetdisk.exe");//关闭百度网盘
}
Break跳出循环,下面是求13x+11y=316中的x和y
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
void main(){
//计算13x+11y=316的值
for (int i = 0;;i++){
printf("\n%d", i);
if (((316-13*i)%11)==0){
printf(" \n13*%d+11*%d=316", i,(316-13*i)/11);
break;
}
}
getchar();
}
ShellExecuteA
ShellExecuteA(0, "open", "notepad", 0, 0, 0);
最后的一个参数:0表示隐藏,1表示正常,3表示最大化,6表示最小化
MessageBoxA(0, "第一个C窗体程序", "消息", 3);
//参数1:系统弹出
// 参数2:消息内容
// 参数3:标题
// 参数4:对话框的类型
// 0 只有 确定 按钮;
// 1 确定 取消 按钮;
// 2 终止 重试 忽略 按钮
// 3 是 否 取消 按钮
Goto语句(无条件跳转语句)
Goto和if结合形成有限循环
注意:break语句是跳出循环,执行循环外的下一条语句。而若是使用goto代替break,值需在循环外的下一条语句前面加上aaa: printf(“adb”);
循环语句即是if语句和goto语句的结合
Goto可以跳出多个循环
Goto语句实现闪屏 迅雷隐藏以及沿对角线运动
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
void openxl(){
ShellExecuteA(0,"open","\"D:\\Thunder\\Program\\Thunder.exe\"",0,0,1);//打开迅雷
Sleep(6000);
}
void tiaoxixl(){
HWND win = FindWindowA("XLUEFrameHostWnd","迅雷极速版");//获取迅雷窗口
if (win==NULL){
printf("迅雷在和你躲猫猫");
}
//SetWindowPos(win, NULL, 0, 0, 500, 300,0);
int i = 0;
a: if (i<1200){
SetWindowPos(win, NULL, i, i * 9 / 16, i, i * 9 / 16, 0);
i+=50;
if (i%3==0){
ShowWindow(win, SW_HIDE);
Sleep(500);
}
else{
ShowWindow(win, SW_SHOW);
Sleep(500);
}
goto a;
}
SetWindowPos(win, NULL, 0, 0, 500, 300, 0);
b: ShowWindow(win, SW_HIDE);
Sleep(50);
ShowWindow(win, SW_SHOW);
Sleep(50);
goto b;
//此处是使用goto语句实现无限闪屏功能
}
void main(){
openxl();
tiaoxixl();
Sleep(1000);
system("taskkill /f /im Thunder.exe");
}
随机数
午夜幽灵
嫁祸百度云管家吃了很多内存
- 写好代码如下:
- 点击解决方案资源管理器下面的项目,然后鼠标右键属性
- 更改为dll
4.鼠标右键“吃内存”,然后点击生成
5.把main函数改为导出接口函数_declspec(dllexport) void goA(){ }//此为函数导出接口
6.继续点击生成
7.选择要嫁祸的进程以及要注入的dll(刚才写的dll)
8.点击注入
9.结果是x64注入工具的内存占用一直在增加
实现倒转输入的数(重要)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
int getwei(int num){
int wei = 0;//定义位数
for (int j = num; j; j /= 10)
{
wei++;
}
return wei;
}
int jieshu(int n){//求10的n次方
int res = 1;
for (int i = 0; i < n;i++){
res *= 10;
}
return res;
}
void main(){
int num;
printf("请输入数字:");
scanf("%d", &num);
printf("\n%d", num);
int wei = getwei(num);//获取num的位数
printf("\n%d", wei);
int inum = num;
int last = 0;
for (int i = 0; i <= wei;i++){
int shu;
shu = inum % 10;//每次取出最小位的值,比如说123%10=3
last += shu*jieshu(wei-1-i);//累加每次求出的结果,如123计算则此处为last=0+3*10的2次方,第二次则为last=300+2*10的1次方
inum /= 10;//每次去掉最后的位数,比如说123/10=12
}
printf("\n倒转过后的结果为:%d",last);
system("pause");
}
任意次方的计算(重要)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
int dcifang(int num){//求10的n次方
int sult = 1;
for (int i=0;i<num;i++){
sult *= 10;
}
printf("\n10的%d次方为:%d", num, sult);
return sult;
}
int dcifang(int m,int n ){//求m的n次方
int sult = 1;
for (int i = 0; i<n; i++){
sult *= m;
}
printf("\n%d的%d次方为:%d\n", m,n, sult);
return sult;
}
void main(){
int d,y;
printf("请输入底数数:");
scanf("%d", &d);
printf("\n请输入次方数:");
scanf("%d", &y);
dcifang(d,y);
system("pause");
}
实现程序倒计时以及计数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
void main(){
char tring[50];
int time;
printf("请输入需要倒计时的时间:");
scanf("%d", &time);
for (int i = time; i>0; i--){
sprintf(tring, "title 距离时间结束还有%d秒", i);
system(tring);
printf("\n程序已执行了%d秒!", time-i+1);
Sleep(1000);
}
printf("\n\n\t\t程序已执行结束,再见!!!\n");
}
换桌面
Qq位置随鼠标移到而随机变化
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
#include<time.h>
int num[4] = {0,1,2,3};//定义int类型数组来表示上下左右四个方向
void openqq(){
ShellExecuteA(0,"open","\"D:\\QQ\\Bin\\QQScLauncher.exe\"",0,0,1);//正常打开qq
}
void closeqq(){
system("taskkill /f /im QQ.exe");//关闭qq
}
void moveqq(){//调戏qq
HWND win = FindWindowA("TXGuiFoundation","QQ");//根据类名和标题查找qq窗口
if (win == NULL){
printf("马化腾藏起来了!");
}//判断win的指针是否为空,若为空则没找到
while (1){
POINT xy;//定义鼠标位置
xy.x = 0;//设置鼠标横坐标为0
xy.y = 0;//设置鼠标纵坐标为0
GetCursorPos(&xy);//获取鼠标当前的位置,将值存入xy
int date = rand() % 4;//创建随机数,且随时间不断变化的随机数,且此数据在0,1,2,3范围内
switch (date)
{
case 3:
SetWindowPos(win, NULL, xy.x, xy.y, 500, 450, 0);//设置窗口位置在鼠标右下角
Sleep(150);
break;
case 2:
SetWindowPos(win, NULL, xy.x-500, xy.y, 500, 450, 0);//设置窗口位置在鼠标左下角
Sleep(150);
break;
case 1:
SetWindowPos(win, NULL, xy.x-500, xy.y-450, 500, 450, 0);//设置窗口位置在鼠标左上角
Sleep(150);
break;
case 0:
SetWindowPos(win, NULL, xy.x, xy.y-450, 500, 450, 0);//设置窗口位置在鼠标右上角
Sleep(150);
break;
default:
break;
}
}
}
void main(){
time_t ts;//定义时间类型的变量
srand((unsigned int)time(&ts));//根据时间初始化随机数种子
closeqq();
openqq();
Sleep(5000);
moveqq();
closeqq();
}
实现模拟键盘打开资源管理器
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
void main(){
//实现按住win+e打开资源管理器
keybd_event(0x5b, 0, 0, 0);//模拟键盘,按下windows键
keybd_event('E', 0, 0, 0);//模拟键盘,按下e键
keybd_event('E', 0, 2, 0);//模拟键盘,松开e键
keybd_event(0x5b, 0, 2, 0);//模拟键盘,松开windows键,即按下和松开键盘上的win
}
实现模拟键盘打开notepad,然后最大化notepad后写入数据表白
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
void main(){
//实现按住win+e打开资源管理器
keybd_event(0x5b, 0, 0, 0);//模拟键盘,按下windows键
keybd_event('R', 0, 0, 0);//模拟键盘,按下e键
keybd_event('R', 0, 2, 0);//模拟键盘,松开e键
keybd_event(0x5b, 0, 2, 0);//模拟键盘,松开windows键,即按下和松开键盘上的win
Sleep(2000);
keybd_event('N', 0, 0, 0);//模拟键盘,按下N键
keybd_event('N', 0, 2, 0);//模拟键盘,松开N键
keybd_event('O', 0, 0, 0);//模拟键盘,按下O键
keybd_event('O', 0, 2, 0);//模拟键盘,松开O键
keybd_event('T', 0, 0, 0);//模拟键盘,按下T键
keybd_event('T', 0, 2, 0);//模拟键盘,松开T键
keybd_event('E', 0, 0, 0);//模拟键盘,按下E键
keybd_event('E', 0, 2, 0);//模拟键盘,松开E键
keybd_event('P', 0, 0, 0);//模拟键盘,按下P键
keybd_event('P', 0, 2, 0);//模拟键盘,松开P键
keybd_event('A', 0, 0, 0);//模拟键盘,按下A键
keybd_event('A', 0, 2, 0);//模拟键盘,松开A键
keybd_event('D', 0, 0, 0);//模拟键盘,按下D键
keybd_event('D', 0, 2, 0);//模拟键盘,松开D键
Sleep(1000);
keybd_event(0x0d, 0, 0, 0);//模拟键盘,按下回车键
keybd_event(0x0d, 0, 2, 0);//模拟键盘,松开回车键
keybd_event(0x0d, 0, 0, 0);//模拟键盘,按下回车键
keybd_event(0x0d, 0, 2, 0);//模拟键盘,松开回车键
Sleep(2000);
keybd_event(0x5b, 0, 0, 0);//模拟键盘,按下windows键
keybd_event(38, 0, 0, 0);//模拟键盘,按下向上箭头键
keybd_event(38, 0, 2, 0);//模拟键盘,松开向上箭头键
keybd_event(0x5b, 0, 2, 0);//模拟键盘,松开windows键,这里四句代码是为了使当前窗口最大化win+向上箭头
for (int i = 0; i < 50;i++){
keybd_event('W', 0, 0, 0);//模拟键盘,按下W键
keybd_event('W', 0, 2, 0);//模拟键盘,松开W键
keybd_event('O', 0, 0, 0);//模拟键盘,按下O键
keybd_event('O', 0, 2, 0);//模拟键盘,松开O键
keybd_event('A', 0, 0, 0);//模拟键盘,按下A键
keybd_event('A', 0, 2, 0);//模拟键盘,松开A键
keybd_event('I', 0, 0, 0);//模拟键盘,按下I键
keybd_event('I', 0, 2, 0);//模拟键盘,松开I键
keybd_event('N', 0, 0, 0);//模拟键盘,按下N键
keybd_event('N', 0, 2, 0);//模拟键盘,松开N键
keybd_event('I', 0, 0, 0);//模拟键盘,按下I键
keybd_event('I', 0, 2, 0);//模拟键盘,松开I键
keybd_event(32, 0, 0, 0);//模拟键盘,按下空格键
keybd_event(32, 0, 2, 0);//模拟键盘,松开空格键
keybd_event(13, 0, 0, 0);//模拟键盘,按下回车键
keybd_event(13, 0, 2, 0);//模拟键盘,松开回车键
}
}
切记:函数定义只能有一个,但是函数声明可以有多个;
以上不会报错
上图为定义,只能有一个
模拟鼠标键盘操作消耗百度整容广告费用
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
void open(char *str){//打开某网站,此处的*str代表任意字符串的指针
ShellExecuteA(0,"open",str,0,0,1);//1参数代表正常打开某网站、程序
}
void close(){//关闭网站进程,即关闭浏览器进程
system("taskkill /f /im 360chrome.exe");
}
void sousuo(){//进行搜索 整容,keybd_event模拟键盘输入
keybd_event('Z',0,0,0);
keybd_event('Z', 0, 2, 0);
keybd_event('H', 0, 0, 0);
keybd_event('H', 0, 2, 0);
keybd_event('E', 0, 0, 0);
keybd_event('E', 0, 2, 0);
keybd_event('N', 0, 0, 0);
keybd_event('N', 0, 2, 0);
keybd_event('G', 0, 0, 0);
keybd_event('G', 0, 2, 0);
keybd_event('R', 0, 0, 0);
keybd_event('R', 0, 2, 0);
keybd_event('O', 0, 0, 0);
keybd_event('O', 0, 2, 0);
keybd_event('N', 0, 0, 0);
keybd_event('N', 0, 2, 0);
keybd_event('G', 0, 0, 0);
keybd_event('G', 0, 2, 0);
keybd_event(49, 0, 0, 0);//49代表tab键上面的1按键
keybd_event(49, 0, 2, 0);
Sleep(1000);
keybd_event(13, 0, 0, 0);//模拟键盘,按下回车键
keybd_event(13, 0, 2, 0);//模拟键盘,松开回车键
//按了回车表示进行搜索
}
void click(){//实现点击广告,使用mouse_event模拟鼠标函数
for (int i = 353; i <= 1050;i+=240){
mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, 560 * 65535 / 1920, i * 65535 / 1080, 0, 0);//移动鼠标位置
Sleep(50);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);//鼠标左键按下
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);//鼠标左键弹起
}
}
void main(){
while (1)
{
open("http://www.baidu");
Sleep(8000);
sousuo();
Sleep(9000);
click();
Sleep(5000);
close();
}
}
可变参数的处理
可变参数的加法计算
可变参数为字符串,注意以下定义指针没有*
以上这些都需要使用到的头文件
注:部分图片引用了传智播客的尹成老师c语言从菜鸟到高手视频内截图,若有侵权,请告知删除。
版权声明:本文标题:c语言从入门到入坑 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1727840120a1132888.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论