C语言练习 | 初学者经典练习汇总
目录
1、下面代码输出多少,为什么?
2、你要好好学习么?
3、一直写代码,
4、两个数求最大值
5、输入1-5输出工作日,输入6-7输出休息日,其他输入错误
6、写一个输入密码的代码
7、怎么样当输入数字时候打印,输入字母的时候不打印呢?
8、计算 n的阶乘。
9、计算 1!+2!+3!+......+10!
10、在一个有序数组中查找具体的某个数字n。
11、编写代码,演示多个字符从两端移动,向中间汇聚。
12、编写代码实现,模拟用户登录情景,并且只能登录三次。
13、写一个猜数字游戏(鹏哥C_37)
14、输入3个整数,输出按大到小的顺序输出
15、求两个数的最大公约数
16、打印出来1000年到2000年之间的闰年
17、写一个代码: 打印100~200之间的素数
18、自动关机的程序
19、复制字符串
20、内存设置
21、写一个函数交换两个整形变量的值
22、写一个函数可以判断一个数是不是素数。
23、写一个二分查找的函数
24、写一个函数,每调用一次这个函数,就会将num的值增加1。
25、接受一个整型值(无符号),按照顺序打印它的每一位。
26、编写函数求字符串的长度
27、用递归的方法求n的阶乘
28、求第n个斐波那契数。( 不考虑溢出 )
1、下面代码输出多少,为什么?
#include<string.h>
int main()
{printf("%d\n",strlen("c:\test\328\test.c")); return 0;
输出为14:
- 因为:\t(转义字符)算一个字符,\32算一个字符(\ddd8进制中最大为7)。
2、你要好好学习么?
- 如果你要好好学习,请输出1,就会打印好工作,否则打印回家卖红薯。
#include<stdio.h>
int main()
{int input = 0;printf("你要好好学习么?\n");printf("如果好好学习请输入1 >:");scanf("%d",&input);if(input == 1){printf("好工作\n");}else{printf("回家卖红薯\n");}return 0;
}
3、一直写代码,
- 输出“写代码行数”一直到1000行的时候,停止输出好工作。
int main()
{int i = 0;while(i<1000){printf("写代码第%d行\n",i);i++;}if(i == 1000){printf("好工作\n");}return 0;
}
4、两个数求最大值
要求:输入两个数字,写一个函数输出最大值(用条件操作符)
int MAX(int x,int y)
{return (x>y?x:y);
}
int main()
{int a = 0;int b = 0;scanf("%d %d",&a,&b);printf("%d\n",MAX(a,b));return 0;
}
5、输入1-5输出工作日,输入6-7输出休息日,其他输入错误
int main()
{int day =0;scanf("%d",&day);switch(day){case 1:case 2:case 3:case 4:case 5:printf("工作日\n");break;case 6:case 7:printf("休息日\n");break;default:printf("输入错误\n");}return 0;
}
6、写一个输入密码的代码
要求:
1.输出“请输入密码”
2.输入abc 123时候再输出“请选择Y/N”
3.如果输入Y输出“确认成功”,否则输出“确认失败”
int main()
{char password[20] = { 0 };printf("请输入密码:>");scanf("%s",password);printf("请确认密码(Y/N):>");//清理缓冲区,处理'\n'//getchar();//清理缓冲区的多个字符int tmp =0;while((tmp = getchar()) != '\n'){;}int ch = getchar();if(ch == 'Y'){printf("确认成功\n");}else{printf("确认失败\n");}return 0;
}
7、怎么样当输入数字时候打印,输入字母的时候不打印呢?
int main()
{int ch = 0;while((ch = getchar()) != EOF){if(ch<'0' || ch>'9') //这里0-9就是ASSIC的值continue;putchar(ch);}return 0;
}
8、计算 n的阶乘。
int main()
{int i =0;int n = 0;int ret = 1;scanf("%d",&n);for(i=1; i<=n; i++){ret*=i;}printf("%d\n",ret);return 0;
}
9、计算 1!+2!+3!+......+10!
int main()
{int i =0;int n = 0;int ret = 1;int sum = 0;scanf("%d",&n);for(i=1; i<=n; i++){ret*=i;sum = sum+=ret;}printf("%d\n",sum);return 0;
}
10、在一个有序数组中查找具体的某个数字n。
#include<stdio.h>int main()
{int arr[10] = {1,2,3,4,5,6,7,8,9,10};int k = 7;int sz = sizeof(arr)/sizeof(arr[0]);int left = 0;int right = sz - 1;while(left<=right){int mid = (left + right) / 2;if(k > arr[mid]){left = mid + 1;}else if(k < arr[mid]){right = mid - 1;}else{printf("找到了为:第%d位数\n",mid);break;}}if(left > right){printf("找不到\n");}return 0;
}
11、编写代码,演示多个字符从两端移动,向中间汇聚。
例如如下:
*elcome to bit!!!!!!*
**lcome to bit!!!!!**
***come to bit!!!!***
****ome to bit!!!****
*****me to bit!!*****
******e to bit!******
******* to bit*******
********to bi********
*********o b*********
********** **********
*********************
请按任意键继续. . .
#include<string.h>
#include<windows.h>
int main()
{char arr1[] = "welcome to bit!!!!!!!";char arr2[] = "*********************";int left = 0;int right = strlen(arr1) - 1;while(left<=right){arr1[left] = arr2[left];arr1[right] = arr2[right];left++;right--;printf("%s\n",arr1);//Sleep(1000); //睡眠1秒//system("cls"); //清空屏幕}return 0;
}
12、编写代码实现,模拟用户登录情景,并且只能登录三次。
(只允许输入三次密码,如果密码正确则提示登录成,如果三次均输入错误,则退出程序。
#include<string.h>
int main()
{int i = 0;char password[20]={ 0 }; for(i= 0; i<3; i++){printf("请输出密码:>");scanf("%s",password);//if(password = "123456") 这样比较字符是错误的if(strcmp(password,"123456") == 0){printf("登录成功\n");break;}else{printf("密码输出错误,请重新输入!\n");}}if(i == 3){printf("密码输入错误3次,退出程序\n");}return 0;
}
13、写一个猜数字游戏(鹏哥C_37)
1.自动产生一个1-100之间的随机数
2.猜数字
a.猜对了,就恭喜你,游戏结束
b.你猜错了,会告诉猜大了,还是猜小了,继续猜,直到猜对
#include<stdlib.h>
#include<time.h>
void game()
{int guess = 0;int ret = (rand()%100)+1;while(1){printf("请猜数字:>");scanf("%d",&guess);if(guess < ret){printf("猜小了\n");}else if(guess > ret){printf("猜大了\n");}else{printf("猜对了,恭喜你\n");break;}}
}
int main()
{srand((unsigned int)time(NULL));int input = 0;do{menu();printf("请选择:>");scanf("%d",&input);switch(input){case 1:printf("游戏开始\n");game();break;case 0:printf("退出游戏\n");break;default:printf("输入错误,请重新输入:>\n");break;}}while(input);return 0;
}
14、输入3个整数,输出按大到小的顺序输出
#include<stdlib.h>
#include<time.h>
void game()
{int guess = 0;int ret = (rand()%100)+1;while(1){printf("请猜数字:>");scanf("%d",&guess);if(guess < ret){printf("猜小了\n");}else if(guess > ret){printf("猜大了\n");}else{printf("猜对了,恭喜你\n");break;}}
}
int main()
{srand((unsigned int)time(NULL));int input = 0;do{menu();printf("请选择:>");scanf("%d",&input);switch(input){case 1:printf("游戏开始\n");game();break;case 0:printf("退出游戏\n");break;default:printf("输入错误,请重新输入:>\n");break;}}while(input);return 0;
}
15、求两个数的最大公约数
int main()
{int m = 0;int n = 0;scanf("%d %d",&m,&n);int max = m<n? m:n;int i = 0;for(i=max; i>1; i--){if((m%i == 0)&&(n%i == 0)){printf("最大公约数是:%d\n",i);break;}}return 0;
}
或者也可以用辗转相除法:
int main()
{int m = 0;int n = 0;scanf("%d %d",&m,&n);int t = 0;while(t=m%n){m = n;n = t;}printf("最大公约数就是:%d",n);return 0;
}
16、打印出来1000年到2000年之间的闰年
要求:
- 打印出来1000年到2000年之间的闰年。
- 打印出来一共从1000年到2000年闰年的个数。
- 闰年是:
1.能被4整除,不能被100整除
2.能被400整除
int main()
{int y = 0;int count = 0;for(y = 1000; y<=2000; y++){if(((y%4==0)&&(y%100 !=0))||(y%400 == 0)){printf("%d ",y);count++;}}printf("\n一共:%d个闰年\n",count);return 0;
}
17、写一个代码: 打印100~200之间的素数
要求:素数就是只能被1和本身整除的树。
int main()
{int i = 0;for(i=100; i<=200; i++){int j = 0;for(j=2; j<i; j++){if(i%j == 0){break;}}if(i == j){printf("%d ",i);}}return 0;
}
或者:
int main()
{int i = 0;int count = 0;for(i=100; i<=200; i++){int j = 0;int flag = 1; //设置一个标签for(j=2; j<i; j++){if(i%j == 0){flag = 0;//当可以整除的时候,标签就设置为1break;}}if(flag == 1)//当标签一直为1,说明就没有进去整除{count++;printf("%d ",i);}}printf("\n一共%d个\n",count);return 0;
}
18、自动关机的程序
要求:如果输入"我是猪"就取消关机,如果输入错误,在次提示请重新输入
利用goto语句写一个
#include<string.h>
#include<stdlib.h>
int main()
{char input[20] = {0};system("shutdown -s -t 60");
begin:printf("请注意,60秒后关机,如果取消关机请输入:我是猪\n");scanf("%s",input);if(strcmp(input,"我是猪") == 0){system("shutdown -a");}else{goto begin;}return 0;
}
不要goto语句写一个
#include<stdlib.h>
#include<string.h>
int main()
{char input[20] = { 0 };system("shutdown -s -t 60");while(1){printf("电脑即将再60秒后关机,请输入“我是猪”结束关机\n");scanf("%s",&input);if(strcmp(input,"我是猪")==0){system("shutdown -a");break;}}return 0;
}
19、复制字符串
要求:
一个数组:arr1只有一个0,另外一个数组arr2里有:hello bit,把arr2里面的字符串复制到arr1中,并且打印arr1
#include<string.h>
int main()
{char arr1[20] = {0};char arr2[] = "hello bit";strcpy(arr1,arr2);printf("%s\n",arr1);return 0;
}
20、内存设置
要求:
arr里有字符串为:hello bit,现在需要把arr里面的前5个字符改成x,输入为:xxxxx bit
#include<string.h>
int main()
{char arr[] = "hello bit";memset(arr,'x',5);printf("%s\n",arr);return 0;
}
21、写一个函数交换两个整形变量的值
void Switch(int* pa,int* pb)
{int tmp =*pa;*pa = *pb;*pb = tmp;
}
int main()
{int a = 10;int b = 20;Switch(&a,&b);printf("a=%d\nb=%d\n",a,b);return 0;
}
22、写一个函数可以判断一个数是不是素数。
要求:求出100到200之间所有的素数
int is_prime(int n)
{int i = 0;for(i=2;i<n;i++){if(n%i == 0){return 0;}}return 1;
}
int main()
{int i = 0;int count = 0;for(i=100;i<=200; i++){if(is_prime(i) == 1){printf("%d ",i);count++;}}printf("\n一共:%d个\n",count);return 0;
}
23、写一个二分查找的函数
要求:数组{1,2,3,4,5,6,7,8,9,10}找里面的7在数组下标
int find(int *arr,int sz,int k)
{int left = 0;int right = sz - 1;int mid = 0;while(left<=right){mid = (left + right)/2;if(k<arr[mid]){right = mid - 1;}else if(k>arr[mid]){left = mid + 1;}else{return mid;}}return -1;
}
int main()
{int arr[] = {1,2,3,4,5,6,7,8,9,10};int sz = sizeof(arr) / sizeof(arr[0]);int k = 7;int ret = find(arr,sz,k);if(ret != -1){printf("下标为:%d\n",ret);}elseprintf("找不到\n");return 0;
}
24、写一个函数,每调用一次这个函数,就会将num的值增加1。
void ADD(int* p)
{(*p)++;
}
int main()
{int num = 0;ADD(&num);printf("%d\n",num); ADD(&num);printf("%d\n",num); ADD(&num);printf("%d\n",num);return 0;
}
25、接受一个整型值(无符号),按照顺序打印它的每一位。
例如:输入:1234,输出1234.
void print(unsigned int n)
{if(n>9){print(n/10);}printf("%d ",n%10);
}
int main()
{unsigned int num = 0;scanf("%d",&num);print(num);return 0;
}
26、编写函数求字符串的长度
分别用:创建临时变量方式和不允许创建临时变量的方式
创建临时变量方式:
int my_strlen(char* str)
{int count = 0;while(*str != '\0'){count++;str++;}return count;
}
int main()
{char arr[] = "hello";printf("%d\n",my_strlen(arr));return 0;
}
不允许创建临时变量的方式:
int my_strlen(char* str)
{if(*str != '\0'){return 1+ my_strlen(str+1) ;}elsereturn 0;
}
int main()
{char arr[] = "hello";printf("%d\n",my_strlen(arr));return 0;
}
27、用递归的方法求n的阶乘
int Fac(int n)
{if(n<=1)return 1;elsereturn n*Fac(n-1);}
int main()
{int n = 0;scanf("%d",&n);printf("%d\n",Fac(n));return 0;
}
28、求第n个斐波那契数。( 不考虑溢出 )
提示:前两个数之和等于第三个数例如:1 1 2 3 5 8 13 21 ...
并且说明递归和迭代的区别
int Fac(int n)
{if(n<=2)return 1;elsereturn Fac(n-1)+Fac(n-2);
}
int main()
{int n = 0;scanf("%d",&n);printf("%d\n",Fac(n));return 0;
}
以上用递归的方法计算的效率比较低,用迭代的化效率高如下:
int Fac(int n)
{int a = 1;int b = 1;int c = 1;while(n>2){c = a+ b;a = b;b = c;n--;}return c;
}
int main()
{int n = 0;scanf("%d",&n);printf("%d\n",Fac(n));return 0;
}
以上的例子可以区别出递归和迭代的区别:
- 递归就是指程序调用自身的编程思想,即一个函数调用本身,递归是重复调用函数自身实现循环。
- 迭代是利用已知的变量值,根据递推公式不断演进得到变量新值得编程思想,迭代是函数内某段代码实现循环。
- 而迭代与普通循环的区别是:循环代码中参与运算的变量同时是保存结果的变量,当前保存的结果作为下一次循环计算的初始值。
- 迭代与普通循环的区别是:迭代时,循环代码中参与运算的变量同时是保存结果的变量,当前保存的结果作为下一次循环计算的初始值。
- 递归与普通循环的区别是:循环是有去无回,而递归则是有去有回(因为存在终止条件)。
- 在循环的次数较大的时候,迭代的效率明显高于递归。
C语言初识(1) | C简介 | 主函数 | 数据类型
C语言初识(2) | 变量和常量
C语言初识(3) | 字符串 | 转译字符
C语言初识(4) | 顺序 | 选择 | 循环
C语言初识(5) | 函数 | 数组 | 操作符
C语言初识(6) | 关键字
C语言初识(7) | 指针| 结构体 | define
C语言初阶(8) | 选择结构 | if_else | switch
C语言初阶(9) | while | break | continue | getchar
C语言初阶(10) | 初识for循环 | 入门
相关文章:
C语言练习 | 初学者经典练习汇总
目录 1、下面代码输出多少,为什么? 2、你要好好学习么? 3、一直写代码, 4、两个数求最大值 5、输入1-5输出工作日,输入6-7输出休息日,其他输入错误 6、写一个输入密码的代码 7、怎么样当输入数字时候…...
华为OD机试 - 自动曝光(Python) | 机试题算法思路 【2023】
最近更新的博客 华为OD机试 - 卡片组成的最大数字(Python) | 机试题算法思路 华为OD机试 - 网上商城优惠活动(一)(Python) | 机试题算法思路 华为OD机试 - 统计匹配的二元组个数(Python) | 机试题算法思路 华为OD机试 - 找到它(Python) | 机试题算法思路 华为OD机试…...
「6」线性代数(期末复习)
🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀 目录 第五章 相似矩阵及二次型 &2)方阵的特征值与特征向量 &3ÿ…...
1.1 硬件与micropython固件烧录及自编译固件
1.ESP32硬件和固件 淘宝搜ESP32模块,20-50元都有,自带usb口,即插即用. 固件下载地址:MicroPython - Python for microcontrollers 2.烧录方法 为简化入门难度,建议此处先使用带GUI的开发工具THonny,记得不是给你理发的tony老师. 烧录的入口是: 后期通过脚本一次型生成和烧…...
【MySQL进阶】视图 存储过程 触发器
😊😊作者简介😊😊 : 大家好,我是南瓜籽,一个在校大二学生,我将会持续分享Java相关知识。 🎉🎉个人主页🎉🎉 : 南瓜籽的主页…...
[Linux篇] Linux常见命令和权限
文章目录使用XShell登录Linux1.Linux常用基本命令:1.1 ls(列出当前的目录下都有哪些文件和目录)1.2 cd (change directory 切换目录)1.3 pwd(查看当前目录的绝对路径)1.4 touch(创建文件)1.5 ca…...
29岁从事功能测试被辞,面试2个月都找不到工作吗?
最近一个28岁老同学联系我,因为被公司辞退,找我倾诉,于是写下此文。 他是14年二本毕业,在我的印象里人特别懒,不爱学习,专业不好,毕业前因为都没找到合适工作,直接去创业了…...
【C#个人错题笔记1】
观前提醒 记录一些我不会或者少见的内容,不一定适合所有人 字符串拼接 int a3,b8; Console.WriteLine(ab);//11 Console.WriteLine("ab");//ab Console.WriteLine(a""b);//38 Console.WriteLine("ab"ab);//ab38 Console.WriteLine…...
基于lambda的mongodb查询插件
需求背景需要一个像mybatis plus 一样的基于lambda, 且面向对象的查询mongo数据的插件。在网上找了很久,没有发现有类似功能的插件。于是自己手写了一个,借助mongoTemplate屏蔽了底层查询语句的实现细节。在此基础上,实现了查询的统一封装。技…...
基于微信小程序的微信社团小程序
文末联系获取源码 开发语言:Java 框架:ssm JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7/8.0 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9 浏览器…...
GEE学习笔记 七十三:【GEE之Python版教程七】静态展示影像和动态展示影像
我们使用GEE在线编辑可以直接通过在线的网页可以加载展示我们计算的结果,而python版的GEE要展示我们的计算结果可能就比较麻烦。如果有同学看过GEE的python版API中可以找到一个类ee.mapclient,这个类的介绍是它是GEE官方通过Tk写的一个加载展示地图的类。…...
PGLBox全面解决图训练速度、成本、稳定性、复杂算法四大问题!
图神经网络(Graph Neural Network,GNN)是近年来出现的一种利用深度学习直接对图结构数据进行学习的方法,通过在图中的节点和边上制定聚合的策略,GNN能够学习到图结构数据中节点以及边内在规律和更加深层次的语义特征。…...
超详细的 pytest 教程(一)使用入门篇
前言 pytest到目前为止还没有翻译的比较好全面的使用文档,很多英文不太好的小伙伴,在学习时看英文文档还是很吃力。本来去年就计划写pytest详细的使用文档的,由于时间关系一直搁置,直到今天才开始写。本文是第一篇,主…...
二叉树理论基础知识点
二叉树的种类 在我们解题过程中二叉树有两种主要的形式:满二叉树和完全二叉树 满二叉树 满二叉树:如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。 如图所示: 这…...
【算法基础】堆⭐⭐⭐
一、堆 1. 堆的概念 堆(heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质: (1)堆中某个结点的值总是不大于或不小于其父结点的值; (2)堆总是一棵完全二叉树。 将根结点最大的堆叫做最大堆或大根堆,根结点…...
时序预测 | MATLAB实现CNN-SVM卷积支持向量机时间序列预测
时序预测 | MATLAB实现CNN-SVM卷积支持向量机时间序列预测 目录时序预测 | MATLAB实现CNN-SVM卷积支持向量机时间序列预测预测效果基本介绍研究回顾程序设计参考资料预测效果 基本介绍 CNN-SVM预测模型将深度学习模型作为特征学习器,将SVM 支持向量机 作为训练器进行…...
【TypeScrip】TypeScrip的任意类型(Any 类型 和 unknown 顶级类型):
文章目录一、安转依赖:【1】nodejs 环境执行ts【2】使用ts-node二、Any 类型 和 unknown 顶级类型【1】没有强制限定哪种类型,随时切换类型都可以 我们可以对 any 进行任何操作,不需要检查类型【2】声明变量的时候没有指定任意类型默认为any【…...
智能洗地机什么牌子好?智能洗地机排行
要说家庭清洁热门的产品,洗地机肯定首当其冲,集洗吸拖为一体的清洁工具,省时又省力,可谓是家里清洁好助手,今天笔者就为大家介绍几款重量轻、噪音轻、拖地干净的洗地机! 一、CEYEE希亦T800洗地机 在国内,洗…...
【数据结构与算法】链表1:移除链表 设计链表链表反转(双指针法、递归法)
文章目录今日任务1.链表理论基础(1)什么是链表?(2)链表的类型(3)链表的存储方式(4)链表的定义(5)链表的操作(6)性能分析2.…...
山东大学软件学院面向对象简答题整理【个人向】
面向对象简答题整理【个人向】 0.试用面向对象语言简述改写和重定义的异同,以及方法绑定时的差别 改写是子类的方法和父类的方法具有相同的方法名和类型签名重定义是子类的方法和父类的方法方法名相同但类型签名不同在方法绑定时,改写是动态绑定&#…...
多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...
GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...
