C语言上机事半功倍的小技巧
零、前言
本篇博客旨在帮助各位用最少代码、最快的时间通过C语言上机测试,主要介绍一些C++内置函数。这些函数主要是笔者平时写题时积累的一些实用函数,包含了较多的个人主观因素,希望读者能各取所需,内容可能不够全面也不够准确,但应付考试是够的。如果考试时实在无法运用本文的小技巧,请尊重自身平时的代码习惯。
UPD:
2022-03-10 13:44: 增加了algorithm的其他函数和命名空间std中的函数。
一、实用的内置函数
1、排序函数
1 |
|
sort函数有三个参数,前两个参数是指针,代表需要排序的区间(左闭右开),第三个参数是函数指针,可填可不填,不填就默认递增排序。sort函数无返回值,是对于数组做原地排序。
例如,上述代码就是对a数组的第1个到第n个元素排序(笔者习惯数组下标从1开始)。如果习惯的下标是从0开始,那就是
1 |
|
更普遍的,sort(a+p,a+q)就是将a[p]~a[q-1]排序。
递减的排序怎么办?
解决办法有两个:
1、将待排序数组全部取相反数,按默认的递增排序后再取一次相反数即可。
2、编写cmp函数
这里可能比较复杂,看不懂就可以不用看了。
首先,声明一个cmp函数(名字未必要是cmp,符合C语言规范即可)
1 |
|
然后将cmp函数指针作为sort的第三个参数即可。
函数指针是指针的一种,只写函数名,就是该函数的函数指针。
bool是C++的数据类型,只有1和0(true和false)两种取值。
1 |
|
还可以对自定义的结构体设定排序关键字:
1 |
|
对学生按照成绩从高到低排序。
稳定排序和不稳定排序
稳定排序指的是:当数据中存在两个相同的值时,排序后不会改变相对位置。例如A和B成绩都是90分,A原先在B前面,排序后不会出现A跑到B后面的情况,这就是稳定排序。
考试中两种都可以用,问题不大。
2、algorithm头文件中的其他函数
1.1、倒序函数
1 |
|
使用方法和sort十分类似,区间也是左闭右开。
实际上,C++和许多语言的内置函数默认都是左闭右开的
1.2、取最大值、最小值的函数
1 |
|
3、命名空间std中的函数
要使用命名空间std中的函数,你需要像这样做:
1 |
|
主要有以下三个函数
1 |
|
注意,以上所有的函数都是C++特有的,使用时请保证文件扩展名为.cpp
且上面的所有函数都是模板函数,这意味着可以任何数据类型都可以使用(前提是为该数据类型定义了大于、小于预算符),例如,排序函数可以对int数组排序,也可以对double、float甚至字符排序。
4、字符判断的函数
1 |
|
以上bool的返回值,在C语言中是int
5、字符串函数
1 |
|
其实字符串内置的函数很多,但是太难记了,个人人为实用的就以上几个。
接下来重点说一下memset这个函数。
memset第一个参数是一个指针,可以是字符串的头指针也可以是任何数组的指针;第二个参数是想要设置每个字节的值;第三个参数是想要填充的字节个数,第三个参数一般设置为sizeof(ptr)。
举个栗子:
1 |
|
总之,memset在设置字符时,可以直接赋值。而对于int或者其他类型的,并不是特别适用。但是如果想将int数组初始化为0或者无穷大,可以考虑使用memset。
二、语法小技巧
1、for循环
for循环其实可以这么写:
1 |
|
还可以这么写(慎用):
1 |
|
2、判断语句避免翻车的方法
有人if判断语句会这么写
1 |
|
但是如果换一种写法
1 |
|
这样如果不小心漏了一个等号,编译器就会报错,提醒我们。
3、利用好全局变量
将全局变量定义在main函数外,其初始值会全部被设置为0,利用这一特点可以省去初始化的工夫。此外,数组定义在main函数外,其空间可以更大(int类型最大好像是10000*10000来着)
三、没了
可能有人3.10下午就要上机了,先写这么多,想起来再补吧。
考试是可以应付的,但是希望读者能扬弃本文内容,将来形成良好的代码习惯。
祝考试顺利