C\C++基础学习(一)
C/C++学习
-
不要在同一个程序中使用cout和printf,有时候会出问题
-
一个程序最多只能有一个主函数
-
变量名的第一个字符必须是字母或下划线,除第一个字母外的其他字符必须是字母、数字或下划线。
-
绝对值在10^9范围以内的整数或32位整数都可以定义为int型
-
如果是10^18以内或者说64位整数,就用 long long 型来存放
-
单精度型float只有6~7位小数,双精度型double有15 ~16位小数,一般用double
-
对于浮点型来说,只需要记住一点,不要使用float,碰到浮点型的数据都应该用double来存储
-
小写字母比大写字母的SACII码值大32(A:65;a = 97)
-
字符常量(必须是单个字符)必须用单引号标注
-
在计算机内部,字符就是按ASCII码存储的
-
常用的转义字符:
- \n 代表换行
- \0 代表空字符NULL,其ASCII码值为0,请注意\0不是空格
-
ASCII码值为7的字符是控制字符,并且是控制响铃功能的控制字符
-
C中没有单独一种基本数据类型可以存储字符串(C++中有String类型),只能使用字符数组的方式。字符串常量是由双引号标记的字符集。用“%s”格式输出
-
不能把字符串常量赋值给字符变量,所以char a = "abcd"的写法是不允许的
-
布尔型在C++中可以直接使用,在C语言中必须添加stdbool.h头文件才可以使用
-
对于计算机来说,true和false在存储时分别为1和0,因此如果使用%d输出bool型变量,则true和false会输出1和0;
-
define 和const都可以定义常量,但是推荐const写法。PS:define还可以定义任意语句或片段。格式:#define 标识符 任意语句或片段 例如:#define ADD(a,b) ( (a) + (b) ),(PS:这里面的括号不能去,如果忘记了看算法笔记25/493)直接用ADD(a,b)来代替a+b
-
对于除法运算,要注意,当被除数和除数都是整数型时,并不会得到一个double浮点型的数字,而是直接舍去小数部分(即向下取整)
-
对于除法运算,如果除数是0,还会导致程序异常退出或是得到错误的输出“1.#INF00”,因此在出现问题时请检查是否在某种情况下除数为0
-
取模运算符%返回被除数与除数相除得到的余数,与除法运算符一样,除数不予许为0,因为当出问题的时候应该先考虑除数是否有可能为0,优先级与除法运算符相同
-
自增运算符 i++ 与 ++i
- i++ 先使用i进行运算,在把i+1
- //++i 先把i+1,在进行运算
-
条件运算符( ? :)是C语言中唯一的三目运算符 格式:A?B:C 如果A为真,返回B;如果A为假,返回C
-
赋值可以通过将其他运算符放在前面来实现赋值操作的简化,这样的代码可以加快编译速度,提高代码的可读性
-
在scanf中,除了char数组整个输入的情况不加&之外,其他变量类型都需要加&
-
除了%c外,scanf对其他格式(例如%d)的输入是以空白符(即空格、Tab)为结束判断标志的,因此除非使用%c把空格按字符读入,其他情况下都会自动跳过空格
-
字符数组使用%s读入的时候以空格和换行为读入结束的标志
-
对于double类型的变量,在printf中输出格式是%f,在scanf中却是%lf
-
如果想要在printf中输出“%”或者是“\”,则需要在前面再加一个%或\例如
printf("%%"); printf("\\");
-
三种实用的输出格式
-
%md:可以使不足m位的int型变量以m位进行右对位输出,其中高位用空格补齐;如果变量本身超过m位,则保持原样。
int main(){ int a = 123, b = 1234567; printf("%5d\n", a); printf("%5d\n", b); return 0 ; }
-
%0md:和%md唯一的不同点是,当变量不足m位时,将在前面不足足够的数字0而不是空格。
int main(){ int a = 123, b = 1234567; printf("%05d\n", a); printf("%05d\n", b); return 0 ; }
-
%.mf:可以让浮点数保留m位小数,这个”保留“使用的是精度的”四舍五入成双“规则。(可以用在要求输出保留XX位小数或是精确到小数点后XX位的题目上)
#include <stdio.h> int main(){ double d1 = 12.3456; printf("%.0f\n", d1); printf("%.1f\n", d1); printf("%.2f\n", d1); printf("%.3f\n", d1); printf("%.4f\n", d1); return 0; }
-
-
getchar用来输入单个字符,putchar用来输出单个字符,在某些scanf函数使用不便的场合可以使用getchar来输入字符。PS:getchar会识别换行符
-
typedef:能给复杂的数据类型起一个别名,这样在使用中就可以用别名来代替原来的写法。
#include <stdio.h> typedef long long LL;//给long long 起一个别名LL int main(){ LL a = 123456789012345, b = 234567890123456; printf("%lld\n", a + b);//输出:358024679135801 return 0; }
-
常用的math函数(需要在程序开头加上头文件math.h)
-
fabs(double x)
该函数用于对double型变量取绝对值
#include <stdio.h> #include <math.h> int main(){ double db = -12.56; printf("%.2f\n", fabs(db));//输出:12.56 return 0; }
-
floor(double x)和ceil(double x)
分别用于double型变量的向下取整和向上取整
#include <stdio.h> #include <math.h> int main(){ double db1 = -5.2, db2 = 5.2; printf("%.0f %.0f\n", floor(db1), ceil(db1));//-6 -5 printf("%0.f %0.f\n", floor(db2), ceil(db2));//5 6 return 0; }
-
pow(double r,double p)
该函数返回r^p,要求r和p都是double型
#include <stdio.h> #include <math.h> int main(){ double db = pow(2.0, 3.0); printf("%f\n", db);//8.000000 return 0; }
-
sqrt(double x)
该函数用于返回double型变量的算术平方根
#include <stdio.h> #include <math.h> int main(){ double db = sqrt(2.0); printf("%f\n", db);//1.414214 return 0; }
-
log(double x)
该函数用于返回double型变量的以自然对数为底的对数
PS:C语言中没有对任意底数求对数的函数,因此必须使用换底公式将不是以e为底的对数转换成以e为底的对数,
#include <stdio.h> #include <math.h> int main(){ double db = log(1.0); printf("%f\n", db);//0.000000 return 0; }
-
sin(double x)、cos(double x)和tan(double x )
返回double型变量的正弦值,余弦值和正切值,参数要求是弧度制
#include <stdio.h> #include <math.h> const double pi = acos(-1.0);//这里把pi定义为精确值acos(-1.0),因为cos(pi)=-1。 int main(){ double db1 = sin (pi * 45 / 180);//0.707107 double db2 = cos (pi * 45 / 180);//0.707107 double db3 = tan (pi * 45 / 180);//1.000000 printf("%f, %f, %f\n", db1, db2, db3); return 0; }
-
asin(double x)、acos(double x)和tan(double x)
返回double型变量的反正弦值,反余弦值和反正切值
#include <stdio.h> #include <math.h> int main(){ double db1 = asin(1);//1.570796 double db2 = acos(-1.0);//3.141593 double db3 = atan(0);//0.000000 printf("%f, %f, %f\n", db1, db2, db3); return 0; }
-
round(double x)
该函数用于将double型变量x四舍五入,返回类型也是double型,需进行取整
#include <stdio.h> #include <math.h> int main(){ double db1 = round(3.40); double db2 = round(3.45); double db3 = round(3.50); double db4 = round(3.55); double db5 = round(3.60); printf("%d, %d, %d, %d, %d\n", (int)db1, (int)db2, (int)db3, (int)db4, (int)db5); return 0; }
-