C++从头再来:知识点速通
1. 关于scanf
1.1 读入数字
scanf 的返回值表示成功输入的变量个数,当输入结束时,scanf将无法再次读取数据,返回0
# include <stdio.h>
# include <math.h>
# include <time.h># define M 1000000;
// compute the max, min, average value of a given list
int main(){int x, min = M, max = -M;int n = 0;int sum = 0;printf("%d", min); // scanf 读取结束后,则完成最后一次while循环。// windows的退出方法:回车-ctrl+z-回车 while(scanf("%d", &x) == 1){sum += x;n += 1;if (min > x){min = x;}if (max < x){max = x;}}printf("the max number in the list : %d\n", max);printf("the min number in the list : %d\n", min);printf("the average number in the list : %f\n", sum*1.0/n);return 0;
}
1.2 读入字符串
scanf(“%s”, s)
- 不需要&
- 读入的结果:一个不含空格、TAB、回车符的字符串,存入一个字符数组s
1.3 输出数字的小技巧:printf函数中,使用变量指定小数位数
printf("%.*f", str_len, number);// str_len表示小数位数,number为浮点数变量
printf函数中,输入确定位数的浮点数
printf("%5d", n); // (不超过五位时,)按照五位来打印,不足五位则补空格
printf("%05d", n); // (不超过五位时,)按照五位来打印,不足五位则补零
printf("%11.3f", f);// 打印数字占11位,保留小数点后3位,不足则补空格
printf("%011.3f", f);// 打印数字占11位,保留小数点后3位,不足则补零
2. 琐碎规范
2.1 一个在分母位置上平方溢出的解决方法
待解决问题:输入多组n, m,求1/n2+1/(n+1)2+ … +1/m2的结果。当输入n,m为0时,程序终止
输入范例1: 2 4
输入范例2: 65536 655360
范例2中,在分母部分,若采用1/(n*n),存放分母的int将会溢出;转而采取1/n/n的方法则可以使用浮点数避开溢出的可能
# include <stdio.h>int main(){int n, m, kase = 0;double sum = 0.0;while(scanf("%d %d", &n, &m) ){// time to endif (n==0 && m==0) break;// exchange the value if n is larger if (n>m){int t = m;m = n;n = t;} while(n <= m){// sum += 1.0/(n*n);sum += 1.0/n/n; // 防止溢出n += 1;}kase += 1;printf("Case %d: %.5f\n", kase, sum);}
}
2.2 floor() 关于浮点数的精度问题和四舍五入问题
在写函数的过程中,由于浮点数的计算精度问题,类似将1.0表示为1.00001或0.9999998,单纯的数值运算上,这种误差的问题不大。但涉及到取整数时,如使用 floor() 函数,就可能会将floor(1)的结果判为0。
常见的一个解决方法是写为 floor(a+0.5) 的格式。
初看是将分段函数的跃迁点从整数点移动到刻度为0.5的位置,有了类似四舍五入的功能,如[0.5, 1.5) 范围的浮点数将被floor() 判为1。
实际上,这是一个修正方法,并没有解决上述提出的浮点数在末位上的微小误差,而是将该误差由影响较大的1.0前后转移到了无甚影响的1.5附近,毕竟浮点数误差再大也不能由0.5大,对吧?
2.3 慎用全局变量
在函数内部定义的变量称为局部变量,反之为全局变量
全局变量定义、使用方便,但其并不会虽函数的结束而释放或重置。
这意味着,若有两处依次调用同一全局变量并修改其值,即便是相同的语句,其结果也可能不同
# include <stdio.h>int t = 0;
int g(){ return ++t; }int main(){int a, b;a = g();b = g();printf("%d %d", a, b);return 0;
}
输出结果为
1 2
3 使用文件完成输入输出
3.1 使用文件输入输出——重定向(freopen)
# define LOCAL
# include <stdio.h>
# include <math.h>
# include <time.h># define M 1000000
// compute the max, min, average value of a given list
int main(){# ifdef LOCAL // 若定义了LOCAL变量freopen("data.in", "r", stdin);freopen("data.out", "w", stdout);# endif //编译结束int x, min = M, max = -M;int n = 0;int sum = 0; // scanf 读取结束后,则完成最后一次while循环。// windows的退出方法:回车-ctrl+z-回车 while(scanf("%d", &x) == 1){sum += x;n += 1;if (min > x){min = x;}if (max < x){max = x;}}printf("the max number in the list : %d\n", max);printf("the min number in the list : %d\n", min);printf("the average number in the list : %f\n", sum*1.0/n);return 0;
}
3.2 使用文件输入输出——fopen
# include <stdio.h># define M 1000000
// compute the max, min, average value of a given list
int main(){FILE *fin, *fout;// 声明变量 fin = fopen("data.in", "rb");fout= fopen("data.out", "wb");int x, min = M, max = -M;int n = 0;int sum = 0; // fcanf三个参数:从哪读, 什么类型,赋给哪个参数 while(fscanf(fin, "%d", &x) == 1){sum += x;n += 1;if (min > x){min = x;}if (max < x){max = x;}}// 同样说明输出的位置 fprintf(fout, "the max number in the list : %d\n", max);fprintf(fout, "the min number in the list : %d\n", min);fprintf(fout, "the average number in the list : %f\n", sum*1.0/n);// 关闭文件 fclose(fin);fclose(fout);return 0;
}
在fopen条件下,灵活性较大,可以反复打开并读写文件
当我们想要再次修改为标准输入输出,如下修改fin,fout,fclose即可
# include <stdio.h>
# define M 1000000
// compute the max, min, average value of a given list
int main(){FILE *fin, *fout;// 声明变量,直接定位到标准输入输出
// fin = fopen("data.in", "rb");
// fout= fopen("data.out", "wb");fin = stdin;fout = stdout; int x, min = M, max = -M;int n = 0;int sum = 0; // fcanf三个参数:从哪读, 什么类型,赋给哪个参数 while(fscanf(fin, "%d", &x) == 1){sum += x;n += 1;if (min > x){min = x;}if (max < x){max = x;}}// 同样说明输出的位置 fprintf(fout, "the max number in the list : %d\n", max);fprintf(fout, "the min number in the list : %d\n", min);fprintf(fout, "the average number in the list : %f\n", sum*1.0/n);// 无需关闭文件
// fclose(fin);
// fclose(fout);return 0;
}
4. 数组和字符串
4.1 关于较大数组的定义位置
一般只有当定义在main函数外面时,数组才能开得很大
4.2 复制数组中部分元素到另一个数组memcpy && 数组归零memset
# include <stdio.h>
# include <string.h>
int main(){double a[10];double b[10];// 将数组 a 归零 memset(a, 0, sizeof(a));for (int i =0; i<10; ++i){a[i] = i;}for (int i =0; i<10; ++i){b[i] = i + 10;}
// // 复制所有 a 中的元素到 b
// memcpy(b, a, sizeof(a));// 复制 3个 a中的元素到 b memcpy(b, a, sizeof(double)*3);for (int i=0; i<10; ++i){printf("%f ", b[i]);}return 0;
}
关于memset,其对数组做初始化的取值,仅限于0和-1。
这是由于,memset是在内存上逐字节进行的赋值,4字节的int经过memset赋值为1后,取到的二进制为00000001 00000001 00000001 00000001,转化为十进制并非为1,而这个值在long long 等其他类型的数据上就又有不同了。能够初始化为0和-1纯属巧合
4.3 strlen, sprintf, strchr, strcpy, strcmp, strcat
- 字符串(字符数组)s标记的长度可能有很长,其中有些实际存有数据,而另一些位置的内容是不确定的,而函数strlen()可以获取字符串s的实际长度。
- 类似于printf在屏幕上打印、fprintf在文件上打印,sprintf可以将内容输出到字符串
- strchr(s, tmp[i])可以在一个字符串s中查找单个字符tmp[i]。若未找到,则返回值为NULL;若找到该字符,则返回该字符及之后的字符串
- char *strcpy(char *dest, const char *src):将src所指向的字符串复制到dest
- int strcmp(const char *str1, const char *str2):将str1所指向的字符串与str2所指向的字符串进行比较——大于0则str1大于str2(不一定是1);小于0则小于;等于0则等于
- char *strcat(char *dest, const char *src):将src所指向的字符串追加到dest所指向的字符串的末尾,返回值为一个指向最终目标字符串dest的指针
4.4 getchar()逐个读入字符
getchar()可以从标准输入读取到一个字符时,将返回一个int类型。
这是因为,当文件结束时,将返回一个特殊标记 EOF ,因为EOF并非一个char,如果返回一个char,将无法吧特殊的EOF和普通字符区分开。
其实,getchar()等价于将 fgetc(fin) 中的fin替换为stdin
# include <stdio.h>
// replace the ' " ' with ' `` ' and ' !! ' in turn.
int main(){int c, q = 1;// getchar的返回值为int类型,故用int c记录while ((c = getchar()) != EOF ){if (c == '"'){// 因为双引号的出现,必然是前后相邻两个成对出现,这与括号的使用过程中可层层嵌套的用法不同。// 所以可以通过改变布尔值来交替输出两种符号printf("%s", q ? "``" : "!!");q = !q;}else printf("%c", c);}return 0;
}
4.5 isalpha、 isdigit、isprint
isalpha() : 判断字符是否为字母
isdigit() :判断字符是否为数字
isprint():检查所传的字符是否是可打印的,可打印的比如’k’、空格等,返回true;不可打印的比如\t,返回false
toupper()
tolower()
上述函数都在ctype.h中声明
相关文章:

C++从头再来:知识点速通
1. 关于scanf 1.1 读入数字 scanf 的返回值表示成功输入的变量个数,当输入结束时,scanf将无法再次读取数据,返回0 # include <stdio.h> # include <math.h> # include <time.h># define M 1000000; // compute the max,…...

LearnDash Groups学习群组:您需要了解的一切
大约131k 网站使用 LearnDash。因此,毫无疑问,LearnDash是 WordPress 领域中最受欢迎的 LMS。而且,这是因为它具有强大的功能。但让它更受欢迎的是它与大多数第 3 方扩展很好地集成,并且比现有的任何其他 LMS 都更灵活。群组和群组…...
软件开发过程中遇到一个傻嘚业主能让你抓狂
背景 之前的一个网站交付了之后,业主一直未验收,今天忽然间开始了他的扯淡需求调整。 问题1 有一个问题是pdf文件上传显示问题,目前是pdf有一个封面要上传,排序字段可自动调整控制。但是就这么好用的功能,被他给pas…...

信创系统借力小程序应用生态的可能性
随着国内市场需求的不断增长,国产操作系统的应用也开始逐步发展壮大。国产操作系统在与其他操作系统的竞争中,越来越受到用户的青睐。国产操作系统作为一个全新的市场,给应用开发带来了新的机遇和挑战。本文将从国产操作系统应用的现状分析、…...

ISFP型人格的优势和劣势分析(mbti性格测试)
isfp型人格的优势分析ISFP在艺术上具有令人惊叹的天分,他们充沛且敏锐的情感能够轻易捕捉到那些细腻的情感变化。他们具有强大的表现力和感染力,能够通过自己的作品,将情感描绘出来并令观众感同身受,这使得他们在艺术和人文领域能…...

电影《断网》观后感
上周看了电影《断网》这部电影,题材是网络攻击与防范的故事,这样的题材距离我们很远,又离我们很近,我们每天都在用网络,生活中也离不开网络,所以它离我们很近,但是真正涉及到网络攻击时…...

查看python第三方库的依赖pkgs
课题组的服务器不给连外网,安装python第三方库就只能手动离线安装。但是python第三方库可能会迭代依赖,单纯的pip show [pkg]是看不出来的…… 参考链接:查看python第三方库的依赖 https://blog.csdn.net/qq_38316655/article/details/127943…...

CF756div3 vp
又被薄纱了,rk就不放了,好丢人QwQDashboard - Codeforces Round 756 (Div. 3) - CodeforcesA. Make Even小分类讨论题意:给定一个数,每次操作可以选取其前缀然后翻转其前缀,问你最少操作几次可以把该数变为偶数思路&am…...

Linux命令·less
less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大。less 的用法比起 more 更加的有弹性。在 more 的时候,我们并没有办法向前面翻, 只能往后面看,但若使用了 less …...

修改redis改key值不改过期时间
今天在做图片验证码的时候遇到一个问题。用redis的生命周期来存放,用户输入错误次数。 三十秒内输错三次就,等待三十分钟。 那么问题来了,如果说第一次输入错误,应该是 key为用户用,value 为 次数2 ex就为30秒 &…...
Spark的DataFrame使用
内容目录创建SparkSession对象从CSV文件中读取从JSON文件中读取从Parquet文件中读取从数据列表中创建DataFrame从字典列表中创建DataFrame选择一列选择多列过滤年龄大于30的数据过滤名字为Alice的数据可以使用and、or、not等操作符进行组合查询按照年龄分组并计算平均年龄和最大…...

【Flutter】入门Dart语言:操作符的基本用法
文章目录 一、前言二、常用的操作符1.算术操作符2.关系操作符3.逻辑操作符4.赋值操作符5.三元运算符三、总结一、前言 当我们在编写Flutter应用程序时,操作符是我们不可或缺的工具。它们是用于执行各种操作的关键字和符号,可以帮助我们简化代码并提高效率。熟练掌握各种类型…...

Linux线程概念
重新认识一下进程 在之前写过的与进程相关的博文中,都把进程看作是只有一个PCB的进程。如图: 而实际上,在Linux中,进程不止一个执行流,而是可能会有几个或很多个。同一个进程中,每一个执行流都指向同一个虚…...
C#基础教程10 方法
C#方法 方法的语法访问修饰符:返回类型:方法名称:参数列表:方法体:返回值:方法的调用参数传递按值传递按引用传递输出参数方法的重载总结方法是C#中最基本的代码结构之一。方法是一组可重复使用的代码,它接受输入,执行一些操作并返回结果。在本教程中,我们将深入了解C…...

java高性能并发计数器之巅峰对决
并发计数器各个方案介绍方案概述1. jdk5提供的原子更新长整型类 AtomicLong2. synchronized3. jdk8提供的 LongAdder 【单机推荐】4. Redisson分布式累加器【分布式推荐】方案介绍jdk5提供的原子更新长整型类 AtomicLong在JDK1.5开始就新增了并发的Integer/Long的操作工具类Ato…...

HTTPS简介
HTTPS是HTTP开启TLS传输协议,客户端要拿到服务端的公钥,用公钥加密数据后再进行传输,防止数据泄露后背篡改。它要解决两个问题:怎么保证公钥可信怎么加密数据公钥可信问题客户端从服务端获取公钥的时候,存在请求被拦截…...
K-means聚类
原理说明 Kmeans是一种常见的聚类算法,用于将相似的数据点归类到不同的群组中。Kmeans的原理如下: 初始化:Kmeans算法首先需要初始化一个用户指定数量的聚类中心点,通常是随机选取K个数据点作为聚类中心点。 分配:对…...

04-SQL基础(表管理,约束,多表连接,子查询)
本文章主要内容 1、表的管理:创建表,修改表结构,删除字段,修改字段,添加字段,删除表,添加表约束; 2、数据管理:新增记录,修改记录,删除记录&…...

统计学 一元线性回归
统计学 一元线性回归 回归(Regression):假定因变量与自变量之间有某种关系,并把这种关系用适当的数学模型表达出来,利用该模型根据给定的自变量来预测因变量 线性回归:因变量和自变量之间是线性关系 非线…...

【软件开发】基于PyQt5开发的标注软件
这里是基于PyQt5写的面向目标检测的各类标注PC端软件系统。目前现有的labelme软件和labelImg开源软件无法满足特殊数据集的标注要求,而且没有标注顺序的报错提示。当然我设计的软件就会不具有适用性了(毕竟从下面开发的软件可以明显看出来我做的基本上是…...

龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...

XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...

docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...

Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...

【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...

论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...

20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏
一、引言 在深度学习中,我们训练出的神经网络往往非常庞大(比如像 ResNet、YOLOv8、Vision Transformer),虽然精度很高,但“太重”了,运行起来很慢,占用内存大,不适合部署到手机、摄…...