算法笔记(一):C语言常用易错基础总结

本文围绕C语言展开,介绍了浮点型数据存储应使用double,符号常量的定义方式,运算符、输入输出函数的注意事项,如除法取整、scanf加&等。还提及输出格式、常用math函数、数组赋值、memset函数,以及字符数组输入输出、string.h头文件函数和sscanf与sprintf的用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一)浮点型:
对于浮点型%f是float和double型的输出格式,
记住:浮点型不要使用float,碰到浮点型的数据都应该用double来存储。

(二)符号常量:
(1)const   数据类型   变量名 = 常量;
例:const double pi=3.14;
(2)define除了可以定义常量外,其实可以定义任何语句或片段。
举例(此例子使用ADD(a,b)来代替a+b的功能。):

易错题: 

解释:大部分人认为结果应该为5,这个陷阱在于替换部分应该是原封不动的替换进去CAL(a+1)实际上是(a+1*2+1),而不是((a+1)*2+1)。

(三)运算符
对于除法运算符,需要注意:当被除数跟除数都是整数时,并不会得到double浮点型数,而是直接舍去小数部分(向下取整)。

(四)scanf和printf输入/输出

注意点:
(1)scanf中,除了char类数组整个输入的情况不加&之外,其他变量类型都需要加&。
(2)字符数组使用%s读入的时候以空格换行为读入结束的标志 ,空格或换行符之后的无法读入。
易错题:

(3) 对于double类型变量,输入是%lf,而输出是%f。(注:有些都写成%lf不会报错,但请按标准来)


(五)输出格式
(1)%md
功能:使不足m位的int型变量以m位进行右对齐输出,其中高位用空格补齐
注意:如果变量本身超过m位,则保持原样

 (2)%0md
功能:与%md大致相同,只是用0填补高位的空格
(3)%.mf
功能:让浮点数保留m位小数。
了解注意:是按照“四舍六入五成双”的规则,如果想四舍五入请使用round函数。

(六)getchar和putchar输入/输出字符
功能:输入输出单个字符,且getchar可以识别换行符号。

(七)常用的math函数
(1)取绝对值:整数用abs(),小数用fabs()。
(2)向下取整用:floor(),向上取整:ceil()。注意:-5.1向下取整为-6,5.1向下取整为5。
(3)r的p次方:pow(double r,double p)。注意:r和p都是double。
(4)算术平方根:sqrt()。
(5)以自然对数为底:log()。
(6)double类型四舍五入:round()。

(八)一维数组赋值
(1)如果数组一开始没有赋值,则数组中每个元素可能会是一个随机数,并不一定为0。如果数组赋值了一部分,剩下的没有被赋值部分则默认为0.

因此如果想给整个数组都赋初值0,只需要把第一个元素赋值为0或者用一个大括号表示即可。


(九)二维数组赋值


(十)memset函数
功能:对数组中每一个元素赋相同的值(一维、二维、多维)
格式:memset (数组名,值,sizeof(数组名));
注意:
1.使用需添加string.h头文件
2.但值只可以是-1,0,false,true,值不能为1!!!
3.如果想对数组赋其他数字,请使用fill函数

(十一)字符数组输入输出
(1)字符数组就是char数组,一维的时候当作“字符串”,二维的时候当作“字符串数组”。
(2)输入可用:scanf,getchar,gets  输出可用:printf,putchar,puts。
1. scanf输入时,%s通过空格或换行来识别字符串的结束,且不需要加&符号。

2. 关于getchar:
getchar()从控制台读取一个字符,并回显。当程序调用getchar时,程序就等着用户按键。用户输入的字符被存放在键盘缓冲区中,直到用户按回车为止(回车字符也放在缓冲区中)。当用户键入回车之后,getchar才开始从stdio流中每次读入一个字符。getchar函数的返回值是用户输入的第一个字符的ASCII码,如出错返回-1,且将用户输入的字符回显到屏幕。如用户在按回车之前输入了不只一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取。也就是说,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完为后,才等待用户按键。
3.关于字符串结束标志'\0'
明确printf,puts通过识别\0为结束符号,使用scanf,gets的时候自动添加‘\0’,如果使用getchar必须加入“\0”。

 

(十二)string.h头文件
(1)strlen(字符数组):得到字符数组中第一个\0前的字符个数。
(2)strcmp(字符数组1,字符数组2):依次比较字符串大小,遇到不同或结束时返回值。

(3)strcpy(字符数组1,字符数组2):把字符数组2复制给字符数组1。
注意:这里的复制包括结束符\0.
(4)strcat(字符数组1,字符数组2):把2接到1后面。


(十三)sscanf与sprintf(string+scanf,string+printf)
基本用法:

 值得注意的是:这里sprintf使str[0]=2,str[1]=3,str[2]=3。

格式化输入输出:

 

sprintf用于连接字符串:
方便地连接两个或者多个字符串
char buf[1024];
char a[100]="I ";
char b[100]="love ";
char c[100]="ACM."
sprintf(buf,"%s%s%s",a,b,c);//buf 包含"I love ACM." 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值